test

Dependencies:   Nanopb iSerial mbed BaseJpegDecode FatFileSystem SDFileSystem RingBuffer Camera_LS_Y201

Committer:
cgraham
Date:
Thu Sep 18 15:21:47 2014 +0000
Revision:
0:d69efd0ee139
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cgraham 0:d69efd0ee139 1 //
cgraham 0:d69efd0ee139 2 // RingBuffer.cpp ... General purpose ring buffer library
cgraham 0:d69efd0ee139 3 //
cgraham 0:d69efd0ee139 4 // Copyright 2012 Yoji KURODA
cgraham 0:d69efd0ee139 5 //
cgraham 0:d69efd0ee139 6 // 2009.11.13 ... Originally written in C by Y.Kuroda for Renesas H83664
cgraham 0:d69efd0ee139 7 // 2012.08.31 ... Code convert for mbed in C++
cgraham 0:d69efd0ee139 8 //
cgraham 0:d69efd0ee139 9
cgraham 0:d69efd0ee139 10 #include "string.h"
cgraham 0:d69efd0ee139 11 #include "RingBuffer.h"
cgraham 0:d69efd0ee139 12
cgraham 0:d69efd0ee139 13
cgraham 0:d69efd0ee139 14 /*
cgraham 0:d69efd0ee139 15 * Machine Independent Area
cgraham 0:d69efd0ee139 16 */
cgraham 0:d69efd0ee139 17 RingBuffer::RingBuffer(int _bufsize)
cgraham 0:d69efd0ee139 18 : bufsize(_bufsize)
cgraham 0:d69efd0ee139 19 {
cgraham 0:d69efd0ee139 20 buf = new unsigned char [bufsize+1];
cgraham 0:d69efd0ee139 21
cgraham 0:d69efd0ee139 22 sp = ep = (unsigned int)buf;
cgraham 0:d69efd0ee139 23 memset(buf,0,bufsize);
cgraham 0:d69efd0ee139 24 }
cgraham 0:d69efd0ee139 25
cgraham 0:d69efd0ee139 26 RingBuffer::~RingBuffer()
cgraham 0:d69efd0ee139 27 {
cgraham 0:d69efd0ee139 28 delete [] buf;
cgraham 0:d69efd0ee139 29 }
cgraham 0:d69efd0ee139 30
cgraham 0:d69efd0ee139 31 int
cgraham 0:d69efd0ee139 32 RingBuffer::save(unsigned char c)
cgraham 0:d69efd0ee139 33 {
cgraham 0:d69efd0ee139 34 if( (ep==sp-1)||
cgraham 0:d69efd0ee139 35 ((sp==(unsigned int)buf)&&
cgraham 0:d69efd0ee139 36 (ep==(unsigned int)buf+bufsize-1)) ) /* buffer full */
cgraham 0:d69efd0ee139 37 return 0;
cgraham 0:d69efd0ee139 38
cgraham 0:d69efd0ee139 39 *(unsigned char*)ep = c;
cgraham 0:d69efd0ee139 40 ep++;
cgraham 0:d69efd0ee139 41
cgraham 0:d69efd0ee139 42 if(ep > (unsigned int)buf+bufsize)
cgraham 0:d69efd0ee139 43 ep = (unsigned int)buf;
cgraham 0:d69efd0ee139 44 return 1;
cgraham 0:d69efd0ee139 45 }
cgraham 0:d69efd0ee139 46
cgraham 0:d69efd0ee139 47 unsigned char
cgraham 0:d69efd0ee139 48 RingBuffer::read(void)
cgraham 0:d69efd0ee139 49 {
cgraham 0:d69efd0ee139 50 unsigned char ret;
cgraham 0:d69efd0ee139 51
cgraham 0:d69efd0ee139 52 if(sp == ep)
cgraham 0:d69efd0ee139 53 return 0; /* buffer empty */
cgraham 0:d69efd0ee139 54
cgraham 0:d69efd0ee139 55 ret = *(unsigned char*)sp;
cgraham 0:d69efd0ee139 56 *(unsigned char*)sp = 0;
cgraham 0:d69efd0ee139 57 sp++;
cgraham 0:d69efd0ee139 58
cgraham 0:d69efd0ee139 59 if(sp> (unsigned int)buf+bufsize)
cgraham 0:d69efd0ee139 60 sp = (unsigned int)buf;
cgraham 0:d69efd0ee139 61 return ret;
cgraham 0:d69efd0ee139 62 }
cgraham 0:d69efd0ee139 63
cgraham 0:d69efd0ee139 64 int
cgraham 0:d69efd0ee139 65 RingBuffer::check(void)
cgraham 0:d69efd0ee139 66 {
cgraham 0:d69efd0ee139 67 int n = ep-sp;
cgraham 0:d69efd0ee139 68 if(n<0)
cgraham 0:d69efd0ee139 69 n = bufsize-n;
cgraham 0:d69efd0ee139 70
cgraham 0:d69efd0ee139 71 return n;
cgraham 0:d69efd0ee139 72 }
cgraham 0:d69efd0ee139 73