tests_kernel.test_mouse module
- class BadReportDescriptorMouse(rdesc=[150, 1, 0, 6, 1, 0, 42, 144, 160, 39, 0, 0, 0, 0, 179, 129, 62, 37, 3, 27, 221, 232, 64, 80, 59, 93, 140, 61, 218], name=None, input_info=(3, 1118, 2010))
Bases:
BaseMouseThis “device” was one autogenerated by syzbot. There are a lot of issues in it, and the most problematic is that it declares features that have no size.
This leads to report->size being set to 0 and can mess up with usbhid internals. Fortunately, uhid merely passes the incoming buffer, without touching it so a buffer of size 0 will be translated to [] without triggering a kernel oops.
Because the report descriptor is wrong, no input are created, and we need to tweak a little bit the parameters to make it look correct.
- get_evdev(application=None)
- is_ready()
Returns whether a UHID device is ready. Can be overwritten in subclasses to add extra conditions on when to consider a UHID device ready. This can be:
we need to wait on different types of input devices to be ready (Touch Screen and Pen for example)
we need to have at least 4 LEDs present (len(self.uhdev.leds_classes) == 4)
or any other combinations
- next_sync_events(application=None)
- report_descriptor = [150, 1, 0, 6, 1, 0, 42, 144, 160, 39, 0, 0, 0, 0, 179, 129, 62, 37, 3, 27, 221, 232, 64, 80, 59, 93, 140, 61, 218]
- set_report(req, rnum, rtype, data)
Callback invoked when a process calls SetReport on this UHID device.
Return
0on success or an errno on failure.The default method always returns
EIOfor a failure. Override this in your device if you want SetReport to succeed.- Parameters:
req – the request identifier
rnum –
???
rtype – one of
UHID_FEATURE_REPORT,UHID_INPUT_REPORT, orUHID_OUTPUT_REPORTdata (list) – a byte string with the data
- class BadResolutionMultiplierMouse(rdesc=[5, 1, 9, 2, 161, 1, 5, 1, 9, 2, 161, 2, 133, 17, 9, 1, 161, 0, 5, 9, 25, 1, 41, 3, 149, 3, 117, 1, 37, 1, 129, 2, 149, 1, 129, 1, 9, 5, 129, 2, 149, 3, 129, 1, 5, 1, 9, 48, 9, 49, 149, 2, 117, 8, 21, 129, 37, 127, 129, 6, 161, 2, 133, 18, 9, 72, 149, 1, 117, 2, 21, 0, 37, 1, 53, 1, 69, 4, 177, 2, 53, 0, 69, 0, 117, 6, 177, 1, 133, 17, 9, 56, 21, 129, 37, 127, 117, 8, 129, 6, 192, 5, 12, 117, 8, 10, 56, 2, 129, 6, 192, 192, 192], name=None, input_info=None)
Bases:
ResolutionMultiplierMouse- set_report(req, rnum, rtype, data)
Callback invoked when a process calls SetReport on this UHID device.
Return
0on success or an errno on failure.The default method always returns
EIOfor a failure. Override this in your device if you want SetReport to succeed.- Parameters:
req – the request identifier
rnum –
???
rtype – one of
UHID_FEATURE_REPORT,UHID_INPUT_REPORT, orUHID_OUTPUT_REPORTdata (list) – a byte string with the data
- class BaseMouse(rdesc, name=None, input_info=None)
Bases:
UHIDTestDevice- create_report(x, y, buttons=None, wheels=None, reportID=None)
Return an input report for this device.
- Parameters:
x – relative x
y – relative y
buttons – a (l, r, m) tuple of bools for the button states, where
Noneis “leave unchanged”wheels – a single value for the vertical wheel or a (vertical, horizontal) tuple for the two wheels
reportID – the numeric report ID for this report, if needed
- event(x, y, buttons=None, wheels=None)
Send an input event on the default report ID.
- Parameters:
x – relative x
y – relative y
buttons – a (l, r, m) tuple of bools for the button states, where
Noneis “leave unchanged”wheels – a single value for the vertical wheel or a (vertical, horizontal) tuple for the two wheels
- class ButtonMouse(rdesc=[5, 1, 9, 2, 161, 1, 9, 2, 161, 2, 9, 1, 161, 0, 5, 9, 25, 1, 41, 3, 21, 0, 37, 1, 117, 1, 149, 3, 129, 2, 117, 5, 149, 1, 129, 3, 5, 1, 9, 48, 9, 49, 21, 129, 37, 127, 117, 8, 149, 2, 129, 6, 192, 192, 192], name=None, input_info=None)
Bases:
BaseMouse- fake_report(x, y, buttons)
- report_descriptor = [5, 1, 9, 2, 161, 1, 9, 2, 161, 2, 9, 1, 161, 0, 5, 9, 25, 1, 41, 3, 21, 0, 37, 1, 117, 1, 149, 3, 129, 2, 117, 5, 149, 1, 129, 3, 5, 1, 9, 48, 9, 49, 21, 129, 37, 127, 117, 8, 149, 2, 129, 6, 192, 192, 192]
- class MIDongleMIWirelessMouse(rdesc=[5, 1, 9, 2, 161, 1, 133, 1, 9, 1, 161, 0, 149, 5, 117, 1, 5, 9, 25, 1, 41, 5, 21, 0, 37, 1, 129, 2, 149, 1, 117, 3, 129, 1, 117, 8, 149, 1, 5, 1, 9, 56, 21, 129, 37, 127, 129, 6, 5, 12, 10, 56, 2, 149, 1, 129, 6, 192, 133, 2, 9, 1, 161, 0, 117, 12, 149, 2, 5, 1, 9, 48, 9, 49, 22, 1, 248, 38, 255, 7, 129, 6, 192, 192, 5, 12, 9, 1, 161, 1, 133, 3, 21, 0, 37, 1, 117, 1, 149, 1, 9, 205, 129, 6, 10, 131, 1, 129, 6, 9, 181, 129, 6, 9, 182, 129, 6, 9, 234, 129, 6, 9, 233, 129, 6, 10, 37, 2, 129, 6, 10, 36, 2, 129, 6, 192], name='uhid test MI Dongle MI Wireless Mouse', input_info=(BusType.USB, 10007, 59))
Bases:
TwoWheelMouse- device_input_info = (BusType.USB, 10007, 59)
- device_name = 'uhid test MI Dongle MI Wireless Mouse'
- event(x, y, buttons=None, wheels=None)
Send an input event on the default report ID.
- Parameters:
x – relative x
y – relative y
buttons – a (l, r, m) tuple of bools for the button states, where
Noneis “leave unchanged”wheels – a single value for the vertical wheel or a (vertical, horizontal) tuple for the two wheels
- report_descriptor = [5, 1, 9, 2, 161, 1, 133, 1, 9, 1, 161, 0, 149, 5, 117, 1, 5, 9, 25, 1, 41, 5, 21, 0, 37, 1, 129, 2, 149, 1, 117, 3, 129, 1, 117, 8, 149, 1, 5, 1, 9, 56, 21, 129, 37, 127, 129, 6, 5, 12, 10, 56, 2, 149, 1, 129, 6, 192, 133, 2, 9, 1, 161, 0, 117, 12, 149, 2, 5, 1, 9, 48, 9, 49, 22, 1, 248, 38, 255, 7, 129, 6, 192, 192, 5, 12, 9, 1, 161, 1, 133, 3, 21, 0, 37, 1, 117, 1, 149, 1, 9, 205, 129, 6, 10, 131, 1, 129, 6, 9, 181, 129, 6, 9, 182, 129, 6, 9, 234, 129, 6, 9, 233, 129, 6, 10, 37, 2, 129, 6, 10, 36, 2, 129, 6, 192]
- class ResolutionMultiplierHWheelMouse(rdesc=[5, 1, 9, 2, 161, 1, 5, 1, 9, 2, 161, 2, 133, 26, 9, 1, 161, 0, 5, 9, 25, 1, 41, 5, 149, 5, 117, 1, 21, 0, 37, 1, 129, 2, 117, 3, 149, 1, 129, 1, 5, 1, 9, 48, 9, 49, 149, 2, 117, 16, 22, 1, 128, 38, 255, 127, 129, 6, 161, 2, 133, 18, 9, 72, 149, 1, 117, 2, 21, 0, 37, 1, 53, 1, 69, 12, 177, 2, 133, 26, 9, 56, 53, 0, 69, 0, 149, 1, 117, 16, 22, 1, 128, 38, 255, 127, 129, 6, 192, 161, 2, 133, 18, 9, 72, 117, 2, 21, 0, 37, 1, 53, 1, 69, 12, 177, 2, 53, 0, 69, 0, 117, 4, 177, 1, 133, 26, 5, 12, 149, 1, 117, 16, 22, 1, 128, 38, 255, 127, 10, 56, 2, 129, 6, 192, 192, 192, 192], name=None, input_info=None)
Bases:
TwoWheelMouse- report_descriptor = [5, 1, 9, 2, 161, 1, 5, 1, 9, 2, 161, 2, 133, 26, 9, 1, 161, 0, 5, 9, 25, 1, 41, 5, 149, 5, 117, 1, 21, 0, 37, 1, 129, 2, 117, 3, 149, 1, 129, 1, 5, 1, 9, 48, 9, 49, 149, 2, 117, 16, 22, 1, 128, 38, 255, 127, 129, 6, 161, 2, 133, 18, 9, 72, 149, 1, 117, 2, 21, 0, 37, 1, 53, 1, 69, 12, 177, 2, 133, 26, 9, 56, 53, 0, 69, 0, 149, 1, 117, 16, 22, 1, 128, 38, 255, 127, 129, 6, 192, 161, 2, 133, 18, 9, 72, 117, 2, 21, 0, 37, 1, 53, 1, 69, 12, 177, 2, 53, 0, 69, 0, 117, 4, 177, 1, 133, 26, 5, 12, 149, 1, 117, 16, 22, 1, 128, 38, 255, 127, 10, 56, 2, 129, 6, 192, 192, 192, 192]
- set_report(req, rnum, rtype, data)
Callback invoked when a process calls SetReport on this UHID device.
Return
0on success or an errno on failure.The default method always returns
EIOfor a failure. Override this in your device if you want SetReport to succeed.- Parameters:
req – the request identifier
rnum –
???
rtype – one of
UHID_FEATURE_REPORT,UHID_INPUT_REPORT, orUHID_OUTPUT_REPORTdata (list) – a byte string with the data
- class ResolutionMultiplierMouse(rdesc=[5, 1, 9, 2, 161, 1, 5, 1, 9, 2, 161, 2, 133, 17, 9, 1, 161, 0, 5, 9, 25, 1, 41, 3, 149, 3, 117, 1, 37, 1, 129, 2, 149, 1, 129, 1, 9, 5, 129, 2, 149, 3, 129, 1, 5, 1, 9, 48, 9, 49, 149, 2, 117, 8, 21, 129, 37, 127, 129, 6, 161, 2, 133, 18, 9, 72, 149, 1, 117, 2, 21, 0, 37, 1, 53, 1, 69, 4, 177, 2, 53, 0, 69, 0, 117, 6, 177, 1, 133, 17, 9, 56, 21, 129, 37, 127, 117, 8, 129, 6, 192, 5, 12, 117, 8, 10, 56, 2, 129, 6, 192, 192, 192], name=None, input_info=None)
Bases:
TwoWheelMouse- report_descriptor = [5, 1, 9, 2, 161, 1, 5, 1, 9, 2, 161, 2, 133, 17, 9, 1, 161, 0, 5, 9, 25, 1, 41, 3, 149, 3, 117, 1, 37, 1, 129, 2, 149, 1, 129, 1, 9, 5, 129, 2, 149, 3, 129, 1, 5, 1, 9, 48, 9, 49, 149, 2, 117, 8, 21, 129, 37, 127, 129, 6, 161, 2, 133, 18, 9, 72, 149, 1, 117, 2, 21, 0, 37, 1, 53, 1, 69, 4, 177, 2, 53, 0, 69, 0, 117, 6, 177, 1, 133, 17, 9, 56, 21, 129, 37, 127, 117, 8, 129, 6, 192, 5, 12, 117, 8, 10, 56, 2, 129, 6, 192, 192, 192]
- set_report(req, rnum, rtype, data)
Callback invoked when a process calls SetReport on this UHID device.
Return
0on success or an errno on failure.The default method always returns
EIOfor a failure. Override this in your device if you want SetReport to succeed.- Parameters:
req – the request identifier
rnum –
???
rtype – one of
UHID_FEATURE_REPORT,UHID_INPUT_REPORT, orUHID_OUTPUT_REPORTdata (list) – a byte string with the data
- class TestBadResolutionMultiplierMouse
Bases:
TestTwoWheelMouse- create_device()
- is_wheel_highres(uhdev)
- test_resolution_multiplier_wheel()
- class TestMiMouse
Bases:
TestWheelMouse- assertInputEvents(expected_events, effective_events)
- create_device()
- class TestResolutionMultiplierHWheelMouse
Bases:
TestResolutionMultiplierMouse- create_device()
- is_hwheel_highres(uhdev)
- test_ac_pan_with_multiplier()
- test_resolution_multiplier_ac_pan()
- class TestResolutionMultiplierMouse
Bases:
TestTwoWheelMouse- create_device()
- is_wheel_highres(uhdev)
- test_resolution_multiplier_wheel()
- test_wheel_with_multiplier()
- class TestSimpleMouse
Bases:
TestMouse- create_device()
- test_rdesc()
Check that the testsuite actually manages to format the reports according to the report descriptors. No kernel device is used here
- class TestTwoWheelMouse
Bases:
TestWheelMouse- create_device()
- is_hwheel_highres(uhdev)
- test_ac_pan()
- class TwoWheelMouse(rdesc=[5, 1, 9, 2, 161, 1, 9, 1, 161, 0, 5, 9, 25, 1, 41, 16, 21, 0, 37, 1, 149, 16, 117, 1, 129, 2, 5, 1, 22, 1, 128, 38, 255, 127, 117, 16, 149, 2, 9, 48, 9, 49, 129, 6, 21, 129, 37, 127, 117, 8, 149, 1, 9, 56, 129, 6, 5, 12, 10, 56, 2, 149, 1, 129, 6, 192, 192], name=None, input_info=None)
Bases:
WheelMouse- report_descriptor = [5, 1, 9, 2, 161, 1, 9, 1, 161, 0, 5, 9, 25, 1, 41, 16, 21, 0, 37, 1, 149, 16, 117, 1, 129, 2, 5, 1, 22, 1, 128, 38, 255, 127, 117, 16, 149, 2, 9, 48, 9, 49, 129, 6, 21, 129, 37, 127, 117, 8, 149, 1, 9, 56, 129, 6, 5, 12, 10, 56, 2, 149, 1, 129, 6, 192, 192]
- class WheelMouse(rdesc=[5, 1, 9, 2, 161, 1, 5, 9, 25, 1, 41, 3, 21, 0, 37, 1, 149, 3, 117, 1, 129, 2, 149, 1, 117, 5, 129, 3, 5, 1, 9, 1, 161, 0, 9, 48, 9, 49, 21, 129, 37, 127, 117, 8, 149, 2, 129, 6, 192, 9, 56, 21, 129, 37, 127, 117, 8, 149, 1, 129, 6, 192], name=None, input_info=None)
Bases:
ButtonMouse- report_descriptor = [5, 1, 9, 2, 161, 1, 5, 9, 25, 1, 41, 3, 21, 0, 37, 1, 149, 3, 117, 1, 129, 2, 149, 1, 117, 5, 129, 3, 5, 1, 9, 1, 161, 0, 9, 48, 9, 49, 21, 129, 37, 127, 117, 8, 149, 2, 129, 6, 192, 9, 56, 21, 129, 37, 127, 117, 8, 149, 1, 129, 6, 192]