66 lines
1.8 KiB
C++
66 lines
1.8 KiB
C++
// SDK
|
|
#include "cJSON.h"
|
|
#include "esp_app_format.h"
|
|
#include "esp_chip_info.h"
|
|
#include "esp_http_server.h"
|
|
#include "esp_ota_ops.h"
|
|
#include "esp_system.h"
|
|
#include "esp_timer.h"
|
|
|
|
// Project
|
|
#include "appstate.hpp"
|
|
#include "types.hpp"
|
|
|
|
internal esp_err_t api_system_info_handler(httpd_req_t *req) {
|
|
httpd_resp_set_type(req, "application/json");
|
|
|
|
cJSON *root = cJSON_CreateObject();
|
|
|
|
esp_chip_info_t chip_info;
|
|
esp_chip_info(&chip_info);
|
|
|
|
const char *model = "ESP32-S3";
|
|
if (chip_info.model == CHIP_ESP32) {
|
|
model = "ESP32";
|
|
} else if (chip_info.model == CHIP_ESP32S2) {
|
|
model = "ESP32-S2";
|
|
} else if (chip_info.model == CHIP_ESP32S3) {
|
|
model = "ESP32-S3";
|
|
} else if (chip_info.model == CHIP_ESP32C3) {
|
|
model = "ESP32-C3";
|
|
}
|
|
|
|
cJSON_AddStringToObject(root, "chip", model);
|
|
|
|
uint32_t free_heap = esp_get_free_heap_size();
|
|
cJSON_AddNumberToObject(root, "free_heap", free_heap);
|
|
|
|
uint64_t uptime_sec = esp_timer_get_time() / 1000000;
|
|
cJSON_AddNumberToObject(root, "uptime", uptime_sec);
|
|
|
|
const esp_app_desc_t *app_desc = esp_app_get_description();
|
|
cJSON_AddStringToObject(root, "firmware", app_desc->version);
|
|
|
|
const char *conn_type = "offline";
|
|
if (g_Ethernet_Initialized) {
|
|
conn_type = "ethernet";
|
|
} else if (g_Wifi_Initialized) {
|
|
conn_type = "wifi";
|
|
}
|
|
cJSON_AddStringToObject(root, "connection", conn_type);
|
|
|
|
const char *sys_info = cJSON_Print(root);
|
|
httpd_resp_sendstr(req, sys_info);
|
|
|
|
free((void *)sys_info);
|
|
cJSON_Delete(root);
|
|
|
|
return ESP_OK;
|
|
}
|
|
|
|
internal const httpd_uri_t api_system_info_uri = {.uri = "/api/system/info",
|
|
.method = HTTP_GET,
|
|
.handler =
|
|
api_system_info_handler,
|
|
.user_ctx = NULL};
|