88 lines
2.2 KiB
C
88 lines
2.2 KiB
C
#include "os_status.h"
|
|
#include <string.h>
|
|
#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);
|
|
}
|