Merge pull request #260 from majbthrd/cdczlp
CDC device: fix behavior for transfers that are a whole multiple of endpoint buffer
This commit is contained in:
commit
0b1b9a2b9e
|
@ -82,9 +82,9 @@ static void _prep_out_transaction (uint8_t itf)
|
||||||
|
|
||||||
// Prepare for incoming data but only allow what we can store in the ring buffer.
|
// 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);
|
uint16_t max_read = tu_fifo_remaining(&p_cdc->rx_ff);
|
||||||
if ( max_read >= CFG_TUD_CDC_EPSIZE )
|
if ( max_read >= TU_ARRAY_SIZE(p_cdc->epout_buf) )
|
||||||
{
|
{
|
||||||
usbd_edpt_xfer(TUD_OPT_RHPORT, p_cdc->ep_out, p_cdc->epout_buf, CFG_TUD_CDC_EPSIZE);
|
usbd_edpt_xfer(TUD_OPT_RHPORT, p_cdc->ep_out, p_cdc->epout_buf, TU_ARRAY_SIZE(p_cdc->epout_buf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,7 +162,7 @@ bool tud_cdc_n_write_flush (uint8_t itf)
|
||||||
cdcd_interface_t* p_cdc = &_cdcd_itf[itf];
|
cdcd_interface_t* p_cdc = &_cdcd_itf[itf];
|
||||||
TU_VERIFY( !usbd_edpt_busy(TUD_OPT_RHPORT, p_cdc->ep_in) ); // skip if previous transfer not complete
|
TU_VERIFY( !usbd_edpt_busy(TUD_OPT_RHPORT, p_cdc->ep_in) ); // skip if previous transfer not complete
|
||||||
|
|
||||||
uint16_t count = tu_fifo_read_n(&_cdcd_itf[itf].tx_ff, p_cdc->epin_buf, CFG_TUD_CDC_EPSIZE);
|
uint16_t count = tu_fifo_read_n(&_cdcd_itf[itf].tx_ff, p_cdc->epin_buf, TU_ARRAY_SIZE(p_cdc->epin_buf));
|
||||||
if ( count )
|
if ( count )
|
||||||
{
|
{
|
||||||
TU_VERIFY( tud_cdc_n_connected(itf) ); // fifo is empty if not connected
|
TU_VERIFY( tud_cdc_n_connected(itf) ); // fifo is empty if not connected
|
||||||
|
@ -198,8 +198,8 @@ void cdcd_init(void)
|
||||||
p_cdc->line_coding.data_bits = 8;
|
p_cdc->line_coding.data_bits = 8;
|
||||||
|
|
||||||
// config fifo
|
// config fifo
|
||||||
tu_fifo_config(&p_cdc->rx_ff, p_cdc->rx_ff_buf, CFG_TUD_CDC_RX_BUFSIZE, 1, false);
|
tu_fifo_config(&p_cdc->rx_ff, p_cdc->rx_ff_buf, TU_ARRAY_SIZE(p_cdc->rx_ff_buf), 1, false);
|
||||||
tu_fifo_config(&p_cdc->tx_ff, p_cdc->tx_ff_buf, CFG_TUD_CDC_TX_BUFSIZE, 1, false);
|
tu_fifo_config(&p_cdc->tx_ff, p_cdc->tx_ff_buf, TU_ARRAY_SIZE(p_cdc->tx_ff_buf), 1, false);
|
||||||
|
|
||||||
#if CFG_FIFO_MUTEX
|
#if CFG_FIFO_MUTEX
|
||||||
tu_fifo_config_mutex(&p_cdc->rx_ff, osal_mutex_create(&p_cdc->rx_ff_mutex));
|
tu_fifo_config_mutex(&p_cdc->rx_ff, osal_mutex_create(&p_cdc->rx_ff_mutex));
|
||||||
|
@ -411,10 +411,10 @@ bool cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_
|
||||||
// Data sent to host, we could continue to fetch data tx fifo to send.
|
// Data sent to host, we could continue to fetch data tx fifo to send.
|
||||||
// But it will cause incorrect baudrate set in line coding.
|
// But it will cause incorrect baudrate set in line coding.
|
||||||
// Though maybe the baudrate is not really important !!!
|
// Though maybe the baudrate is not really important !!!
|
||||||
// if ( ep_addr == p_cdc->ep_in )
|
if ( ep_addr == p_cdc->ep_in )
|
||||||
// {
|
{
|
||||||
//
|
if ( xferred_bytes && (0 == (xferred_bytes % CFG_TUD_CDC_EPSIZE)) && (0 == p_cdc->tx_ff.count) ) usbd_edpt_xfer(TUD_OPT_RHPORT, p_cdc->ep_in, NULL, 0);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// nothing to do with notif endpoint for now
|
// nothing to do with notif endpoint for now
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue