Skip to content

Commit 075334a

Browse files
authored
Merge pull request #547 from hathach/cdc-auto-write-flush
enable cdc auto flush on write()
2 parents b05827b + 6fcd540 commit 075334a

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
![tinyUSB_240x100](https://user-images.githubusercontent.com/249515/62646655-f9393200-b978-11e9-9c53-484862f15503.png)
44

5-
[![Build Status](https://github.com/hathach/tinyusb/workflows/Build/badge.svg)](https://github.com/hathach/tinyusb/actions) [![License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://opensource.org/licenses/MIT) [![Coverity](https://img.shields.io/coverity/scan/458.svg)](https://scan.coverity.com/projects/tinyusb)
5+
[![Build Status](https://github.com/hathach/tinyusb/workflows/Build/badge.svg)](https://github.com/hathach/tinyusb/actions) [![License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://opensource.org/licenses/MIT)
66

77
TinyUSB is an open-source cross-platform USB Host/Device stack for embedded system, designed to be memory-safe with no dynamic allocation and thread-safe with all interrupt events are deferred then handled in the non-ISR task function.
88

src/class/cdc/cdc_device.c

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@
3434
//--------------------------------------------------------------------+
3535
// MACRO CONSTANT TYPEDEF
3636
//--------------------------------------------------------------------+
37+
enum
38+
{
39+
BULK_PACKET_SIZE = (TUD_OPT_HIGH_SPEED ? 512 : 64)
40+
};
41+
3742
typedef struct
3843
{
3944
uint8_t itf_num;
@@ -160,13 +165,11 @@ uint32_t tud_cdc_n_write(uint8_t itf, void const* buffer, uint32_t bufsize)
160165
cdcd_interface_t* p_cdc = &_cdcd_itf[itf];
161166
uint16_t ret = tu_fifo_write_n(&p_cdc->tx_ff, buffer, bufsize);
162167

163-
#if 0 // TODO issue with circuitpython's REPL
164-
// flush if queue more than endpoint size
165-
if ( tu_fifo_count(&p_cdc->tx_ff) >= CFG_TUD_CDC_EP_BUFSIZE )
168+
// flush if queue more than packet size
169+
if ( tu_fifo_count(&p_cdc->tx_ff) >= BULK_PACKET_SIZE )
166170
{
167171
tud_cdc_n_write_flush(itf);
168172
}
169-
#endif
170173

171174
return ret;
172175
}
@@ -250,8 +253,8 @@ void cdcd_reset(uint8_t rhport)
250253
uint16_t cdcd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len)
251254
{
252255
// Only support ACM subclass
253-
TU_VERIFY ( TUSB_CLASS_CDC == itf_desc->bInterfaceClass &&
254-
CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL == itf_desc->bInterfaceSubClass, 0);
256+
TU_VERIFY( TUSB_CLASS_CDC == itf_desc->bInterfaceClass &&
257+
CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL == itf_desc->bInterfaceSubClass, 0);
255258

256259
// Note: 0xFF can be used with RNDIS
257260
TU_VERIFY(tu_within(CDC_COMM_PROTOCOL_NONE, itf_desc->bInterfaceProtocol, CDC_COMM_PROTOCOL_ATCOMMAND_CDMA), 0);
@@ -446,9 +449,8 @@ bool cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_
446449
if ( 0 == tud_cdc_n_write_flush(itf) )
447450
{
448451
// If there is no data left, a ZLP should be sent if
449-
// xferred_bytes is multiple of EP size and not zero
450-
// FIXME CFG_TUD_CDC_EP_BUFSIZE is not Endpoint packet size
451-
if ( !tu_fifo_count(&p_cdc->tx_ff) && xferred_bytes && (0 == (xferred_bytes % CFG_TUD_CDC_EP_BUFSIZE)) )
452+
// xferred_bytes is multiple of EP Packet size and not zero
453+
if ( !tu_fifo_count(&p_cdc->tx_ff) && xferred_bytes && (0 == (xferred_bytes & (BULK_PACKET_SIZE-1))) )
452454
{
453455
if ( usbd_edpt_claim(rhport, p_cdc->ep_in) )
454456
{

0 commit comments

Comments
 (0)