mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-25 16:43:28 +00:00
fix ring buffer read
This commit is contained in:
parent
ddaf35c757
commit
e270cb7d03
@ -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 {
|
||||
|
@ -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);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user