.

Committer:
anyela
Date:
Sun Jan 23 04:56:27 2022 +0000
Revision:
0:4e9c66d8d35b
.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
anyela 0:4e9c66d8d35b 1 #include "Circular_buffer.h"
anyela 0:4e9c66d8d35b 2
anyela 0:4e9c66d8d35b 3
anyela 0:4e9c66d8d35b 4 // // Función que resetea el buffer
anyela 0:4e9c66d8d35b 5 int circ_buf_rst(circ_buf_t * cbuf)
anyela 0:4e9c66d8d35b 6 {
anyela 0:4e9c66d8d35b 7 int r = -1;
anyela 0:4e9c66d8d35b 8
anyela 0:4e9c66d8d35b 9 if(cbuf)
anyela 0:4e9c66d8d35b 10 {
anyela 0:4e9c66d8d35b 11 cbuf->head = 0;
anyela 0:4e9c66d8d35b 12 cbuf->tail = 0;
anyela 0:4e9c66d8d35b 13 r = 0;
anyela 0:4e9c66d8d35b 14 }
anyela 0:4e9c66d8d35b 15
anyela 0:4e9c66d8d35b 16 return r;
anyela 0:4e9c66d8d35b 17 }
anyela 0:4e9c66d8d35b 18
anyela 0:4e9c66d8d35b 19 // Función para verificar si el buffer está vacío
anyela 0:4e9c66d8d35b 20 bool circ_buf_empty(circ_buf_t cbuf) // le entra la estructura, no el puntero
anyela 0:4e9c66d8d35b 21 {
anyela 0:4e9c66d8d35b 22 return (cbuf.head == cbuf.tail); // cabeza igual a cola
anyela 0:4e9c66d8d35b 23 }
anyela 0:4e9c66d8d35b 24
anyela 0:4e9c66d8d35b 25
anyela 0:4e9c66d8d35b 26 // Función para verificar si el buffer está lleno
anyela 0:4e9c66d8d35b 27 bool circ_buf_full(circ_buf_t cbuf)
anyela 0:4e9c66d8d35b 28 {
anyela 0:4e9c66d8d35b 29 return ((cbuf.head + 1) % cbuf.size) == cbuf.tail;
anyela 0:4e9c66d8d35b 30 }
anyela 0:4e9c66d8d35b 31
anyela 0:4e9c66d8d35b 32 // Función para agregar datos al buffer circular
anyela 0:4e9c66d8d35b 33 int circ_buf_put(circ_buf_t * cbuf, uint8_t data)
anyela 0:4e9c66d8d35b 34 {
anyela 0:4e9c66d8d35b 35 int r = -1;
anyela 0:4e9c66d8d35b 36
anyela 0:4e9c66d8d35b 37 if(cbuf)
anyela 0:4e9c66d8d35b 38 {
anyela 0:4e9c66d8d35b 39 cbuf->buffer[cbuf->head] = data;
anyela 0:4e9c66d8d35b 40 cbuf->head = (cbuf->head + 1) % cbuf->size;
anyela 0:4e9c66d8d35b 41
anyela 0:4e9c66d8d35b 42 if(cbuf->head == cbuf->tail)
anyela 0:4e9c66d8d35b 43 {
anyela 0:4e9c66d8d35b 44 cbuf->tail = (cbuf->tail + 1) % cbuf->size;
anyela 0:4e9c66d8d35b 45 }
anyela 0:4e9c66d8d35b 46
anyela 0:4e9c66d8d35b 47 r = 0;
anyela 0:4e9c66d8d35b 48 }
anyela 0:4e9c66d8d35b 49
anyela 0:4e9c66d8d35b 50 return r;
anyela 0:4e9c66d8d35b 51 }
anyela 0:4e9c66d8d35b 52
anyela 0:4e9c66d8d35b 53 // Función para obtener datos del buffer
anyela 0:4e9c66d8d35b 54 int circ_buf_get(circ_buf_t * cbuf, uint8_t * data)
anyela 0:4e9c66d8d35b 55 {
anyela 0:4e9c66d8d35b 56 int r = -1;
anyela 0:4e9c66d8d35b 57
anyela 0:4e9c66d8d35b 58 if(cbuf && data && !circ_buf_empty(*cbuf))
anyela 0:4e9c66d8d35b 59 {
anyela 0:4e9c66d8d35b 60 *data = cbuf->buffer[cbuf->tail];
anyela 0:4e9c66d8d35b 61 cbuf->tail = (cbuf->tail + 1) % cbuf->size;
anyela 0:4e9c66d8d35b 62
anyela 0:4e9c66d8d35b 63 r = 0;
anyela 0:4e9c66d8d35b 64 }
anyela 0:4e9c66d8d35b 65
anyela 0:4e9c66d8d35b 66 return r;
anyela 0:4e9c66d8d35b 67 }
anyela 0:4e9c66d8d35b 68