diff --git a/src/class/cdc/cdc_device.c b/src/class/cdc/cdc_device.c index 6858b6ad0..2215e00ea 100644 --- a/src/class/cdc/cdc_device.c +++ b/src/class/cdc/cdc_device.c @@ -146,12 +146,20 @@ void tud_cdc_n_read_flush (uint8_t itf) uint32_t tud_cdc_n_write_char(uint8_t itf, char ch) { - return tu_fifo_write(&_cdcd_itf[itf].tx_ff, &ch) ? 1 : 0; + return tud_cdc_n_write(itf, &ch, 1); } uint32_t tud_cdc_n_write(uint8_t itf, void const* buffer, uint32_t bufsize) { - return tu_fifo_write_n(&_cdcd_itf[itf].tx_ff, buffer, bufsize); + uint16_t ret = tu_fifo_write_n(&_cdcd_itf[itf].tx_ff, buffer, bufsize); + + // flush if queue more than endpoint size + if ( tu_fifo_count(&_cdcd_itf[itf].tx_ff) >= CFG_TUD_CDC_EPSIZE ) + { + tud_cdc_n_write_flush(itf); + } + + return ret; } bool tud_cdc_n_write_flush (uint8_t itf)