avr-fw-modules/core/include/hwo/fifo.h

50 lines
983 B
C
Executable File

#pragma once
#include <stdint.h>
#include <hwo/systick.h>
struct fifo
{
uint8_t size;
uint8_t pWrite;
uint8_t pRead;
uint8_t *pBuffer;
union
{
struct {
uint8_t blocking:1; // Blocking Mode
uint8_t irq_rd:1, // fifo_read / fifo_poll called from IRQ (force non blocking)
irq_wr:1; // fifo_write called from IRQ (force non blocking)
};
uint8_t flags;
};
uint16_t timeout;
avrWAIT wtimeout;
};
typedef struct fifo FIFO;
// FIFO Options
#define FO_BLOCKING (1<<0)
#define FO_IRQ_RD (1<<1)
#define FO_IRQ_WR (1<<2)
FIFO* fifo_alloc (uint8_t size);
void fifo_write (FIFO* fifo,uint8_t byte);
uint16_t fifo_read (FIFO* fifo);
uint16_t fifo_poll (FIFO* fifo);
uint8_t fifo_avail (FIFO* fifo);
uint8_t fifo_free (FIFO* fifo);
void fifo_set_blocking(FIFO* fifo,uint8_t blocking);
void fifo_set_timeout(FIFO*fifo,uint16_t timeout);
void fifo_options(FIFO* fifo,uint8_t options);
uint16_t fifo_read_block (FIFO* fifo,uint8_t* buffer,int maxlen);