Move FIFOBuffer to src dir
This commit is contained in:
parent
52629cb1bf
commit
6035e1a2c2
166
Utilities.h
166
Utilities.h
@ -1516,168 +1516,4 @@ void unlock_rom() {
|
|||||||
eeprom_erase();
|
eeprom_erase();
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct FIFOBuffer
|
#include "src/misc/FIFOBuffer.h"
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
95
src/misc/FIFOBuffer.c
Normal file
95
src/misc/FIFOBuffer.c
Normal file
@ -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
|
59
src/misc/FIFOBuffer.h
Normal file
59
src/misc/FIFOBuffer.h
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user