2024-09-19 21:15:08 -07:00
|
|
|
#include "power_saving_declarations.h"
|
|
|
|
|
|
2019-12-05 14:19:29 -08:00
|
|
|
// WARNING: To stay in compliance with the SIL2 rules laid out in STM UM1840, we should never implement any of the available hardware low power modes.
|
|
|
|
|
// See rule: CoU_3
|
|
|
|
|
|
2019-05-21 17:05:14 -07:00
|
|
|
int power_save_status = POWER_SAVE_STATUS_DISABLED;
|
2019-04-01 22:45:00 -07:00
|
|
|
|
2025-03-12 17:26:07 +01:00
|
|
|
void enable_can_transceivers(bool enabled) {
|
|
|
|
|
// Leave main CAN always on for CAN-based ignition detection
|
2025-07-19 21:05:12 -07:00
|
|
|
uint8_t main_bus = (harness.status == HARNESS_STATUS_FLIPPED) ? 3U : 1U;
|
2025-03-12 17:26:07 +01:00
|
|
|
for(uint8_t i=1U; i<=4U; i++){
|
|
|
|
|
current_board->enable_can_transceiver(i, (i == main_bus) || enabled);
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-06-26 18:24:21 -07:00
|
|
|
|
2025-03-12 17:26:07 +01:00
|
|
|
void set_power_save_state(int state) {
|
2019-06-26 18:24:21 -07:00
|
|
|
bool is_valid_state = (state == POWER_SAVE_STATUS_ENABLED) || (state == POWER_SAVE_STATUS_DISABLED);
|
|
|
|
|
if (is_valid_state && (state != power_save_status)) {
|
|
|
|
|
bool enable = false;
|
|
|
|
|
if (state == POWER_SAVE_STATUS_ENABLED) {
|
2022-11-29 22:55:10 -08:00
|
|
|
print("enable power savings\n");
|
2023-08-06 12:29:54 -07:00
|
|
|
|
2023-06-28 12:33:17 -07:00
|
|
|
// Disable CAN interrupts
|
|
|
|
|
if (harness.status == HARNESS_STATUS_FLIPPED) {
|
|
|
|
|
llcan_irq_disable(cans[0]);
|
|
|
|
|
} else {
|
|
|
|
|
llcan_irq_disable(cans[2]);
|
|
|
|
|
}
|
|
|
|
|
llcan_irq_disable(cans[1]);
|
2019-06-26 18:24:21 -07:00
|
|
|
} else {
|
2022-11-29 22:55:10 -08:00
|
|
|
print("disable power savings\n");
|
2023-06-28 12:33:17 -07:00
|
|
|
|
|
|
|
|
if (harness.status == HARNESS_STATUS_FLIPPED) {
|
|
|
|
|
llcan_irq_enable(cans[0]);
|
|
|
|
|
} else {
|
|
|
|
|
llcan_irq_enable(cans[2]);
|
|
|
|
|
}
|
|
|
|
|
llcan_irq_enable(cans[1]);
|
|
|
|
|
|
2019-06-26 18:24:21 -07:00
|
|
|
enable = true;
|
2019-06-26 15:52:34 -07:00
|
|
|
}
|
|
|
|
|
|
2025-03-12 17:26:07 +01:00
|
|
|
enable_can_transceivers(enable);
|
2019-06-26 15:52:34 -07:00
|
|
|
|
2020-01-23 16:54:34 -08:00
|
|
|
// Switch off IR when in power saving
|
2019-10-29 12:36:47 -07:00
|
|
|
if(!enable){
|
|
|
|
|
current_board->set_ir_power(0U);
|
2020-06-03 15:08:57 -07:00
|
|
|
}
|
2019-10-25 16:22:42 -07:00
|
|
|
|
2019-06-26 18:24:21 -07:00
|
|
|
power_save_status = state;
|
2019-06-26 15:52:34 -07:00
|
|
|
}
|
2019-04-01 22:45:00 -07:00
|
|
|
}
|