From 2f0fcf80e0b2d49116a019c02da5bc63dadc763b Mon Sep 17 00:00:00 2001 From: hathach Date: Tue, 20 Mar 2018 18:33:06 +0700 Subject: nrf52 cdc example work on nrf52840pdk - add tud_cdc_flush(), auto flush with sof is enabled by default. - --- tinyusb/class/cdc/cdc_device.c | 20 +++++++++++++------- tinyusb/class/cdc/cdc_device.h | 12 +++++++----- tinyusb/tusb_dcd.h | 4 +--- 3 files changed, 21 insertions(+), 15 deletions(-) (limited to 'tinyusb') diff --git a/tinyusb/class/cdc/cdc_device.c b/tinyusb/class/cdc/cdc_device.c index d798560be..a4f934e83 100644 --- a/tinyusb/class/cdc/cdc_device.c +++ b/tinyusb/class/cdc/cdc_device.c @@ -280,18 +280,24 @@ tusb_error_t cdcd_xfer_cb(uint8_t port, uint8_t ep_addr, tusb_event_t event, uin return TUSB_ERROR_NONE; } -void cdcd_sof(uint8_t port) +bool tud_n_cdc_flush (uint8_t port) { - if ( !tud_n_cdc_connected(port) ) return; + VERIFY( tud_n_cdc_connected(port) ); uint8_t edpt = cdcd_data[port].ep_addr[CDC_PIPE_DATA_IN]; - if ( !tusb_dcd_edpt_busy(port, edpt) ) - { - uint16_t count = fifo_read_n(&_tx_ff, _tmp_tx_buf, sizeof(_tmp_tx_buf)); + VERIFY( !tusb_dcd_edpt_busy(port, edpt) ); - TU_ASSERT( tusb_dcd_edpt_xfer(port, edpt, _tmp_tx_buf, count, false), TUSB_ERROR_DCD_EDPT_XFER); - } + + uint16_t count = fifo_read_n(&_tx_ff, _tmp_tx_buf, sizeof(_tmp_tx_buf)); + TU_ASSERT( tusb_dcd_edpt_xfer(port, edpt, _tmp_tx_buf, count, false) ); + + return true; +} + +void cdcd_sof(uint8_t port) +{ + tud_n_cdc_flush(port); } #endif diff --git a/tinyusb/class/cdc/cdc_device.h b/tinyusb/class/cdc/cdc_device.h index 4ae9be7c1..44768d1a2 100644 --- a/tinyusb/class/cdc/cdc_device.h +++ b/tinyusb/class/cdc/cdc_device.h @@ -63,18 +63,20 @@ uint32_t tud_n_cdc_read (uint8_t port, void* buffer, uint32_t bufsize); uint32_t tud_n_cdc_write_char (uint8_t port, char ch); uint32_t tud_n_cdc_write (uint8_t port, void const* buffer, uint32_t bufsize); +bool tud_n_cdc_flush (uint8_t port); //--------------------------------------------------------------------+ // APPLICATION API (Single Port) //--------------------------------------------------------------------+ -static inline bool tud_cdc_connected (void) { return tud_n_cdc_connected(0); } -static inline uint32_t tud_cdc_available (void) { return tud_n_cdc_available(0); } +static inline bool tud_cdc_connected (void) { return tud_n_cdc_connected(0); } +static inline uint32_t tud_cdc_available (void) { return tud_n_cdc_available(0); } -static inline int tud_cdc_read_char (void) { return tud_n_cdc_read_char(0); } -static inline uint32_t tud_cdc_read (void* buffer, uint32_t bufsize) { return tud_n_cdc_read(0, buffer, bufsize); } +static inline int tud_cdc_read_char (void) { return tud_n_cdc_read_char(0); } +static inline uint32_t tud_cdc_read (void* buffer, uint32_t bufsize) { return tud_n_cdc_read(0, buffer, bufsize); } -static inline uint32_t tud_cdc_write_char (char ch) { return tud_n_cdc_write_char(0, ch); } +static inline uint32_t tud_cdc_write_char (char ch) { return tud_n_cdc_write_char(0, ch); } static inline uint32_t tud_cdc_write (void const* buffer, uint32_t bufsize) { return tud_n_cdc_write(0, buffer, bufsize); } +static inline bool tud_cdc_flush (void) { return tud_n_cdc_flush(0); } //--------------------------------------------------------------------+ // APPLICATION CALLBACK API diff --git a/tinyusb/tusb_dcd.h b/tinyusb/tusb_dcd.h index 635522b95..5f79693ca 100644 --- a/tinyusb/tusb_dcd.h +++ b/tinyusb/tusb_dcd.h @@ -87,13 +87,11 @@ void tusb_dcd_control_stall (uint8_t port); bool tusb_dcd_edpt_open (uint8_t port, tusb_descriptor_endpoint_t const * p_endpoint_desc); bool tusb_dcd_edpt_xfer (uint8_t port, uint8_t edpt_addr, uint8_t * buffer, uint16_t total_bytes, bool int_on_complete); bool tusb_dcd_edpt_queue_xfer (uint8_t port, uint8_t edpt_addr, uint8_t * buffer, uint16_t total_bytes); // only queue, not transferring yet +bool tusb_dcd_edpt_busy (uint8_t port, uint8_t edpt_addr); void tusb_dcd_edpt_stall (uint8_t port, uint8_t edpt_addr); void tusb_dcd_edpt_clear_stall (uint8_t port, uint8_t edpt_addr); -// TODO may remove -bool tusb_dcd_edpt_busy (uint8_t port, uint8_t edpt_addr); - #ifdef __cplusplus } #endif -- cgit v1.3.1