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(); | ||||
| } | ||||
| 
 | ||||
| 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" | ||||
|  | ||||
							
								
								
									
										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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user