diff --git a/tests/test/host/ehci/test_ehci_usbh_hcd_integration.c b/tests/test/host/ehci/test_ehci_usbh_hcd_integration.c index b123fb351..9ba36e4e6 100644 --- a/tests/test/host/ehci/test_ehci_usbh_hcd_integration.c +++ b/tests/test/host/ehci/test_ehci_usbh_hcd_integration.c @@ -78,7 +78,7 @@ void setUp(void) usbh_device_info_pool[i].hub_addr = hub_addr; usbh_device_info_pool[i].hub_port = hub_port; usbh_device_info_pool[i].speed = TUSB_SPEED_HIGH; - usbh_device_info_pool[i].state = TUSB_DEVICE_STATE_READY; + usbh_device_info_pool[i].state = TUSB_DEVICE_STATE_CONFIGURED; } regs = get_operational_register(hostid); diff --git a/tests/test/host/test_hid_host_keyboard.c b/tests/test/host/test_hid_host_keyboard.c index 41882d407..70034266e 100644 --- a/tests/test/host/test_hid_host_keyboard.c +++ b/tests/test/host/test_hid_host_keyboard.c @@ -100,11 +100,11 @@ void test_keyboard_no_instances_invalid_para(void) void test_keyboard_install_ok(void) { - tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_READY); + tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); TEST_ASSERT_EQUAL(0, tusbh_hid_keyboard_no_instances(device_hdl)); TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, hidh_keyboard_install(device_hdl, (uint8_t*) &kbd_descriptor)); - tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_READY); + tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); TEST_ASSERT_EQUAL(1, tusbh_hid_keyboard_no_instances(device_hdl)); } @@ -150,7 +150,7 @@ pipe_status_t pipe_status_get_stub(pipe_handle_t pipe_hdl, int num_call) void test_keyboard_get_invalid_para() { - tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_READY); + tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); TEST_ASSERT_EQUAL(TUSB_ERROR_INVALID_PARA, tusbh_hid_keyboard_get(0, 0, NULL)); tusbh_device_status_get_IgnoreAndReturn(0); @@ -162,18 +162,18 @@ void test_keyboard_get_invalid_para() void test_keyboard_get_class_not_supported() { - tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_READY); + tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); keyboard_info_pool[device_hdl].instance[0].pipe_in = (pipe_handle_t) { 0 }; TEST_ASSERT_EQUAL(TUSB_ERROR_CLASS_DEVICE_DONT_SUPPORT, tusbh_hid_keyboard_get(device_hdl, instance_num, &report)); } void test_keyboard_get_report_not_available() { - tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_READY); + tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); usbh_pipe_status_get_IgnoreAndReturn(PIPE_STATUS_BUSY); TEST_ASSERT_EQUAL(TUSB_ERROR_CLASS_DATA_NOT_AVAILABLE, tusbh_hid_keyboard_get(device_hdl, instance_num, &report)); - tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_READY); + tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); usbh_pipe_status_get_IgnoreAndReturn(PIPE_STATUS_AVAILABLE); TEST_ASSERT_EQUAL(TUSB_ERROR_CLASS_DATA_NOT_AVAILABLE, tusbh_hid_keyboard_get(device_hdl, instance_num, &report)); } @@ -182,16 +182,16 @@ void test_keyboard_get_ok() { usbh_pipe_status_get_StubWithCallback(pipe_status_get_stub); - tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_READY); + tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, tusbh_hid_keyboard_get(device_hdl, instance_num, &report)); TEST_ASSERT_EQUAL_MEMORY(&sample_key[0], &report, sizeof(tusb_keyboard_report_t)); - tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_READY); + tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); TEST_ASSERT_EQUAL(TUSB_ERROR_CLASS_DATA_NOT_AVAILABLE, tusbh_hid_keyboard_get(device_hdl, instance_num, &report)); - tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_READY); + tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); TEST_ASSERT_EQUAL(TUSB_ERROR_CLASS_DATA_NOT_AVAILABLE, tusbh_hid_keyboard_get(device_hdl, instance_num, &report)); - tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_READY); + tusbh_device_status_get_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, tusbh_hid_keyboard_get(device_hdl, instance_num, &report)); TEST_ASSERT_EQUAL_MEMORY(&sample_key[1], &report, sizeof(tusb_keyboard_report_t)); } diff --git a/tests/test/host/test_usbh.c b/tests/test/host/test_usbh.c index a7d44814d..885da78c3 100644 --- a/tests/test/host/test_usbh.c +++ b/tests/test/host/test_usbh.c @@ -71,8 +71,8 @@ void test_usbh_status_get_fail(void) void test_usbh_status_get_succeed(void) { - usbh_device_info_pool[dev_hdl].state = TUSB_DEVICE_STATE_READY; - TEST_ASSERT_EQUAL( TUSB_DEVICE_STATE_READY, tusbh_device_status_get(dev_hdl) ); + usbh_device_info_pool[dev_hdl].state = TUSB_DEVICE_STATE_CONFIGURED; + TEST_ASSERT_EQUAL( TUSB_DEVICE_STATE_CONFIGURED, tusbh_device_status_get(dev_hdl) ); } //--------------------------------------------------------------------+ @@ -179,7 +179,7 @@ void test_usbh_device_unplugged_isr(void) { uint8_t dev_addr = 1; - usbh_device_info_pool[dev_addr].state = TUSB_DEVICE_STATE_READY; + usbh_device_info_pool[dev_addr].state = TUSB_DEVICE_STATE_CONFIGURED; usbh_device_info_pool[dev_addr].core_id = 0; usbh_device_info_pool[dev_addr].hub_addr = 0; usbh_device_info_pool[dev_addr].hub_port = 0; diff --git a/tinyusb/class/hid_host.c b/tinyusb/class/hid_host.c index 3309e19eb..c46125b95 100644 --- a/tinyusb/class/hid_host.c +++ b/tinyusb/class/hid_host.c @@ -65,7 +65,7 @@ tusb_error_t tusbh_hid_keyboard_get(tusb_handle_device_t const device_hdl, uint8 { keyboard_interface_t *p_kbd; - ASSERT_INT(TUSB_DEVICE_STATE_READY, tusbh_device_status_get(device_hdl), TUSB_ERROR_DEVICE_NOT_READY); + ASSERT_INT(TUSB_DEVICE_STATE_CONFIGURED, tusbh_device_status_get(device_hdl), TUSB_ERROR_DEVICE_NOT_READY); ASSERT_PTR(report, TUSB_ERROR_INVALID_PARA); ASSERT(instance_num < TUSB_CFG_HOST_HID_KEYBOARD_NO_INSTANCES_PER_DEVICE, TUSB_ERROR_INVALID_PARA); @@ -82,7 +82,7 @@ tusb_error_t tusbh_hid_keyboard_get(tusb_handle_device_t const device_hdl, uint8 uint8_t tusbh_hid_keyboard_no_instances(tusb_handle_device_t const device_hdl) { - ASSERT_INT(TUSB_DEVICE_STATE_READY, tusbh_device_status_get(device_hdl), 0); + ASSERT_INT(TUSB_DEVICE_STATE_CONFIGURED, tusbh_device_status_get(device_hdl), 0); return keyboard_info_pool[device_hdl].instance_count; } diff --git a/tinyusb/core/tusb_types.h b/tinyusb/core/tusb_types.h index 1d69b9326..d9750c279 100644 --- a/tinyusb/core/tusb_types.h +++ b/tinyusb/core/tusb_types.h @@ -153,6 +153,17 @@ enum { #define TUSB_DESC_CONFIG_POWER_MA(x) ((x)/2) +/// Device State +enum tusb_device_state_{ + TUSB_DEVICE_STATE_UNPLUG = 0 , + TUSB_DEVICE_STATE_ADDRESSED , + + TUSB_DEVICE_STATE_CONFIGURED , + + TUSB_DEVICE_STATE_REMOVING , + TUSB_DEVICE_STATE_SAFE_REMOVE , +}; + #ifdef __cplusplus } #endif diff --git a/tinyusb/host/ehci/ehci.c b/tinyusb/host/ehci/ehci.c index f0a69b6a2..e24548bc1 100644 --- a/tinyusb/host/ehci/ehci.c +++ b/tinyusb/host/ehci/ehci.c @@ -166,8 +166,8 @@ void async_advance_isr(ehci_qhd_t * const async_head) p_control_qhd->used = 0; p_control_qhd->p_qtd_list_head = p_control_qhd->p_qtd_list_tail = NULL; - // TODO abstract: Host Controller has cleaned up its data for this device, notify usbh - usbh_device_hcd_data_cleaned_up_cb(relative_dev_addr+1); + // Host Controller has cleaned up its cached data for this device, set state to unplug + usbh_device_info_pool[relative_dev_addr+1].state = TUSB_DEVICE_STATE_UNPLUG; } // check if any other endpoints in pool is removing diff --git a/tinyusb/host/usbh.c b/tinyusb/host/usbh.c index 542089748..f20123963 100644 --- a/tinyusb/host/usbh.c +++ b/tinyusb/host/usbh.c @@ -226,16 +226,11 @@ void usbh_device_unplugged_isr(uint8_t hostid) usbh_pipe_control_close(dev_addr); - // set to REMOVING to end wait for HCD to clean up its cached data for this device + // set to REMOVING to allow HCD to clean up its cached data for this device + // HCD must set this device's state to TUSB_DEVICE_STATE_UNPLUG when done usbh_device_info_pool[dev_addr].state = TUSB_DEVICE_STATE_REMOVING; } -// HCD cleaned up cached data for this device -void usbh_device_hcd_data_cleaned_up_cb(uint8_t dev_addr) -{ - usbh_device_info_pool[dev_addr].state = TUSB_DEVICE_STATE_UNPLUG; -} - //--------------------------------------------------------------------+ // ENUMERATION TASK //--------------------------------------------------------------------+ @@ -409,7 +404,7 @@ OSAL_TASK_DECLARE(usbh_enumeration_task) ) ); - usbh_device_info_pool[new_addr].state = TUSB_DEVICE_STATE_READY; + usbh_device_info_pool[new_addr].state = TUSB_DEVICE_STATE_CONFIGURED; tusbh_device_mount_succeed_cb(new_addr); // TODO invoke mounted callback diff --git a/tinyusb/host/usbh.h b/tinyusb/host/usbh.h index 77a6ebe5d..1dae917f6 100644 --- a/tinyusb/host/usbh.h +++ b/tinyusb/host/usbh.h @@ -93,17 +93,6 @@ // TUSB_CLASS_APPLICATION_SPECIFIC = 0xEF , // TUSB_CLASS_VENDOR_SPECIFIC = 0xFF -/// Device Status -enum tusbh_device_status_{ - TUSB_DEVICE_STATE_UNPLUG = 0, - TUSB_DEVICE_STATE_ADDRESSED, - - TUSB_DEVICE_STATE_READY, /* Configured */ - - TUSB_DEVICE_STATE_REMOVING, - TUSB_DEVICE_STATE_SAFE_REMOVE, -}; - typedef enum { PIPE_STATUS_AVAILABLE = 0, PIPE_STATUS_BUSY, diff --git a/tinyusb/host/usbh_hcd.h b/tinyusb/host/usbh_hcd.h index 7722fbf21..bd0d09c55 100644 --- a/tinyusb/host/usbh_hcd.h +++ b/tinyusb/host/usbh_hcd.h @@ -92,6 +92,7 @@ typedef struct { // TODO internal structure, re-order members uint8_t state; // value from enum tusbh_device_status_ + //------------- control pipe -------------// tusb_std_request_t control_request; OSAL_SEM_DEF(semaphore); osal_semaphore_handle_t sem_hdl; @@ -103,7 +104,6 @@ extern usbh_device_info_t usbh_device_info_pool[TUSB_CFG_HOST_DEVICE_MAX+1]; // void usbh_isr(pipe_handle_t pipe_hdl, uint8_t class_code); void usbh_device_plugged_isr(uint8_t hostid, tusb_speed_t speed); void usbh_device_unplugged_isr(uint8_t hostid); -void usbh_device_hcd_data_cleaned_up_cb(uint8_t dev_addr); // hcd called this function when it cleaned all its cached data for this device #ifdef __cplusplus }