added a hid console tool

This commit is contained in:
Daniel Pavel 2012-09-28 02:18:10 +03:00
parent 42ef44e2e2
commit 407c41756d
3 changed files with 78 additions and 0 deletions

9
hidconsole Executable file
View File

@ -0,0 +1,9 @@
#!/bin/sh
cd `dirname "$0"`
export LD_LIBRARY_PATH=$PWD/lib
export PYTHONPATH=$PWD/lib
exec python -OO -m cli.hidconsole "$@"

1
lib/cli/__init__.py Normal file
View File

@ -0,0 +1 @@
# pass

68
lib/cli/hidconsole.py Normal file
View File

@ -0,0 +1,68 @@
import logging
from binascii import hexlify, unhexlify
def read_next(handle, timeout=1000, ignore_nodata=False):
reply = hidapi.read(handle, 128, timeout)
if reply is None:
print "!! Read failed, aborting"
raise Exception()
if reply:
print ">> %s [%s]" % (hexlify(reply), repr(reply))
return True
if not ignore_nodata:
print ">> []"
return False
def console_cycle(handle):
while True:
if read_next(handle, timeout=100, ignore_nodata=True):
continue
line = raw_input('!! Enter packet to send (hex bytes): ')
line = line.strip()
if not line:
continue
if len(line) % 2 == 1:
line += '0'
try:
data = unhexlify(line)
except:
print "!! Invalid input."
continue
print "<< %s [%s]" % (hexlify(data), repr(data))
hidapi.write(handle, data)
read_next(handle)
if __name__ == '__main__':
import argparse
arg_parser = argparse.ArgumentParser()
arg_parser.add_argument('-v', '--verbose', action='count', default=0,
help='increase the logger verbosity')
arg_parser.add_argument('device', default=None,
help='linux device to connect to')
args = arg_parser.parse_args()
log_level = logging.root.level - 10 * args.verbose
logging.root.setLevel(log_level if log_level > 0 else 1)
import hidapi
print "!! Opening device ", args.device
handle = hidapi.open_path(args.device)
if handle:
print "!! Opened %x" % handle
print "!! vendor=%s product=%s serial=%s" % (
hidapi.get_manufacturer(handle),
hidapi.get_product(handle),
hidapi.get_serial(handle))
try:
console_cycle(handle)
except:
print "!! Closing handle %x" % handle
hidapi.close(handle)
else:
print "!! Failed to open %s, aborting" % args.device