From 1e193212d7f93a55e7ec857d0ad8dc4eaea517de Mon Sep 17 00:00:00 2001 From: Nathan Conrad Date: Wed, 2 Oct 2019 00:31:47 -0400 Subject: [PATCH] Add testcase for EP0 stall recovery to USBTMC test script. --- examples/device/usbtmc/visaQuery.py | 18 +++++++++++++++++- src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/examples/device/usbtmc/visaQuery.py b/examples/device/usbtmc/visaQuery.py index 44b5fd875..b5bf8d482 100644 --- a/examples/device/usbtmc/visaQuery.py +++ b/examples/device/usbtmc/visaQuery.py @@ -1,9 +1,10 @@ +#!/usr/bin/env python3 + import visa import time import sys - def test_idn(): idn = inst.query("*idn?"); assert (idn == "TinyUSB,ModelNumber,SerialNumber,FirmwareVer123456\r\n") @@ -129,6 +130,18 @@ def test_multi_read(): assert (x + "\r\n" == y) #inst.chunk_size = old_chunk_size +def test_stall_ep0(): + usb_iface = inst.get_visa_attribute(visa.constants.VI_ATTR_USB_INTFC_NUM) + inst.read_stb() + # This is an invalid request, should create stall. + try: + retv = inst.control_in(request_type_bitmap_field=0xA1, request_id=60, request_value=0x0000, index=usb_iface, length=0x0001) + assert false + except visa.VisaIOError: + pass + + assert (inst.read_stb() == 0) + rm = visa.ResourceManager("/c/Windows/system32/visa64.dll") reslist = rm.list_resources("USB?::?*::INSTR") @@ -171,6 +184,9 @@ test_echo(165,170) print("+ Read timeout (no MAV)") test_read_timeout() +print("+ Test EP0 stall recovery") +test_stall_ep0() + print("+ MAV") test_mav() diff --git a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c index 1fd3e8bae..c33f9b865 100644 --- a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c +++ b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c @@ -418,7 +418,7 @@ static uint16_t dcd_ep_ctr_handler(void) uint8_t userMemBuf[8]; /* Get SETUP Packet*/ count = pcd_get_ep_rx_cnt(USB, EPindex); - if(count == 8) // Setup packet should always be 8 bits. If not, ignore it, and try again. + if(count == 8) // Setup packet should always be 8 bytes. If not, ignore it, and try again. { // Must reset EP to NAK (in case it had been stalling) (though, maybe too late here) pcd_set_ep_rx_status(USB,0u,USB_EP_RX_NAK);