/ src / core / Core.cpp
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