Log data to a micro SD card.

Dependencies:   SDFileSystem mbed

Committer:
onaka
Date:
Mon May 04 07:10:55 2015 +0000
Revision:
1:c5e56e2580bf
revision 1

Who changed what in which revision?

UserRevisionLine numberNew 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 }