From 058d81a767c16d2a1c0898b86228407364f5029b Mon Sep 17 00:00:00 2001 From: Daniel Pavel Date: Sun, 7 Oct 2012 20:20:36 +0300 Subject: [PATCH] improvements to the hid console --- lib/cli/hidconsole.py | 54 +++++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/lib/cli/hidconsole.py b/lib/cli/hidconsole.py index 2bf165a9..ebafbd7b 100644 --- a/lib/cli/hidconsole.py +++ b/lib/cli/hidconsole.py @@ -2,6 +2,7 @@ # Python 2 only for now. +import time from binascii import hexlify, unhexlify @@ -21,26 +22,54 @@ def read_next(handle, timeout=1000, ignore_nodata=False): def console_cycle(handle): + last_data = None + while True: if read_next(handle, timeout=100, ignore_nodata=True): continue - line = raw_input('!! Enter packet to send (hex bytes) or ^C to abort: ') + line = raw_input('!! Command: ') line = line.strip().replace(' ', '').replace('-', '') if not line: continue - if len(line) % 2 == 1: - line += '0' - try: - data = unhexlify(line) - except: - print "!! Invalid input." - continue - hexs = hexlify(data) - print "<< [%s %s %s %s] %s" % (hexs[0:2], hexs[2:4], hexs[4:8], hexs[8:], repr(data)) - hidapi.write(handle, data) - read_next(handle) + data = None + + if line == 'h': + print 'Commands:' + print ' - send a packet to the device' + print ' r - re-send last packet' + print ' w - listen for events for seconds' + print ' h - this help screen' + print ' ^C - exit' + elif line == 'r': + data = last_data + elif line[0] == 'w': + line = line[1:].strip() + try: + seconds = float(line) + except: + print "!! Bad number <" + line + ">" + else: + count = 0 + start_time = time.time() + while time.time() - start_time < seconds: + if read_next(handle, timeout=100, ignore_nodata=True): + count += 1 + print "!! Got %d events" % count + else: + try: + data = unhexlify(line) + except: + print "!! Invalid input." + continue + + if data: + hexs = hexlify(data) + print "<< [%s %s %s %s] %s" % (hexs[0:2], hexs[2:4], hexs[4:8], hexs[8:], repr(data)) + last_data = data + hidapi.write(handle, data) + read_next(handle) if __name__ == '__main__': @@ -59,6 +88,7 @@ if __name__ == '__main__': repr(hidapi.get_manufacturer(handle)), repr(hidapi.get_product(handle)), repr(hidapi.get_serial(handle))) + print "!! Type 'h' for help." try: console_cycle(handle) except: