diff options
author | Jim Mussared <jim.mussared@gmail.com> | 2019-08-27 16:35:02 +1000 |
---|---|---|
committer | Jim Mussared <jim.mussared@gmail.com> | 2019-10-01 09:51:02 +1000 |
commit | 42e9bdf19b417e46e957b6f0c5592bb316ceeca2 (patch) | |
tree | 46e55be54a0939b141ae78096b7c0911c12647f9 /py/ringbuf.h | |
parent | d72dbb822c96c003a202565006a97a2bfdff9210 (diff) |
py/ringbuf: Add helpers for put16/get16.
Diffstat (limited to 'py/ringbuf.h')
-rw-r--r-- | py/ringbuf.h | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/py/ringbuf.h b/py/ringbuf.h index b41692706..6b0d209bd 100644 --- a/py/ringbuf.h +++ b/py/ringbuf.h @@ -26,6 +26,9 @@ #ifndef MICROPY_INCLUDED_PY_RINGBUF_H #define MICROPY_INCLUDED_PY_RINGBUF_H +#include <stddef.h> +#include <stdint.h> + typedef struct _ringbuf_t { uint8_t *buf; uint16_t size; @@ -37,7 +40,7 @@ typedef struct _ringbuf_t { // byte buf_array[N]; // ringbuf_t buf = {buf_array, sizeof(buf_array)}; -// Dynamic initialization. This creates root pointer! +// Dynamic initialization. This needs to become findable as a root pointer! #define ringbuf_alloc(r, sz) \ { \ (r)->buf = m_new(uint8_t, sz); \ @@ -69,4 +72,16 @@ static inline int ringbuf_put(ringbuf_t *r, uint8_t v) { return 0; } +static inline size_t ringbuf_free(ringbuf_t *r) { + return (r->size + r->iget - r->iput - 1) % r->size; +} + +static inline size_t ringbuf_avail(ringbuf_t *r) { + return (r->size + r->iput - r->iget) % r->size; +} + +// Note: big-endian. No-op if not enough room available for both bytes. +int ringbuf_get16(ringbuf_t *r); +int ringbuf_put16(ringbuf_t *r, uint16_t v); + #endif // MICROPY_INCLUDED_PY_RINGBUF_H |