Log data to a micro SD card.
Dependencies: SDFileSystem mbed
RingBuffer.cpp@1:c5e56e2580bf, 2015-05-04 (annotated)
- Committer:
- onaka
- Date:
- Mon May 04 07:10:55 2015 +0000
- Revision:
- 1:c5e56e2580bf
revision 1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
onaka | 1:c5e56e2580bf | 1 | #include "RingBuffer.h" |
onaka | 1:c5e56e2580bf | 2 | |
onaka | 1:c5e56e2580bf | 3 | void RingBuffer::initialize_buffer(){ |
onaka | 1:c5e56e2580bf | 4 | start=0; |
onaka | 1:c5e56e2580bf | 5 | end=0; |
onaka | 1:c5e56e2580bf | 6 | } |
onaka | 1:c5e56e2580bf | 7 | |
onaka | 1:c5e56e2580bf | 8 | int16_t RingBuffer::buffer_size(){ |
onaka | 1:c5e56e2580bf | 9 | if(end >= start){ |
onaka | 1:c5e56e2580bf | 10 | return end - start; |
onaka | 1:c5e56e2580bf | 11 | } |
onaka | 1:c5e56e2580bf | 12 | return RING_BUFFER_SIZE - (start - end); |
onaka | 1:c5e56e2580bf | 13 | } |
onaka | 1:c5e56e2580bf | 14 | |
onaka | 1:c5e56e2580bf | 15 | uint8_t RingBuffer::read_buffer_byte(){ |
onaka | 1:c5e56e2580bf | 16 | uint8_t a; |
onaka | 1:c5e56e2580bf | 17 | a=buffer[start]; |
onaka | 1:c5e56e2580bf | 18 | start=(start+1)%RING_BUFFER_SIZE; |
onaka | 1:c5e56e2580bf | 19 | return a; |
onaka | 1:c5e56e2580bf | 20 | } |
onaka | 1:c5e56e2580bf | 21 | |
onaka | 1:c5e56e2580bf | 22 | int16_t RingBuffer::read_buffer_short(){ |
onaka | 1:c5e56e2580bf | 23 | int16_t a, b; |
onaka | 1:c5e56e2580bf | 24 | a=buffer[start]; |
onaka | 1:c5e56e2580bf | 25 | b=buffer[(start+1)%RING_BUFFER_SIZE]; |
onaka | 1:c5e56e2580bf | 26 | start=(start+2)%RING_BUFFER_SIZE; |
onaka | 1:c5e56e2580bf | 27 | return (a&0xff)|(b<<8); |
onaka | 1:c5e56e2580bf | 28 | } |
onaka | 1:c5e56e2580bf | 29 | |
onaka | 1:c5e56e2580bf | 30 | void RingBuffer::read_buffer(uint8_t buf[], int16_t offset, int16_t size){ |
onaka | 1:c5e56e2580bf | 31 | int16_t i; |
onaka | 1:c5e56e2580bf | 32 | uint8_t* p=buf+offset; |
onaka | 1:c5e56e2580bf | 33 | |
onaka | 1:c5e56e2580bf | 34 | for(i=0; i<size; i++){ |
onaka | 1:c5e56e2580bf | 35 | *(p++)=buffer[start]; |
onaka | 1:c5e56e2580bf | 36 | start=(start+1)%RING_BUFFER_SIZE; |
onaka | 1:c5e56e2580bf | 37 | } |
onaka | 1:c5e56e2580bf | 38 | } |
onaka | 1:c5e56e2580bf | 39 | |
onaka | 1:c5e56e2580bf | 40 | int16_t RingBuffer::buffer_capacity(){ |
onaka | 1:c5e56e2580bf | 41 | if(end >= start){ |
onaka | 1:c5e56e2580bf | 42 | return RING_BUFFER_SIZE-(end-start)-1; |
onaka | 1:c5e56e2580bf | 43 | } |
onaka | 1:c5e56e2580bf | 44 | return (start-end)-1; |
onaka | 1:c5e56e2580bf | 45 | } |
onaka | 1:c5e56e2580bf | 46 | |
onaka | 1:c5e56e2580bf | 47 | void RingBuffer::write_buffer_byte(uint8_t ch){ |
onaka | 1:c5e56e2580bf | 48 | buffer[end]=ch; |
onaka | 1:c5e56e2580bf | 49 | end=(end+1)%RING_BUFFER_SIZE; |
onaka | 1:c5e56e2580bf | 50 | } |
onaka | 1:c5e56e2580bf | 51 | |
onaka | 1:c5e56e2580bf | 52 | void RingBuffer::write_buffer(const uint8_t buf[], int16_t offset, int16_t size){ |
onaka | 1:c5e56e2580bf | 53 | int16_t i; |
onaka | 1:c5e56e2580bf | 54 | const uint8_t* p=buf+offset; |
onaka | 1:c5e56e2580bf | 55 | for(i=0; i<size; i++){ |
onaka | 1:c5e56e2580bf | 56 | buffer[end]=*(p++); |
onaka | 1:c5e56e2580bf | 57 | end=(end+1)%RING_BUFFER_SIZE; |
onaka | 1:c5e56e2580bf | 58 | } |
onaka | 1:c5e56e2580bf | 59 | } |
onaka | 1:c5e56e2580bf | 60 | |
onaka | 1:c5e56e2580bf | 61 | bool RingBuffer::is_buffer_empty(){ |
onaka | 1:c5e56e2580bf | 62 | return (start==end); |
onaka | 1:c5e56e2580bf | 63 | } |