aboutsummaryrefslogtreecommitdiff
path: root/py/ringbuf.h
diff options
context:
space:
mode:
authorJim Mussared <jim.mussared@gmail.com>2019-08-27 16:35:02 +1000
committerJim Mussared <jim.mussared@gmail.com>2019-10-01 09:51:02 +1000
commit42e9bdf19b417e46e957b6f0c5592bb316ceeca2 (patch)
tree46e55be54a0939b141ae78096b7c0911c12647f9 /py/ringbuf.h
parentd72dbb822c96c003a202565006a97a2bfdff9210 (diff)
py/ringbuf: Add helpers for put16/get16.
Diffstat (limited to 'py/ringbuf.h')
-rw-r--r--py/ringbuf.h17
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