#include "shell.h" #include "input_manager.h" #include "tft_handler.h" #include "event_manager.h" #include "GLOBALS.h" #include "system_manager.h" #include Shell* _shell; InputManager* im; TFT_Handler* th; SystemManager* sm; DISPLAY_STATE* _display_state; TaskHandle_t InputTask; void input_task(void* pvParameters) { for(;;) { im->update(); vTaskDelay(1); } } void setup() { Serial.begin(115200); Serial.println("Initializing..."); // Create shared state _display_state = new DISPLAY_STATE(); _display_state->update_display.store(false); // Create managers _shell = new Shell(); im = new InputManager(); th = new TFT_Handler(); sm = new SystemManager(); // Initialize in order th->init(_display_state); sm->init(_display_state); // Initialize event manager (creates dispatcher task) EventManager::getInstance().init(); // Initialize components (they subscribe to events) im->init(_display_state, th); _shell->init(th, _display_state, sm); // Create input task on Core 0 xTaskCreatePinnedToCore(input_task, "input_task", 4096, NULL, 1, &InputTask, 0); delay(100); Serial.println("Initialization complete"); } void loop() { // Only handle rendering in main loop if (_display_state->update_display.load()) { _shell->draw_all(); im->draw_button(); _display_state->update_display.store(false); } delay(0); }