diff options
| author | Nathan Conrad <[email protected]> | 2019-09-14 17:15:34 -0400 |
|---|---|---|
| committer | Nathan Conrad <[email protected]> | 2019-09-14 17:15:34 -0400 |
| commit | 6e00886ffbbc552cf91be73d57fe8ad0a4842d0b (patch) | |
| tree | 42c7da014cd7bba19b8c007be0256c2ce05f4dab /src | |
| parent | acd8fa76505f036858e2d33ebbc58cc7f15e3a8b (diff) | |
Handle USBTMC TermChar.
Diffstat (limited to 'src')
| -rw-r--r-- | src/class/usbtmc/usbtmc_device.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/class/usbtmc/usbtmc_device.c b/src/class/usbtmc/usbtmc_device.c index 25f943598..909f8251f 100644 --- a/src/class/usbtmc/usbtmc_device.c +++ b/src/class/usbtmc/usbtmc_device.c @@ -61,6 +61,9 @@ // FIXME: I shouldn't need to include _pvt headers. #include "device/usbd_pvt.h" +static uint8_t termChar; +static uint8_t termCharRequested = false; + typedef enum { STATE_IDLE, @@ -113,6 +116,13 @@ bool usbtmcd_transmit_dev_msg_data( TU_ASSERT(usbtmc_state.state == STATE_TX_REQUESTED); TU_ASSERT(hdr->TransferSize > 0u); + if(hdr->bmTransferAttributes.UsingTermChar) + { + TU_ASSERT(usbtmcd_app_capabilities.bmDevCapabilities.canEndBulkInOnTermChar); + TU_ASSERT(termCharRequested); + TU_ASSERT(((uint8_t*)data)[hdr->TransferSize-1] == termChar); + } + // Copy in the header memcpy(usbtmc_state.ep_bulk_in_buf, hdr, sizeof(*hdr)); uint packetLen = sizeof(*hdr); @@ -260,6 +270,12 @@ static bool handle_devMsgIn(uint8_t rhport, void *data, size_t len) TU_VERIFY(usbtmc_state.state == STATE_IDLE); usbtmc_state.state = STATE_TX_REQUESTED; usbtmc_state.transfer_size_remaining = msg->TransferSize; + + termCharRequested = msg->bmTransferAttributes.TermCharEnabled; + termChar = msg->TermChar; + if(termCharRequested) + TU_VERIFY(usbtmcd_app_capabilities.bmDevCapabilities.canEndBulkInOnTermChar); + TU_VERIFY(usbtmcd_app_msgBulkIn_request(rhport, msg)); return true; } @@ -310,6 +326,8 @@ bool usbtmcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint TU_VERIFY(handle_devMsgOut(rhport, usbtmc_state.ep_bulk_out_buf, xferred_bytes, xferred_bytes)); return true; + case STATE_TX_REQUESTED: + case STATE_TX_INITIATED: default: TU_VERIFY(false); } |
