.

Committer:
alejo5214416
Date:
Sat Jul 28 01:29:23 2018 +0000
Revision:
0:72ef8c56fea0
Comunicacion maestro esclavo con confirmacion de 1S 1Y 1N para solicitudes y respuestas;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alejo5214416 0:72ef8c56fea0 1 #include "Buffer.h"
alejo5214416 0:72ef8c56fea0 2 #include "mbed.h"
alejo5214416 0:72ef8c56fea0 3
alejo5214416 0:72ef8c56fea0 4 int circular_buf_reset(circular_buf_t * cbuf)
alejo5214416 0:72ef8c56fea0 5 {
alejo5214416 0:72ef8c56fea0 6 int r = -1;
alejo5214416 0:72ef8c56fea0 7
alejo5214416 0:72ef8c56fea0 8 if(cbuf) {
alejo5214416 0:72ef8c56fea0 9 cbuf->head = 0;
alejo5214416 0:72ef8c56fea0 10 cbuf->tail = 0;
alejo5214416 0:72ef8c56fea0 11 cbuf->size = 0;
alejo5214416 0:72ef8c56fea0 12 r = 0;
alejo5214416 0:72ef8c56fea0 13 }
alejo5214416 0:72ef8c56fea0 14
alejo5214416 0:72ef8c56fea0 15 return r;
alejo5214416 0:72ef8c56fea0 16
alejo5214416 0:72ef8c56fea0 17 }
alejo5214416 0:72ef8c56fea0 18
alejo5214416 0:72ef8c56fea0 19 bool circular_buf_empty(circular_buf_t cbuf)
alejo5214416 0:72ef8c56fea0 20 {
alejo5214416 0:72ef8c56fea0 21 // We define empty as head == tail
alejo5214416 0:72ef8c56fea0 22 return (cbuf.head == cbuf.tail);
alejo5214416 0:72ef8c56fea0 23 }
alejo5214416 0:72ef8c56fea0 24
alejo5214416 0:72ef8c56fea0 25 bool circular_buf_full(circular_buf_t cbuf)
alejo5214416 0:72ef8c56fea0 26 {
alejo5214416 0:72ef8c56fea0 27 // We determine "full" case by head being one position behind the tail
alejo5214416 0:72ef8c56fea0 28 // Note that this means we are wasting one space in the buffer!
alejo5214416 0:72ef8c56fea0 29 // Instead, you could have an "empty" flag and determine buffer full that way
alejo5214416 0:72ef8c56fea0 30 return ((cbuf.head + 1) % cbuf.size) == cbuf.tail;
alejo5214416 0:72ef8c56fea0 31 }
alejo5214416 0:72ef8c56fea0 32
alejo5214416 0:72ef8c56fea0 33 int circular_buf_put(circular_buf_t * cbuf, uint8_t data)
alejo5214416 0:72ef8c56fea0 34 {
alejo5214416 0:72ef8c56fea0 35 int r = -1;
alejo5214416 0:72ef8c56fea0 36
alejo5214416 0:72ef8c56fea0 37 if(cbuf) {
alejo5214416 0:72ef8c56fea0 38 cbuf->buffer[cbuf->head] = data;
alejo5214416 0:72ef8c56fea0 39 cbuf->head = (cbuf->head + 1) % cbuf->size;
alejo5214416 0:72ef8c56fea0 40
alejo5214416 0:72ef8c56fea0 41 if(cbuf->head == cbuf->tail) {
alejo5214416 0:72ef8c56fea0 42 cbuf->tail = (cbuf->tail + 1) % cbuf->size;
alejo5214416 0:72ef8c56fea0 43 }
alejo5214416 0:72ef8c56fea0 44
alejo5214416 0:72ef8c56fea0 45 r = 0;
alejo5214416 0:72ef8c56fea0 46 }
alejo5214416 0:72ef8c56fea0 47
alejo5214416 0:72ef8c56fea0 48 return r;
alejo5214416 0:72ef8c56fea0 49 }
alejo5214416 0:72ef8c56fea0 50
alejo5214416 0:72ef8c56fea0 51 int circular_buf_get(circular_buf_t * cbuf, uint8_t * data)
alejo5214416 0:72ef8c56fea0 52 {
alejo5214416 0:72ef8c56fea0 53 int r = -1;
alejo5214416 0:72ef8c56fea0 54
alejo5214416 0:72ef8c56fea0 55 if(cbuf && data && !circular_buf_empty(*cbuf)) {
alejo5214416 0:72ef8c56fea0 56 *data = cbuf->buffer[cbuf->tail];
alejo5214416 0:72ef8c56fea0 57 cbuf->tail = (cbuf->tail + 1) % cbuf->size;
alejo5214416 0:72ef8c56fea0 58
alejo5214416 0:72ef8c56fea0 59 r = 0;
alejo5214416 0:72ef8c56fea0 60 }
alejo5214416 0:72ef8c56fea0 61
alejo5214416 0:72ef8c56fea0 62 return r;
alejo5214416 0:72ef8c56fea0 63 }