Age | Commit message (Collapse) | Author | Files | Lines |
|
This makes the feature indices consistent with real hardware which makes
it easier to compare/test against real hw.
Some features are (partially) implemented per spec (0x6110
TouchMouseRawPoints; 0x2200 MousePointer). Others are guessed based on
results from hw (0x2100 VerticalScrolling, 0x2120 HiresScrolling).
The spec for 0x6100 TouchpadRawXY is available, but not implemented yet.
It is assumed that the reprogrammable v1 and v2 features are similar to
the reprogramcontrols feature (which seems to hold so far).
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
This also has the DFU capability :-)
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
This makes it easier to switch between devices.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
|
|
Keys would appear "stuck" before this patch. It turns out that interrupt
transfers to EP1 (keyboard) and EP2 (mouse) were still happening while
the devices really are in HID++ mode instead of HID.
To fix this, pretend there is no data when in HID++ mode.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
|
|
Also safe-guard against missing feature array for HID++ 2.0 devices.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Fix LSB/MSB mix-up, fix incorrect matching against request type.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
The M525 was nice for testing stuff out, but it gets really interesting
with the T650 which has a firmware update available. Details will be
available in https://git.lekensteyn.nl/ltunify/tree/firmware-update.txt
Add the initial feature set for T650, complete M525 feature set
(commented out since unknown and seemingly uninteresting to implement).
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Two stupid mistakes slipped in while refactoring the HID report
generation in 3615170bd1ed6f09f878a8b538321044efddd8e0 ("unifying: fix
mouse report format, DRY"). This makes evtest in Linux report mouse
events again and openbox seems happy too.
Another mistake went in the calculation of the Y field, the high and
low bits of Y were accidentally swapped.
As the descriptor for interface 2 (mouse, etc.) includes Report IDs,
this ID must be prepended to the HID payload for mice reports. This
makes the mouse function for Windows guests. (See section 8.1 of
HID 1.11).
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Interrupts were enabled for EP3, but the WinXP driver did not support
the reports sent through it. Prevent generating HID++ reports for
devices that are not in DJ mode (i.e. in standard HID mode).
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Used for debugging WinXP. Turns out that even usb-kbd is broken, so it
must be the USB stack used by WinXP that is problematic.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
...and ignore Get_Report for HID++ queries. 0x20 and 0x21 already
return EPIPE on real hw, but even querying 0x10 and 0x11 does not make
sense as the device index is not known.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Introduce new function to retrieve HID data for a given HIDState (if
any) and fix the incompatibility between the HID format for mice as
used by QEMU and the format described by the report (it contains an
extra field for buttons).
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
The actual controls themselves are not implemented, for now always
return as if there are no re-programmable controls for software.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Features 1DF3, 1DF0 and 1F03 are not documented, its functionality is
unknown. WirelessDeviceStatus has no functions, it only exists for
broadcast events.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Battery percentage is fuzzy... ok.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Set K800 to use HID++ 1.0; add a device_name field to store long
device names for HID++ 2.0 devices. The device types constants
are slightly different between HID++ 1.0 and HID++ 2.0, two constants
are not implemented (and those will probably never be implemented).
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Based on information for M525 (entitycount == 0), and T650 (BL and HW).
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
The input report ID can be 0x10 or 0x11, the responses are always 0x11.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Do not treat IRoot special in hidpp_process_device_hidpp20, but
implement it as a generic feature using hidpp20_feature_call. This
makes it easier to re-use the error reporting stuff.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
|
|
Prepare for adding more HID++ 2.0 features.
|
|
The USB_CFG_ATT_WAKEUP seems to be ignored by the device, perhaps it
gets handled by the OS.
usb_desc_attach is not necessary because we only have one full-speed
configuration. If there would also be a high-speed (or super-speed)
configuration, then usb_desc_attach must be added back to allow picking
an appropriate configuration based on the speed of the controller port
(UHCI, EHCI, XHCI). usb_desc_init() takes care of setting the initial
configuration (there is only one now).
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
The XHCI HCD sends an OUT packet which was unexpected by the usbdump
code. That was the case because the core USB code that was normally
calling handle_control only called when the full data was received from
the host (from the Status stage, with PID == USB_TOKEN_IN).
Then there is also the do_parameter function as used by XHCI that was
not really handled. Fix this by allowing OUT tokens, also document
why this is necessary.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Stop hard-coding capture file and introduce the "usbdump" property
to specify the capture file path. When omitted, no capture will be
done.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Stop hard-coding capture file and introduce the "usbdump" property
to specify the capture file path. When omitted, no capture will be
done.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
New Hidpp20Msg type helps reading the HID++ 2.0 function format.
Implemented error responses (undocumented), and IRoot.GetProtocol().
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Reports 0x21 always fails (-EPIPE) for Set_Report.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Undocumented, so it's guesswork based on
https://git.lekensteyn.nl/ltunify/tree/registers.txt
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
The "address" and "value" split for short and long HID++ messages only
make sense for HID++ 1.0 register accesses. For others, use "params".
Also fix a mixup of reporting flags.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
|
|
It is not dangerous to modify the original data buffer, so just pass
a pointer for the message instead. Also implement DJ report type 0x0E
(LEDS).
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
The idea of the input queue is probably that wireless devices cannot
immediately be queried, but the receiver is able to respond immediately.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
These serial numbers are obviously fake, the product and device names,
however, are real.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Also enable processing of input reports. Now at least keyboard events
work and the enumeration order is slightly more sane, yay!
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
The length should match our expectations, but let's check that to be
sure.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
WIP (partially untested).
Handle input reports, respond with HID events if there are no queued
output reports. Implemented input report processing for receiver:
0x80 (Switch and Keep-Alive), 0x81 (Get Paired Devices).
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Fix error queue name, rename input queue for clarity. Split input
and output queue for further work and NAK when there is no interrupt
data available.
|
|
Error queue is implemented, possible receiver and device properties
are filled in (in the header).
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Prepare for adding DJ support, which I expect to be huge and unrelated
to the HID code.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
bNumEndpoints specify the number of endpoints in the endpoint
descriptor. When the mouse endpoint was tried (EP2), it triggered this
assertion because there is only one endpoint for the interface.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
Copied from dev-hid.c (order changed to match interfaces order).
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
|
For now, the receiver has always a mouse and keyboard paired.
Set_Idle, Get_Idle, Get_Protocol and Set_Protocol support
interface-specific devices.
Interrupt data for the HID mode are also implemented.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|