Преглед на файлове

cdc flush on write() if queue more than epsize

hathach преди 7 години
родител
ревизия
e623fc656d
променени са 1 файла, в които са добавени 10 реда и са изтрити 2 реда
  1. 10 2
      src/class/cdc/cdc_device.c

+ 10 - 2
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)
 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)
 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)
 bool tud_cdc_n_write_flush (uint8_t itf)