diff --git a/demos/host/src/keyboard_app.c b/demos/host/src/keyboard_app.c index 7475eb91c..ddd73fb97 100644 --- a/demos/host/src/keyboard_app.c +++ b/demos/host/src/keyboard_app.c @@ -67,19 +67,22 @@ static inline void process_kbd_report(tusb_keyboard_report_t const * report); //--------------------------------------------------------------------+ // tinyusb callback (ISR context) //--------------------------------------------------------------------+ +void tusbh_hid_keyboard_mounted_isr(uint8_t dev_addr) +{ + // application set-up + osal_queue_flush(queue_kbd_hdl); + tusbh_hid_keyboard_get_report(dev_addr, (uint8_t*) &usb_keyboard_report); // first report +} + +void tusbh_hid_keyboard_unmounted_isr(uint8_t dev_addr) +{ + // application tear-down +} + void tusbh_hid_keyboard_isr(uint8_t dev_addr, tusb_event_t event) { switch(event) { - case TUSB_EVENT_INTERFACE_OPEN: // application set-up - osal_queue_flush(queue_kbd_hdl); - tusbh_hid_keyboard_get_report(dev_addr, (uint8_t*) &usb_keyboard_report); // first report - break; - - case TUSB_EVENT_INTERFACE_CLOSE: // application tear-down - - break; - case TUSB_EVENT_XFER_COMPLETE: osal_queue_send(queue_kbd_hdl, &usb_keyboard_report); tusbh_hid_keyboard_get_report(dev_addr, (uint8_t*) &usb_keyboard_report); diff --git a/demos/host/src/mouse_app.c b/demos/host/src/mouse_app.c index 432004c2c..23a11f701 100644 --- a/demos/host/src/mouse_app.c +++ b/demos/host/src/mouse_app.c @@ -67,19 +67,22 @@ static inline void process_mouse_report(tusb_mouse_report_t const * p_report); //--------------------------------------------------------------------+ // tinyusb callback (ISR context) //--------------------------------------------------------------------+ +void tusbh_hid_mouse_mounted_isr(uint8_t dev_addr) +{ + // application set-up + osal_queue_flush(queue_mouse_hdl); + tusbh_hid_mouse_get_report(dev_addr, (uint8_t*) &usb_mouse_report); // first report +} + +void tusbh_hid_mouse_unmounted_isr(uint8_t dev_addr) +{ + // application tear-down +} + void tusbh_hid_mouse_isr(uint8_t dev_addr, tusb_event_t event) { switch(event) { - case TUSB_EVENT_INTERFACE_OPEN: // application set-up - osal_queue_flush(queue_mouse_hdl); - tusbh_hid_mouse_get_report(dev_addr, (uint8_t*) &usb_mouse_report); // first report - break; - - case TUSB_EVENT_INTERFACE_CLOSE: // application tear-down - - break; - case TUSB_EVENT_XFER_COMPLETE: osal_queue_send(queue_mouse_hdl, &usb_mouse_report); tusbh_hid_mouse_get_report(dev_addr, (uint8_t*) &usb_mouse_report); diff --git a/tests/lpc18xx_43xx/test/host/cdc/test_cdc_host.c b/tests/lpc18xx_43xx/test/host/cdc/test_cdc_host.c index 9956a82f5..92534e9f9 100644 --- a/tests/lpc18xx_43xx/test/host/cdc/test_cdc_host.c +++ b/tests/lpc18xx_43xx/test/host/cdc/test_cdc_host.c @@ -244,7 +244,7 @@ void test_cdc_xfer_pipe_out(void) { pipe_handle_t pipe_notification = { .dev_addr = 1, .xfer_type = TUSB_XFER_INTERRUPT }; pipe_handle_t pipe_out = { .dev_addr = 1, .xfer_type = TUSB_XFER_BULK, .index = 0 }; - pipe_handle_t pipe_in = { .dev_addr = 1, .xfer_type = TUSB_XFER_BULK, .index = 1 }; + pipe_handle_t pipe_in = { .dev_addr = 1, .xfer_type = TUSB_XFER_BULK, .index = 1 }; cdch_data[dev_addr-1].pipe_notification = pipe_notification; cdch_data[dev_addr-1].pipe_out = pipe_out; @@ -260,7 +260,7 @@ void test_cdc_xfer_pipe_in(void) { pipe_handle_t pipe_notification = { .dev_addr = 1, .xfer_type = TUSB_XFER_INTERRUPT }; pipe_handle_t pipe_out = { .dev_addr = 1, .xfer_type = TUSB_XFER_BULK, .index = 0 }; - pipe_handle_t pipe_in = { .dev_addr = 1, .xfer_type = TUSB_XFER_BULK, .index = 1 }; + pipe_handle_t pipe_in = { .dev_addr = 1, .xfer_type = TUSB_XFER_BULK, .index = 1 }; cdch_data[dev_addr-1].pipe_notification = pipe_notification; cdch_data[dev_addr-1].pipe_out = pipe_out; diff --git a/tests/lpc18xx_43xx/test/host/hid/hidh_callback.h b/tests/lpc18xx_43xx/test/host/hid/hidh_callback.h index 70da64695..9ac72bb8d 100644 --- a/tests/lpc18xx_43xx/test/host/hid/hidh_callback.h +++ b/tests/lpc18xx_43xx/test/host/hid/hidh_callback.h @@ -60,7 +60,12 @@ //------------- hidh -------------// void tusbh_hid_keyboard_isr(uint8_t dev_addr, tusb_event_t event) ATTR_WEAK; +void tusbh_hid_keyboard_mounted_isr(uint8_t dev_addr) ATTR_WEAK; +void tusbh_hid_keyboard_unmounted_isr(uint8_t dev_addr) ATTR_WEAK; + void tusbh_hid_mouse_isr(uint8_t dev_addr, tusb_event_t event) ATTR_WEAK; +void tusbh_hid_mouse_mounted_isr(uint8_t dev_addr) ATTR_WEAK; +void tusbh_hid_mouse_unmounted_isr(uint8_t dev_addr) ATTR_WEAK; #ifdef __cplusplus } diff --git a/tests/lpc18xx_43xx/test/host/hid/test_hidh_keyboard.c b/tests/lpc18xx_43xx/test/host/hid/test_hidh_keyboard.c index 733c1ab73..4d80671f6 100644 --- a/tests/lpc18xx_43xx/test/host/hid/test_hidh_keyboard.c +++ b/tests/lpc18xx_43xx/test/host/hid/test_hidh_keyboard.c @@ -145,7 +145,7 @@ void test_keyboard_open_ok(void) usbh_control_xfer_subtask_StubWithCallback(stub_set_idle_request); hcd_pipe_open_ExpectAndReturn(dev_addr, p_kdb_endpoint_desc, TUSB_CLASS_HID, pipe_hdl); - tusbh_hid_keyboard_isr_Expect(dev_addr, TUSB_EVENT_INTERFACE_OPEN); + tusbh_hid_keyboard_mounted_isr_Expect(dev_addr); //------------- Code Under TEST -------------// TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, hidh_open_subtask(dev_addr, p_kbd_interface_desc, &length)); diff --git a/tests/lpc18xx_43xx/test/host/hid/test_hidh_mouse.c b/tests/lpc18xx_43xx/test/host/hid/test_hidh_mouse.c index 88aa9351f..d64d70460 100644 --- a/tests/lpc18xx_43xx/test/host/hid/test_hidh_mouse.c +++ b/tests/lpc18xx_43xx/test/host/hid/test_hidh_mouse.c @@ -134,7 +134,7 @@ void test_mouse_open_ok(void) usbh_control_xfer_subtask_StubWithCallback(stub_set_idle_request); hcd_pipe_open_ExpectAndReturn(dev_addr, p_mouse_endpoint_desc, TUSB_CLASS_HID, pipe_hdl); - tusbh_hid_mouse_isr_Expect(dev_addr, TUSB_EVENT_INTERFACE_OPEN); + tusbh_hid_mouse_mounted_isr_Expect(dev_addr); //------------- Code Under TEST -------------// TEST_ASSERT_STATUS( hidh_open_subtask(dev_addr, p_mouse_interface_desc, &length)); diff --git a/tinyusb/class/hid_host.c b/tinyusb/class/hid_host.c index 13949c0d4..4b5a31f0c 100644 --- a/tinyusb/class/hid_host.c +++ b/tinyusb/class/hid_host.c @@ -257,9 +257,9 @@ tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t con if ( HID_PROTOCOL_KEYBOARD == p_interface_desc->bInterfaceProtocol) { SUBTASK_ASSERT_STATUS ( hidh_interface_open(dev_addr, p_interface_desc->bInterfaceNumber, p_endpoint_desc, &keyboard_data[dev_addr-1]) ); - if ( tusbh_hid_keyboard_isr ) + if ( tusbh_hid_keyboard_mounted_isr ) { - tusbh_hid_keyboard_isr(dev_addr, TUSB_EVENT_INTERFACE_OPEN); + tusbh_hid_keyboard_mounted_isr(dev_addr); } } else #endif @@ -268,9 +268,9 @@ tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t con if ( HID_PROTOCOL_MOUSE == p_interface_desc->bInterfaceProtocol) { SUBTASK_ASSERT_STATUS ( hidh_interface_open(dev_addr, p_interface_desc->bInterfaceNumber, p_endpoint_desc, &mouse_data[dev_addr-1]) ); - if (tusbh_hid_mouse_isr) + if (tusbh_hid_mouse_mounted_isr) { - tusbh_hid_mouse_isr(dev_addr, TUSB_EVENT_INTERFACE_OPEN); + tusbh_hid_mouse_mounted_isr(dev_addr); } } else #endif @@ -324,10 +324,18 @@ void hidh_close(uint8_t dev_addr) { #if TUSB_CFG_HOST_HID_KEYBOARD hidh_interface_close(dev_addr, &keyboard_data[dev_addr-1]); + if (tusbh_hid_keyboard_unmounted_isr) + { + tusbh_hid_keyboard_unmounted_isr(dev_addr); + } #endif #if TUSB_CFG_HOST_HID_MOUSE hidh_interface_close(dev_addr, &mouse_data[dev_addr-1]); + if( tusbh_hid_mouse_unmounted_isr ) + { + tusbh_hid_mouse_unmounted_isr( dev_addr ); + } #endif #if TUSB_CFG_HOST_HID_GENERIC diff --git a/tinyusb/class/hid_host.h b/tinyusb/class/hid_host.h index 510cbc950..7d5876990 100644 --- a/tinyusb/class/hid_host.h +++ b/tinyusb/class/hid_host.h @@ -64,6 +64,8 @@ tusb_error_t tusbh_hid_keyboard_get_report(uint8_t dev_addr, void * report) ATT tusb_interface_status_t tusbh_hid_keyboard_status(uint8_t dev_addr) ATTR_WARN_UNUSED_RESULT; //------------- Application Callback -------------// void tusbh_hid_keyboard_isr(uint8_t dev_addr, tusb_event_t event) ATTR_WEAK; +void tusbh_hid_keyboard_mounted_isr(uint8_t dev_addr) ATTR_WEAK; +void tusbh_hid_keyboard_unmounted_isr(uint8_t dev_addr) ATTR_WEAK; //--------------------------------------------------------------------+ // MOUSE Application API @@ -73,6 +75,8 @@ tusb_error_t tusbh_hid_mouse_get_report(uint8_t dev_addr, void* report) ATTR_WA tusb_interface_status_t tusbh_hid_mouse_status(uint8_t dev_addr) ATTR_WARN_UNUSED_RESULT; //------------- Application Callback -------------// void tusbh_hid_mouse_isr(uint8_t dev_addr, tusb_event_t event) ATTR_WEAK; +void tusbh_hid_mouse_mounted_isr(uint8_t dev_addr) ATTR_WEAK; +void tusbh_hid_mouse_unmounted_isr(uint8_t dev_addr) ATTR_WEAK; //--------------------------------------------------------------------+ // GENERIC Application API diff --git a/tinyusb/core/tusb_types.h b/tinyusb/core/tusb_types.h index 34a110523..4d4d976e1 100644 --- a/tinyusb/core/tusb_types.h +++ b/tinyusb/core/tusb_types.h @@ -200,9 +200,6 @@ typedef enum { TUSB_EVENT_XFER_ERROR, TUSB_EVENT_XFER_STALLED, - TUSB_EVENT_INTERFACE_OPEN, - TUSB_EVENT_INTERFACE_CLOSE, - TUSB_EVENT_BUS_RESET, // TODO refractor TUSB_EVENT_SETUP_RECEIVED, }tusb_event_t;