ECE 4180 - Final Project Team / Mbed 2 deprecated WalkieTalkie

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

Committer:
Nurchu
Date:
Fri Apr 20 18:39:20 2018 +0000
Revision:
20:e068469ffb89
Parent:
17:604f9c4bd6d3
Child:
29:0c6f3c0c992a
Cleaned up some comments/code; Compiles now

Who changed what in which revision?

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