commiting examples
This commit is contained in:
89
Examples/NeoPixel Example/FIFO.c
Normal file
89
Examples/NeoPixel Example/FIFO.c
Normal file
@@ -0,0 +1,89 @@
|
||||
#include <stdint.h>
|
||||
#include "FIFO.h"
|
||||
|
||||
#define FIFO_SUCCESS 1
|
||||
#define FIFO_FAIL 0
|
||||
#define SIZE 1024
|
||||
|
||||
static uint8_t RX_buffer[SIZE];
|
||||
static uint8_t *RX_head, *RX_tail;
|
||||
static uint8_t TX_buffer[SIZE];
|
||||
static uint8_t *TX_head, *TX_tail;
|
||||
|
||||
void FIFO_init(void)
|
||||
{
|
||||
RX_head = RX_tail = &RX_buffer[0];
|
||||
TX_head = TX_tail = &TX_buffer[0];
|
||||
}
|
||||
|
||||
int RX_FIFO_empty(void)
|
||||
{
|
||||
return RX_head == RX_tail;
|
||||
}
|
||||
|
||||
int RX_FIFO_full(void)
|
||||
{
|
||||
uint8_t *ptr = RX_tail + 1;
|
||||
if (ptr == &RX_buffer[SIZE])
|
||||
ptr = &RX_buffer[0];
|
||||
return ptr == RX_head;
|
||||
}
|
||||
|
||||
int RX_FIFO_count(void)
|
||||
{
|
||||
return RX_tail >= RX_head ? RX_tail - RX_head : SIZE - (RX_head - RX_tail);
|
||||
}
|
||||
|
||||
int RX_FIFO_put(uint8_t data)
|
||||
{
|
||||
if (RX_FIFO_full())
|
||||
return FIFO_FAIL;
|
||||
*RX_tail++ = data;
|
||||
if (RX_tail == &RX_buffer[SIZE])
|
||||
RX_tail = &RX_buffer[0];
|
||||
return FIFO_SUCCESS;
|
||||
}
|
||||
|
||||
int RX_FIFO_get(uint8_t *data)
|
||||
{
|
||||
if (RX_FIFO_empty())
|
||||
return FIFO_FAIL;
|
||||
*data = *RX_head++;
|
||||
if (RX_head == &RX_buffer[SIZE])
|
||||
RX_head = &RX_buffer[0];
|
||||
return FIFO_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int TX_FIFO_empty(void)
|
||||
{
|
||||
return TX_head == TX_tail;
|
||||
}
|
||||
|
||||
int TX_FIFO_full(void)
|
||||
{
|
||||
uint8_t *ptr = TX_tail + 1;
|
||||
if (ptr == &TX_buffer[SIZE])
|
||||
ptr = &TX_buffer[0];
|
||||
return ptr == TX_head;
|
||||
}
|
||||
|
||||
int TX_FIFO_put(uint8_t data)
|
||||
{
|
||||
if (TX_FIFO_full())
|
||||
return FIFO_FAIL;
|
||||
*TX_tail++ = data;
|
||||
if (TX_tail == &TX_buffer[SIZE])
|
||||
TX_tail = &TX_buffer[0];
|
||||
return FIFO_SUCCESS;
|
||||
}
|
||||
|
||||
int TX_FIFO_get(uint8_t *data)
|
||||
{
|
||||
if (TX_FIFO_empty())
|
||||
return FIFO_FAIL;
|
||||
*data = *TX_head++;
|
||||
if (TX_head == &TX_buffer[SIZE])
|
||||
TX_head = &TX_buffer[0];
|
||||
return FIFO_SUCCESS;
|
||||
}
|
||||
Reference in New Issue
Block a user