배터리 저전압/고온 보호 판정 시 유효하지 않은 값은 보호 판정에서 제외
- 측정 실패 시 실패값을 실제 센서값처럼 취급하지 않고, 보호 카운터 증가 X reset X
This commit is contained in:
@@ -253,22 +253,35 @@ 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_low_battery_cnt = 0;
|
||||||
periodic_high_temperature_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)
|
||||||
|
{
|
||||||
|
periodic_high_temperature_cnt = 0;
|
||||||
record_temperature_value(temp_cdeg, &continuous_high_temperature_cnt, BATTERY_CONTINUOUS_MONITOR_LIMIT_COUNT, "continuous");
|
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 불가) */
|
||||||
static void battery_work_handler(struct k_work *work)
|
static void battery_work_handler(struct k_work *work)
|
||||||
|
|||||||
Reference in New Issue
Block a user