usb3sun
usb3sun copied to clipboard
we need to switch to boot protocol, as long as we only support boot protocol
diff --git a/src/main.cc b/src/main.cc
index 9b4b75e..68b51cf 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -391,6 +391,15 @@ void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t instance, uint8_t const *desc_re
}
}
+ // HID DCD 1.11 § 7.2.6, “When initialized, all devices default to report protocol.”
+ tuh_hid_set_protocol(dev_addr, instance, HID_PROTOCOL_BOOT);
+}
+
+void tuh_hid_set_protocol_complete_cb(uint8_t dev_addr, uint8_t instance, uint8_t protocol) {
+ Serial1.printf(">>> [%u:%u] Set_Protocol: protocol now %u\n", dev_addr, instance, protocol);
+ if (protocol != HID_PROTOCOL_BOOT)
+ Serial1.printf(">>> [%u:%u] failed to Set_Protocol to boot protocol\n", dev_addr, instance);
+
if (!usb3sun_uhid_request_report(dev_addr, instance))
Sprintf("error: usb [%u:%u]: failed to request to receive report\n", dev_addr, instance);
@@ -417,11 +426,6 @@ void tuh_umount_cb(uint8_t dev_addr) {
buzzer.unplug();
}
-void tuh_hid_set_protocol_complete_cb(uint8_t dev_addr, uint8_t instance, uint8_t protocol) {
- // haven’t seen this actually get printed so far, but only tried a few devices
- Sprintf("usb [%u:%u]: hid set protocol returned %u\n", dev_addr, instance, protocol);
-}
-
// Invoked when received report from device via interrupt endpoint
void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t instance, uint8_t const *report, uint16_t len) {
uint8_t if_protocol = usb3sun_uhid_interface_protocol(dev_addr, instance);