test

Dependencies:   Nanopb iSerial mbed BaseJpegDecode FatFileSystem SDFileSystem RingBuffer Camera_LS_Y201

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers RingBuffer.cpp Source File

RingBuffer.cpp

00001 //
00002 //  RingBuffer.cpp ... General purpose ring buffer library
00003 //
00004 //  Copyright 2012  Yoji KURODA
00005 //
00006 //  2009.11.13 ... Originally written in C by Y.Kuroda for Renesas H83664
00007 //  2012.08.31 ... Code convert for mbed in C++
00008 //
00009 
00010 #include "string.h"
00011 #include "RingBuffer.h"
00012 
00013 
00014 /*
00015  *    Machine Independent Area
00016  */
00017 RingBuffer::RingBuffer(int _bufsize)
00018 :   bufsize(_bufsize)
00019 {
00020     buf = new unsigned char [bufsize+1];
00021 
00022     sp = ep = (unsigned int)buf;
00023     memset(buf,0,bufsize);
00024 }
00025 
00026 RingBuffer::~RingBuffer()
00027 {
00028     delete [] buf;
00029 }
00030 
00031 int
00032 RingBuffer::save(unsigned char c)
00033 {
00034     if( (ep==sp-1)||
00035         ((sp==(unsigned int)buf)&&
00036             (ep==(unsigned int)buf+bufsize-1)) )    /* buffer full */
00037         return 0;
00038 
00039     *(unsigned char*)ep = c;
00040     ep++;
00041 
00042     if(ep > (unsigned int)buf+bufsize)
00043         ep = (unsigned int)buf;
00044     return 1;
00045 }
00046 
00047 unsigned char
00048 RingBuffer::read(void)
00049 {
00050     unsigned char ret;
00051 
00052     if(sp == ep)
00053         return 0;    /* buffer empty */
00054 
00055     ret = *(unsigned char*)sp;
00056     *(unsigned char*)sp = 0;
00057     sp++;
00058 
00059     if(sp> (unsigned int)buf+bufsize)
00060         sp = (unsigned int)buf;
00061     return ret;
00062 }
00063 
00064 int
00065 RingBuffer::check(void)
00066 {
00067     int n = ep-sp;
00068     if(n<0)
00069         n = bufsize-n;
00070 
00071     return n;
00072 }
00073