def test_print(rdesc_raw, file): abs_file = os.path.abspath(os.path.join(__file__, '..', file)) capture = io.StringIO() hid_parser.ReportDescriptor(rdesc_raw).print(file=capture) assert capture.getvalue() == open(abs_file, 'r').read()
def print_devices(self, verbose: bool = False) -> None: first = True for key, hidraw in self.devices.items(): bus, vid, pid = hidraw.info if verbose and not first: print() print(f'Device {key}: BUS {bus:03} ID {vid:04x}:{pid:04x} {hidraw.name}') if verbose: print('Report Descriptor:') hid_parser.ReportDescriptor(hidraw.report_descriptor).print(level=1) first = False
def test_linux_hidpp_items(): rdesc = hid_parser.ReportDescriptor(linux_hidpp_rdesc) assert rdesc.input_report_ids == [ 0x01, 0x02, 0x10, 0x11, 0x20, 0x21, ] assert rdesc.output_report_ids == [ 0x0e, 0x10, 0x11, 0x20, 0x21, ] assert rdesc.feature_report_ids == [] items = rdesc.get_input_items(0x01) offset = 0 usage = hid_parser.data.KeyboardKeypad.KEYBOARD_LEFT_CONTROL for item in items[:8]: assert isinstance(item, hid_parser.VariableItem) assert int(item.offset) == offset assert int(item.size) == 1 assert item.usage.page == hid_parser.data.UsagePages.KEYBOARD_KEYPAD_PAGE assert item.usage.usage == usage offset += 1 usage += 1 usages = [] for i in range(255 + 1): usages.append( hid_parser.Usage(hid_parser.data.UsagePages.KEYBOARD_KEYPAD_PAGE, i)) for item in items[8:]: assert isinstance(item, hid_parser.ArrayItem) assert int(item.offset) == offset assert int(item.size) == 8 assert item.usages == usages offset += 8
def test_simple_mouse_items(): rdesc = hid_parser.ReportDescriptor(simple_mouse_rdesc) assert rdesc.input_report_ids == [None] assert rdesc.output_report_ids == [] assert rdesc.feature_report_ids == [] items = rdesc.get_input_items() assert len(items) == 6 assert isinstance(items[0], hid_parser.VariableItem) assert int(items[0].offset) == 0 assert int(items[0].size) == 1 assert items[0].usage.page == hid_parser.data.UsagePages.BUTTON_PAGE assert items[0].usage.usage == hid_parser.data.Button.BUTTON_1 assert isinstance(items[1], hid_parser.VariableItem) assert int(items[1].offset) == 1 assert int(items[1].size) == 1 assert items[1].usage.page == hid_parser.data.UsagePages.BUTTON_PAGE assert items[1].usage.usage == hid_parser.data.Button.BUTTON_2 assert isinstance(items[2], hid_parser.VariableItem) assert int(items[2].offset) == 2 assert int(items[2].size) == 1 assert items[2].usage.page == hid_parser.data.UsagePages.BUTTON_PAGE assert items[2].usage.usage == hid_parser.data.Button.BUTTON_3 assert isinstance(items[3], hid_parser.PaddingItem) assert int(items[3].offset) == 3 assert int(items[3].size) == 5 assert isinstance(items[4], hid_parser.VariableItem) assert int(items[4].offset) == 8 assert int(items[4].size) == 8 assert items[ 4].usage.page == hid_parser.data.UsagePages.GENERIC_DESKTOP_CONTROLS_PAGE assert items[4].usage.usage == hid_parser.data.GenericDesktopControls.X assert isinstance(items[5], hid_parser.VariableItem) assert int(items[5].offset) == 8 * 2 assert int(items[5].size) == 8 assert items[ 5].usage.page == hid_parser.data.UsagePages.GENERIC_DESKTOP_CONTROLS_PAGE assert items[5].usage.usage == hid_parser.data.GenericDesktopControls.Y
def test_hypothesis(rdesc): try: hid_parser.ReportDescriptor(rdesc) except (hid_parser.InvalidReportDescriptor, NotImplementedError): pass
def test_size(rdesc, report_id, expected): rdesc = hid_parser.ReportDescriptor(rdesc) assert int(rdesc.get_input_report_size(report_id)) == expected
def test_parse(rdesc): hid_parser.ReportDescriptor(rdesc)