.
Revision 0:4e9c66d8d35b, committed 2022-01-23
- Comitter:
- anyela
- Date:
- Sun Jan 23 04:56:27 2022 +0000
- Commit message:
- .
Changed in this revision
Circular_buffer.cpp | Show annotated file Show diff for this revision Revisions of this file |
Circular_buffer.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Circular_buffer.cpp Sun Jan 23 04:56:27 2022 +0000 @@ -0,0 +1,68 @@ +#include "Circular_buffer.h" + + +// // Función que resetea el buffer +int circ_buf_rst(circ_buf_t * cbuf) +{ + int r = -1; + + if(cbuf) + { + cbuf->head = 0; + cbuf->tail = 0; + r = 0; + } + + return r; +} + +// Función para verificar si el buffer está vacío +bool circ_buf_empty(circ_buf_t cbuf) // le entra la estructura, no el puntero +{ + return (cbuf.head == cbuf.tail); // cabeza igual a cola +} + + +// Función para verificar si el buffer está lleno +bool circ_buf_full(circ_buf_t cbuf) +{ + return ((cbuf.head + 1) % cbuf.size) == cbuf.tail; +} + +// Función para agregar datos al buffer circular +int circ_buf_put(circ_buf_t * cbuf, uint8_t data) +{ + int r = -1; + + if(cbuf) + { + cbuf->buffer[cbuf->head] = data; + cbuf->head = (cbuf->head + 1) % cbuf->size; + + if(cbuf->head == cbuf->tail) + { + cbuf->tail = (cbuf->tail + 1) % cbuf->size; + } + + r = 0; + } + + return r; +} + +// Función para obtener datos del buffer +int circ_buf_get(circ_buf_t * cbuf, uint8_t * data) +{ + int r = -1; + + if(cbuf && data && !circ_buf_empty(*cbuf)) + { + *data = cbuf->buffer[cbuf->tail]; + cbuf->tail = (cbuf->tail + 1) % cbuf->size; + + r = 0; + } + + return r; +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Circular_buffer.h Sun Jan 23 04:56:27 2022 +0000 @@ -0,0 +1,25 @@ +#include "mbed.h" + +#ifndef Circular_buffer_H +#define Circular_buffer_H + + +typedef struct { + uint8_t *buffer; + size_t head; + size_t tail; + size_t size; //of the buffer +} circ_buf_t; + +// Función que resetea el buffer +int circ_buf_rst(circ_buf_t * cbuf); +// Función para agregar datos al buffer circular +int circ_buf_put(circ_buf_t * cbuf, uint8_t data); +// Función para obtener datos del buffer +int circ_buf_get(circ_buf_t * cbuf, uint8_t * data); +// Función para verificar si el buffer está vacío +bool circ_buf_empty(circ_buf_t cbuf); +// Función para verificar si el buffer está lleno +bool circ_buf_full(circ_buf_t cbuf); + +#endif \ No newline at end of file