def run_prod(self): while True: # scan for devices devices = [evdev.InputDevice(fn) for fn in evdev.list_devices()] # find card reader device if (len(devices) > 0): print("Input event devices available (" + str(len(devices)) + "). Devices are: ") # init card reader discovery bool discovered_card_reader = False # display input devices for i, device in enumerate(devices): print(" " + str(i) + ") (" + device.fn + ", " + device.name + ", " + device.phys + ")") # search for card reader by its name, "HID c216:0180" if str(device.name) == "HID c216:0180": print("Discovered card reader..listening for events \ until test harness is closed.") # rename device for readability card_reader = device # indefinitely listen for events byte_count = 0 student_id = 0 for event in card_reader.read_loop(): if event.type == evdev.ecodes.EV_KEY: event_key_state = evdev.util.categorize( event).keystate keycode_str = evdev.util.categorize( event).keycode if byte_count < 7: if event_key_state == KEY_STATE_DOWN and keycode_str in VALID_KEY_HASH: keycode_int = VALID_KEY_HASH[ keycode_str] exponent = int( math.pow(10, (6 - byte_count))) student_id += int( keycode_int) * exponent byte_count += 1 # end of student id if byte_count == 7: self.eventQueue.put( Events.CardReadEvent( {"id": student_id})) student_id = 0 if event_key_state == KEY_STATE_UP and keycode_str == "KEY_ENTER": # last byte in card, so reset byte count byte_count = 0 # error out if unable to find card reader if not discovered_card_reader: print("ERROR: Unable to find the card reader") time.sleep(1) # delay until next attempt to connect
def run_test(self): while True: time.sleep(10) self.eventQueue.put(Events.CardReadEvent({"id": 1234567}))