]> git.tnoah.ca Git - lora-radio.git/commitdiff
Move FIFOBuffer to src dir
authorjacob.eva <x00010@disroot.org>
Wed, 4 Sep 2024 16:35:07 +0000 (17:35 +0100)
committerjacob.eva <x00010@disroot.org>
Wed, 4 Sep 2024 16:35:07 +0000 (17:35 +0100)
Utilities.h
src/misc/FIFOBuffer.c [new file with mode: 0644]
src/misc/FIFOBuffer.h [new file with mode: 0644]

index 95def2f7b5ef1c42e6c70795d6c65d22991053fc..1afe6ce76587f2bfe9257313fd013254bc7e67db 100644 (file)
@@ -1516,168 +1516,4 @@ void unlock_rom() {
        eeprom_erase();
 }
 
-typedef struct FIFOBuffer
-{
-  unsigned char *begin;
-  unsigned char *end;
-  unsigned char * volatile head;
-  unsigned char * volatile tail;
-} FIFOBuffer;
-
-inline bool fifo_isempty(const FIFOBuffer *f) {
-  return f->head == f->tail;
-}
-
-inline bool fifo_isfull(const FIFOBuffer *f) {
-  return ((f->head == f->begin) && (f->tail == f->end)) || (f->tail == f->head - 1);
-}
-
-inline void fifo_push(FIFOBuffer *f, unsigned char c) {
-  *(f->tail) = c;
-  
-  if (f->tail == f->end) {
-    f->tail = f->begin;
-  } else {
-    f->tail++;
-  }
-}
-
-inline unsigned char fifo_pop(FIFOBuffer *f) {
-  if(f->head == f->end) {
-    f->head = f->begin;
-    return *(f->end);
-  } else {
-    return *(f->head++);
-  }
-}
-
-inline void fifo_flush(FIFOBuffer *f) {
-  f->head = f->tail;
-}
-
-#if MCU_VARIANT != MCU_ESP32 && MCU_VARIANT != MCU_NRF52
-       static inline bool fifo_isempty_locked(const FIFOBuffer *f) {
-         bool result;
-         ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
-           result = fifo_isempty(f);
-         }
-         return result;
-       }
-
-       static inline bool fifo_isfull_locked(const FIFOBuffer *f) {
-         bool result;
-         ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
-           result = fifo_isfull(f);
-         }
-         return result;
-       }
-
-       static inline void fifo_push_locked(FIFOBuffer *f, unsigned char c) {
-         ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
-           fifo_push(f, c);
-         }
-       }
-#endif
-
-/*
-static inline unsigned char fifo_pop_locked(FIFOBuffer *f) {
-  unsigned char c;
-  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
-    c = fifo_pop(f);
-  }
-  return c;
-}
-*/
-
-inline void fifo_init(FIFOBuffer *f, unsigned char *buffer, size_t size) {
-  f->head = f->tail = f->begin = buffer;
-  f->end = buffer + size;
-}
-
-inline size_t fifo_len(FIFOBuffer *f) {
-  return f->end - f->begin;
-}
-
-typedef struct FIFOBuffer16
-{
-  uint16_t *begin;
-  uint16_t *end;
-  uint16_t * volatile head;
-  uint16_t * volatile tail;
-} FIFOBuffer16;
-
-inline bool fifo16_isempty(const FIFOBuffer16 *f) {
-  return f->head == f->tail;
-}
-
-inline bool fifo16_isfull(const FIFOBuffer16 *f) {
-  return ((f->head == f->begin) && (f->tail == f->end)) || (f->tail == f->head - 1);
-}
-
-inline void fifo16_push(FIFOBuffer16 *f, uint16_t c) {
-  *(f->tail) = c;
-
-  if (f->tail == f->end) {
-    f->tail = f->begin;
-  } else {
-    f->tail++;
-  }
-}
-
-inline uint16_t fifo16_pop(FIFOBuffer16 *f) {
-  if(f->head == f->end) {
-    f->head = f->begin;
-    return *(f->end);
-  } else {
-    return *(f->head++);
-  }
-}
-
-inline void fifo16_flush(FIFOBuffer16 *f) {
-  f->head = f->tail;
-}
-
-#if MCU_VARIANT != MCU_ESP32 && MCU_VARIANT != MCU_NRF52
-       static inline bool fifo16_isempty_locked(const FIFOBuffer16 *f) {
-         bool result;
-         ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
-           result = fifo16_isempty(f);
-         }
-
-         return result;
-       }
-#endif
-
-/*
-static inline bool fifo16_isfull_locked(const FIFOBuffer16 *f) {
-  bool result;
-  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
-    result = fifo16_isfull(f);
-  }
-  return result;
-}
-
-
-static inline void fifo16_push_locked(FIFOBuffer16 *f, uint16_t c) {
-  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
-    fifo16_push(f, c);
-  }
-}
-
-static inline size_t fifo16_pop_locked(FIFOBuffer16 *f) {
-  size_t c;
-  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
-    c = fifo16_pop(f);
-  }
-  return c;
-}
-*/
-
-inline void fifo16_init(FIFOBuffer16 *f, uint16_t *buffer, uint16_t size) {
-  f->head = f->tail = f->begin = buffer;
-  f->end = buffer + size;
-}
-
-inline uint16_t fifo16_len(FIFOBuffer16 *f) {
-  return (f->end - f->begin);
-}
+#include "src/misc/FIFOBuffer.h"
diff --git a/src/misc/FIFOBuffer.c b/src/misc/FIFOBuffer.c
new file mode 100644 (file)
index 0000000..86fa0ca
--- /dev/null
@@ -0,0 +1,95 @@
+#include <stdint.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include "FIFOBuffer.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+ bool fifo_isempty(const FIFOBuffer *f) {
+  return f->head == f->tail;
+}
+
+ bool fifo_isfull(const FIFOBuffer *f) {
+  return ((f->head == f->begin) && (f->tail == f->end)) || (f->tail == f->head - 1);
+}
+
+ void fifo_push(FIFOBuffer *f, unsigned char c) {
+  *(f->tail) = c;
+  
+  if (f->tail == f->end) {
+    f->tail = f->begin;
+  } else {
+    f->tail++;
+  }
+}
+
+ unsigned char fifo_pop(FIFOBuffer *f) {
+  if(f->head == f->end) {
+    f->head = f->begin;
+    return *(f->end);
+  } else {
+    return *(f->head++);
+  }
+}
+
+ void fifo_flush(FIFOBuffer *f) {
+  f->head = f->tail;
+}
+
+
+ void fifo_init(FIFOBuffer *f, unsigned char *buffer, size_t size) {
+  f->head = f->tail = f->begin = buffer;
+  f->end = buffer + size;
+}
+
+// todo, fix this so it actually displays the amount of data in the fifo
+// buffer, not just the size allocated for the buffer
+ size_t fifo_len(FIFOBuffer *f) {
+  return f->end - f->begin;
+}
+
+ bool fifo16_isempty(const FIFOBuffer16 *f) {
+  return f->head == f->tail;
+}
+
+ bool fifo16_isfull(const FIFOBuffer16 *f) {
+  return ((f->head == f->begin) && (f->tail == f->end)) || (f->tail == f->head - 1);
+}
+
+ void fifo16_push(FIFOBuffer16 *f, uint16_t c) {
+  *(f->tail) = c;
+
+  if (f->tail == f->end) {
+    f->tail = f->begin;
+  } else {
+    f->tail++;
+  }
+}
+
+ uint16_t fifo16_pop(FIFOBuffer16 *f) {
+  if(f->head == f->end) {
+    f->head = f->begin;
+    return *(f->end);
+  } else {
+    return *(f->head++);
+  }
+}
+
+ void fifo16_flush(FIFOBuffer16 *f) {
+  f->head = f->tail;
+}
+
+ void fifo16_init(FIFOBuffer16 *f, uint16_t *buffer, uint16_t size) {
+  f->head = f->tail = f->begin = buffer;
+  f->end = buffer + size;
+}
+
+ uint16_t fifo16_len(FIFOBuffer16 *f) {
+  return (f->end - f->begin);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/misc/FIFOBuffer.h b/src/misc/FIFOBuffer.h
new file mode 100644 (file)
index 0000000..bdc6d00
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef FIFOBUFFER_H
+
+#define FIFOBUFFER_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* An 8 bit FIFO buffer implementation */
+typedef struct FIFOBuffer
+{
+  unsigned char *begin;
+  unsigned char *end;
+  unsigned char * volatile head;
+  unsigned char * volatile tail;
+} FIFOBuffer;
+
+bool fifo_isempty(const FIFOBuffer *f);
+
+bool fifo_isfull(const FIFOBuffer *f);
+
+void fifo_push(FIFOBuffer *f, unsigned char c);
+
+unsigned char fifo_pop(FIFOBuffer *f);
+
+void fifo_flush(FIFOBuffer *f);
+
+void fifo_init(FIFOBuffer *f, unsigned char *buffer, size_t size);
+
+size_t fifo_len(FIFOBuffer *f);
+
+/* A 16-bit implementation of the same FIFO buffer. */
+typedef struct FIFOBuffer16
+{
+  uint16_t *begin;
+  uint16_t *end;
+  uint16_t * volatile head;
+  uint16_t * volatile tail;
+} FIFOBuffer16;
+
+bool fifo16_isempty(const FIFOBuffer16 *f);
+
+bool fifo16_isfull(const FIFOBuffer16 *f);
+
+void fifo16_push(FIFOBuffer16 *f, uint16_t c);
+
+uint16_t fifo16_pop(FIFOBuffer16 *f);
+
+void fifo16_flush(FIFOBuffer16 *f);
+
+void fifo16_init(FIFOBuffer16 *f, uint16_t *buffer, uint16_t size);
+
+uint16_t fifo16_len(FIFOBuffer16 *f);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif