Просмотр исходного кода

revert to use pending_read_from_host (temp) since

hathach 7 лет назад
Родитель
Сommit
89b9ee2f52
1 измененных файлов с 9 добавлено и 1 удалено
  1. 9 1
      src/class/cdc/cdc_device.c

+ 9 - 1
src/class/cdc/cdc_device.c

@@ -75,18 +75,23 @@ typedef struct
 //--------------------------------------------------------------------+
 CFG_TUSB_MEM_SECTION static cdcd_interface_t _cdcd_itf[CFG_TUD_CDC] = { { 0 } };
 
+// TODO will be replaced by dcd_edpt_busy()
+bool pending_read_from_host;
 static void _prep_out_transaction (uint8_t itf)
 {
   cdcd_interface_t* p_cdc = &_cdcd_itf[itf];
 
   // skip if previous transfer not complete
-  if ( dcd_edpt_busy(TUD_OPT_RHPORT, p_cdc->ep_out) ) return;
+  // dcd_edpt_busy() doesn't work, probably transfer is complete but not properly handled by the stack
+//  if ( dcd_edpt_busy(TUD_OPT_RHPORT, p_cdc->ep_out) ) return;
+  if (pending_read_from_host) return;
 
   // Prepare for incoming data but only allow what we can store in the ring buffer.
   uint16_t max_read = tu_fifo_remaining(&p_cdc->rx_ff);
   if ( max_read >= CFG_TUD_CDC_EPSIZE )
   {
     dcd_edpt_xfer(TUD_OPT_RHPORT, p_cdc->ep_out, p_cdc->epout_buf, CFG_TUD_CDC_EPSIZE);
+    pending_read_from_host = true;
   }
 }
 
@@ -297,6 +302,7 @@ bool cdcd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t
   }
 
   // Prepare for incoming data
+  pending_read_from_host = false;
   _prep_out_transaction(cdc_id);
 
   return true;
@@ -367,6 +373,7 @@ bool cdcd_control_request(uint8_t rhport, tusb_control_request_t const * request
 
 bool cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
 {
+  (void) rhport;
   (void) result;
 
   // TODO Support multiple interfaces
@@ -391,6 +398,7 @@ bool cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_
     if (tud_cdc_rx_cb && tu_fifo_count(&p_cdc->rx_ff) ) tud_cdc_rx_cb(itf);
 
     // prepare for OUT transaction
+    pending_read_from_host = false;
     _prep_out_transaction(itf);
   }