Backfill missed sender sample intervals to keep dt_s consistent
This commit is contained in:
13
src/main.cpp
13
src/main.cpp
@@ -1018,8 +1018,8 @@ static void sender_loop() {
|
|||||||
meter_reader_pump(now_ms);
|
meter_reader_pump(now_ms);
|
||||||
|
|
||||||
if (g_time_acquired) {
|
if (g_time_acquired) {
|
||||||
if (now_ms - g_last_sample_ms >= METER_SAMPLE_INTERVAL_MS) {
|
while (now_ms - g_last_sample_ms >= METER_SAMPLE_INTERVAL_MS) {
|
||||||
g_last_sample_ms = now_ms;
|
g_last_sample_ms += METER_SAMPLE_INTERVAL_MS;
|
||||||
MeterData data = {};
|
MeterData data = {};
|
||||||
data.short_id = g_short_id;
|
data.short_id = g_short_id;
|
||||||
strncpy(data.device_id, g_device_id, sizeof(data.device_id));
|
strncpy(data.device_id, g_device_id, sizeof(data.device_id));
|
||||||
@@ -1053,7 +1053,14 @@ static void sender_loop() {
|
|||||||
data.battery_voltage_v = g_last_battery_voltage_v;
|
data.battery_voltage_v = g_last_battery_voltage_v;
|
||||||
data.battery_percent = g_last_battery_percent;
|
data.battery_percent = g_last_battery_percent;
|
||||||
data.rx_reject_reason = static_cast<uint8_t>(g_sender_rx_reject_reason);
|
data.rx_reject_reason = static_cast<uint8_t>(g_sender_rx_reject_reason);
|
||||||
data.ts_utc = time_get_utc();
|
uint32_t sample_ts_utc = time_get_utc();
|
||||||
|
if (sample_ts_utc > 0 && now_ms > g_last_sample_ms) {
|
||||||
|
uint32_t lag_s = (now_ms - g_last_sample_ms) / 1000;
|
||||||
|
if (sample_ts_utc > lag_s) {
|
||||||
|
sample_ts_utc -= lag_s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data.ts_utc = sample_ts_utc;
|
||||||
data.valid = meter_ok;
|
data.valid = meter_ok;
|
||||||
|
|
||||||
bool appended = append_meter_sample(data, meter_ok);
|
bool appended = append_meter_sample(data, meter_ok);
|
||||||
|
|||||||
Reference in New Issue
Block a user