ECE 4180 - Final Project Team / Mbed 2 deprecated WalkieTalkie

Dependencies:   mbed 4DGL-uLCD-SE mbed-rtos nRF24L01P

Committer:
Nurchu
Date:
Mon Apr 23 15:29:18 2018 +0000
Revision:
31:39d04aedc3e5
Parent:
29:0c6f3c0c992a
Child:
32:c40d581f50af
Fixed bug with pop

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nurchu 16:d0d3bb2fc3ce 1 #include "CircularBuf.h"
Nurchu 29:0c6f3c0c992a 2 #include "stdio.h"
Nurchu 16:d0d3bb2fc3ce 3
Nurchu 20:e068469ffb89 4 template <typename T>
Nurchu 31:39d04aedc3e5 5 CircularBuf<T>::CircularBuf(unsigned int size) : _size(size), _head(size), _tail(size) {
Nurchu 31:39d04aedc3e5 6 _data = (T*)malloc(sizeof(T) * size);
Nurchu 17:604f9c4bd6d3 7 }
Nurchu 17:604f9c4bd6d3 8
Nurchu 20:e068469ffb89 9 template <typename T>
Nurchu 20:e068469ffb89 10 CircularBuf<T>::~CircularBuf() {
Nurchu 31:39d04aedc3e5 11 free(_data);
Nurchu 17:604f9c4bd6d3 12 }
Nurchu 17:604f9c4bd6d3 13
Nurchu 20:e068469ffb89 14 template <typename T>
Nurchu 20:e068469ffb89 15 unsigned int CircularBuf<T>::push(T* data, unsigned int size) {
Nurchu 17:604f9c4bd6d3 16 unsigned int cnt = 0;
Nurchu 17:604f9c4bd6d3 17
Nurchu 17:604f9c4bd6d3 18 for (int i = 0; i < size; i++) {
Nurchu 17:604f9c4bd6d3 19 unsigned int next = _head + 1;
Nurchu 17:604f9c4bd6d3 20
Nurchu 17:604f9c4bd6d3 21 if (next >= _size)
Nurchu 17:604f9c4bd6d3 22 next = 0;
Nurchu 17:604f9c4bd6d3 23
Nurchu 17:604f9c4bd6d3 24 if (next == _tail)
Nurchu 17:604f9c4bd6d3 25 return cnt;
Nurchu 17:604f9c4bd6d3 26
Nurchu 17:604f9c4bd6d3 27 _data[next] = data[cnt];
Nurchu 17:604f9c4bd6d3 28 _head = next;
Nurchu 17:604f9c4bd6d3 29 cnt++;
Nurchu 17:604f9c4bd6d3 30 }
Nurchu 17:604f9c4bd6d3 31
Nurchu 17:604f9c4bd6d3 32 return cnt;
Nurchu 17:604f9c4bd6d3 33 }
Nurchu 16:d0d3bb2fc3ce 34
Nurchu 20:e068469ffb89 35 template <typename T>
Nurchu 20:e068469ffb89 36 unsigned int CircularBuf<T>::pop(T* data, unsigned int size) {
Nurchu 17:604f9c4bd6d3 37 unsigned int cnt = 0;
Nurchu 17:604f9c4bd6d3 38
Nurchu 17:604f9c4bd6d3 39 for (int i = 0; i < size; i++) {
Nurchu 17:604f9c4bd6d3 40 unsigned int next = _tail + 1;
Nurchu 17:604f9c4bd6d3 41
Nurchu 31:39d04aedc3e5 42 if (next >= _size) {
Nurchu 17:604f9c4bd6d3 43 next = 0;
Nurchu 31:39d04aedc3e5 44 }
Nurchu 29:0c6f3c0c992a 45
Nurchu 31:39d04aedc3e5 46 if (next > _head)
Nurchu 17:604f9c4bd6d3 47 return cnt;
Nurchu 17:604f9c4bd6d3 48
Nurchu 17:604f9c4bd6d3 49 data[cnt] = _data[next];
Nurchu 17:604f9c4bd6d3 50 _tail = next;
Nurchu 17:604f9c4bd6d3 51 cnt++;
Nurchu 17:604f9c4bd6d3 52 }
Nurchu 17:604f9c4bd6d3 53
Nurchu 17:604f9c4bd6d3 54 return cnt;
Nurchu 17:604f9c4bd6d3 55 }
Nurchu 16:d0d3bb2fc3ce 56
Nurchu 20:e068469ffb89 57 template <typename T>
Nurchu 20:e068469ffb89 58 unsigned int CircularBuf<T>::size() {
Nurchu 17:604f9c4bd6d3 59 int s = _head - _tail;
Nurchu 17:604f9c4bd6d3 60
Nurchu 17:604f9c4bd6d3 61 // If buffer overlaps end
Nurchu 17:604f9c4bd6d3 62 if (s < 0)
Nurchu 17:604f9c4bd6d3 63 s += _size;
Nurchu 17:604f9c4bd6d3 64
Nurchu 17:604f9c4bd6d3 65 return s;
Nurchu 17:604f9c4bd6d3 66 }
Nurchu 17:604f9c4bd6d3 67
Nurchu 20:e068469ffb89 68 template <typename T>
Nurchu 20:e068469ffb89 69 void CircularBuf<T>::clear() {
Nurchu 17:604f9c4bd6d3 70 _head = 0;
Nurchu 17:604f9c4bd6d3 71 _tail = 0;
Nurchu 17:604f9c4bd6d3 72 }