summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNathan Conrad <[email protected]>2019-09-18 21:31:38 -0400
committerNathan Conrad <[email protected]>2019-09-18 21:34:26 -0400
commit9a726dc7ed9af8f9b035b18a667105a48d8d6d8a (patch)
tree540f08c113c07f99037275c05be7f45ea7d1ae07 /src
parent99d03fcaee64104df96e332a2347aa7ecc1b6172 (diff)
More fixes, and a bit of SRQ.
Diffstat (limited to 'src')
-rw-r--r--src/class/usbtmc/usbtmc_device.c44
1 files changed, 23 insertions, 21 deletions
diff --git a/src/class/usbtmc/usbtmc_device.c b/src/class/usbtmc/usbtmc_device.c
index 0f14fdfb4..27876852d 100644
--- a/src/class/usbtmc/usbtmc_device.c
+++ b/src/class/usbtmc/usbtmc_device.c
@@ -371,6 +371,7 @@ static bool handle_devMsgOut(uint8_t rhport, void *data, size_t len, size_t pack
len = usbtmc_state.transfer_size_remaining;
usbtmcd_app_msg_data(rhport,data, len, atEnd);
+ usbtmc_state.transfer_size_remaining -= len;
usbtmc_state.transfer_size_sent += len;
if(atEnd)
{
@@ -476,11 +477,12 @@ bool usbtmcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint
case STATE_RCV:
TU_VERIFY(handle_devMsgOut(rhport, usbtmc_state.ep_bulk_out_buf, xferred_bytes, xferred_bytes));
+ TU_VERIFY(usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_out, usbtmc_state.ep_bulk_out_buf, USBTMCD_MAX_PACKET_SIZE));
return true;
case STATE_ABORTING_BULK_OUT:
TU_VERIFY(false);
- return false; // Shold be stalled by now...
+ return false; // Should be stalled by now...
case STATE_TX_REQUESTED:
case STATE_TX_INITIATED:
case STATE_ABORTING_BULK_IN:
@@ -516,32 +518,32 @@ bool usbtmcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint
case STATE_TX_INITIATED:
if(usbtmc_state.transfer_size_remaining >=sizeof(usbtmc_state.ep_bulk_in_buf))
- {
+ {
TRACE("IN TX continuing\r\n");
- memcpy(usbtmc_state.ep_bulk_in_buf, usbtmc_state.devInBuffer, sizeof(usbtmc_state.ep_bulk_in_buf));
- usbtmc_state.devInBuffer += sizeof(usbtmc_state.devInBuffer);
- usbtmc_state.transfer_size_remaining -= sizeof(usbtmc_state.devInBuffer);
+ memcpy(usbtmc_state.ep_bulk_in_buf, usbtmc_state.devInBuffer, sizeof(usbtmc_state.ep_bulk_in_buf));
+ usbtmc_state.devInBuffer += sizeof(usbtmc_state.devInBuffer);
+ usbtmc_state.transfer_size_remaining -= sizeof(usbtmc_state.devInBuffer);
usbtmc_state.transfer_size_sent += sizeof(usbtmc_state.devInBuffer);
- TU_VERIFY( usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf,sizeof(usbtmc_state.devInBuffer)));
- }
- else // last packet
- {
+ TU_VERIFY( usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf,sizeof(usbtmc_state.devInBuffer)));
+ }
+ else // last packet
+ {
TRACE("IN TX last packet\r\n");
- size_t packetLen = usbtmc_state.transfer_size_remaining;
- memcpy(usbtmc_state.ep_bulk_in_buf, usbtmc_state.devInBuffer, usbtmc_state.transfer_size_remaining);
- while((packetLen % 4) != 0)
- {
+ size_t packetLen = usbtmc_state.transfer_size_remaining;
+ memcpy(usbtmc_state.ep_bulk_in_buf, usbtmc_state.devInBuffer, usbtmc_state.transfer_size_remaining);
+ while((packetLen % 4) != 0)
+ {
usbtmc_state.ep_bulk_in_buf[packetLen] = 0u;
- packetLen++;
- }
+ packetLen++;
+ }
usbtmc_state.transfer_size_sent += sizeof(usbtmc_state.transfer_size_remaining);
- usbtmc_state.transfer_size_remaining = 0;
- usbtmc_state.devInBuffer = NULL;
- TU_VERIFY( usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf,(uint16_t)packetLen));
+ usbtmc_state.transfer_size_remaining = 0;
+ usbtmc_state.devInBuffer = NULL;
+ TU_VERIFY( usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in, usbtmc_state.ep_bulk_in_buf,(uint16_t)packetLen));
if(((packetLen % USBTMCD_MAX_PACKET_SIZE) != 0) || (packetLen == 0 ))
{
usbtmc_state.state = STATE_TX_SHORTED;
- }
+ }
}
return true;
case STATE_ABORTING_BULK_IN:
@@ -554,7 +556,7 @@ bool usbtmcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint
/* Done. :)*/
TRACE("IN shorted\r\n");
usbtmc_state.state = STATE_ABORTING_BULK_IN_ABORTED;
- return true;
+ return true;
default:
TRACE("IN unknown\r\n");
TU_ASSERT(false);
@@ -667,7 +669,7 @@ bool usbtmcd_control_request(uint8_t rhport, tusb_control_request_t const * requ
usbtmc_state.lastBulkInTag == (request->wValue & 0xf7u))
{
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
usbtmc_state.state = ((usbtmc_state.transfer_size_sent % USBTMCD_MAX_PACKET_SIZE) != 0) ?
STATE_ABORTING_BULK_IN : STATE_ABORTING_BULK_IN_SHORTED;