fix ring buffer read

This commit is contained in:
Milanka Ringwald 2016-10-18 14:14:04 +02:00 committed by Matthias Ringwald
parent ddaf35c757
commit e270cb7d03
2 changed files with 20 additions and 2 deletions

View File

@ -47,6 +47,7 @@
#define ERROR_CODE_MEMORY_CAPACITY_EXCEEDED 0x07
// init ring buffer
void btstack_ring_buffer_init(btstack_ring_buffer_t * ring_buffer, uint8_t * storage, uint16_t storage_size){
ring_buffer->storage = storage;
@ -78,7 +79,6 @@ int btstack_ring_buffer_write(btstack_ring_buffer_t * ring_buffer, uint8_t * dat
if (btstack_ring_buffer_bytes_free(ring_buffer) < data_length){
return ERROR_CODE_MEMORY_CAPACITY_EXCEEDED;
}
// printf("\n\nbtstack_ring_buffer_write %d, ring_buffer->size %d\n", data_length, ring_buffer->size);
int count = 0;
while (count < data_length){
if (ring_buffer->last_written_index < ring_buffer->size - 1){
@ -97,7 +97,7 @@ int btstack_ring_buffer_write(btstack_ring_buffer_t * ring_buffer, uint8_t * dat
// fetch data_length bytes from ring buffer
void btstack_ring_buffer_read(btstack_ring_buffer_t * ring_buffer, uint8_t * data, uint16_t data_length, uint16_t * number_of_bytes_read){
uint32_t count = 0;
while (*number_of_bytes_read < data_length && btstack_ring_buffer_bytes_available(ring_buffer)){
while (count < data_length && btstack_ring_buffer_bytes_available(ring_buffer)){
if (ring_buffer->last_read_index < ring_buffer->last_written_index ) {
ring_buffer->last_read_index++;
} else {

View File

@ -70,6 +70,24 @@ TEST(RingBuffer, ReadWrite){
}
}
TEST(RingBuffer, ReadWriteChunks){
uint8_t test_write_data[] = {1,2,3,4,5,6};
int test_data_size = sizeof(test_write_data);
int chunk_size = 3;
uint8_t test_read_data[chunk_size];
btstack_ring_buffer_write(&ring_buffer, test_write_data, test_data_size);
CHECK_EQUAL(test_data_size, btstack_ring_buffer_bytes_available(&ring_buffer));
while (test_data_size){
memset(test_read_data, 0, chunk_size);
uint16_t number_of_bytes_read = 0;
btstack_ring_buffer_read(&ring_buffer, test_read_data, chunk_size, &number_of_bytes_read);
test_data_size -= chunk_size;
CHECK_EQUAL(test_data_size, btstack_ring_buffer_bytes_available(&ring_buffer));
}
}
int main (int argc, const char * argv[]){
return CommandLineTestRunner::RunAllTests(argc, argv);
}