배터리 저전압/고온 보호 판정 시 유효하지 않은 값은 보호 판정에서 제외

- 측정 실패 시 실패값을 실제 센서값처럼 취급하지 않고, 보호 카운터 증가 X reset X
This commit is contained in:
2026-09-03 09:22:17 +09:00
parent e62b69b713
commit 4392784368
+18 -5
View File
@@ -253,21 +253,34 @@ void battery_protection_set_alignment_mode(bool enabled)
*/ */
void battery_protection_record_continuous(int batt_mv, int16_t temp_cdeg) void battery_protection_record_continuous(int batt_mv, int16_t temp_cdeg)
{ {
bool batt_valid = (batt_mv >= 0) && (batt_mv != 0xFFFF);
bool temp_valid = (temp_cdeg != INT16_MIN) && ((uint16_t)temp_cdeg != 0xFFFF);
// 정렬모드 중에는 continuous 보호 판정 제외 // 정렬모드 중에는 continuous 보호 판정 제외
if (alignment_mode_active) if (alignment_mode_active)
{ {
return; return;
} }
if (!batt_valid && !temp_valid)
{
return;
}
// 15초 후 일반 60초 주기 모니터 재개 // 15초 후 일반 60초 주기 모니터 재개
continuous_monitor_active_until_ms = k_uptime_get() + CONTINUOUS_MONITOR_ACTIVE_MS; continuous_monitor_active_until_ms = k_uptime_get() + CONTINUOUS_MONITOR_ACTIVE_MS;
// periodic 모니터 카운트 초기화 if (batt_valid)
periodic_low_battery_cnt = 0; {
periodic_high_temperature_cnt = 0; periodic_low_battery_cnt = 0;
record_battery_value(batt_mv, &continuous_low_battery_cnt, BATTERY_CONTINUOUS_MONITOR_LIMIT_COUNT, "continuous");
}
record_battery_value(batt_mv, &continuous_low_battery_cnt, BATTERY_CONTINUOUS_MONITOR_LIMIT_COUNT, "continuous"); if (temp_valid)
record_temperature_value(temp_cdeg, &continuous_high_temperature_cnt, BATTERY_CONTINUOUS_MONITOR_LIMIT_COUNT, "continuous"); {
periodic_high_temperature_cnt = 0;
record_temperature_value(temp_cdeg, &continuous_high_temperature_cnt, BATTERY_CONTINUOUS_MONITOR_LIMIT_COUNT, "continuous");
}
} }
/* k_work 핸들러: 스레드 컨텍스트에서 ADC 읽기 (adc_read는 블로킹이라 ISR 불가) */ /* k_work 핸들러: 스레드 컨텍스트에서 ADC 읽기 (adc_read는 블로킹이라 ISR 불가) */