0.7 also prefer pyhidapi on linux (usb.core) still supported.

pull/1/head
Jürgen Weigert 6 years ago
parent 956a75f8b3
commit b7f56e8c77
  1. 4
      README.md
  2. 81
      led-badge-11x44.py

@ -19,6 +19,10 @@ identifies itself on the USB as
Required dependencies on Debian/Ubuntu Systems: Required dependencies on Debian/Ubuntu Systems:
sudo pip install pyhidapi
sudo apt-get install libhidapi-hidraw0
sudo ln -s /usr/lib/x86_64-linux-gnu/libhidapi-hidraw.so.0 /usr/local/lib/
or
sudo apt install python3-usb sudo apt install python3-usb
Required dependencies on Mac Systems: Required dependencies on Mac Systems:

@ -1,4 +1,5 @@
#! /usr/bin/python3 #! /usr/bin/python3
# -*- encoding: utf-8 -*-
# #
# (C) 2019 juergen@fabmail.org # (C) 2019 juergen@fabmail.org
# #
@ -20,15 +21,36 @@
# Added builtin icons and -l to list them. # Added builtin icons and -l to list them.
# v0.6, 2019-03-14, jw Added --mode-help with hints and example for making animations. # v0.6, 2019-03-14, jw Added --mode-help with hints and example for making animations.
# Options -b --blink, -a --ants added. Removed -p from usage. # Options -b --blink, -a --ants added. Removed -p from usage.
# v0.7, 2019-05-20, jw Support pyhidapi, fallback to usb.core.
import sys, os, re, time, argparse import sys, os, re, time, argparse
from array import array from array import array
if sys.platform == "darwin": try:
import pyhidapi import xpyhidapi
else: have_pyhidapi = True
import usb.core except:
have_pyhidapi = False
try:
import usb.core
except:
print("ERROR: Need the pyhidapi or usb.core module.")
if sys.platform == "darwin":
print("""Please try
pip install pyhidapi
brew install hidapi""")
elif sys.platform == "linux":
print("""Please try
sudo pip install pyhidapi
sudo apt-get install libhidapi-hidraw0
sudo ln -s /usr/lib/x86_64-linux-gnu/libhidapi-hidraw.so.0 /usr/local/lib/
or
sudo apt-get install python3-usb""")
else: # windows?
print("""Please with Linux or MacOS or help us implement support for """ + sys.platform)
sys.exit(1)
__version = "0.6" __version = "0.7"
font_11x44 = ( font_11x44 = (
# 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' # 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
@ -164,20 +186,31 @@ bitmaps_preloaded_unused = False
bitmap_named = { bitmap_named = {
'ball': (array('B', ( 'ball': (array('B', (
0b00000000, 0b00000000,
0b00000000, 0b00000000,
0b00000000, 0b00111100,
0b00000000, 0b01111110,
0b00111100, 0b11111111,
0b11111111, 0b11111111,
0b11111111, 0b11111111,
0b00111100, 0b11111111,
0b00000000, 0b01111110,
0b00000000, 0b00111100,
0b00000000, 0b00000000
0b00000000 )), 1, '\x1e'),
)), 1, '\x1e'), 'happy': (array('B', (
'happy': (array('B', (0x00, 0x00, 0x3c, 0x42, 0xa5, 0x81, 0xa5, 0x99, 0x42, 0x3c, 0x00)), 1, '\x1d'), 0b00000000, # 0x00
0b00000000, # 0x00
0b00111100, # 0x3c
0b01000010, # 0x42
0b10100101, # 0xa5
0b10000001, # 0x81
0b10100101, # 0xa5
0b10011001, # 0x99
0b01000010, # 0x42
0b00111100, # 0x3c
0b00000000 # 0x00
)), 1, '\x1d'),
'happy2': (array('B', (0x00, 0x08, 0x14, 0x08, 0x01, 0x00, 0x00, 0x61, 0x30, 0x1c, 0x07, 'happy2': (array('B', (0x00, 0x08, 0x14, 0x08, 0x01, 0x00, 0x00, 0x61, 0x30, 0x1c, 0x07,
0x00, 0x20, 0x50, 0x20, 0x00, 0x80, 0x80, 0x86, 0x0c, 0x38, 0xe0)), 2, '\x1c'), 0x00, 0x20, 0x50, 0x20, 0x00, 0x80, 0x80, 0x86, 0x0c, 0x38, 0xe0)), 2, '\x1c'),
'heart': (array('B', (0x00, 0x00, 0x6c, 0x92, 0x82, 0x82, 0x44, 0x28, 0x10, 0x00, 0x00)), 1, '\x1b'), 'heart': (array('B', (0x00, 0x00, 0x6c, 0x92, 0x82, 0x82, 0x44, 0x28, 0x10, 0x00, 0x00)), 1, '\x1b'),
@ -352,17 +385,17 @@ parser.add_argument('--mode-help', action='version', help=argparse.SUPPRESS, ver
(No "rotation" or "smothering"(?) effect can be expected, though) (No "rotation" or "smothering"(?) effect can be expected, though)
""" % sys.argv[0]) """ % sys.argv[0])
args = parser.parse_args() args = parser.parse_args()
if sys.platform == "darwin": if have_pyhidapi:
pyhidapi.hid_init() pyhidapi.hid_init()
devinfo = pyhidapi.hid_enumerate(0x0416, 0x5020) devinfo = pyhidapi.hid_enumerate(0x0416, 0x5020)
#dev = pyhidapi.hid_open(0x0416, 0x5020) #dev = pyhidapi.hid_open(0x0416, 0x5020)
else: else:
dev = usb.core.find(idVendor=0x0416, idProduct=0x5020) dev = usb.core.find(idVendor=0x0416, idProduct=0x5020)
if sys.platform == "darwin": if have_pyhidapi:
if devinfo: if devinfo:
dev = pyhidapi.hid_open_path(devinfo[0].path) dev = pyhidapi.hid_open_path(devinfo[0].path)
print("using [%s %s] int=%d page=%s via HIDAPI" % (devinfo[0].manufacturer_string, devinfo[0].product_string, devinfo[0].interface_number, devinfo[0].usage_page)) print("using [%s %s] int=%d page=%s via pyHIDAPI" % (devinfo[0].manufacturer_string, devinfo[0].product_string, devinfo[0].interface_number, devinfo[0].usage_page))
else: else:
print("No led tag with vendorID 0x0416 and productID 0x5020 found.") print("No led tag with vendorID 0x0416 and productID 0x5020 found.")
print("Connect the led tag and run this tool as root.") print("Connect the led tag and run this tool as root.")
@ -402,10 +435,10 @@ if needpadding:
# print(buf) # print(buf)
for i in range(int(len(buf)/64)): for i in range(int(len(buf)/64)):
time.sleep(0.1) time.sleep(0.1)
if sys.platform == "darwin": if have_pyhidapi:
pyhidapi.hid_write(dev, buf[i*64:i*64+64]) pyhidapi.hid_write(dev, buf[i*64:i*64+64])
else: else:
dev.write(1, buf[i*64:i*64+64]) dev.write(1, buf[i*64:i*64+64])
if sys.platform == "darwin": if have_pyhidapi:
pyhidapi.hid_close(dev) pyhidapi.hid_close(dev)

Loading…
Cancel
Save