For robots and stuff

Dependents:   Base Station

Committer:
jjones646
Date:
Wed Dec 31 22:16:01 2014 +0000
Revision:
2:c42a035d71ed
Parent:
1:05a48c038381
adding dummy cc1101 support

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jjones646 0:c5afea7b9057 1 /*
jjones646 0:c5afea7b9057 2 * mbed library for RingBuffer
jjones646 0:c5afea7b9057 3 * Copyright (c) 2010 Hiroshi Suga
jjones646 0:c5afea7b9057 4 * Released under the MIT License: http://mbed.org/license/mit
jjones646 0:c5afea7b9057 5 */
jjones646 0:c5afea7b9057 6
jjones646 0:c5afea7b9057 7 #include "RingBuffer.h"
jjones646 0:c5afea7b9057 8
jjones646 0:c5afea7b9057 9 RingBuffer::RingBuffer ()
jjones646 0:c5afea7b9057 10 {
jjones646 0:c5afea7b9057 11 init(0);
jjones646 0:c5afea7b9057 12 }
jjones646 0:c5afea7b9057 13
jjones646 0:c5afea7b9057 14 RingBuffer::RingBuffer (unsigned int p_size)
jjones646 0:c5afea7b9057 15 {
jjones646 0:c5afea7b9057 16 init(p_size);
jjones646 0:c5afea7b9057 17 }
jjones646 0:c5afea7b9057 18
jjones646 0:c5afea7b9057 19 void RingBuffer::init(unsigned int p_size)
jjones646 0:c5afea7b9057 20 {
jjones646 0:c5afea7b9057 21 size = p_size + 1;
jjones646 0:c5afea7b9057 22 buf = new unsigned char[size];
jjones646 0:c5afea7b9057 23 addr_w = 0;
jjones646 0:c5afea7b9057 24 addr_r = 0;
jjones646 0:c5afea7b9057 25 }
jjones646 0:c5afea7b9057 26
jjones646 0:c5afea7b9057 27 int RingBuffer::_putc (int dat)
jjones646 0:c5afea7b9057 28 {
jjones646 0:c5afea7b9057 29 int next = (addr_w + 1) % size;
jjones646 0:c5afea7b9057 30 if (next == addr_r) {
jjones646 0:c5afea7b9057 31 return -1;
jjones646 0:c5afea7b9057 32 }
jjones646 0:c5afea7b9057 33 buf[addr_w] = dat;
jjones646 0:c5afea7b9057 34 addr_w = next;
jjones646 0:c5afea7b9057 35 return dat;
jjones646 0:c5afea7b9057 36 }
jjones646 0:c5afea7b9057 37
jjones646 0:c5afea7b9057 38 int RingBuffer::put (char *dat, int len)
jjones646 0:c5afea7b9057 39 {
jjones646 0:c5afea7b9057 40 int next, i;
jjones646 0:c5afea7b9057 41
jjones646 0:c5afea7b9057 42 for (i = 0; i < len; i ++) {
jjones646 0:c5afea7b9057 43 next = (addr_w + 1) % size;
jjones646 0:c5afea7b9057 44 if (next == addr_r) {
jjones646 0:c5afea7b9057 45 break;
jjones646 0:c5afea7b9057 46 }
jjones646 0:c5afea7b9057 47 buf[addr_w] = dat[i];
jjones646 0:c5afea7b9057 48 addr_w = next;
jjones646 0:c5afea7b9057 49 }
jjones646 0:c5afea7b9057 50 return i;
jjones646 0:c5afea7b9057 51 }
jjones646 0:c5afea7b9057 52
jjones646 0:c5afea7b9057 53 int RingBuffer::_getc (void)
jjones646 0:c5afea7b9057 54 {
jjones646 0:c5afea7b9057 55 char dat;
jjones646 0:c5afea7b9057 56 if (addr_r == addr_w) {
jjones646 0:c5afea7b9057 57 return 0;
jjones646 0:c5afea7b9057 58 }
jjones646 0:c5afea7b9057 59 dat = buf[addr_r];
jjones646 0:c5afea7b9057 60 addr_r = (addr_r + 1) % size;
jjones646 0:c5afea7b9057 61 return dat;
jjones646 0:c5afea7b9057 62 }
jjones646 0:c5afea7b9057 63
jjones646 0:c5afea7b9057 64 int RingBuffer::get (char *dat, int len)
jjones646 0:c5afea7b9057 65 {
jjones646 0:c5afea7b9057 66 int i;
jjones646 0:c5afea7b9057 67
jjones646 0:c5afea7b9057 68 for (i = 0; i < len; i ++) {
jjones646 0:c5afea7b9057 69 if (addr_r == addr_w) {
jjones646 0:c5afea7b9057 70 break;
jjones646 0:c5afea7b9057 71 }
jjones646 0:c5afea7b9057 72 dat[i] = buf[addr_r];
jjones646 0:c5afea7b9057 73 addr_r = (addr_r + 1) % size;
jjones646 0:c5afea7b9057 74 }
jjones646 0:c5afea7b9057 75 return i;
jjones646 0:c5afea7b9057 76 }
jjones646 0:c5afea7b9057 77
jjones646 0:c5afea7b9057 78 int RingBuffer::available ()
jjones646 0:c5afea7b9057 79 {
jjones646 0:c5afea7b9057 80 if (addr_w < addr_r) {
jjones646 0:c5afea7b9057 81 return addr_r - addr_w - 1;
jjones646 0:c5afea7b9057 82 } else {
jjones646 0:c5afea7b9057 83 return (size - addr_w) + addr_r - 1;
jjones646 0:c5afea7b9057 84 }
jjones646 0:c5afea7b9057 85 }
jjones646 0:c5afea7b9057 86
jjones646 0:c5afea7b9057 87 int RingBuffer::use ()
jjones646 0:c5afea7b9057 88 {
jjones646 0:c5afea7b9057 89 return size - available() - 1;
jjones646 0:c5afea7b9057 90 }
jjones646 0:c5afea7b9057 91
jjones646 0:c5afea7b9057 92 void RingBuffer::clear ()
jjones646 0:c5afea7b9057 93 {
jjones646 0:c5afea7b9057 94 addr_w = 0;
jjones646 0:c5afea7b9057 95 addr_r = 0;
jjones646 0:c5afea7b9057 96 }