More fixes, and a bit of SRQ.
This commit is contained in:
@@ -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;
|
||||
|
Reference in New Issue
Block a user