ECE 4180 - Final Project Team / Mbed 2 deprecated WalkieTalkie

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

Committer:
Nurchu
Date:
Mon Apr 23 15:03:21 2018 +0000
Revision:
29:0c6f3c0c992a
Parent:
20:e068469ffb89
Child:
31:39d04aedc3e5
Debugging CircularBuf

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 29:0c6f3c0c992a 5 CircularBuf<T>::CircularBuf(unsigned int size) : _size(size), _head(-1), _tail(-1) {
Nurchu 17:604f9c4bd6d3 6 _data = new 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 17:604f9c4bd6d3 11 delete _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 29:0c6f3c0c992a 42 printf("Next %d\n\r", next);
Nurchu 17:604f9c4bd6d3 43 if (next >= size)
Nurchu 17:604f9c4bd6d3 44 next = 0;
Nurchu 29:0c6f3c0c992a 45
Nurchu 29:0c6f3c0c992a 46 printf("Head %d\n\r", _head);
Nurchu 17:604f9c4bd6d3 47 if (next == _head)
Nurchu 17:604f9c4bd6d3 48 return cnt;
Nurchu 17:604f9c4bd6d3 49
Nurchu 29:0c6f3c0c992a 50 printf("Tail %d\n\r", _tail);
Nurchu 29:0c6f3c0c992a 51 printf("Cnt %d\n\r", cnt);
Nurchu 29:0c6f3c0c992a 52 printf("Data[cnt] %d\n\r", data[cnt]);
Nurchu 29:0c6f3c0c992a 53 printf("_Data[next] %d\n\r", _data[next]);
Nurchu 29:0c6f3c0c992a 54 printf("&Data %x &_Data %x\n\r", data, &_data[0]);
Nurchu 17:604f9c4bd6d3 55 data[cnt] = _data[next];
Nurchu 17:604f9c4bd6d3 56 _tail = next;
Nurchu 29:0c6f3c0c992a 57 printf("Next %d\n\r", next);
Nurchu 29:0c6f3c0c992a 58 printf("Tail %d\n\r", _tail);
Nurchu 17:604f9c4bd6d3 59 cnt++;
Nurchu 17:604f9c4bd6d3 60 }
Nurchu 17:604f9c4bd6d3 61
Nurchu 17:604f9c4bd6d3 62 return cnt;
Nurchu 17:604f9c4bd6d3 63 }
Nurchu 16:d0d3bb2fc3ce 64
Nurchu 20:e068469ffb89 65 template <typename T>
Nurchu 20:e068469ffb89 66 unsigned int CircularBuf<T>::size() {
Nurchu 17:604f9c4bd6d3 67 int s = _head - _tail;
Nurchu 17:604f9c4bd6d3 68
Nurchu 17:604f9c4bd6d3 69 // If buffer overlaps end
Nurchu 17:604f9c4bd6d3 70 if (s < 0)
Nurchu 17:604f9c4bd6d3 71 s += _size;
Nurchu 17:604f9c4bd6d3 72
Nurchu 17:604f9c4bd6d3 73 return s;
Nurchu 17:604f9c4bd6d3 74 }
Nurchu 17:604f9c4bd6d3 75
Nurchu 20:e068469ffb89 76 template <typename T>
Nurchu 20:e068469ffb89 77 void CircularBuf<T>::clear() {
Nurchu 17:604f9c4bd6d3 78 _head = 0;
Nurchu 17:604f9c4bd6d3 79 _tail = 0;
Nurchu 17:604f9c4bd6d3 80 }