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/RingBuffer.cpp
- Committer:
- yabahiro
- Date:
- 2019-09-18
- Revision:
- 1:fe3f80c4beeb
- Parent:
- 0:0311bb0b38f7
File content as of revision 1:fe3f80c4beeb:
/*
* RingBuffer.cpp
*
* Created: 2016/08/10 12:14:47
* Author: masuk
*/
#include "mbed.h"
#include "RingBuffer.h"
namespace RINGBUFFER
{
RingBuffer::RingBuffer(char *bufPtr, int size)
{
Buffer.data = bufPtr;
Buffer.size = size;
Buffer.top = 0;
Buffer.bottom = 0;
Buffer.fullup = false;
}
void RingBuffer::PutData(char data, bool ASCIItoNum /* = false */)
{
__disable_irq();
if(!Buffer.fullup)
{
if(ASCIItoNum) Buffer.data[Buffer.top] = data+48;
else Buffer.data[Buffer.top] = data;
Buffer.length++;
Buffer.top++;
Buffer.top %= Buffer.size;
Buffer.fullup = false;
if(Buffer.length>=Buffer.size) Buffer.fullup = true;
}
__enable_irq();
}
void RingBuffer::PutData(char *data, int length)
{
__disable_irq();
for(int i=0; i<length; i++)
{
if(!Buffer.fullup)
{
Buffer.data[Buffer.top] = data[i];
Buffer.length++;
Buffer.top++;
Buffer.top %= Buffer.size;
Buffer.fullup = false;
if(Buffer.length>=Buffer.size) Buffer.fullup = true;
}
}
__enable_irq();
}
void RingBuffer::PutData(const char *str)
{
__disable_irq();
for( ; *str!='\0'; str++)
{
if(!Buffer.fullup)
{
Buffer.data[Buffer.top] = *str;
Buffer.length++;
Buffer.top++;
Buffer.top %= Buffer.size;
if(Buffer.length>=Buffer.size) Buffer.fullup = true;
else Buffer.fullup = false;
}
}
__enable_irq();
}
char RingBuffer::GetData()
{
__disable_irq();
char data;
if(Buffer.length > 0)
{
data = Buffer.data[Buffer.bottom];
Buffer.length--;
Buffer.bottom++;
Buffer.bottom %= Buffer.size;
if(Buffer.length<Buffer.size) Buffer.fullup = false;
}
else data = '\0';
__enable_irq();
return data;
}
bool RingBuffer::IsFullup()
{
return Buffer.fullup;
}
bool RingBuffer::InAnyData()
{
if(Buffer.length > 0) return true;
else return false;
}
}