GPS Device
Loading...
Searching...
No Matches
cbuf.c
Go to the documentation of this file.
1
11
12#include "cbuf.h"
13#include "err.h"
14#include <stdint.h>
15
20
22ERR_te cbuf_read(CBUF_HANDLE_ts *cbuf_handle, uint8_t* output_buf_o) {
23 uint8_t len = 0;
24
25 while(1) {
26 cbuf_len(cbuf_handle, &len);
27
28 if(len == 0) {
29 break;
30 }
31
32 *output_buf_o = cbuf_handle->ptr[cbuf_handle->read_position];
33 output_buf_o++;
34 cbuf_handle->read_position = (cbuf_handle->read_position + 1) & (cbuf_handle->size - 1);
35 }
36
37 return ERR_OK;
38}
39
41ERR_te cbuf_write(CBUF_HANDLE_ts *cbuf_handle, uint8_t* input_buf, uint32_t input_len) {
42 uint8_t len;
43
44 while(input_len != 0) {
45 cbuf_len(cbuf_handle, &len);
46
47 if(len == cbuf_handle->size - 1) {
48 return ERR_BUFFER_FULL;
49 }
50
51 cbuf_handle->ptr[cbuf_handle->write_position] = *input_buf;
52 input_len--;
53 input_buf++;
54 cbuf_handle->write_position = (cbuf_handle->write_position + 1) & (cbuf_handle->size - 1);
55 }
56
57 return ERR_OK;
58}
59
61ERR_te cbuf_len(CBUF_HANDLE_ts const *cbuf_handle, uint8_t *len_o) {
62 *len_o = (cbuf_handle->write_position - cbuf_handle->read_position) & (cbuf_handle->size - 1);
63
64 return ERR_OK;
65}
66
Circular buffer module public API.
System-wide error code definitions.
ERR_te cbuf_read(CBUF_HANDLE_ts *cbuf_handle, uint8_t *output_buf_o)
Reads all available data from the circular buffer.
Definition cbuf.c:22
ERR_te cbuf_len(CBUF_HANDLE_ts const *cbuf_handle, uint8_t *len_o)
Returns the number of bytes currently stored in the circular buffer.
Definition cbuf.c:61
ERR_te cbuf_write(CBUF_HANDLE_ts *cbuf_handle, uint8_t *input_buf, uint32_t input_len)
Writes data from an input buffer into the circular buffer.
Definition cbuf.c:41
ERR_te
Standard return type used by all public API functions.
Definition err.h:35
@ ERR_BUFFER_FULL
Definition err.h:48
@ ERR_OK
Definition err.h:36
Handle representing a circular buffer instance.
Definition cbuf.h:60
uint8_t size
Definition cbuf.h:65
uint8_t * ptr
Definition cbuf.h:62
uint8_t write_position
Definition cbuf.h:71
uint8_t read_position
Definition cbuf.h:68