diff options
| author | HiFiPhile <[email protected]> | 2024-05-09 16:56:31 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-05-09 16:56:31 +0200 |
| commit | 63e64f374bf2023261bcf6733fdf53a73ccca6e6 (patch) | |
| tree | fae905d8bbcd5b1e530efd263aab912d75e5b3e0 /src | |
| parent | ba6babf570752a28379aab51d9c27e7b9efe872d (diff) | |
| parent | 2b9e53772e73c2bfd07bbbf4d6d2f0b33bcd22fb (diff) | |
Merge pull request #911 from thierer/vendor_class_zero_length_transfer
Enable empty transfers for tud_vendor_n_write()
Diffstat (limited to 'src')
| -rw-r--r-- | src/class/vendor/vendor_device.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/class/vendor/vendor_device.c b/src/class/vendor/vendor_device.c index e87ce3997..56ef098c7 100644 --- a/src/class/vendor/vendor_device.c +++ b/src/class/vendor/vendor_device.c @@ -36,6 +36,8 @@ //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ +#define BULK_PACKET_SIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) + typedef struct { uint8_t itf_num; @@ -273,7 +275,6 @@ uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, ui bool vendord_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { - (void) rhport; (void) result; uint8_t itf = 0; @@ -300,7 +301,18 @@ bool vendord_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint { if (tud_vendor_tx_cb) tud_vendor_tx_cb(itf, (uint16_t) xferred_bytes); // Send complete, try to send more if possible - tud_vendor_n_write_flush(itf); + if ( 0 == tud_vendor_n_write_flush(itf) ) + { + // If there is no data left, a ZLP should be sent if + // xferred_bytes is multiple of EP Packet size and not zero + if ( !tu_fifo_count(&p_itf->tx_ff) && xferred_bytes && (0 == (xferred_bytes & (BULK_PACKET_SIZE-1))) ) + { + if ( usbd_edpt_claim(rhport, p_itf->ep_in) ) + { + usbd_edpt_xfer(rhport, p_itf->ep_in, NULL, 0); + } + } + } } return true; |
