@@ -95,7 +95,8 @@ static void _prep_out_transaction (cdcd_interface_t* p_cdc)
9595 // fifo can be changed before endpoint is claimed
9696 available = tu_fifo_remaining (& p_cdc -> rx_ff );
9797
98- if ( available >= sizeof (p_cdc -> epout_buf ) ) {
98+ if ( available >= sizeof (p_cdc -> epout_buf ) )
99+ {
99100 usbd_edpt_xfer (rhport , p_cdc -> ep_out , p_cdc -> epout_buf , sizeof (p_cdc -> epout_buf ));
100101 }else
101102 {
@@ -435,16 +436,19 @@ bool cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_
435436 tu_fifo_write_n (& p_cdc -> rx_ff , & p_cdc -> epout_buf , xferred_bytes );
436437
437438 // Check for wanted char and invoke callback if needed
438- if (tud_cdc_rx_wanted_cb && ( ((signed char ) p_cdc -> wanted_char ) != -1 )) {
439- for (uint32_t i = 0 ; i < xferred_bytes ; i ++ ) {
440- if ( p_cdc -> wanted_char == p_cdc -> epout_buf [i ] && tu_fifo_count (& p_cdc -> rx_ff ) ) {
439+ if ( tud_cdc_rx_wanted_cb && (((signed char ) p_cdc -> wanted_char ) != -1 ) )
440+ {
441+ for ( uint32_t i = 0 ; i < xferred_bytes ; i ++ )
442+ {
443+ if ( (p_cdc -> wanted_char == p_cdc -> epout_buf [i ]) && !tu_fifo_empty (& p_cdc -> rx_ff ) )
444+ {
441445 tud_cdc_rx_wanted_cb (itf , p_cdc -> wanted_char );
442446 }
443447 }
444448 }
445449
446450 // invoke receive callback (if there is still data)
447- if (tud_cdc_rx_cb && tu_fifo_count (& p_cdc -> rx_ff ) ) tud_cdc_rx_cb (itf );
451+ if (tud_cdc_rx_cb && ! tu_fifo_empty (& p_cdc -> rx_ff ) ) tud_cdc_rx_cb (itf );
448452
449453 // prepare for OUT transaction
450454 _prep_out_transaction (p_cdc );
0 commit comments