mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-17 05:32:55 +08:00
refactor hcd api
This commit is contained in:
parent
607658d047
commit
d3ac4c14a3
@ -609,10 +609,10 @@ static void port_connect_status_change_isr(uint8_t hostid)
|
|||||||
if (regs->portsc_bit.current_connect_status)
|
if (regs->portsc_bit.current_connect_status)
|
||||||
{
|
{
|
||||||
hcd_port_reset(hostid);
|
hcd_port_reset(hostid);
|
||||||
usbh_hcd_rhport_plugged_isr(hostid);
|
hcd_event_device_attach(hostid);
|
||||||
}else // device unplugged
|
}else // device unplugged
|
||||||
{
|
{
|
||||||
usbh_hcd_rhport_unplugged_isr(hostid);
|
hcd_event_device_remove(hostid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,6 +121,12 @@ void hcd_int_disable(uint8_t rhport);
|
|||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
void hcd_event_handler(hcd_event_t const* event, bool in_isr);
|
void hcd_event_handler(hcd_event_t const* event, bool in_isr);
|
||||||
|
|
||||||
|
// Helper to send device attach event
|
||||||
|
void hcd_event_device_attach(uint8_t rhport);
|
||||||
|
|
||||||
|
// Helper to send device removal event
|
||||||
|
void hcd_event_device_remove(uint8_t hostid);
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Endpoints API
|
// Endpoints API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
@ -745,10 +745,10 @@ void hal_hcd_isr(uint8_t hostid)
|
|||||||
{
|
{
|
||||||
// TODO reset port immediately, without this controller will got 2-3 (debouncing connection status change)
|
// TODO reset port immediately, without this controller will got 2-3 (debouncing connection status change)
|
||||||
OHCI_REG->rhport_status[0] = OHCI_RHPORT_PORT_RESET_STATUS_MASK;
|
OHCI_REG->rhport_status[0] = OHCI_RHPORT_PORT_RESET_STATUS_MASK;
|
||||||
usbh_hcd_rhport_plugged_isr(0);
|
hcd_event_device_attach(0);
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
usbh_hcd_rhport_unplugged_isr(0);
|
hcd_event_device_remove(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -305,11 +305,11 @@ void usbh_hub_port_plugged_isr(uint8_t hub_addr, uint8_t hub_port)
|
|||||||
hcd_event_handler(&event, true);
|
hcd_event_handler(&event, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void usbh_hcd_rhport_plugged_isr(uint8_t hostid)
|
void hcd_event_device_attach(uint8_t rhport)
|
||||||
{
|
{
|
||||||
hcd_event_t event =
|
hcd_event_t event =
|
||||||
{
|
{
|
||||||
.rhport = hostid,
|
.rhport = rhport,
|
||||||
.event_id = HCD_EVENT_DEVICE_ATTACH
|
.event_id = HCD_EVENT_DEVICE_ATTACH
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -329,6 +329,21 @@ void hcd_event_handler(hcd_event_t const* event, bool in_isr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hcd_event_device_remove(uint8_t hostid)
|
||||||
|
{
|
||||||
|
hcd_event_t event =
|
||||||
|
{
|
||||||
|
.rhport = hostid,
|
||||||
|
.event_id = HCD_EVENT_DEVICE_REMOVE
|
||||||
|
};
|
||||||
|
|
||||||
|
event.attach.hub_addr = 0;
|
||||||
|
event.attach.hub_port = 0;
|
||||||
|
|
||||||
|
hcd_event_handler(&event, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// a device unplugged on hostid, hub_addr, hub_port
|
// a device unplugged on hostid, hub_addr, hub_port
|
||||||
// return true if found and unmounted device, false if cannot find
|
// return true if found and unmounted device, false if cannot find
|
||||||
static void usbh_device_unplugged(uint8_t hostid, uint8_t hub_addr, uint8_t hub_port)
|
static void usbh_device_unplugged(uint8_t hostid, uint8_t hub_addr, uint8_t hub_port)
|
||||||
@ -369,20 +384,6 @@ static void usbh_device_unplugged(uint8_t hostid, uint8_t hub_addr, uint8_t hub_
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void usbh_hcd_rhport_unplugged_isr(uint8_t hostid)
|
|
||||||
{
|
|
||||||
hcd_event_t event =
|
|
||||||
{
|
|
||||||
.rhport = hostid,
|
|
||||||
.event_id = HCD_EVENT_DEVICE_REMOVE
|
|
||||||
};
|
|
||||||
|
|
||||||
event.attach.hub_addr = 0;
|
|
||||||
event.attach.hub_port = 0;
|
|
||||||
|
|
||||||
hcd_event_handler(&event, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// ENUMERATION TASK
|
// ENUMERATION TASK
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
@ -94,8 +94,7 @@ extern usbh_device_t _usbh_devices[CFG_TUSB_HOST_DEVICE_MAX+1]; // including zer
|
|||||||
// callback from HCD ISR
|
// callback from HCD ISR
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
void usbh_xfer_isr(pipe_handle_t pipe_hdl, uint8_t class_code, xfer_result_t event, uint32_t xferred_bytes);
|
void usbh_xfer_isr(pipe_handle_t pipe_hdl, uint8_t class_code, xfer_result_t event, uint32_t xferred_bytes);
|
||||||
void usbh_hcd_rhport_plugged_isr(uint8_t hostid);
|
|
||||||
void usbh_hcd_rhport_unplugged_isr(uint8_t hostid);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@ void tearDown(void)
|
|||||||
|
|
||||||
void test_isr_device_connect_highspeed(void)
|
void test_isr_device_connect_highspeed(void)
|
||||||
{
|
{
|
||||||
usbh_hcd_rhport_plugged_isr_Expect(hostid);
|
hcd_event_device_attach_Expect(hostid);
|
||||||
|
|
||||||
//------------- Code Under Test -------------//
|
//------------- Code Under Test -------------//
|
||||||
ehci_controller_device_plug(hostid, TUSB_SPEED_HIGH);
|
ehci_controller_device_plug(hostid, TUSB_SPEED_HIGH);
|
||||||
@ -78,7 +78,7 @@ void test_isr_device_connect_highspeed(void)
|
|||||||
|
|
||||||
void test_isr_device_connect_fullspeed(void)
|
void test_isr_device_connect_fullspeed(void)
|
||||||
{
|
{
|
||||||
usbh_hcd_rhport_plugged_isr_Expect(hostid);
|
hcd_event_device_attach_Expect(hostid);
|
||||||
|
|
||||||
//------------- Code Under Test -------------//
|
//------------- Code Under Test -------------//
|
||||||
ehci_controller_device_plug(hostid, TUSB_SPEED_FULL);
|
ehci_controller_device_plug(hostid, TUSB_SPEED_FULL);
|
||||||
@ -86,7 +86,7 @@ void test_isr_device_connect_fullspeed(void)
|
|||||||
|
|
||||||
void test_isr_device_connect_slowspeed(void)
|
void test_isr_device_connect_slowspeed(void)
|
||||||
{
|
{
|
||||||
usbh_hcd_rhport_plugged_isr_Expect(hostid);
|
hcd_event_device_attach_Expect(hostid);
|
||||||
|
|
||||||
//------------- Code Under Test -------------//
|
//------------- Code Under Test -------------//
|
||||||
ehci_controller_device_plug(hostid, TUSB_SPEED_LOW);
|
ehci_controller_device_plug(hostid, TUSB_SPEED_LOW);
|
||||||
@ -94,7 +94,7 @@ void test_isr_device_connect_slowspeed(void)
|
|||||||
|
|
||||||
void test_isr_device_disconnect(void)
|
void test_isr_device_disconnect(void)
|
||||||
{
|
{
|
||||||
usbh_hcd_rhport_unplugged_isr_Expect(hostid);
|
hcd_event_device_remove_Expect(hostid);
|
||||||
|
|
||||||
//------------- Code Under Test -------------//
|
//------------- Code Under Test -------------//
|
||||||
ehci_controller_device_unplug(hostid);
|
ehci_controller_device_unplug(hostid);
|
||||||
|
@ -142,7 +142,7 @@ void test_usbh_init_ok(void)
|
|||||||
|
|
||||||
#if 0 // TODO TEST enable this
|
#if 0 // TODO TEST enable this
|
||||||
// device is not mounted before, even the control pipe is not open, do nothing
|
// device is not mounted before, even the control pipe is not open, do nothing
|
||||||
void test_usbh_hcd_rhport_unplugged_isr_device_not_previously_mounted(void)
|
void test_hcd_event_device_remove_device_not_previously_mounted(void)
|
||||||
{
|
{
|
||||||
uint8_t dev_addr = 1;
|
uint8_t dev_addr = 1;
|
||||||
|
|
||||||
@ -151,10 +151,10 @@ void test_usbh_hcd_rhport_unplugged_isr_device_not_previously_mounted(void)
|
|||||||
_usbh_devices[dev_addr].hub_addr = 0;
|
_usbh_devices[dev_addr].hub_addr = 0;
|
||||||
_usbh_devices[dev_addr].hub_port = 0;
|
_usbh_devices[dev_addr].hub_port = 0;
|
||||||
|
|
||||||
usbh_hcd_rhport_unplugged_isr(0);
|
hcd_event_device_remove(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_usbh_hcd_rhport_unplugged_isr(void)
|
void test_hcd_event_device_remove(void)
|
||||||
{
|
{
|
||||||
uint8_t dev_addr = 1;
|
uint8_t dev_addr = 1;
|
||||||
|
|
||||||
@ -168,7 +168,7 @@ void test_usbh_hcd_rhport_unplugged_isr(void)
|
|||||||
hcd_pipe_control_close_ExpectAndReturn(dev_addr, TUSB_ERROR_NONE);
|
hcd_pipe_control_close_ExpectAndReturn(dev_addr, TUSB_ERROR_NONE);
|
||||||
|
|
||||||
//------------- Code Under Test -------------//
|
//------------- Code Under Test -------------//
|
||||||
usbh_hcd_rhport_unplugged_isr(0);
|
hcd_event_device_remove(0);
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL(TUSB_DEVICE_STATE_REMOVING, _usbh_devices[dev_addr].state);
|
TEST_ASSERT_EQUAL(TUSB_DEVICE_STATE_REMOVING, _usbh_devices[dev_addr].state);
|
||||||
}
|
}
|
||||||
@ -190,7 +190,7 @@ void test_usbh_device_unplugged_multple_class(void)
|
|||||||
hcd_pipe_control_close_ExpectAndReturn(dev_addr, TUSB_ERROR_NONE);
|
hcd_pipe_control_close_ExpectAndReturn(dev_addr, TUSB_ERROR_NONE);
|
||||||
|
|
||||||
//------------- Code Under Test -------------//
|
//------------- Code Under Test -------------//
|
||||||
usbh_hcd_rhport_unplugged_isr(0);
|
hcd_event_device_remove(0);
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL(TUSB_DEVICE_STATE_REMOVING, _usbh_devices[dev_addr].state);
|
TEST_ASSERT_EQUAL(TUSB_DEVICE_STATE_REMOVING, _usbh_devices[dev_addr].state);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user