avr-fw-modules/core/include/util/util.h

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++])