Core.cpp
1 #include "Core.h" 2 3 #include <Arduino.h> 4 5 namespace signalos { 6 7 Result<void> Core::init() { 8 logMemory("Core::init start"); 9 10 // Storage first - needed for settings/themes 11 TRY(storage.init()); 12 logMemory("Storage initialized"); 13 14 // Note: Settings are loaded earlier in setup() via loadFromFile() 15 // before Core::init() is called (needed for theme/font setup) 16 17 // Display 18 TRY(display.init()); 19 logMemory("Display initialized"); 20 21 // Input - connects to event queue 22 TRY(input.init(events)); 23 logMemory("Input initialized"); 24 25 // Network is NOT initialized here - lazy init when needed 26 // WiFi fragments heap, so we only init when entering network states 27 28 logMemory("Core::init complete"); 29 return Ok(); 30 } 31 32 void Core::shutdown() { 33 logMemory("Core::shutdown"); 34 35 // Shutdown in reverse order 36 if (network.isInitialized()) { 37 network.shutdown(); 38 } 39 input.shutdown(); 40 display.shutdown(); 41 storage.shutdown(); 42 } 43 44 uint32_t Core::freeHeap() const { return ESP.getFreeHeap(); } 45 46 void Core::logMemory(const char* label) const { 47 Serial.printf("[MEM] %s: free=%lu, largest=%lu\n", label, ESP.getFreeHeap(), ESP.getMaxAllocHeap()); 48 } 49 50 } // namespace signalos