diff --git a/components/SerialManager/SerialManager/SerialManager.cpp b/components/SerialManager/SerialManager/SerialManager.cpp index 0967794..081a786 100644 --- a/components/SerialManager/SerialManager/SerialManager.cpp +++ b/components/SerialManager/SerialManager/SerialManager.cpp @@ -20,8 +20,15 @@ void SerialManager::setup() usb_serial_jtag_driver_install(&usb_serial_jtag_config); } +bool SerialManager::isConnected() +{ + // in preparation for handling uart as well + return usb_serial_jtag_is_connected(); +} + void SerialManager::try_receive() { + /// @todo: make it so we still read in chunks, but until we get a newline or we timeout - 1s? int current_position = 0; int len = usb_serial_jtag_read_bytes(this->temp_data, 256, 1000 / 20); @@ -79,11 +86,11 @@ void SerialManager::notify_startup_command_received() setStartupCommandReceived(true); // Cancel the startup timer if it's still running - if (timerHandle != nullptr) + if (timerHandle != nullptr && *timerHandle != nullptr) { esp_timer_stop(*timerHandle); esp_timer_delete(*timerHandle); - timerHandle = nullptr; + *timerHandle = nullptr; ESP_LOGI("[MAIN]", "Startup timer cancelled, staying in heartbeat mode"); } } @@ -112,7 +119,7 @@ bool SerialManager::should_send_heartbeat() // Always send heartbeat during startup delay or if no WiFi configured // If startup timer is still running, always send heartbeat - if (timerHandle != nullptr) + if (timerHandle != nullptr && *timerHandle != nullptr) { return true; } diff --git a/components/SerialManager/SerialManager/SerialManager.hpp b/components/SerialManager/SerialManager/SerialManager.hpp index 16b00ff..2ec915d 100644 --- a/components/SerialManager/SerialManager/SerialManager.hpp +++ b/components/SerialManager/SerialManager/SerialManager.hpp @@ -34,6 +34,7 @@ class SerialManager public: explicit SerialManager(std::shared_ptr commandManager, esp_timer_handle_t *timerHandle, std::shared_ptr deviceConfig); void setup(); + bool isConnected(); void try_receive(); void send_heartbeat(); bool should_send_heartbeat(); diff --git a/main/openiris_main.cpp b/main/openiris_main.cpp index fdc49f5..71602a0 100644 --- a/main/openiris_main.cpp +++ b/main/openiris_main.cpp @@ -31,7 +31,7 @@ TaskHandle_t serialManagerHandle; -esp_timer_handle_t timerHandle; +esp_timer_handle_t timerHandle = nullptr; QueueHandle_t eventQueue = xQueueCreate(10, sizeof(SystemEvent)); QueueHandle_t ledStateQueue = xQueueCreate(10, sizeof(uint32_t)); QueueHandle_t cdcMessageQueue = xQueueCreate(3, sizeof(cdc_command_packet_t)); @@ -201,8 +201,15 @@ void startWiFiMode(bool shouldCloseSerialManager) ESP_LOGI("[MAIN]", "Starting WiFi streaming mode."); if (shouldCloseSerialManager) { - ESP_LOGI("[MAIN]", "Closing serial manager task."); - vTaskDelete(serialManagerHandle); + if (!serialManager->isConnected()) + { + ESP_LOGI("[MAIN]", "We're not connected to serial. Closing serial manager task."); + vTaskDelete(serialManagerHandle); + } + else + { + ESP_LOGI("[MAIN]", "We're still connected to serial. Serial manager task will remain running."); + } } wifiManager->Begin();