Initial Demo OS
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user