test
Dependencies: Nanopb iSerial mbed BaseJpegDecode FatFileSystem SDFileSystem RingBuffer Camera_LS_Y201
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
Generated on Wed Jul 13 2022 04:41:35 by 1.7.2