#include "lwrb.h" uint8_t lwrb_data[8 + 1]; lwrb_t buff; int main() { lwrb_sz_t len; lwrb_init(&buff, lwrb_data, ARRAY_LEN(lwrb_data)); printf("Read/Write test\r\n"); { uint8_t rw_buff[8]; #define RW_TEST(_w_exp_, _r_exp_, _rw_len_, _rw_exp_len_) \ do \ { \ printf("W ptr: %u, R ptr: %u, R/W len: %u, as_expected: %u\r\n", (unsigned)buff.w_ptr, (unsigned)buff.r_ptr, \ (unsigned)(_rw_len_), \ (unsigned)(buff.w_ptr == (_w_exp_) && buff.r_ptr == (_r_exp_) && (_rw_len_) == (_rw_exp_len_))); \ } while (0) lwrb_reset(&buff); len = lwrb_write(&buff, "1234567890", 10); /* Write 3 bytes */ RW_TEST(3, 0, len, 3); len = lwrb_write(&buff, "abcdefg", 7); /* Write 3 bytes */ RW_TEST(6, 0, len, 3); for (int i = 0; i < buff.size; i++) { printf("%c ", buff.buff[i]); } printf("\n"); len = lwrb_read(&buff, rw_buff, 3); /* Read 3 bytes */ RW_TEST(6, 3, len, 3); len = lwrb_read(&buff, rw_buff, 4); /* Read 4 bytes */ RW_TEST(6, 6, len, 3); len = lwrb_write(&buff, "abc", 3); /* Write 3 bytes -> buffer should go over */ RW_TEST(0, 6, len, 3); #undef RW_TEST } // printf("Read/Write extended test\r\n"); // { // uint8_t rw_buff[8]; // lwrb_sz_t written, read; // uint8_t success; // #define RW_TEST(_w_exp_, _r_exp_, _success_, _rw_len_, _rw_exp_len_) \ // do \ // { \ // printf("W ptr: %u, R ptr: %u, R/W success: %u, R/W len: %u, as_expected: %u\r\n", (unsigned)buff.w_ptr, \ // (unsigned)buff.r_ptr, (unsigned)(_success_), (unsigned)(_rw_len_), \ // (unsigned)(buff.w_ptr == (_w_exp_) && buff.r_ptr == (_r_exp_) && (_rw_len_) == (_rw_exp_len_))); \ // } while (0) // lwrb_reset(&buff); // written = 0; // success = lwrb_write_ex(&buff, "abcdefg", 7, &written, LWRB_FLAG_WRITE_ALL); /* Write all bytes */ // RW_TEST(7, 0, success, written, 7); // // success = lwrb_read_ex(&buff, rw_buff, 3, &read, LWRB_FLAG_READ_ALL); /* Read 3 bytes only */ // // printf("RW FULL READ: %u, as_expected: %u\r\n", (unsigned)success, (unsigned)(success == 1)); // // RW_TEST(7, 3, success, written, 7); // /* This one shall failed, not enough memory available */ // success = lwrb_write_ex(&buff, "abcd", 4, &written, LWRB_FLAG_WRITE_ALL); /* Write all bytes */ // printf("RW FULL WRITE: %u, as_expected: %u\r\n", (unsigned)success, (unsigned)(success == 0)); // /* Read few more bytes to allow full write */ // success = lwrb_read_ex(&buff, rw_buff, 1, &read, LWRB_FLAG_READ_ALL); /* Read 3 bytes only */ // printf("RW FULL READ: %u, as_expected: %u\r\n", (unsigned)success, (unsigned)(success == 1)); // // 打印rw_buff // for (int i = 0; i < ARRAY_LEN(rw_buff); i++) // { // printf("%c ", rw_buff[i]); // } // /* Now it should go through */ // success = lwrb_write_ex(&buff, "abcdefg", 7, &written, LWRB_FLAG_WRITE_ALL); /* Write all bytes */ // printf("RW FULL WRITE: %u, as_expected: %u\r\n", (unsigned)success, (unsigned)(success == 1)); // #undef RW_TEST // } return 0; }