summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/test/host/ehci/test_ehci_pipe.c62
-rw-r--r--tinyusb/host/ehci/ehci.c3
2 files changed, 36 insertions, 29 deletions
diff --git a/tests/test/host/ehci/test_ehci_pipe.c b/tests/test/host/ehci/test_ehci_pipe.c
index a1c2a3c7b..124adf63d 100644
--- a/tests/test/host/ehci/test_ehci_pipe.c
+++ b/tests/test/host/ehci/test_ehci_pipe.c
@@ -104,9 +104,6 @@ void tearDown(void)
{
}
-//--------------------------------------------------------------------+
-// CONTROL PIPE
-//--------------------------------------------------------------------+
void verify_open_qhd(ehci_qhd_t *p_qhd)
{
TEST_ASSERT_EQUAL(dev_addr, p_qhd->device_address);
@@ -117,36 +114,15 @@ void verify_open_qhd(ehci_qhd_t *p_qhd)
TEST_ASSERT_EQUAL(1, p_qhd->mult);
TEST_ASSERT(p_qhd->qtd_overlay.next.terminate);
TEST_ASSERT(p_qhd->qtd_overlay.alternate.terminate);
- TEST_ASSERT(p_qhd->qtd_overlay.halted);
//------------- HCD -------------//
TEST_ASSERT(p_qhd->used);
TEST_ASSERT_NULL(p_qhd->p_qtd_list);
}
-void verify_bulk_open_qhd(ehci_qhd_t *p_qhd, tusb_descriptor_endpoint_t const * desc_endpoint)
-{
- verify_open_qhd(p_qhd);
-
- TEST_ASSERT_FALSE(p_qhd->head_list_flag);
- TEST_ASSERT_EQUAL(desc_endpoint->wMaxPacketSize, p_qhd->max_package_size);
- TEST_ASSERT_EQUAL(desc_endpoint->bEndpointAddress & 0x0F, p_qhd->endpoint_number);
- TEST_ASSERT_EQUAL(0, p_qhd->data_toggle_control);
- TEST_ASSERT_EQUAL(0, p_qhd->smask);
- TEST_ASSERT_EQUAL(0, p_qhd->cmask);
- TEST_ASSERT_FALSE(p_qhd->non_hs_control_endpoint);
- TEST_ASSERT_EQUAL(usbh_device_info_pool[dev_addr].speed, p_qhd->endpoint_speed);
-
- // TEST_ASSERT_EQUAL(desc_endpoint->bInterval); TEST highspeed bulk/control OUT
-
- TEST_ASSERT_EQUAL(desc_endpoint->bEndpointAddress & 0x80 ? EHCI_PID_IN : EHCI_PID_OUT, p_qhd->pid_non_control);
-
- //------------- async list check -------------//
- TEST_ASSERT_EQUAL_HEX((uint32_t) p_qhd, align32(async_head->next.address));
- TEST_ASSERT_FALSE(async_head->next.terminate);
- TEST_ASSERT_EQUAL(EHCI_QUEUE_ELEMENT_QHD, async_head->next.type);
-}
-
+//--------------------------------------------------------------------+
+// CONTROL PIPE
+//--------------------------------------------------------------------+
void verify_control_open_qhd(ehci_qhd_t *p_qhd)
{
verify_open_qhd(p_qhd);
@@ -212,6 +188,29 @@ void test_control_open_non_highspeed(void)
//--------------------------------------------------------------------+
// BULK PIPE
//--------------------------------------------------------------------+
+void verify_bulk_open_qhd(ehci_qhd_t *p_qhd, tusb_descriptor_endpoint_t const * desc_endpoint)
+{
+ verify_open_qhd(p_qhd);
+
+ TEST_ASSERT_FALSE(p_qhd->head_list_flag);
+ TEST_ASSERT_EQUAL(desc_endpoint->wMaxPacketSize, p_qhd->max_package_size);
+ TEST_ASSERT_EQUAL(desc_endpoint->bEndpointAddress & 0x0F, p_qhd->endpoint_number);
+ TEST_ASSERT_EQUAL(0, p_qhd->data_toggle_control);
+ TEST_ASSERT_EQUAL(0, p_qhd->smask);
+ TEST_ASSERT_EQUAL(0, p_qhd->cmask);
+ TEST_ASSERT_FALSE(p_qhd->non_hs_control_endpoint);
+ TEST_ASSERT_EQUAL(usbh_device_info_pool[dev_addr].speed, p_qhd->endpoint_speed);
+
+ // TEST_ASSERT_EQUAL(desc_endpoint->bInterval); TEST highspeed bulk/control OUT
+
+ TEST_ASSERT_EQUAL(desc_endpoint->bEndpointAddress & 0x80 ? EHCI_PID_IN : EHCI_PID_OUT, p_qhd->pid_non_control);
+
+ //------------- async list check -------------//
+ TEST_ASSERT_EQUAL_HEX((uint32_t) p_qhd, align32(async_head->next.address));
+ TEST_ASSERT_FALSE(async_head->next.terminate);
+ TEST_ASSERT_EQUAL(EHCI_QUEUE_ELEMENT_QHD, async_head->next.type);
+}
+
void test_open_bulk_qhd_data(void)
{
ehci_qhd_t *p_qhd;
@@ -229,3 +228,12 @@ void test_open_bulk_qhd_data(void)
TEST_ASSERT_EQUAL(EHCI_QUEUE_ELEMENT_QHD, async_head->next.type);
}
+//--------------------------------------------------------------------+
+// CONTROL TRANSFER
+//--------------------------------------------------------------------+
+void test_control_xfer(void)
+{
+
+}
+
+
diff --git a/tinyusb/host/ehci/ehci.c b/tinyusb/host/ehci/ehci.c
index 8d9f81fe4..58b6c5aba 100644
--- a/tinyusb/host/ehci/ehci.c
+++ b/tinyusb/host/ehci/ehci.c
@@ -259,7 +259,7 @@ static void queue_head_init(ehci_qhd_t *p_qhd, uint8_t dev_addr, uint16_t max_pa
p_qhd->data_toggle_control = (xfer_type == TUSB_XFER_CONTROL) ? 1 : 0;
p_qhd->head_list_flag = (dev_addr == 0) ? 1 : 0; // addr0's endpoint is the static asyn list head
p_qhd->max_package_size = max_packet_size;
- p_qhd->non_hs_control_endpoint = ((endpoint_addr == 0) && (usbh_device_info_pool[dev_addr].speed != TUSB_SPEED_HIGH) ) ? 1 : 0;
+ p_qhd->non_hs_control_endpoint = ((TUSB_XFER_CONTROL == xfer_type) && (usbh_device_info_pool[dev_addr].speed != TUSB_SPEED_HIGH) ) ? 1 : 0;
p_qhd->nak_count_reload = 0;
p_qhd->smask = 0;
@@ -271,7 +271,6 @@ static void queue_head_init(ehci_qhd_t *p_qhd, uint8_t dev_addr, uint16_t max_pa
//------------- inactive when just opened -------------//
p_qhd->qtd_overlay.next.terminate = 1;
p_qhd->qtd_overlay.alternate.terminate = 1;
- p_qhd->qtd_overlay.halted = 1;
//------------- HCD Management Data -------------//
p_qhd->used = 1;