三浦 颯太
/
MainBoard2019_LineHub_ver2
waaaa
RingBuffer/RingBuffer.cpp@1:9b6f10b4bc71, 2019-11-07 (annotated)
- 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?
User | Revision | Line number | New 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 | } |