waaaa

Dependencies:   mbed

Committer:
M_souta
Date:
Thu Nov 07 11:15:29 2019 +0000
Revision:
1:9b6f10b4bc71
Parent:
0:cb29cf2767cd
ver2.0.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
M_souta 0:cb29cf2767cd 1 /*
M_souta 0:cb29cf2767cd 2 * RingBuffer.cpp
M_souta 0:cb29cf2767cd 3 *
M_souta 0:cb29cf2767cd 4 * Created: 2016/08/10 12:14:47
M_souta 0:cb29cf2767cd 5 * Author: masuk
M_souta 0:cb29cf2767cd 6 */
M_souta 0:cb29cf2767cd 7
M_souta 0:cb29cf2767cd 8 #include "mbed.h"
M_souta 0:cb29cf2767cd 9 #include "RingBuffer.h"
M_souta 0:cb29cf2767cd 10
M_souta 0:cb29cf2767cd 11 namespace RINGBUFFER
M_souta 0:cb29cf2767cd 12 {
M_souta 0:cb29cf2767cd 13
M_souta 0:cb29cf2767cd 14 RingBuffer::RingBuffer(char *bufPtr, int size)
M_souta 0:cb29cf2767cd 15 {
M_souta 0:cb29cf2767cd 16 Buffer.data = bufPtr;
M_souta 0:cb29cf2767cd 17 Buffer.size = size;
M_souta 0:cb29cf2767cd 18 Buffer.top = 0;
M_souta 0:cb29cf2767cd 19 Buffer.bottom = 0;
M_souta 0:cb29cf2767cd 20 Buffer.fullup = false;
M_souta 0:cb29cf2767cd 21 }
M_souta 0:cb29cf2767cd 22
M_souta 0:cb29cf2767cd 23 void RingBuffer::PutData(char data, bool ASCIItoNum /* = false */)
M_souta 0:cb29cf2767cd 24 {
M_souta 0:cb29cf2767cd 25 __disable_irq();
M_souta 0:cb29cf2767cd 26 if(!Buffer.fullup)
M_souta 0:cb29cf2767cd 27 {
M_souta 0:cb29cf2767cd 28 if(ASCIItoNum) Buffer.data[Buffer.top] = data+48;
M_souta 0:cb29cf2767cd 29 else Buffer.data[Buffer.top] = data;
M_souta 0:cb29cf2767cd 30 Buffer.length++;
M_souta 0:cb29cf2767cd 31 Buffer.top++;
M_souta 0:cb29cf2767cd 32 Buffer.top %= Buffer.size;
M_souta 0:cb29cf2767cd 33 Buffer.fullup = false;
M_souta 0:cb29cf2767cd 34 if(Buffer.length>=Buffer.size) Buffer.fullup = true;
M_souta 0:cb29cf2767cd 35 }
M_souta 0:cb29cf2767cd 36 __enable_irq();
M_souta 0:cb29cf2767cd 37 }
M_souta 0:cb29cf2767cd 38
M_souta 0:cb29cf2767cd 39 void RingBuffer::PutData(char *data, int length)
M_souta 0:cb29cf2767cd 40 {
M_souta 0:cb29cf2767cd 41 __disable_irq();
M_souta 0:cb29cf2767cd 42 for(int i=0; i<length; i++)
M_souta 0:cb29cf2767cd 43 {
M_souta 0:cb29cf2767cd 44 if(!Buffer.fullup)
M_souta 0:cb29cf2767cd 45 {
M_souta 0:cb29cf2767cd 46 Buffer.data[Buffer.top] = data[i];
M_souta 0:cb29cf2767cd 47 Buffer.length++;
M_souta 0:cb29cf2767cd 48 Buffer.top++;
M_souta 0:cb29cf2767cd 49 Buffer.top %= Buffer.size;
M_souta 0:cb29cf2767cd 50 Buffer.fullup = false;
M_souta 0:cb29cf2767cd 51 if(Buffer.length>=Buffer.size) Buffer.fullup = true;
M_souta 0:cb29cf2767cd 52 }
M_souta 0:cb29cf2767cd 53 }
M_souta 0:cb29cf2767cd 54 __enable_irq();
M_souta 0:cb29cf2767cd 55 }
M_souta 0:cb29cf2767cd 56
M_souta 0:cb29cf2767cd 57 void RingBuffer::PutData(const char *str)
M_souta 0:cb29cf2767cd 58 {
M_souta 0:cb29cf2767cd 59 __disable_irq();
M_souta 0:cb29cf2767cd 60 for( ; *str!='\0'; str++)
M_souta 0:cb29cf2767cd 61 {
M_souta 0:cb29cf2767cd 62 if(!Buffer.fullup)
M_souta 0:cb29cf2767cd 63 {
M_souta 0:cb29cf2767cd 64 Buffer.data[Buffer.top] = *str;
M_souta 0:cb29cf2767cd 65 Buffer.length++;
M_souta 0:cb29cf2767cd 66 Buffer.top++;
M_souta 0:cb29cf2767cd 67 Buffer.top %= Buffer.size;
M_souta 0:cb29cf2767cd 68 if(Buffer.length>=Buffer.size) Buffer.fullup = true;
M_souta 0:cb29cf2767cd 69 else Buffer.fullup = false;
M_souta 0:cb29cf2767cd 70 }
M_souta 0:cb29cf2767cd 71 }
M_souta 0:cb29cf2767cd 72 __enable_irq();
M_souta 0:cb29cf2767cd 73 }
M_souta 0:cb29cf2767cd 74
M_souta 0:cb29cf2767cd 75 char RingBuffer::GetData()
M_souta 0:cb29cf2767cd 76 {
M_souta 0:cb29cf2767cd 77 __disable_irq();
M_souta 0:cb29cf2767cd 78 char data;
M_souta 0:cb29cf2767cd 79 if(Buffer.length > 0)
M_souta 0:cb29cf2767cd 80 {
M_souta 0:cb29cf2767cd 81 data = Buffer.data[Buffer.bottom];
M_souta 0:cb29cf2767cd 82 Buffer.length--;
M_souta 0:cb29cf2767cd 83 Buffer.bottom++;
M_souta 0:cb29cf2767cd 84 Buffer.bottom %= Buffer.size;
M_souta 0:cb29cf2767cd 85 if(Buffer.length<Buffer.size) Buffer.fullup = false;
M_souta 0:cb29cf2767cd 86 }
M_souta 0:cb29cf2767cd 87 else data = '\0';
M_souta 0:cb29cf2767cd 88 __enable_irq();
M_souta 0:cb29cf2767cd 89 return data;
M_souta 0:cb29cf2767cd 90 }
M_souta 0:cb29cf2767cd 91
M_souta 0:cb29cf2767cd 92 bool RingBuffer::IsFullup()
M_souta 0:cb29cf2767cd 93 {
M_souta 0:cb29cf2767cd 94 return Buffer.fullup;
M_souta 0:cb29cf2767cd 95 }
M_souta 0:cb29cf2767cd 96
M_souta 0:cb29cf2767cd 97 bool RingBuffer::InAnyData()
M_souta 0:cb29cf2767cd 98 {
M_souta 0:cb29cf2767cd 99 if(Buffer.length > 0) return true;
M_souta 0:cb29cf2767cd 100 else return false;
M_souta 0:cb29cf2767cd 101 }
M_souta 0:cb29cf2767cd 102
M_souta 0:cb29cf2767cd 103 }