summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2019-10-31 16:42:51 +0700
committerhathach <[email protected]>2019-10-31 16:42:51 +0700
commit6067adcd08df5eabcfb99cd62611835dc1738c90 (patch)
tree7d0356b9619eda96cdd69dc05efcddd5390065ba
parent6de9eb4b1a6bb84832ce4a55f050763d05f8a6b3 (diff)
adeded tests for zlp
-rw-r--r--test/test/device/usbd/test_usbd.c63
-rw-r--r--test/test/support/tusb_config.h11
2 files changed, 61 insertions, 13 deletions
diff --git a/test/test/device/usbd/test_usbd.c b/test/test/device/usbd/test_usbd.c
index b58a79a8f..ea813ea43 100644
--- a/test/test/device/usbd/test_usbd.c
+++ b/test/test/device/usbd/test_usbd.c
@@ -38,6 +38,12 @@ TEST_FILE("usbd_control.c")
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+
+enum
+{
+ EDPT_CTRL_OUT = 0x00,
+ EDPT_CTRL_IN = 0x80
+};
+
uint8_t const rhport = 0;
tusb_desc_device_t const data_desc_device =
@@ -136,7 +142,12 @@ void test_usbd_get_device_descriptor(void)
desc_device = (uint8_t const *) &data_desc_device;
dcd_event_setup_received(rhport, (uint8_t*) &req_get_desc_device, false);
+ // data
dcd_edpt_xfer_ExpectWithArrayAndReturn(rhport, 0x80, (uint8_t*)&data_desc_device, sizeof(tusb_desc_device_t), sizeof(tusb_desc_device_t), true);
+ dcd_event_xfer_complete(rhport, EDPT_CTRL_IN, sizeof(tusb_desc_device_t), 0, false);
+
+ // status
+ dcd_edpt_xfer_ExpectAndReturn(rhport, EDPT_CTRL_OUT, NULL, 0, true);
tud_task();
}
@@ -147,8 +158,8 @@ void test_usbd_get_device_descriptor_null(void)
dcd_event_setup_received(rhport, (uint8_t*) &req_get_desc_device, false);
- dcd_edpt_stall_Expect(rhport, 0);
- dcd_edpt_stall_Expect(rhport, 0x80);
+ dcd_edpt_stall_Expect(rhport, EDPT_CTRL_OUT);
+ dcd_edpt_stall_Expect(rhport, EDPT_CTRL_IN);
tud_task();
}
@@ -162,7 +173,12 @@ void test_usbd_get_configuration_descriptor(void)
dcd_event_setup_received(rhport, (uint8_t*) &req_get_desc_configuration, false);
+ // data
dcd_edpt_xfer_ExpectWithArrayAndReturn(rhport, 0x80, (uint8_t*) data_desc_configuration, total_len, total_len, true);
+ dcd_event_xfer_complete(rhport, EDPT_CTRL_IN, total_len, 0, false);
+
+ // status
+ dcd_edpt_xfer_ExpectAndReturn(rhport, EDPT_CTRL_OUT, NULL, 0, true);
tud_task();
}
@@ -172,8 +188,8 @@ void test_usbd_get_configuration_descriptor_null(void)
desc_configuration = NULL;
dcd_event_setup_received(rhport, (uint8_t*) &req_get_desc_configuration, false);
- dcd_edpt_stall_Expect(rhport, 0);
- dcd_edpt_stall_Expect(rhport, 0x80);
+ dcd_edpt_stall_Expect(rhport, EDPT_CTRL_OUT);
+ dcd_edpt_stall_Expect(rhport, EDPT_CTRL_IN);
tud_task();
}
@@ -182,7 +198,38 @@ void test_usbd_get_configuration_descriptor_null(void)
// Control ZLP
//--------------------------------------------------------------------+
-//void test_control_zlp(void)
-//{
-//
-//}
+void test_usbd_control_zlp(void)
+{
+ // 128 byte total len, with EP0 size = 64, and request length = 256
+ // ZLP must be return
+ uint8_t zlp_desc_configuration[] =
+ {
+ // Interface count, string index, total length, attribute, power in mA
+ TUD_CONFIG_DESCRIPTOR(0, 0, CFG_TUD_ENDOINT0_SIZE*2, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100),
+ };
+
+ desc_configuration = zlp_desc_configuration;
+
+ // request, then 1st, 2nd xact + ZLP + status
+ dcd_event_setup_received(rhport, (uint8_t*) &req_get_desc_configuration, false);
+
+ // 1st transaction
+ dcd_edpt_xfer_ExpectWithArrayAndReturn(rhport, EDPT_CTRL_IN,
+ zlp_desc_configuration, CFG_TUD_ENDOINT0_SIZE, CFG_TUD_ENDOINT0_SIZE, true);
+ dcd_event_xfer_complete(rhport, EDPT_CTRL_IN, CFG_TUD_ENDOINT0_SIZE, 0, false);
+
+ // 2nd transaction
+ dcd_edpt_xfer_ExpectWithArrayAndReturn(rhport, EDPT_CTRL_IN,
+ zlp_desc_configuration + CFG_TUD_ENDOINT0_SIZE, CFG_TUD_ENDOINT0_SIZE, CFG_TUD_ENDOINT0_SIZE, true);
+ dcd_event_xfer_complete(rhport, EDPT_CTRL_IN, CFG_TUD_ENDOINT0_SIZE, 0, false);
+
+ // Expect Zero length Packet
+ dcd_edpt_xfer_ExpectAndReturn(rhport, EDPT_CTRL_IN, NULL, 0, true);
+ dcd_event_xfer_complete(rhport, EDPT_CTRL_IN, 0, 0, false);
+
+ // Status
+ dcd_edpt_xfer_ExpectAndReturn(rhport, EDPT_CTRL_OUT, NULL, 0, true);
+ dcd_event_xfer_complete(rhport, EDPT_CTRL_OUT, 0, 0, false);
+
+ tud_task();
+}
diff --git a/test/test/support/tusb_config.h b/test/test/support/tusb_config.h
index bfe5bf9e9..e0ab0c68b 100644
--- a/test/test/support/tusb_config.h
+++ b/test/test/support/tusb_config.h
@@ -41,15 +41,15 @@
#endif
#if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX
-#define CFG_TUSB_RHPORT0_MODE (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED)
+#define CFG_TUSB_RHPORT0_MODE (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED)
#else
-#define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE
+#define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE
#endif
-#define CFG_TUSB_OS OPT_OS_NONE
+#define CFG_TUSB_OS OPT_OS_NONE
// CFG_TUSB_DEBUG is defined by compiler in DEBUG build
-// #define CFG_TUSB_DEBUG 0
+#define CFG_TUSB_DEBUG 0
/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment.
* Tinyusb use follows macros to declare transferring memory so that they can be put
@@ -63,13 +63,14 @@
#endif
#ifndef CFG_TUSB_MEM_ALIGN
-#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4)))
+#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4)))
#endif
//--------------------------------------------------------------------
// DEVICE CONFIGURATION
//--------------------------------------------------------------------
+#define CFG_TUD_TASK_QUEUE_SZ 100
#define CFG_TUD_ENDOINT0_SIZE 64
//------------- CLASS -------------//