diff options
| author | hathach <[email protected]> | 2013-11-08 14:46:48 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2013-11-08 14:46:48 +0700 |
| commit | 7ff0dbb64cfcab7256a4b113931c63a4c7efa0d3 (patch) | |
| tree | 41d92cf1d303d5578a50f7f79c72134534a3d19e /tinyusb/common/fifo.h | |
| parent | 15d3a418bd0d109d926ea95c3be1bbc83757734b (diff) | |
add tusbd_cdc_is_busy
enhance cdc serial device demo
refractor fifo.c
Diffstat (limited to 'tinyusb/common/fifo.h')
| -rw-r--r-- | tinyusb/common/fifo.h | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/tinyusb/common/fifo.h b/tinyusb/common/fifo.h index ef33bb956..daef4a84a 100644 --- a/tinyusb/common/fifo.h +++ b/tinyusb/common/fifo.h @@ -36,12 +36,6 @@ */ /**************************************************************************/ -/** \file - * \brief Error Header - * - * \note TBD - */ - /** \ingroup Group_Common * * @{ @@ -59,36 +53,47 @@ /** \struct fifo_t * \brief Simple Circular FIFO */ -typedef struct _fifo_t +typedef struct { - uint8_t* buf ; ///< buffer pointer - uint16_t size ; ///< buffer size - volatile uint16_t len ; ///< bytes in fifo - volatile uint16_t wr_ptr ; ///< write pointer - volatile uint16_t rd_ptr ; ///< read pointer - bool overwritable ; ///< allow overwrite data when full -// IRQn_Type irq ; ///< TODO (abstract later) interrupt used to lock fifo + uint16_t const depth ; ///< max items + uint16_t const item_size ; ///< size of each item + volatile uint16_t count ; ///< number of items in queue + volatile uint16_t wr_idx ; ///< write pointer + volatile uint16_t rd_idx ; ///< read pointer + bool overwritable ; + uint8_t buffer[] ; ///< buffer pointer + // IRQn_Type irq; } fifo_t; -bool fifo_init(fifo_t* f, uint8_t* buffer, uint16_t size, bool overwritable); //, IRQn_Type irq); -bool fifo_write(fifo_t* f, uint8_t data); -bool fifo_read(fifo_t* f, uint8_t *data); -uint16_t fifo_read_n(fifo_t* f, uint8_t * rx, uint16_t maxlen); +#define FIFO_DEF(name, ff_depth, type, is_overwritable) /*, irq_mutex)*/ \ + fifo_t name = {\ + .depth = ff_depth,\ + .item_size = sizeof(type),\ + .overwritable = is_overwritable,\ + /*.irq = irq_mutex*/\ + .buffer = { [ff_depth*sizeof(type) - 1] = 0 },\ + } + +bool fifo_write(fifo_t* f, void const * p_data); +bool fifo_read(fifo_t* f, void * p_buffer); void fifo_clear(fifo_t *f); +static inline bool fifo_is_empty(fifo_t* f) ATTR_PURE ATTR_ALWAYS_INLINE; static inline bool fifo_is_empty(fifo_t* f) { - return (f->len == 0); + return (f->count == 0); } +static inline bool fifo_is_full(fifo_t* f) ATTR_PURE ATTR_ALWAYS_INLINE; static inline bool fifo_is_full(fifo_t* f) { - return (f->len == f->size); + return (f->count == f->depth); } +static inline uint16_t fifo_get_length(fifo_t* f) ATTR_PURE ATTR_ALWAYS_INLINE; static inline uint16_t fifo_get_length(fifo_t* f) { - return f->len; + return f->count; } #ifdef __cplusplus |
