Fix more TX bugs... and add variable response delay to the example project.
This commit is contained in:
@@ -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:
|
||||
|
Reference in New Issue
Block a user