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

Committer:
stormysun513
Date:
Sun May 22 14:29:58 2016 +0000
Revision:
21:4753996b0bcb
Parent:
12:7060e287bdae
Saperate turn on and off command into different packet headers

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stormysun513 12:7060e287bdae 1 #include "ringBuffer.h"
stormysun513 12:7060e287bdae 2
stormysun513 12:7060e287bdae 3 void RingBuffer_init(RingBuffer *buffer)
stormysun513 12:7060e287bdae 4 {
stormysun513 12:7060e287bdae 5 buffer->length = RX_BUFF_SIZE;
stormysun513 12:7060e287bdae 6 buffer->start = 0;
stormysun513 12:7060e287bdae 7 buffer->end = 0;
stormysun513 12:7060e287bdae 8 }
stormysun513 12:7060e287bdae 9
stormysun513 12:7060e287bdae 10 int16_t RingBuffer_write(RingBuffer *buffer, uint8_t *data, uint16_t amount)
stormysun513 12:7060e287bdae 11 {
stormysun513 12:7060e287bdae 12 if(RingBuffer_available_data(buffer) == 0) {
stormysun513 12:7060e287bdae 13 buffer->start = buffer->end = 0;
stormysun513 12:7060e287bdae 14 }
stormysun513 12:7060e287bdae 15
stormysun513 12:7060e287bdae 16 if(amount > RingBuffer_available_space(buffer))
stormysun513 12:7060e287bdae 17 return -1;
stormysun513 12:7060e287bdae 18
stormysun513 12:7060e287bdae 19 uint16_t i;
stormysun513 12:7060e287bdae 20 uint16_t temp = buffer->end;
stormysun513 12:7060e287bdae 21 for(i = 0; i < amount; i++){
stormysun513 12:7060e287bdae 22 buffer->buffer[temp] = data[i];
stormysun513 12:7060e287bdae 23 temp++;
stormysun513 12:7060e287bdae 24 temp %= buffer->length;
stormysun513 12:7060e287bdae 25 }
stormysun513 12:7060e287bdae 26 RingBuffer_commit_write(buffer, amount);
stormysun513 12:7060e287bdae 27 return amount;
stormysun513 12:7060e287bdae 28 }
stormysun513 12:7060e287bdae 29
stormysun513 12:7060e287bdae 30 bool RingBuffer_writebyte(RingBuffer *buffer, uint8_t byte){
stormysun513 12:7060e287bdae 31 if(RingBuffer_available_data(buffer) == 0) {
stormysun513 12:7060e287bdae 32 buffer->start = buffer->end = 0;
stormysun513 12:7060e287bdae 33 }
stormysun513 12:7060e287bdae 34
stormysun513 12:7060e287bdae 35 if(1 > RingBuffer_available_space(buffer))
stormysun513 12:7060e287bdae 36 return false;
stormysun513 12:7060e287bdae 37
stormysun513 12:7060e287bdae 38 buffer->buffer[buffer->end] = byte;
stormysun513 12:7060e287bdae 39 RingBuffer_commit_write(buffer, 1);
stormysun513 12:7060e287bdae 40 return true;
stormysun513 12:7060e287bdae 41 }
stormysun513 12:7060e287bdae 42
stormysun513 12:7060e287bdae 43 int16_t RingBuffer_read(RingBuffer *buffer, uint8_t *target, uint16_t amount)
stormysun513 12:7060e287bdae 44 {
stormysun513 12:7060e287bdae 45 if(amount > RingBuffer_available_data(buffer))
stormysun513 12:7060e287bdae 46 return -1;
stormysun513 12:7060e287bdae 47
stormysun513 12:7060e287bdae 48 uint16_t i;
stormysun513 12:7060e287bdae 49 uint16_t temp = buffer->start;
stormysun513 12:7060e287bdae 50 for(i = 0; i < amount; i++){
stormysun513 12:7060e287bdae 51 target[i] = buffer->buffer[temp];
stormysun513 12:7060e287bdae 52 temp++;
stormysun513 12:7060e287bdae 53 temp %= buffer->length;
stormysun513 12:7060e287bdae 54 }
stormysun513 12:7060e287bdae 55
stormysun513 12:7060e287bdae 56 RingBuffer_commit_read(buffer, amount);
stormysun513 12:7060e287bdae 57 if(buffer->end == buffer->start) {
stormysun513 12:7060e287bdae 58 buffer->start = buffer->end = 0;
stormysun513 12:7060e287bdae 59 }
stormysun513 12:7060e287bdae 60 return amount;
stormysun513 12:7060e287bdae 61 }
stormysun513 12:7060e287bdae 62
stormysun513 12:7060e287bdae 63 bool RingBuffer_readbyte(RingBuffer *buffer, uint8_t* target){
stormysun513 12:7060e287bdae 64 if(RingBuffer_available_data(buffer) == 0)
stormysun513 12:7060e287bdae 65 return false;
stormysun513 12:7060e287bdae 66
stormysun513 12:7060e287bdae 67 *target = buffer->buffer[buffer->start];
stormysun513 12:7060e287bdae 68 RingBuffer_commit_read(buffer, 1);
stormysun513 12:7060e287bdae 69
stormysun513 12:7060e287bdae 70 if(buffer->end == buffer->start) {
stormysun513 12:7060e287bdae 71 buffer->start = buffer->end = 0;
stormysun513 12:7060e287bdae 72 }
stormysun513 12:7060e287bdae 73 return true;
stormysun513 12:7060e287bdae 74 }
stormysun513 12:7060e287bdae 75
stormysun513 12:7060e287bdae 76 bool RingBuffer_isEmpty(RingBuffer *buffer){
stormysun513 12:7060e287bdae 77 return RingBuffer_empty(buffer);
stormysun513 12:7060e287bdae 78 }
stormysun513 12:7060e287bdae 79
stormysun513 12:7060e287bdae 80 bool RingBuffer_isFull(RingBuffer *buffer){
stormysun513 12:7060e287bdae 81 return RingBuffer_full(buffer);
stormysun513 12:7060e287bdae 82 }
stormysun513 12:7060e287bdae 83
stormysun513 12:7060e287bdae 84 uint16_t RingBuffer_availableDataAmount(RingBuffer *buffer){
stormysun513 12:7060e287bdae 85 return RingBuffer_available_data(buffer);
stormysun513 12:7060e287bdae 86 }
stormysun513 12:7060e287bdae 87
stormysun513 12:7060e287bdae 88 uint16_t RingBuffer_availableSpaceAmount(RingBuffer *buffer){
stormysun513 12:7060e287bdae 89 return RingBuffer_available_space(buffer);
stormysun513 12:7060e287bdae 90 }
stormysun513 12:7060e287bdae 91
stormysun513 12:7060e287bdae 92
stormysun513 12:7060e287bdae 93
stormysun513 12:7060e287bdae 94