void uartbuf_getframe(UINT channel, unsigned char *f, UINT flen, UINT foffset) { UINT i; unsigned char ch; i = 0; while (i < (foffset - 1)) { cbuffer_read(&Uart[channel], &ch); i++; } i = 0; while (i < flen) { cbuffer_read(&Uart[channel], &ch); f[i++] = ch; } f[flen] = '\0'; }
/* * Files are queued in a list * Remove one file from the list * The file in head is removed */ static FileInfo* file_agent_finish_file(void) { ElemType file; if(cbuffer_read(file_list, &file)) { return NULL; } return (FileInfo*) file; }
static char* test_cbuffer_read(void) { CircularBuffer* mybuf = cbuffer_new(); Buffer* readout = buffer_new(NULL, 11); uint32_t test_data[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; cbuffer_append(mybuf, test_data, 11); cbuffer_read(mybuf, readout->data, 11); mu_assert_eq("size", readout->size, 11); mu_assert_eq("content", memcmp(readout->data, test_data, 11 * sizeof(uint32_t)), 0); // if we ask for too much it cbuffer gives us what it has. Buffer* readout2 = buffer_new(NULL, 30); int actually_read = cbuffer_read(mybuf, readout2->data, 30); mu_assert_eq("size2", actually_read, 11); mu_assert_eq("content2", memcmp(readout2->data, test_data, 11 * sizeof(uint32_t)), 0); cbuffer_free(mybuf); buffer_free(readout); buffer_free(readout2); return 0; }
void uartbuf_flush(UINT channel) { unsigned char ch; if ((channel == SLAVE_TX) || (channel == SLAVE_HPTX)) { while (!cbuffer_isempty(&Uart[channel])) { cbuffer_read(&Uart[channel], &ch); #ifdef DEBUG printf("(0x%03X) - ", ch); #else while (BusyUSART()); putcUSART(ch); #endif } } }
static char* test_cbuffer_read_wraps(void) { CircularBuffer* mybuf = cbuffer_new(); // put us at the end of the buffer mybuf->pos = IO_BUFFER_SIZE - 5; mybuf->tail = IO_BUFFER_SIZE - 5; uint32_t test_data[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; cbuffer_append(mybuf, test_data, 11); Buffer* readout = buffer_new(NULL, 11); cbuffer_read(mybuf, readout->data, 11); mu_assert_eq("size", readout->size, 11); mu_assert_eq("content", memcmp(readout->data, test_data, 11 * sizeof(uint32_t)), 0); cbuffer_free(mybuf); buffer_free(readout); return 0; }
static char* test_cbuffer_delete_front_wraps(void) { CircularBuffer* mybuf = cbuffer_new(); uint32_t test_data[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // put us at the end of the buffer mybuf->pos = IO_BUFFER_SIZE - 5; mybuf->tail = IO_BUFFER_SIZE - 5; cbuffer_append(mybuf, test_data, 11); mu_assert_eq("content", memcmp(&(mybuf->data[mybuf->pos]), test_data, 5 * sizeof(uint32_t)), 0); int deleted = cbuffer_deletefront(mybuf, 5); mu_assert_eq("deleted", deleted, 5); mu_assert_eq("pos", mybuf->pos, 0); mu_assert_eq("size", cbuffer_size(mybuf), 6); mu_assert_eq("item0", mybuf->data[mybuf->pos], 5); mu_assert_eq("item1", mybuf->data[mybuf->pos+1], 6); mu_assert_eq("item2", mybuf->data[mybuf->pos+2], 7); mu_assert_eq("remaining content in cbuffer", memcmp( &(mybuf->data[0]), test_data + 5, 6 * sizeof(uint32_t)), 0); Buffer* readout = buffer_new(NULL, 6); cbuffer_read(mybuf, readout->data, 6); mu_assert_eq("remaining content", memcmp( readout->data, (test_data + 5), 6 * sizeof(uint32_t)), 0); // if we ask to delete everything, just return what was actually deleted. int deleted_just_to_end = cbuffer_deletefront(mybuf, 100); mu_assert_eq("deleted just to end", deleted_just_to_end, 6); mu_assert_eq("pos2", mybuf->pos, 6); mu_assert_eq("size2", cbuffer_size(mybuf), 0); cbuffer_free(mybuf); buffer_free(readout); return 0; }