feat: add src/monitor.c

This commit is contained in:
2026-09-25 11:56:45 +08:00
parent 79984ec678
commit ff1cf0d739

22
src/monitor.c Normal file
View File

@@ -0,0 +1,22 @@
#include "monitor.h"
#include <string.h>
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;
}