mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-28 19:20:54 +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
|
#define ERROR_CODE_MEMORY_CAPACITY_EXCEEDED 0x07
|
||||||
|
|
||||||
|
|
||||||
// init ring buffer
|
// init ring buffer
|
||||||
void btstack_ring_buffer_init(btstack_ring_buffer_t * ring_buffer, uint8_t * storage, uint16_t storage_size){
|
void btstack_ring_buffer_init(btstack_ring_buffer_t * ring_buffer, uint8_t * storage, uint16_t storage_size){
|
||||||
ring_buffer->storage = storage;
|
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){
|
if (btstack_ring_buffer_bytes_free(ring_buffer) < data_length){
|
||||||
return ERROR_CODE_MEMORY_CAPACITY_EXCEEDED;
|
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;
|
int count = 0;
|
||||||
while (count < data_length){
|
while (count < data_length){
|
||||||
if (ring_buffer->last_written_index < ring_buffer->size - 1){
|
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
|
// 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){
|
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;
|
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 ) {
|
if (ring_buffer->last_read_index < ring_buffer->last_written_index ) {
|
||||||
ring_buffer->last_read_index++;
|
ring_buffer->last_read_index++;
|
||||||
} else {
|
} 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[]){
|
int main (int argc, const char * argv[]){
|
||||||
return CommandLineTestRunner::RunAllTests(argc, argv);
|
return CommandLineTestRunner::RunAllTests(argc, argv);
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user