mirror of
https://github.com/hathach/tinyusb.git
synced 2025-02-21 03:40:52 +00:00
Add testcase for aborting bulk in with no data queued (and fix aborting bulk in)
This commit is contained in:
parent
0f1435177b
commit
346443118f
@ -203,7 +203,7 @@ void usbtmc_app_task_iter(void) {
|
|||||||
|
|
||||||
if(idnQuery)
|
if(idnQuery)
|
||||||
{
|
{
|
||||||
usbtmcd_transmit_dev_msg_data(rhport, idn, tu_min32(sizeof(idn)-1,msgReqLen),false);
|
usbtmcd_transmit_dev_msg_data(rhport, idn, tu_min32(sizeof(idn)-1,msgReqLen),false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -3,6 +3,7 @@ import time
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_idn():
|
def test_idn():
|
||||||
idn = inst.query("*idn?");
|
idn = inst.query("*idn?");
|
||||||
assert idn == "TinyUSB,ModelNumber,SerialNumber,FirmwareVer123456\r\n"
|
assert idn == "TinyUSB,ModelNumber,SerialNumber,FirmwareVer123456\r\n"
|
||||||
@ -60,6 +61,24 @@ def test_srq():
|
|||||||
rsp = inst.read()
|
rsp = inst.read()
|
||||||
assert(rsp == "123\r\n")
|
assert(rsp == "123\r\n")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def test_read_timeout():
|
||||||
|
inst.timeout = 500
|
||||||
|
# First read with no MAV
|
||||||
|
inst.read_stb()
|
||||||
|
assert (inst.read_stb() == 0)
|
||||||
|
inst.write("delay 500")
|
||||||
|
t0 = time.time()
|
||||||
|
try:
|
||||||
|
rsp = inst.read()
|
||||||
|
assert(false), "Read should have resulted in timeout"
|
||||||
|
except visa.VisaIOError:
|
||||||
|
print("Got expected exception")
|
||||||
|
t = time.time() - t0
|
||||||
|
assert ((t*1000.0) > (inst.timeout - 300))
|
||||||
|
assert ((t*1000.0) < (inst.timeout + 300))
|
||||||
|
print(f"Delay was {t}")
|
||||||
|
|
||||||
rm = visa.ResourceManager("/c/Windows/system32/visa64.dll")
|
rm = visa.ResourceManager("/c/Windows/system32/visa64.dll")
|
||||||
reslist = rm.list_resources("USB?::?*::INSTR")
|
reslist = rm.list_resources("USB?::?*::INSTR")
|
||||||
@ -72,8 +91,11 @@ inst = rm.open_resource(reslist[0]);
|
|||||||
inst.timeout = 3000
|
inst.timeout = 3000
|
||||||
inst.clear()
|
inst.clear()
|
||||||
|
|
||||||
#print("+ IDN")
|
print("+ IDN")
|
||||||
#test_idn()
|
test_idn()
|
||||||
|
|
||||||
|
inst.timeout = 3000
|
||||||
|
|
||||||
|
|
||||||
print("+ echo delay=0")
|
print("+ echo delay=0")
|
||||||
inst.write("delay 0")
|
inst.write("delay 0")
|
||||||
@ -88,6 +110,9 @@ inst.write("delay 150")
|
|||||||
test_echo(53,76)
|
test_echo(53,76)
|
||||||
test_echo(165,170)
|
test_echo(165,170)
|
||||||
|
|
||||||
|
print("+ Read timeout (no MAV")
|
||||||
|
test_read_timeout()
|
||||||
|
|
||||||
print("+ MAV")
|
print("+ MAV")
|
||||||
test_mav()
|
test_mav()
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ typedef enum
|
|||||||
STATE_CLEARING,
|
STATE_CLEARING,
|
||||||
STATE_ABORTING_BULK_IN,
|
STATE_ABORTING_BULK_IN,
|
||||||
STATE_ABORTING_BULK_IN_SHORTED, // aborting, and short packet has been queued for transmission
|
STATE_ABORTING_BULK_IN_SHORTED, // aborting, and short packet has been queued for transmission
|
||||||
STATE_ABORTING_BULK_IN_ABORTED, // aborting, and short packet has been queued for transmission
|
STATE_ABORTING_BULK_IN_ABORTED, // aborting, and short packet has been transmitted
|
||||||
STATE_ABORTING_BULK_OUT,
|
STATE_ABORTING_BULK_OUT,
|
||||||
STATE_NUM_STATES
|
STATE_NUM_STATES
|
||||||
} usbtmcd_state_enum;
|
} usbtmcd_state_enum;
|
||||||
@ -384,6 +384,7 @@ static bool handle_devMsgIn(uint8_t rhport, void *data, size_t len)
|
|||||||
usbtmc_state.state = STATE_TX_REQUESTED;
|
usbtmc_state.state = STATE_TX_REQUESTED;
|
||||||
usbtmc_state.lastBulkInTag = msg->header.bTag;
|
usbtmc_state.lastBulkInTag = msg->header.bTag;
|
||||||
usbtmc_state.transfer_size_remaining = msg->TransferSize;
|
usbtmc_state.transfer_size_remaining = msg->TransferSize;
|
||||||
|
usbtmc_state.transfer_size_sent = 0u;
|
||||||
}
|
}
|
||||||
criticalLeave();
|
criticalLeave();
|
||||||
|
|
||||||
@ -612,8 +613,14 @@ bool usbtmcd_control_request(uint8_t rhport, tusb_control_request_t const * requ
|
|||||||
rsp.USBTMC_status = USBTMC_STATUS_SUCCESS;
|
rsp.USBTMC_status = USBTMC_STATUS_SUCCESS;
|
||||||
usbtmc_state.transfer_size_remaining = 0;
|
usbtmc_state.transfer_size_remaining = 0;
|
||||||
// Check if we've queued a short packet
|
// Check if we've queued a short packet
|
||||||
usbtmc_state.state = ((usbtmc_state.transfer_size_sent % USBTMCD_MAX_PACKET_SIZE) != 0) ?
|
usbtmc_state.state = ((usbtmc_state.transfer_size_sent % USBTMCD_MAX_PACKET_SIZE) == 0) ?
|
||||||
STATE_ABORTING_BULK_IN : STATE_ABORTING_BULK_IN_SHORTED;
|
STATE_ABORTING_BULK_IN : STATE_ABORTING_BULK_IN_SHORTED;
|
||||||
|
if(usbtmc_state.transfer_size_sent == 0)
|
||||||
|
{
|
||||||
|
// Send short packet, nothing is in the buffer yet
|
||||||
|
TU_VERIFY( usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf,(uint16_t)0u));
|
||||||
|
usbtmc_state.state = STATE_ABORTING_BULK_IN_SHORTED;
|
||||||
|
}
|
||||||
TU_VERIFY(usbtmcd_app_initiate_abort_bulk_in(rhport, &(rsp.USBTMC_status)));
|
TU_VERIFY(usbtmcd_app_initiate_abort_bulk_in(rhport, &(rsp.USBTMC_status)));
|
||||||
}
|
}
|
||||||
else if((usbtmc_state.state == STATE_TX_REQUESTED || usbtmc_state.state == STATE_TX_INITIATED))
|
else if((usbtmc_state.state == STATE_TX_REQUESTED || usbtmc_state.state == STATE_TX_INITIATED))
|
||||||
@ -638,7 +645,7 @@ bool usbtmcd_control_request(uint8_t rhport, tusb_control_request_t const * requ
|
|||||||
.USBTMC_status = USBTMC_STATUS_FAILED,
|
.USBTMC_status = USBTMC_STATUS_FAILED,
|
||||||
.bmAbortBulkIn =
|
.bmAbortBulkIn =
|
||||||
{
|
{
|
||||||
.BulkInFifoBytes = (usbtmc_state.state == STATE_ABORTING_BULK_IN_ABORTED)
|
.BulkInFifoBytes = (usbtmc_state.state != STATE_ABORTING_BULK_IN_ABORTED)
|
||||||
},
|
},
|
||||||
.NBYTES_RXD_TXD = usbtmc_state.transfer_size_sent,
|
.NBYTES_RXD_TXD = usbtmc_state.transfer_size_sent,
|
||||||
};
|
};
|
||||||
@ -647,6 +654,7 @@ bool usbtmcd_control_request(uint8_t rhport, tusb_control_request_t const * requ
|
|||||||
{
|
{
|
||||||
case STATE_ABORTING_BULK_IN_ABORTED:
|
case STATE_ABORTING_BULK_IN_ABORTED:
|
||||||
rsp.USBTMC_status = USBTMC_STATUS_SUCCESS;
|
rsp.USBTMC_status = USBTMC_STATUS_SUCCESS;
|
||||||
|
usbtmc_state.state = STATE_IDLE;
|
||||||
break;
|
break;
|
||||||
case STATE_ABORTING_BULK_IN:
|
case STATE_ABORTING_BULK_IN:
|
||||||
case STATE_ABORTING_BULK_OUT:
|
case STATE_ABORTING_BULK_OUT:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user