nRF51822 serves as the bridge between BLE central and MCU, which makes cental able to fetch photos from serial camera.

Dependencies:   BLE_API mbed nRF51822

Fork of nRF51822_blinky by RedBearLab

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ringBuffer.cpp Source File

ringBuffer.cpp

00001 #include "ringBuffer.h"
00002 
00003 void RingBuffer_init(RingBuffer *buffer)
00004 {
00005     buffer->length  = RX_BUFF_SIZE;
00006     buffer->start = 0;
00007     buffer->end = 0;
00008 }
00009 
00010 int16_t RingBuffer_write(RingBuffer *buffer, uint8_t *data, uint16_t amount)
00011 {
00012     if(RingBuffer_available_data(buffer) == 0) {
00013         buffer->start = buffer->end = 0;
00014     }
00015             
00016     if(amount > RingBuffer_available_space(buffer))
00017         return -1;
00018                 
00019     uint16_t i;
00020     uint16_t temp = buffer->end;
00021     for(i = 0; i < amount; i++){
00022         buffer->buffer[temp] = data[i];
00023         temp++;
00024         temp %= buffer->length;
00025     }
00026     RingBuffer_commit_write(buffer, amount);
00027     return amount;
00028 }
00029 
00030 bool RingBuffer_writebyte(RingBuffer *buffer, uint8_t byte){
00031     if(RingBuffer_available_data(buffer) == 0) {
00032         buffer->start = buffer->end = 0;
00033     }
00034             
00035     if(1 > RingBuffer_available_space(buffer))
00036         return false;
00037                 
00038     buffer->buffer[buffer->end] = byte;
00039     RingBuffer_commit_write(buffer, 1);
00040     return true;
00041 }
00042 
00043 int16_t RingBuffer_read(RingBuffer *buffer, uint8_t *target, uint16_t amount)
00044 {
00045     if(amount > RingBuffer_available_data(buffer))
00046         return -1;
00047 
00048     uint16_t i;
00049     uint16_t temp = buffer->start;
00050     for(i = 0; i < amount; i++){
00051         target[i] = buffer->buffer[temp];
00052         temp++;
00053         temp %= buffer->length;
00054     }
00055                         
00056     RingBuffer_commit_read(buffer, amount);                     
00057     if(buffer->end == buffer->start) {
00058         buffer->start = buffer->end = 0;
00059     }
00060     return amount;
00061 }
00062 
00063 bool RingBuffer_readbyte(RingBuffer *buffer, uint8_t* target){
00064     if(RingBuffer_available_data(buffer) == 0)
00065         return false;
00066 
00067     *target = buffer->buffer[buffer->start];                    
00068     RingBuffer_commit_read(buffer, 1);
00069 
00070     if(buffer->end == buffer->start) {
00071         buffer->start = buffer->end = 0;
00072     }
00073     return true;
00074 }
00075 
00076 bool RingBuffer_isEmpty(RingBuffer *buffer){
00077     return RingBuffer_empty(buffer);
00078 }
00079 
00080 bool RingBuffer_isFull(RingBuffer *buffer){
00081     return RingBuffer_full(buffer);
00082 }
00083 
00084 uint16_t RingBuffer_availableDataAmount(RingBuffer *buffer){
00085     return RingBuffer_available_data(buffer);
00086 }
00087 
00088 uint16_t RingBuffer_availableSpaceAmount(RingBuffer *buffer){
00089     return RingBuffer_available_space(buffer);
00090 }
00091     
00092     
00093     
00094