Add sender-local serial diagnostics for pipeline health

This commit is contained in:
2026-02-17 01:12:31 +01:00
parent ea3e99f350
commit cc5881974c
3 changed files with 108 additions and 12 deletions

View File

@@ -24,6 +24,7 @@ static uint32_t g_frames_parse_fail = 0;
static uint32_t g_rx_overflow = 0;
static uint32_t g_rx_timeout = 0;
static uint32_t g_last_log_ms = 0;
static uint32_t g_last_good_frame_ms = 0;
static constexpr uint32_t METER_FIXED_FRAC_MAX_DIV = 10000;
void meter_init() {
@@ -251,6 +252,16 @@ static void meter_debug_log() {
static_cast<unsigned long>(g_bytes_rx));
}
void meter_get_stats(MeterDriverStats &out) {
out.frames_ok = g_frames_ok;
out.frames_parse_fail = g_frames_parse_fail;
out.rx_overflow = g_rx_overflow;
out.rx_timeout = g_rx_timeout;
out.bytes_rx = g_bytes_rx;
out.last_rx_ms = g_last_rx_ms;
out.last_good_frame_ms = g_last_good_frame_ms;
}
bool meter_poll_frame(const char *&frame, size_t &len) {
frame = nullptr;
len = 0;
@@ -332,6 +343,7 @@ bool meter_parse_frame(const char *frame, size_t len, MeterData &data) {
data.valid = energy_ok || total_p_ok || p1_ok || p2_ok || p3_ok;
if (data.valid) {
g_frames_ok++;
g_last_good_frame_ms = millis();
} else {
g_frames_parse_fail++;
}
@@ -343,6 +355,7 @@ bool meter_parse_frame(const char *frame, size_t len, MeterData &data) {
data.valid = energy_ok || total_p_ok || p1_ok || p2_ok || p3_ok;
if (data.valid) {
g_frames_ok++;
g_last_good_frame_ms = millis();
} else {
g_frames_parse_fail++;
}
@@ -402,6 +415,7 @@ bool meter_parse_frame(const char *frame, size_t len, MeterData &data) {
if (energy_ok && total_p_ok && p1_ok && p2_ok && p3_ok && data.meter_seconds_valid) {
data.valid = true;
g_frames_ok++;
g_last_good_frame_ms = millis();
return true;
}
@@ -416,6 +430,7 @@ bool meter_parse_frame(const char *frame, size_t len, MeterData &data) {
data.valid = got_any;
if (data.valid) {
g_frames_ok++;
g_last_good_frame_ms = millis();
} else {
g_frames_parse_fail++;
}