summaryrefslogtreecommitdiff
path: root/test-cli/test/helpers/qrreader.py
diff options
context:
space:
mode:
Diffstat (limited to 'test-cli/test/helpers/qrreader.py')
-rw-r--r--test-cli/test/helpers/qrreader.py120
1 files changed, 120 insertions, 0 deletions
diff --git a/test-cli/test/helpers/qrreader.py b/test-cli/test/helpers/qrreader.py
new file mode 100644
index 0000000..1d3768b
--- /dev/null
+++ b/test-cli/test/helpers/qrreader.py
@@ -0,0 +1,120 @@
+import evdev
+from evdev import InputDevice, categorize, ecodes
+import threading
+import time
+import selectors
+from selectors import DefaultSelector, EVENT_READ
+
+selector = selectors.DefaultSelector()
+
+qrdevice_list = [
+ "Honeywell Imaging & Mobility 1900",
+ "Manufacturer Barcode Reader"
+]
+
+
+qrkey_list = { 'KEY_0':'0',
+ 'KEY_1':'1',
+ 'KEY_2':'2',
+ 'KEY_3':'3',
+ 'KEY_4':'4',
+ 'KEY_5':'5',
+ 'KEY_6':'6',
+ 'KEY_7':'7',
+ 'KEY_8':'8',
+ 'KEY_9':'9'
+ }
+
+
+class QRReader:
+ __qrstr = ""
+ __myReader = {}
+ __numdigits = 10
+ __dev = None
+
+ def __init__(self):
+ self.getQRlist()
+
+ def getQRlist(self):
+ devices = [evdev.InputDevice(path) for path in evdev.list_devices()]
+ for device in devices:
+ if device.name in qrdevice_list:
+ self.__myReader['NAME'] = device.name
+ print(self.__myReader['NAME'])
+ self.__myReader['PATH'] = device.path
+ print(self.__myReader['PATH'])
+ self.__myReader['PHYS'] = device.phys
+ print(self.__myReader['PHYS'])
+
+ def IsQR (self):
+ return 'NAME' in self.__myReader
+
+ def getQRNumber(self):
+ return self.__qrstr
+
+ def openQR(self):
+ if self.IsQR():
+ self.closeQR()
+ self.__dev = InputDevice(self.__myReader['PATH'])
+ return True
+ return False
+
+ def closeQR(self):
+ if self.__dev:
+ del self.__dev
+ self.__dev = None
+
+ def readQR(self):
+ """" Sync Read up to numdigits """
+ count = 0
+ self.__qrstr = ""
+ if self.__dev:
+ self.__dev.grab()
+ for event in self.__dev.read_loop():
+ if event.type == evdev.ecodes.EV_KEY:
+ c_event = categorize(event)
+ if c_event.keycode in qrkey_list:
+ if c_event.keystate == 0:
+ self.__qrstr += qrkey_list[c_event.keycode]
+ count += 1
+ if count == self.__numdigits:
+ break
+ self.__dev.ungrab()
+ return True
+ return False
+
+ def wait_event (self, timeout):
+ selector.register(self.__dev, selectors.EVENT_READ)
+ while True:
+ events = selector.select(timeout);
+ if not events:
+ return False
+ else:
+ return True
+
+ def readQRasync(self, timeout):
+ count = 0
+ r = False
+ self.__qrstr = ""
+ if self.__dev:
+ self.__dev.grab()
+ if self.wait_event(timeout):
+ for event in self.__dev.read_loop():
+ if event.type == evdev.ecodes.EV_KEY:
+ c_event = categorize(event)
+ if c_event.keycode in qrkey_list:
+ if c_event.keystate == 0:
+ self.__qrstr += qrkey_list[c_event.keycode]
+ count += 1
+ if count == self.__numdigits:
+ r = True
+ break
+ self.__dev.ungrab()
+ return r
+ return False
+
+
+#qr = QRReader()
+#if qr.openQR():
+# print(qr.readQRasync(2))
+#qr.closeQR() \ No newline at end of file