Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 Fri Jul 29 2022 21:11:52 by
