feat: add src/monitor.c
This commit is contained in:
22
src/monitor.c
Normal file
22
src/monitor.c
Normal 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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user