summaryrefslogtreecommitdiff
path: root/src/class
diff options
context:
space:
mode:
authorNathan Conrad <[email protected]>2019-09-18 23:53:28 -0400
committerNathan Conrad <[email protected]>2019-09-19 00:00:27 -0400
commitd4b2dff7c40f005be3ce4d383efcb59182a9a228 (patch)
tree7d7e14161da47770c888f7c68ad93aaa311720b9 /src/class
parent9a726dc7ed9af8f9b035b18a667105a48d8d6d8a (diff)
Fix more TX bugs... and add variable response delay to the example project.
Diffstat (limited to 'src/class')
-rw-r--r--src/class/usbtmc/usbtmc_device.c42
1 files changed, 16 insertions, 26 deletions
diff --git a/src/class/usbtmc/usbtmc_device.c b/src/class/usbtmc/usbtmc_device.c
index 27876852d..eab4397ba 100644
--- a/src/class/usbtmc/usbtmc_device.c
+++ b/src/class/usbtmc/usbtmc_device.c
@@ -203,12 +203,6 @@ bool usbtmcd_transmit_dev_msg_data(
{
memcpy((uint8_t*)(usbtmc_state.ep_bulk_in_buf) + packetLen, data, hdr->TransferSize);
packetLen = (uint16_t)(packetLen + hdr->TransferSize);
- // Pad up to multiple of 4 bytes
- while((packetLen % 4) != 0)
- {
- usbtmc_state.ep_bulk_in_buf[packetLen] = 0;
- packetLen++;
- }
usbtmc_state.transfer_size_remaining = 0;
usbtmc_state.transfer_size_sent = len;
usbtmc_state.devInBuffer = NULL;
@@ -518,32 +512,28 @@ 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);
- 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
- {
- 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)
{
- usbtmc_state.ep_bulk_in_buf[packetLen] = 0u;
- packetLen++;
+ TRACE("IN TX continuing\r\n");
+ // FIXME! This removes const below!
+ TU_VERIFY( usbd_edpt_xfer(rhport, usbtmc_state.ep_bulk_in,
+ (void*)usbtmc_state.devInBuffer,sizeof(usbtmc_state.ep_bulk_in_buf)));
+ usbtmc_state.devInBuffer += sizeof(usbtmc_state.ep_bulk_in_buf);
+ usbtmc_state.transfer_size_remaining -= sizeof(usbtmc_state.ep_bulk_in_buf);
+ usbtmc_state.transfer_size_sent += sizeof(usbtmc_state.ep_bulk_in_buf);
}
+ 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);
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: