Taiki Maruyama
/
MainBoard2018_Auto_Master_A_neww
aaaaaaaaa
Fork of MainBoard2018_Auto_Master_A_new by
Embed:
(wiki syntax)
Show/hide line numbers
RingBuffer.cpp
00001 /* 00002 * RingBuffer.cpp 00003 * 00004 * Created: 2016/08/10 12:14:47 00005 * Author: masuk 00006 */ 00007 00008 #include "mbed.h" 00009 #include "RingBuffer.h" 00010 00011 namespace RINGBUFFER 00012 { 00013 00014 RingBuffer::RingBuffer(char *bufPtr, int size) 00015 { 00016 Buffer.data = bufPtr; 00017 Buffer.size = size; 00018 Buffer.top = 0; 00019 Buffer.bottom = 0; 00020 Buffer.fullup = false; 00021 } 00022 00023 void RingBuffer::PutData(char data, bool ASCIItoNum /* = false */) 00024 { 00025 __disable_irq(); 00026 if(!Buffer.fullup) 00027 { 00028 if(ASCIItoNum) Buffer.data[Buffer.top] = data+48; 00029 else Buffer.data[Buffer.top] = data; 00030 Buffer.length++; 00031 Buffer.top++; 00032 Buffer.top %= Buffer.size; 00033 Buffer.fullup = false; 00034 if(Buffer.length>=Buffer.size) Buffer.fullup = true; 00035 } 00036 __enable_irq(); 00037 } 00038 00039 void RingBuffer::PutData(char *data, int length) 00040 { 00041 __disable_irq(); 00042 for(int i=0; i<length; i++) 00043 { 00044 if(!Buffer.fullup) 00045 { 00046 Buffer.data[Buffer.top] = data[i]; 00047 Buffer.length++; 00048 Buffer.top++; 00049 Buffer.top %= Buffer.size; 00050 Buffer.fullup = false; 00051 if(Buffer.length>=Buffer.size) Buffer.fullup = true; 00052 } 00053 } 00054 __enable_irq(); 00055 } 00056 00057 void RingBuffer::PutData(const char *str) 00058 { 00059 __disable_irq(); 00060 for( ; *str!='\0'; str++) 00061 { 00062 if(!Buffer.fullup) 00063 { 00064 Buffer.data[Buffer.top] = *str; 00065 Buffer.length++; 00066 Buffer.top++; 00067 Buffer.top %= Buffer.size; 00068 if(Buffer.length>=Buffer.size) Buffer.fullup = true; 00069 else Buffer.fullup = false; 00070 } 00071 } 00072 __enable_irq(); 00073 } 00074 00075 char RingBuffer::GetData() 00076 { 00077 __disable_irq(); 00078 char data; 00079 if(Buffer.length > 0) 00080 { 00081 data = Buffer.data[Buffer.bottom]; 00082 Buffer.length--; 00083 Buffer.bottom++; 00084 Buffer.bottom %= Buffer.size; 00085 if(Buffer.length<Buffer.size) Buffer.fullup = false; 00086 } 00087 else data = '\0'; 00088 __enable_irq(); 00089 return data; 00090 } 00091 00092 bool RingBuffer::IsFullup() 00093 { 00094 return Buffer.fullup; 00095 } 00096 00097 bool RingBuffer::InAnyData() 00098 { 00099 if(Buffer.length > 0) return true; 00100 else return false; 00101 } 00102 00103 }
Generated on Wed Jul 13 2022 01:10:06 by 1.7.2