.
Circular_buffer.cpp@0:4e9c66d8d35b, 2022-01-23 (annotated)
- Committer:
- anyela
- Date:
- Sun Jan 23 04:56:27 2022 +0000
- Revision:
- 0:4e9c66d8d35b
.
Who changed what in which revision?
User | Revision | Line number | New 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 |