Add sender-local serial diagnostics for pipeline health
This commit is contained in:
@@ -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++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user