Fix standby behavior, enable,disable CAN interface on demand to save power.

This commit is contained in:
Carsten Schmiemann 2024-04-02 02:54:20 +02:00
parent c3fc2959ab
commit cc2499e0e5

View file

@ -73,12 +73,14 @@ void initCAN()
vTaskDelay(100); vTaskDelay(100);
} }
ESP_LOGI("CAN Interface", "Initialization succeeded!"); ESP_LOGI("CAN Interface", "Initialization succeeded!");
can_enabled = true;
} }
void stopCAN() void stopCAN()
{ {
CAN.end(); CAN.end();
ESP_LOGI("CAN Interface", "Shutdown succeeded!"); ESP_LOGI("CAN Interface", "Shutdown succeeded!");
can_enabled = false;
} }
// Function to send a CAN message // Function to send a CAN message
@ -122,13 +124,8 @@ void handleGPIO()
if (!newIgnitionState) if (!newIgnitionState)
{ {
ESP_LOGI("GPIO State machine", "Ignition turned off"); ESP_LOGI("GPIO State machine", "Ignition turned off");
lastIgnitionTime = currentMillis; standbyState = true;
ignitionState = false; ESP_LOGI("State machine", "Ignition set to standby mode");
// Shut down CAN interface if ignition is off
if (!ignitionState)
{
stopCAN();
}
} }
else else
{ {
@ -234,9 +231,10 @@ void vCANSendTask(void *pvParameters)
} }
// Check if ignition should go into standby mode // Check if ignition should go into standby mode
if (!gpioIgnitionState && ignitionState && !standbyStartTime) if (!gpioIgnitionState && ignitionState && !standbyStartTime && standbyState)
{ {
standbyStartTime = millis(); // Start the standby timer standbyStartTime = millis(); // Start the standby timer
ESP_LOGI("State machine", "Start standby timer");
} }
// Check if standby duration has elapsed and gpio ignition is still false // Check if standby duration has elapsed and gpio ignition is still false
@ -249,10 +247,11 @@ void vCANSendTask(void *pvParameters)
} }
// If GPIO ignition is true, reset standby timer // If GPIO ignition is true, reset standby timer
if (gpioIgnitionState) if (gpioIgnitionState && standbyState)
{ {
standbyStartTime = 0; // Reset standby timer standbyStartTime = 0; // Reset standby timer
standbyState = false; standbyState = false;
ESP_LOGI("State machine", "Ignition standby timer disabled");
} }
vTaskDelay(10); vTaskDelay(10);
} }
@ -286,6 +285,11 @@ void vSerialConsoleTask(void *pvParameters)
ESP_LOGD("State machine", "Try to enable CAN Interface"); ESP_LOGD("State machine", "Try to enable CAN Interface");
initCAN(); initCAN();
} }
if (standbyStartTime != 0) {
standbyStartTime = 0; // Reset standby timer
ESP_LOGI("State machine"," Ignition standby timer disabled");
}
} }
else if (input.endsWith("off")) else if (input.endsWith("off"))
{ {
@ -309,7 +313,15 @@ void vSerialConsoleTask(void *pvParameters)
} }
else else
{ {
ESP_LOGI("State machine", "Ignition is not in standby mode"); standbyStartTime = millis();
ESP_LOGI("State machine", "Ignition set to standby mode, retype command to see duration left");
if (!can_enabled)
{
ESP_LOGD("State machine", "Try to enable CAN Interface");
initCAN();
}
standbyState = true;
ignitionState = true;
} }
} }
} }