From bd08d0edc9067d57a6d6c3cc32438095b2de29c8 Mon Sep 17 00:00:00 2001 From: hathach Date: Thu, 1 Aug 2019 10:46:27 +0700 Subject: add vendor peek, change cdc peek signature, change cdc read_char() return from signed char to int32_t --- src/class/cdc/cdc_device.c | 27 ++++-------- src/class/cdc/cdc_device.h | 89 +++++++++++++++++++++++++--------------- src/class/vendor/vendor_device.c | 6 ++- src/class/vendor/vendor_device.h | 36 ++++++++-------- 4 files changed, 86 insertions(+), 72 deletions(-) (limited to 'src/class') diff --git a/src/class/cdc/cdc_device.c b/src/class/cdc/cdc_device.c index d4952d115..6da9157bd 100644 --- a/src/class/cdc/cdc_device.c +++ b/src/class/cdc/cdc_device.c @@ -121,12 +121,6 @@ uint32_t tud_cdc_n_available(uint8_t itf) return tu_fifo_count(&_cdcd_itf[itf].rx_ff); } -signed char tud_cdc_n_read_char(uint8_t itf) -{ - signed char ch; - return tud_cdc_n_read(itf, &ch, 1) ? ch : (-1); -} - uint32_t tud_cdc_n_read(uint8_t itf, void* buffer, uint32_t bufsize) { uint32_t num_read = tu_fifo_read_n(&_cdcd_itf[itf].rx_ff, buffer, bufsize); @@ -134,10 +128,9 @@ uint32_t tud_cdc_n_read(uint8_t itf, void* buffer, uint32_t bufsize) return num_read; } -signed char tud_cdc_n_peek(uint8_t itf, int pos) +bool tud_cdc_n_peek(uint8_t itf, int pos, uint8_t* chr) { - signed char ch; - return tu_fifo_peek_at(&_cdcd_itf[itf].rx_ff, pos, &ch) ? ch : (-1); + return tu_fifo_peek_at(&_cdcd_itf[itf].rx_ff, pos, chr); } void tud_cdc_n_read_flush (uint8_t itf) @@ -149,17 +142,6 @@ void tud_cdc_n_read_flush (uint8_t itf) //--------------------------------------------------------------------+ // WRITE API //--------------------------------------------------------------------+ - -uint32_t tud_cdc_n_write_char(uint8_t itf, char ch) -{ - return tud_cdc_n_write(itf, &ch, 1); -} - -uint32_t tud_cdc_n_write_str (uint8_t itf, char const* str) -{ - return tud_cdc_n_write(itf, str, strlen(str)); -} - uint32_t tud_cdc_n_write(uint8_t itf, void const* buffer, uint32_t bufsize) { uint16_t ret = tu_fifo_write_n(&_cdcd_itf[itf].tx_ff, buffer, bufsize); @@ -190,6 +172,11 @@ bool tud_cdc_n_write_flush (uint8_t itf) return true; } +uint32_t tud_cdc_n_write_available (uint8_t itf) +{ + return tu_fifo_remaining(&_cdcd_itf[itf].tx_ff); +} + //--------------------------------------------------------------------+ // USBD Driver API diff --git a/src/class/cdc/cdc_device.h b/src/class/cdc/cdc_device.h index f1ac08e73..82932ef7d 100644 --- a/src/class/cdc/cdc_device.h +++ b/src/class/cdc/cdc_device.h @@ -51,40 +51,42 @@ // Application API (Multiple Interfaces) // CFG_TUD_CDC > 1 //--------------------------------------------------------------------+ -bool tud_cdc_n_connected (uint8_t itf); -uint8_t tud_cdc_n_get_line_state (uint8_t itf); -void tud_cdc_n_get_line_coding (uint8_t itf, cdc_line_coding_t* coding); -void tud_cdc_n_set_wanted_char (uint8_t itf, char wanted); - -uint32_t tud_cdc_n_available (uint8_t itf); -signed char tud_cdc_n_read_char (uint8_t itf); -uint32_t tud_cdc_n_read (uint8_t itf, void* buffer, uint32_t bufsize); -void tud_cdc_n_read_flush (uint8_t itf); -signed char tud_cdc_n_peek (uint8_t itf, int pos); - -uint32_t tud_cdc_n_write_char (uint8_t itf, char ch); -uint32_t tud_cdc_n_write (uint8_t itf, void const* buffer, uint32_t bufsize); -uint32_t tud_cdc_n_write_str (uint8_t itf, char const* str); -bool tud_cdc_n_write_flush (uint8_t itf); +bool tud_cdc_n_connected (uint8_t itf); +uint8_t tud_cdc_n_get_line_state (uint8_t itf); +void tud_cdc_n_get_line_coding (uint8_t itf, cdc_line_coding_t* coding); +void tud_cdc_n_set_wanted_char (uint8_t itf, char wanted); + +uint32_t tud_cdc_n_available (uint8_t itf); +uint32_t tud_cdc_n_read (uint8_t itf, void* buffer, uint32_t bufsize); +void tud_cdc_n_read_flush (uint8_t itf); +bool tud_cdc_n_peek (uint8_t itf, int pos, uint8_t* u8); +static inline int32_t tud_cdc_n_read_char (uint8_t itf); + +uint32_t tud_cdc_n_write (uint8_t itf, void const* buffer, uint32_t bufsize); +bool tud_cdc_n_write_flush (uint8_t itf); +uint32_t tud_cdc_n_write_available (uint8_t itf); +static inline uint32_t tud_cdc_n_write_char (uint8_t itf, char ch); +static inline uint32_t tud_cdc_n_write_str (uint8_t itf, char const* str); //--------------------------------------------------------------------+ // Application API (Interface0) //--------------------------------------------------------------------+ -static inline bool tud_cdc_connected (void); -static inline uint8_t tud_cdc_get_line_state (void); -static inline void tud_cdc_get_line_coding (cdc_line_coding_t* coding); -static inline void tud_cdc_set_wanted_char (char wanted); - -static inline uint32_t tud_cdc_available (void); -static inline signed char tud_cdc_read_char (void); -static inline uint32_t tud_cdc_read (void* buffer, uint32_t bufsize); -static inline void tud_cdc_read_flush (void); -static inline signed char tud_cdc_peek (int pos); - -static inline uint32_t tud_cdc_write_char (char ch); -static inline uint32_t tud_cdc_write (void const* buffer, uint32_t bufsize); -static inline uint32_t tud_cdc_write_str (char const* str); -static inline bool tud_cdc_write_flush (void); +static inline bool tud_cdc_connected (void); +static inline uint8_t tud_cdc_get_line_state (void); +static inline void tud_cdc_get_line_coding (cdc_line_coding_t* coding); +static inline void tud_cdc_set_wanted_char (char wanted); + +static inline uint32_t tud_cdc_available (void); +static inline int32_t tud_cdc_read_char (void); +static inline uint32_t tud_cdc_read (void* buffer, uint32_t bufsize); +static inline void tud_cdc_read_flush (void); +static inline bool tud_cdc_peek (int pos, uint8_t* u8); + +static inline uint32_t tud_cdc_write_char (char ch); +static inline uint32_t tud_cdc_write (void const* buffer, uint32_t bufsize); +static inline uint32_t tud_cdc_write_str (char const* str); +static inline bool tud_cdc_write_flush (void); +static inline uint32_t tud_cdc_write_available (void); //--------------------------------------------------------------------+ // Application Callback API (weak is optional) @@ -105,6 +107,22 @@ TU_ATTR_WEAK void tud_cdc_line_coding_cb(uint8_t itf, cdc_line_coding_t const* p //--------------------------------------------------------------------+ // Inline Functions //--------------------------------------------------------------------+ +static inline int32_t tud_cdc_n_read_char (uint8_t itf) +{ + uint8_t ch; + return tud_cdc_n_read(itf, &ch, 1) ? (int32_t) ch : -1; +} + +static inline uint32_t tud_cdc_n_write_char(uint8_t itf, char ch) +{ + return tud_cdc_n_write(itf, &ch, 1); +} + +static inline uint32_t tud_cdc_n_write_str (uint8_t itf, char const* str) +{ + return tud_cdc_n_write(itf, str, strlen(str)); +} + static inline bool tud_cdc_connected (void) { return tud_cdc_n_connected(0); @@ -130,7 +148,7 @@ static inline uint32_t tud_cdc_available (void) return tud_cdc_n_available(0); } -static inline signed char tud_cdc_read_char (void) +static inline int32_t tud_cdc_read_char (void) { return tud_cdc_n_read_char(0); } @@ -145,9 +163,9 @@ static inline void tud_cdc_read_flush (void) tud_cdc_n_read_flush(0); } -static inline signed char tud_cdc_peek (int pos) +static inline bool tud_cdc_peek (int pos, uint8_t* u8) { - return tud_cdc_n_peek(0, pos); + return tud_cdc_n_peek(0, pos, u8); } static inline uint32_t tud_cdc_write_char (char ch) @@ -170,6 +188,11 @@ static inline bool tud_cdc_write_flush (void) return tud_cdc_n_write_flush(0); } +static inline uint32_t tud_cdc_write_available(void) +{ + return tud_cdc_n_write_available(0); +} + /** @} */ /** @} */ diff --git a/src/class/vendor/vendor_device.c b/src/class/vendor/vendor_device.c index 33fb98470..d1ba63a9d 100644 --- a/src/class/vendor/vendor_device.c +++ b/src/class/vendor/vendor_device.c @@ -62,7 +62,6 @@ CFG_TUSB_MEM_SECTION static vendord_interface_t _vendord_itf[CFG_TUD_VENDOR]; #define ITF_MEM_RESET_SIZE offsetof(vendord_interface_t, rx_ff) - bool tud_vendor_n_mounted (uint8_t itf) { return _vendord_itf[itf].ep_in && _vendord_itf[itf].ep_out; @@ -73,6 +72,11 @@ uint32_t tud_vendor_n_available (uint8_t itf) return tu_fifo_count(&_vendord_itf[itf].rx_ff); } +bool tud_vendor_n_peek(uint8_t itf, int pos, uint8_t* u8) +{ + return tu_fifo_peek_at(&_vendord_itf[itf].rx_ff, pos, u8); +} + //--------------------------------------------------------------------+ // Read API //--------------------------------------------------------------------+ diff --git a/src/class/vendor/vendor_device.h b/src/class/vendor/vendor_device.h index d214c29ee..17fbc54ef 100644 --- a/src/class/vendor/vendor_device.h +++ b/src/class/vendor/vendor_device.h @@ -34,14 +34,6 @@ #define CFG_TUD_VENDOR_EPSIZE 64 #endif -#ifndef CFG_TUD_VENDOR_RX_BUFSIZE -#define CFG_TUD_VENDOR_RX_BUFSIZE 0 -#endif - -#ifndef CFG_TUD_VENDOR_TX_BUFSIZE -#define CFG_TUD_VENDOR_TX_BUFSIZE 0 -#endif - #ifdef __cplusplus extern "C" { #endif @@ -49,21 +41,24 @@ //--------------------------------------------------------------------+ // Application API (Multiple Interfaces) //--------------------------------------------------------------------+ -bool tud_vendor_n_mounted (uint8_t itf); -uint32_t tud_vendor_n_available (uint8_t itf); -uint32_t tud_vendor_n_read (uint8_t itf, void* buffer, uint32_t bufsize); -uint32_t tud_vendor_n_write (uint8_t itf, void const* buffer, uint32_t bufsize); +bool tud_vendor_n_mounted (uint8_t itf); +uint32_t tud_vendor_n_available (uint8_t itf); +uint32_t tud_vendor_n_read (uint8_t itf, void* buffer, uint32_t bufsize); +bool tud_vendor_n_peek (uint8_t itf, int pos, uint8_t* u8); +uint32_t tud_vendor_n_write (uint8_t itf, void const* buffer, uint32_t bufsize); -static inline uint32_t tud_vendor_n_write_str (uint8_t itf, char const* str); +static inline +uint32_t tud_vendor_n_write_str (uint8_t itf, char const* str); //--------------------------------------------------------------------+ // Application API (Single Port) //--------------------------------------------------------------------+ -static inline bool tud_vendor_mounted (void); -static inline uint32_t tud_vendor_available (void); -static inline uint32_t tud_vendor_read (void* buffer, uint32_t bufsize); -static inline uint32_t tud_vendor_write (void const* buffer, uint32_t bufsize); -static inline uint32_t tud_vendor_write_str (char const* str); +static inline bool tud_vendor_mounted (void); +static inline uint32_t tud_vendor_available (void); +static inline uint32_t tud_vendor_read (void* buffer, uint32_t bufsize); +static inline bool tud_vendor_peek (int pos, uint8_t* u8); +static inline uint32_t tud_vendor_write (void const* buffer, uint32_t bufsize); +static inline uint32_t tud_vendor_write_str (char const* str); //--------------------------------------------------------------------+ // Application Callback API (weak is optional) @@ -96,6 +91,11 @@ static inline uint32_t tud_vendor_read (void* buffer, uint32_t bufsize) return tud_vendor_n_read(0, buffer, bufsize); } +static inline bool tud_vendor_peek (int pos, uint8_t* u8) +{ + return tud_vendor_n_peek(0, pos, u8); +} + static inline uint32_t tud_vendor_write (void const* buffer, uint32_t bufsize) { return tud_vendor_n_write(0, buffer, bufsize); -- cgit v1.3.1