Open FFBoard
Open source force feedback firmware
ringbuffer.h
Go to the documentation of this file.
1#ifndef __RING_BUFFER_H_
2#define __RING_BUFFER_H_
3
4// Uncomment if your platform does not have memcopy implementation.
5// #define NO_MEM_COPY
6
7#include <stddef.h>
8#include <stdint.h>
9
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15typedef struct {
16 size_t tail;
17 size_t head;
18 size_t sizeMask;
19 uint8_t *data;
21
22// Init Data Structure.
23int ringBufferInit(RingBuffer *buffer, uint8_t *data, size_t len);
24
25// Returns ring buffer len.
26size_t ringBufferLen(const RingBuffer *buffer);
27
28// Returns whether the ringbuferr is empty.
29uint8_t ringBufferEmpty(const RingBuffer *buffer);
30
31// Available space left in the ringbuffer.
33
34// Maximum number of bytes this ring buffer can store.
36
37// Append one byte to the buffer.
39
40// Append multiple bytest to the buffer.
41void ringBufferAppendMultiple(RingBuffer *buffer, const uint8_t *data, size_t len);
42
43// Return the first element but don't remove it.
44uint8_t ringBufferPeekOne(const RingBuffer *buffer);
45
46// Return the first element and remove it from the buffer.
48
49// Return len number of bytes from the ring buffer.
50void ringBufferGetMultiple(RingBuffer *buffer, uint8_t *dst, size_t len);
51
52// Return len number of bytes without removing from the buffer.
53void ringBufferPeekMultiple(const RingBuffer *buffer, uint8_t *dst, size_t len);
54
55// Discard len bytes from the buffer.
57
58// Clean the buffer to th initial state.
60
61static inline int isMultipleTwo(size_t len)
62{
63 if(!(len && !(len & (len - 1)))) {
64 return 0;
65 } else {
66 return 1;
67 }
68}
69
70#ifdef __cplusplus
71 }
72#endif
73
74#endif
static struct @612 data
uint8_t const * buffer
Definition: midi_device.h:100
uint8_t ringBufferGetOne(RingBuffer *buffer)
Definition: ringbuffer.c:94
size_t ringBufferFreeSpace(const RingBuffer *buffer)
Definition: ringbuffer.c:64
size_t ringBufferLen(const RingBuffer *buffer)
Definition: ringbuffer.c:52
void ringBufferAppendOne(RingBuffer *buffer, uint8_t data)
Definition: ringbuffer.c:72
void ringBufferGetMultiple(RingBuffer *buffer, uint8_t *dst, size_t len)
Definition: ringbuffer.c:100
int ringBufferInit(RingBuffer *buffer, uint8_t *data, size_t len)
Definition: ringbuffer.c:40
size_t ringBufferMaxSize(const RingBuffer *buffer)
Definition: ringbuffer.c:68
void ringBufferAppendMultiple(RingBuffer *buffer, const uint8_t *data, size_t len)
Definition: ringbuffer.c:77
void ringBufferClear(RingBuffer *buffer)
Definition: ringbuffer.c:121
uint8_t ringBufferEmpty(const RingBuffer *buffer)
Definition: ringbuffer.c:60
void ringBufferDiscardMultiple(RingBuffer *buffer, size_t len)
Definition: ringbuffer.c:117
void ringBufferPeekMultiple(const RingBuffer *buffer, uint8_t *dst, size_t len)
Definition: ringbuffer.c:105
uint8_t ringBufferPeekOne(const RingBuffer *buffer)
Definition: ringbuffer.c:90
static int isMultipleTwo(size_t len)
Definition: ringbuffer.h:61
size_t head
Definition: ringbuffer.h:17
size_t tail
Definition: ringbuffer.h:16
size_t sizeMask
Definition: ringbuffer.h:18
uint8_t * data
Definition: ringbuffer.h:19