summaryrefslogtreecommitdiff
path: root/src/common/tusb_fifo.h
diff options
context:
space:
mode:
authorhathach <[email protected]>2025-12-16 00:19:13 +0700
committerhathach <[email protected]>2025-12-16 00:19:13 +0700
commit0a9e05f47adca971eb4af8b08adf0debbc6b83db (patch)
tree3091abb1ad8c16ff18767f4239cb777ea6bf45f8 /src/common/tusb_fifo.h
parent77fcf62f9fba99a0344ba95d78130a5c0c921e56 (diff)
make fifo access mode fixed addr work with 16 bit also
Diffstat (limited to 'src/common/tusb_fifo.h')
-rw-r--r--src/common/tusb_fifo.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/common/tusb_fifo.h b/src/common/tusb_fifo.h
index 2e2a0db6f..f58cc3fcb 100644
--- a/src/common/tusb_fifo.h
+++ b/src/common/tusb_fifo.h
@@ -49,9 +49,16 @@ extern "C" {
#define CFG_FIFO_MUTEX OSAL_MUTEX_REQUIRED
#if CFG_TUD_EDPT_DEDICATED_HWFIFO || CFG_TUH_EDPT_DEDICATED_HWFIFO
- #define CFG_TUSB_FIFO_ACCESS_FIXED_ADDR_RW32
+ #ifndef CFG_TUSB_FIFO_ACCESS_FIXED_ADDR_WIDTH
+ #define CFG_TUSB_FIFO_ACCESS_FIXED_ADDR_WIDTH 32
+ #endif
#endif
+#ifndef CFG_TUSB_FIFO_ACCESS_FIXED_ADDR_WIDTH
+ #define CFG_TUSB_FIFO_ACCESS_FIXED_ADDR_WIDTH 0
+#endif
+
+
/* Write/Read "pointer" is in the range of: 0 .. depth - 1, and is used to get the fifo data.
* Write/Read "index" is always in the range of: 0 .. 2*depth-1
*
@@ -150,7 +157,7 @@ typedef struct {
// copy data to and from USB hardware FIFOs as needed for e.g. STM32s and others
typedef enum {
TU_FIFO_INC_ADDR_RW8, // increased address read/write by bytes - normal (default) mode
- TU_FIFO_FIXED_ADDR_RW32, // fixed address read/write by 4 bytes (word). Used for STM32 access into USB hardware FIFO
+ TU_FIFO_FIXED_ADDR_RW32, // fixed address read/write by 2/4 bytes (items).
} tu_fifo_access_mode_t;
//--------------------------------------------------------------------+
@@ -205,6 +212,10 @@ TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_fifo_read_n(tu_fifo_t *f, void *
return tu_fifo_read_n_access_mode(f, buffer, n, TU_FIFO_INC_ADDR_RW8);
}
+TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_fifo_read_n_fixed_addr(tu_fifo_t *f, void *buffer, uint16_t n) {
+ return tu_fifo_read_n_access_mode(f, buffer, n, TU_FIFO_FIXED_ADDR_RW32);
+}
+
// discard first n items from fifo i.e advance read pointer by n with mutex
// return number of discarded items
uint16_t tu_fifo_discard_n(tu_fifo_t *f, uint16_t n);
@@ -218,6 +229,10 @@ TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_fifo_write_n(tu_fifo_t *f, const
return tu_fifo_write_n_access_mode(f, data, n, TU_FIFO_INC_ADDR_RW8);
}
+TU_ATTR_ALWAYS_INLINE static inline uint16_t tu_fifo_write_n_fixed_addr(tu_fifo_t *f, const void *data, uint16_t n) {
+ return tu_fifo_write_n_access_mode(f, data, n, TU_FIFO_FIXED_ADDR_RW32);
+}
+
//--------------------------------------------------------------------+
// Internal Helper Local
// work on local copies of read/write indices in order to only access them once for re-entrancy