From ff1cf0d739b03da1463e79c294a499fc656f04e6 Mon Sep 17 00:00:00 2001 From: xingchen <1098756313@qq.com> Date: Fri, 25 Sep 2026 11:56:45 +0800 Subject: [PATCH] feat: add src/monitor.c --- src/monitor.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/monitor.c diff --git a/src/monitor.c b/src/monitor.c new file mode 100644 index 0000000..c9607c1 --- /dev/null +++ b/src/monitor.c @@ -0,0 +1,22 @@ +#include "monitor.h" +#include + +void monitor_init(monitor_t *monitor) { if (monitor) memset(monitor, 0, sizeof(*monitor)); } + +frame_result_t monitor_accept(monitor_t *monitor, const uint8_t *bytes, size_t length) { + sample_t sample; + if (!monitor) return FRAME_SHORT; + frame_result_t result = decode_frame(bytes, length, &sample); + if (result != FRAME_OK) { monitor->rejected++; return result; } + if (monitor->has_last) { + uint16_t delta = (uint16_t)(sample.sequence - monitor->last_sequence); + if (delta == 0) { monitor->duplicate++; monitor->rejected++; return FRAME_DUPLICATE; } + if (delta > 32767) { monitor->rollback++; monitor->rejected++; return FRAME_ROLLBACK; } + if (delta > 1) monitor->lost += delta - 1; + } + monitor->accepted++; + monitor->last_sequence = sample.sequence; + monitor->last_sample = sample; + monitor->has_last = 1; + return FRAME_OK; +}