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
src/ringBuffer.cpp@21:4753996b0bcb, 2016-05-22 (annotated)
- 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?
User | Revision | Line number | New 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 |