#include "os_status.h" #include #include "esp_system.h" #include "esp_timer.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" static sys_status_t s_status = { .uptime_sec = 0, .free_heap = 0, .min_free_heap = 0, .cpu_usage_pct = 0, .wifi_state = WIFI_STATE_OFF, .wifi_rssi = 0, .ble_state = BLE_STATE_OFF, .is_charging = true, .battery_pct = 100, .status_bar_visible = true, .active_app_name = "Clock" }; static portMUX_TYPE s_status_mux = portMUX_INITIALIZER_UNLOCKED; void sys_status_init(void) { portENTER_CRITICAL(&s_status_mux); s_status.uptime_sec = 0; s_status.free_heap = esp_get_free_heap_size(); s_status.min_free_heap = esp_get_minimum_free_heap_size(); s_status.status_bar_visible = true; portEXIT_CRITICAL(&s_status_mux); } void sys_status_get(sys_status_t *out_status) { if (!out_status) return; portENTER_CRITICAL(&s_status_mux); memcpy(out_status, &s_status, sizeof(sys_status_t)); portEXIT_CRITICAL(&s_status_mux); } void sys_status_update(void) { portENTER_CRITICAL(&s_status_mux); s_status.uptime_sec = (uint32_t)(esp_timer_get_time() / 1000000ULL); s_status.free_heap = esp_get_free_heap_size(); s_status.min_free_heap = esp_get_minimum_free_heap_size(); portEXIT_CRITICAL(&s_status_mux); } void sys_status_set_wifi(wifi_state_t state, int8_t rssi) { portENTER_CRITICAL(&s_status_mux); s_status.wifi_state = state; s_status.wifi_rssi = rssi; portEXIT_CRITICAL(&s_status_mux); } void sys_status_set_ble(ble_state_t state) { portENTER_CRITICAL(&s_status_mux); s_status.ble_state = state; portEXIT_CRITICAL(&s_status_mux); } void sys_status_set_status_bar_visible(bool visible) { portENTER_CRITICAL(&s_status_mux); s_status.status_bar_visible = visible; portEXIT_CRITICAL(&s_status_mux); } bool sys_status_is_status_bar_visible(void) { bool visible; portENTER_CRITICAL(&s_status_mux); visible = s_status.status_bar_visible; portEXIT_CRITICAL(&s_status_mux); return visible; } void sys_status_set_active_app_name(const char *name) { portENTER_CRITICAL(&s_status_mux); s_status.active_app_name = name; portEXIT_CRITICAL(&s_status_mux); }