diff options
| author | Scott Shawcroft <[email protected]> | 2018-11-08 13:45:30 -0800 |
|---|---|---|
| committer | Scott Shawcroft <[email protected]> | 2018-11-08 13:45:30 -0800 |
| commit | 30e3c64134789416e10ed867fa12c210b808e98f (patch) | |
| tree | 6cb85cea204a1398e49eeff7b0e96dd5104aad4b /src/class/hid | |
| parent | 7a40ec2647f06c37c6b8f0b8af2c17ba747f0aeb (diff) | |
Polish up control split and treat it more like a normal endpoint.
Diffstat (limited to 'src/class/hid')
| -rw-r--r-- | src/class/hid/hid_device.c | 32 | ||||
| -rw-r--r-- | src/class/hid/hid_device.h | 1 |
2 files changed, 24 insertions, 9 deletions
diff --git a/src/class/hid/hid_device.c b/src/class/hid/hid_device.c index aa7a8008e..efa602ad6 100644 --- a/src/class/hid/hid_device.c +++ b/src/class/hid/hid_device.c @@ -455,15 +455,6 @@ tusb_error_t hidd_control_request(uint8_t rhport, tusb_control_request_t const * else if ( HID_REQ_CONTROL_SET_REPORT == p_request->bRequest )
{
dcd_edpt_xfer(rhport, 0, _shared_control_buffer, p_request->wLength);
-
- // wValue = Report Type | Report ID
- uint8_t const report_type = tu_u16_high(p_request->wValue);
- uint8_t const report_id = tu_u16_low(p_request->wValue);
-
- if ( p_hid->set_report_cb )
- {
- p_hid->set_report_cb(report_id, (hid_report_type_t) report_type, _shared_control_buffer, p_request->wLength);
- }
}
else if (HID_REQ_CONTROL_SET_IDLE == p_request->bRequest)
{
@@ -495,6 +486,29 @@ tusb_error_t hidd_control_request(uint8_t rhport, tusb_control_request_t const * return TUSB_ERROR_NONE;
}
+void hidd_control_request_complete(uint8_t rhport, tusb_control_request_t const * p_request)
+{
+ hidd_interface_t* p_hid = get_interface_by_itfnum( (uint8_t) p_request->wIndex );
+ if (p_hid == NULL) {
+ return;
+ }
+
+ if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS)
+ {
+ if ( HID_REQ_CONTROL_SET_REPORT == p_request->bRequest )
+ {
+ // wValue = Report Type | Report ID
+ uint8_t const report_type = tu_u16_high(p_request->wValue);
+ uint8_t const report_id = tu_u16_low(p_request->wValue);
+
+ if ( p_hid->set_report_cb )
+ {
+ p_hid->set_report_cb(report_id, (hid_report_type_t) report_type, _shared_control_buffer, p_request->wLength);
+ }
+ }
+ }
+}
+
tusb_error_t hidd_xfer_cb(uint8_t rhport, uint8_t edpt_addr, tusb_event_t event, uint32_t xferred_bytes)
{
// nothing to do
diff --git a/src/class/hid/hid_device.h b/src/class/hid/hid_device.h index 10aea10ac..1dc40af57 100644 --- a/src/class/hid/hid_device.h +++ b/src/class/hid/hid_device.h @@ -379,6 +379,7 @@ ATTR_WEAK void tud_hid_mouse_set_report_cb(uint8_t report_id, hid_report_type_t void hidd_init(void);
tusb_error_t hidd_open(uint8_t rhport, tusb_desc_interface_t const * p_interface_desc, uint16_t *p_length);
tusb_error_t hidd_control_request(uint8_t rhport, tusb_control_request_t const * p_request, uint16_t bytes_already_sent);
+void hidd_control_request_complete (uint8_t rhport, tusb_control_request_t const * p_request);
tusb_error_t hidd_xfer_cb(uint8_t rhport, uint8_t edpt_addr, tusb_event_t event, uint32_t xferred_bytes);
void hidd_reset(uint8_t rhport);
|
