大季 矢花 / Mbed 2 deprecated MainBoard2019_LineHub_Ateam

Dependencies:   mbed

Committer:
yabahiro
Date:
Wed Sep 18 00:22:34 2019 +0000
Revision:
1:fe3f80c4beeb
Parent:
0:0311bb0b38f7
aaa

Who changed what in which revision?

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