added script to get data from dmm
This commit is contained in:
parent
13e4432014
commit
99c3c440a9
|
@ -0,0 +1,98 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
Read from a Hoitek HE2325U or WCH CH9325 USB/HID adapter cable
|
||||
using the HID-API provided by the operating system.
|
||||
It relies on cython-hidapi: https://github.com/trezor/cython-hidapi
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
BPS = 19200
|
||||
|
||||
def main():
|
||||
"""
|
||||
Main function: Entry point if running this module from the command line.
|
||||
Prints messages to stdout.
|
||||
"""
|
||||
import argparse
|
||||
from inspect import cleandoc
|
||||
parser = argparse.ArgumentParser(description=cleandoc(__doc__))
|
||||
parser.add_argument('-v', '--verbose', action='store_true', help='Increase verbosity')
|
||||
parser.add_argument('-d', '--debug', action='store_true', help='Enable debug mode')
|
||||
args = parser.parse_args()
|
||||
try:
|
||||
try:
|
||||
import hidraw as hid
|
||||
except ImportError:
|
||||
import hid
|
||||
except ImportError:
|
||||
parser.error("You need to install cython-hidapi first!")
|
||||
import logging
|
||||
loglevel = logging.WARNING
|
||||
if args.verbose:
|
||||
loglevel = logging.INFO
|
||||
if args.debug:
|
||||
loglevel = logging.DEBUG
|
||||
logging.basicConfig(format='%(message)s', level=loglevel)
|
||||
|
||||
try:
|
||||
logging.info("Enumerating Devices")
|
||||
devices = hid.enumerate(0x1a86, 0xe008)
|
||||
if len(devices) == 0:
|
||||
raise NameError('No device found. Check your USB connection.')
|
||||
logging.info("Found {} devices: ".format(len(devices)))
|
||||
for dev in devices:
|
||||
name = dev['manufacturer_string'] + " " + dev['product_string']
|
||||
path = dev['path'].decode('ascii')
|
||||
logging.info("* {} [{}]".format(name, path))
|
||||
|
||||
logging.info("Opening device")
|
||||
h = hid.device()
|
||||
try:
|
||||
h.open(0x1a86, 0xe008)
|
||||
except IOError as ex:
|
||||
raise NameError('Cannot open the device. Please check permissions.')
|
||||
|
||||
buf = [0]*6
|
||||
buf[0] = 0x0 # report ID
|
||||
buf[1] = BPS & 0xFF
|
||||
buf[2] = ( BPS >> 8 ) & 0xFF
|
||||
buf[3] = ( BPS >> 16 ) & 0xFF
|
||||
buf[4] = ( BPS >> 24 ) & 0xFF
|
||||
buf[5] = 0x03 # 3 = enable?
|
||||
|
||||
fr = h.send_feature_report(buf)
|
||||
if fr == -1:
|
||||
raise NameError("Sending Feature Report Failed")
|
||||
logging.debug("Feature Report Sent")
|
||||
|
||||
try:
|
||||
logging.debug("Start Reading Messages")
|
||||
while True:
|
||||
#answer = h.read(256)
|
||||
answer = h.read(256, timeout_ms=1000)
|
||||
if len(answer) < 1: continue
|
||||
nbytes = answer[0] & 0x7
|
||||
if nbytes > 0:
|
||||
if len(answer) < nbytes+1:
|
||||
raise NameError("More bytes announced then sent")
|
||||
payload = answer[1:nbytes+1]
|
||||
data = [b & ( ~(1<<7) ) for b in payload]
|
||||
data = [chr(b) for b in data]
|
||||
data = ''.join(data)
|
||||
sys.stdout.write(data)
|
||||
sys.stdout.flush()
|
||||
except KeyboardInterrupt:
|
||||
logging.info("You pressed CTRL-C, stopping...")
|
||||
|
||||
logging.debug("Closing device")
|
||||
h.close()
|
||||
|
||||
except IOError as ex:
|
||||
logging.error(ex)
|
||||
except Exception as ex:
|
||||
logging.error(ex)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue