diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..65c4898 --- /dev/null +++ b/src/main.c @@ -0,0 +1,27 @@ +#include "monitor.h" +#include + +static void emit(monitor_t *monitor, uint8_t *frame) { + unsigned crc = 0; + for (int i = 0; i < 7; ++i) { + crc ^= frame[i]; + for (int bit = 0; bit < 8; ++bit) + crc = (crc & 0x80u) ? ((crc << 1) ^ 7u) & 255u : (crc << 1) & 255u; + } + frame[7] = (uint8_t)crc; + printf("seq=%u status=%s\n", (unsigned)((frame[1] << 8) | frame[2]), + frame_result_name(monitor_accept(monitor, frame, 8))); +} + +int main(void) { + monitor_t monitor; + monitor_init(&monitor); + uint8_t frame[8] = {1, 0, 1, 0, 25, 46, 224, 0}; + emit(&monitor, frame); + frame[2] = 3; + emit(&monitor, frame); + emit(&monitor, frame); + printf("accepted=%u rejected=%u lost=%u duplicate=%u\n", + monitor.accepted, monitor.rejected, monitor.lost, monitor.duplicate); + return 0; +}