mirror of
https://github.com/jetkvm/kvm.git
synced 2026-03-02 22:58:00 -05:00
USB Keyboard & Mouse Boot Mode Correctly Supported? #290
Labels
No labels
component/keyboard-layout
component: cloud
component: device screen
component: extensions
component: hid/keyboard
component: hid/mouse
component: network
component: timesync
component: ui
component: updater
component: usb
component: usb/hid
component: usb/storage
component: video
component: webrtc
component: webserver
need-more-details
status: working-in-progress
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/kvm#290
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @rmschooley on GitHub (May 26, 2025).
Originally assigned to: @ym on GitHub.
JetKVM's keyboard, absolute mouse, and relative mouse all claim to support "Boot Mode" by having their USB InterfaceDescriptor's bInterfaceSubClass field set to 0x01. If this is really true, all three of these devices must support the USB Set_Report Command. Do all of these devices support this command?
If these devices do support "Boot Mode", they are still required to initialize to their "Report Protocol" Mode. In this mode, these devices are required to report their keyboard or mouse data in the format described by their HID Descriptor.
If a system sends the USB Set_Report(0) Command to any of these devices, these devices are also required to report their keyboard or mouse data in the format described by the BOOT HID Descriptor -- which is often not the same as their HID Descriptor.
For Example: A mouse that correctly supports "Boot Mode" is required to send its button data in its first byte, its x displacement data in its second byte, and its y displacement data in its third byte. In the boot mode, a mouse's report may contain more than three bytes but no more than eight bytes.
To summarize the questions:
Does JetKVM's keyboard, absolute mouse, and relative mouse all support "Boot Mode"?
a. Does JetKVM's keyboard, absolute mouse, and relative mouse all support the USB Command Set_Report(0) which instructs the device to report data in the format described by the BOOT HID Descriptor rather than their HID Descriptor?
b. Does JetKVM's keyboard, absolute mouse, and relative mouse all support the USB Command Set_Report(1) which instructs the device to report data in the format described by their HID Descriptor rather than the BOOT HID Descriptor?
USB Keyboard and Mouse Boot Mode Info - https://www.usb.org/sites/default/files/hid1_11.pdf
@rmschooley commented on GitHub (May 26, 2025):
Since I have a fair amount of experience in developing various different usb keyboard and mouse boot mode operating environments, I would like to make the following comments and suggestions...
COMMENTS
Some operating environments require keyboards and mice to identify themselves as boot-mode devices and acknowledge the Set_Report(0) Command by switching to the report data format specified by the BOOT HID Descriptor.
Some operating environments require keyboards and mice to identify themselves as boot-mode devices. However, they assume these devices acknowledge the Set_Report(0) Command by switching to the report data format specified by the BOOT HID Descriptor.
Some operating environments assume all keyboards and mice are boot-mode devices. Likewise, they assume these devices acknowledge the Set_Report(0) Command by switching to the report data format specified by the BOOT HID Descriptor.
Although I don't yet know for sure, I suspect JetKVM's keyboard, absolute mouse, and relative mouse always report data in the format specified by their HID Descriptors (and may or may not acknowledge the Set_Report(0) Command) . HOWEVER - It looks like JetKVM's keyboard's and relative mouse's HID Descriptor is a superset of the BOOT HID Descriptor for these devices. As such, these devices should work perfectly fine as boot-mode devices. However, JetKVM's absolute mouse's HID Descriptor most certainly does not match a mouse's BOOT HID Descriptor.
SUGGESTIONS
If JetKVM's absolute mouse always reports data in a format specified by its HID Descriptor (and never reports data in a format specified by the BOOT HID Descriptor), I think JetKVM should make the following changes in order to maximize the likelihood of a keyboard and a mouse working in as many operating environments as possible.
JetKVM's keyboard's and relative mouse's bInterfaceSubClass should continued to be set to 1. However, JetKVM's absolute mouse's bInterfaceSubClass should be set to 0.
Many operating environments in the past (and maybe still today) only use the very first keyboard and the very first mouse found while enumerating the system. As a result, I would strongly suggest that JetKVM's keyboard always be listed as the first device if it is enabled (just like it is today), but JetKVM's relative mouse always be listed as the second device and JetKVM's absolute mouse always be listed as the third device so that the operating environment will identify the boot-mode capable mouse before the non-boot-mode capable mouse.