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

add vendor peek, change cdc peek signature, change cdc read_char() return from signed char to int32_t

hathach 6 лет назад
Родитель
Сommit
bd08d0edc9

+ 7 - 20
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

+ 56 - 33
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);
+}
+
 /** @} */
 /** @} */
 

+ 5 - 1
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
 //--------------------------------------------------------------------+

+ 18 - 18
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);

+ 4 - 1
src/device/usbd.h

@@ -133,7 +133,6 @@ TU_ATTR_WEAK bool tud_vendor_control_complete_cb(uint8_t rhport, tusb_control_re
   0x8B, 0xFD, 0xA0, 0x76, 0x88, 0x15, 0xB6, 0x65
 
 //------------- Microsoft OS 2.0 Platform -------------//
-
 #define TUD_BOS_MICROSOFT_OS_DESC_LEN   28
 
 // Total Length of descriptor set, vendor code
@@ -144,6 +143,10 @@ TU_ATTR_WEAK bool tud_vendor_control_complete_cb(uint8_t rhport, tusb_control_re
   0xDF, 0x60, 0xDD, 0xD8, 0x89, 0x45, 0xC7, 0x4C, \
   0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F
 
+//------------- WebUSB URL -------------//
+// used to init tusb_desc_webusb_url_t
+#define TUD_WEBUSB_URL_DESCRIPTOR(_scheme, _url) \
+  { 3 + sizeof(_url) - 1, 3, _scheme, _url }
 
 //--------------------------------------------------------------------+
 // Configuration & Interface Descriptor Templates