USB Keyboard & Mouse Boot Mode Correctly Supported? #290

Open
opened 2026-02-20 08:21:46 -05:00 by deekerman · 1 comment
Owner

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:

  1. 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

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: 1. 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
Author
Owner

@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

  1. 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.

  2. 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.

  3. 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.

  1. 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.

  2. 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.

@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 1. 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. 2. 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. 3. 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. 1. 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. 2. 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.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/kvm#290
No description provided.