forked from haraldwolff/avr-fw-modules
40 lines
650 B
C
40 lines
650 B
C
|
#pragma once
|
||
|
|
||
|
#include <sys/atomic.h>
|
||
|
#include <sys/errno.h>
|
||
|
|
||
|
#include <stdint.h>
|
||
|
|
||
|
typedef struct {
|
||
|
uint16_t size;
|
||
|
uint16_t pos;
|
||
|
uint8_t *buffer;
|
||
|
} buffer_t;
|
||
|
|
||
|
static inline int buffer_set(buffer_t *buffer,void *mem,int size){
|
||
|
if (buffer){
|
||
|
ATOMIC
|
||
|
|
||
|
buffer->buffer = mem;
|
||
|
buffer->pos = 0;
|
||
|
buffer->size = size;
|
||
|
return ESUCCESS;
|
||
|
};
|
||
|
return -ENULLPTR;
|
||
|
};
|
||
|
|
||
|
static inline int buffer_pos(buffer_t *buffer){
|
||
|
ATOMIC
|
||
|
|
||
|
return (buffer) ? buffer->pos : -ENULLPTR;
|
||
|
};
|
||
|
|
||
|
static inline int buffer_free(buffer_t *buffer){
|
||
|
ATOMIC
|
||
|
|
||
|
return (buffer) ? (buffer->size - buffer->pos) : -ENULLPTR;
|
||
|
};
|
||
|
|
||
|
#define buffer_byte(b) ((b)->buffer[(b)->pos++])
|
||
|
|