System usage
This commit is contained in:
parent
36dd179def
commit
4b283e0139
@ -1,3 +1,4 @@
|
|||||||
|
#include "esp32-hal.h"
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "program.h"
|
#include "program.h"
|
||||||
#include "shell.h"
|
#include "shell.h"
|
||||||
@ -17,6 +18,7 @@ public:
|
|||||||
|
|
||||||
text.x = _window->x + 10;
|
text.x = _window->x + 10;
|
||||||
text.y = _window->y + 50;
|
text.y = _window->y + 50;
|
||||||
|
text.size = 2;
|
||||||
|
|
||||||
_window->window_content_text.push_back(text);
|
_window->window_content_text.push_back(text);
|
||||||
|
|
||||||
@ -89,10 +91,88 @@ class SettingsProgram : public Program {
|
|||||||
public:
|
public:
|
||||||
void run() override {
|
void run() override {
|
||||||
Serial.println("Settings started!");
|
Serial.println("Settings started!");
|
||||||
|
|
||||||
|
WindowContentText ram_usage;
|
||||||
|
WindowContentText ram_usage_label;
|
||||||
|
WindowContentText cpu_usage;
|
||||||
|
WindowContentText cpu_usage_label;
|
||||||
|
|
||||||
|
ram_usage_label.size = 2;
|
||||||
|
ram_usage_label.text = "RAM usage";
|
||||||
|
ram_usage_label.x = _window->x + 10;
|
||||||
|
ram_usage_label.y = _window->y + 50;
|
||||||
|
|
||||||
|
ram_usage.size = 2;
|
||||||
|
ram_usage.x = _window->x + 10;
|
||||||
|
ram_usage.y = _window->y + 70;
|
||||||
|
|
||||||
|
cpu_usage_label.size = 2;
|
||||||
|
cpu_usage_label.text = "CPU usage:";
|
||||||
|
cpu_usage_label.x = _window->x + 10;
|
||||||
|
cpu_usage_label.y = _window->y + 90;
|
||||||
|
|
||||||
|
cpu_usage.size = 2;
|
||||||
|
cpu_usage.x = _window->x + 10;
|
||||||
|
cpu_usage.y = _window->y + 110;
|
||||||
|
|
||||||
|
_window->window_content_text.push_back(ram_usage_label);
|
||||||
|
_window->window_content_text.push_back(ram_usage);
|
||||||
|
_window->window_content_text.push_back(cpu_usage_label);
|
||||||
|
_window->window_content_text.push_back(cpu_usage);
|
||||||
|
|
||||||
|
// Variables for metrics
|
||||||
|
size_t total_ram;
|
||||||
|
size_t free_ram;
|
||||||
|
size_t used_ram;
|
||||||
|
float ram_percent;
|
||||||
|
float cpu_percent;
|
||||||
|
|
||||||
|
// For CPU calculation
|
||||||
|
uint32_t idle_count_last = 0;
|
||||||
|
uint32_t idle_count_current = 0;
|
||||||
|
|
||||||
|
uint counter = 0;
|
||||||
|
|
||||||
while (_running) {
|
while (_running) {
|
||||||
// Settings UI logic
|
counter++;
|
||||||
vTaskDelay(pdMS_TO_TICKS(100));
|
|
||||||
|
// RAM Calculation (Internal + PSRAM)
|
||||||
|
size_t internal_total = heap_caps_get_total_size(MALLOC_CAP_INTERNAL);
|
||||||
|
size_t internal_free = heap_caps_get_free_size(MALLOC_CAP_INTERNAL);
|
||||||
|
size_t psram_total = heap_caps_get_total_size(MALLOC_CAP_SPIRAM);
|
||||||
|
size_t psram_free = heap_caps_get_free_size(MALLOC_CAP_SPIRAM);
|
||||||
|
|
||||||
|
total_ram = internal_total + psram_total;
|
||||||
|
free_ram = internal_free + psram_free;
|
||||||
|
used_ram = total_ram - free_ram;
|
||||||
|
ram_percent = (float)used_ram / (float)total_ram * 100.0f;
|
||||||
|
|
||||||
|
// CPU Usage - measure idle task iterations
|
||||||
|
idle_count_current = xTaskGetIdleRunTimeCounter();
|
||||||
|
|
||||||
|
if (idle_count_last > 0) {
|
||||||
|
uint32_t idle_delta = idle_count_current - idle_count_last;
|
||||||
|
// The more idle iterations, the less CPU is used
|
||||||
|
// Scale based on your measurement interval (100ms)
|
||||||
|
// Tune the divisor based on your specific system
|
||||||
|
cpu_percent = 100.0f - (idle_delta / 10000.0f);
|
||||||
|
if (cpu_percent < 0) cpu_percent = 0;
|
||||||
|
if (cpu_percent > 100) cpu_percent = 100;
|
||||||
|
} else {
|
||||||
|
cpu_percent = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
idle_count_last = idle_count_current;
|
||||||
|
|
||||||
|
_window->window_content_text[1].text = std::to_string(used_ram);
|
||||||
|
_window->window_content_text[3].text = std::to_string(cpu_percent);
|
||||||
|
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(5));
|
||||||
|
|
||||||
|
if (counter == 1000) {
|
||||||
|
_display_state->update_display.store(true);
|
||||||
|
counter = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -49,6 +49,7 @@ struct WindowDecoration {
|
|||||||
struct WindowContentText {
|
struct WindowContentText {
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
|
int size;
|
||||||
std::string text;
|
std::string text;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -220,13 +220,13 @@ void Shell::draw_window(Window window) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Window title
|
// Window title
|
||||||
tft->draw_text(window.x + 6 + 65, window.y + 10, window.title, COL_WHITE);
|
tft->draw_text(window.x + 6 + 65, window.y + 10, window.title, COL_WHITE, 2);
|
||||||
|
|
||||||
// Window content
|
// Window content
|
||||||
tft->draw_box(window.x + 3, window.y + 35, window.width - 6, window.height - 38, COL_WHITE);
|
tft->draw_box(window.x + 3, window.y + 35, window.width - 6, window.height - 38, COL_WHITE);
|
||||||
|
|
||||||
for (WindowContentText text : window.window_content_text) {
|
for (WindowContentText text : window.window_content_text) {
|
||||||
tft->draw_text(text.x, text.y, text.text, COL_BLACK);
|
tft->draw_text(text.x, text.y, text.text, COL_BLACK, text.size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,14 +265,14 @@ void Shell::draw_task_bar(int color) {
|
|||||||
tft->draw_box(item.place_x, item.place_y, item.width + 2, item.height + 2, COL_WHITE);
|
tft->draw_box(item.place_x, item.place_y, item.width + 2, item.height + 2, COL_WHITE);
|
||||||
tft->draw_box(item.place_x, item.place_y, item.width, item.height, COL_GREY);
|
tft->draw_box(item.place_x, item.place_y, item.width, item.height, COL_GREY);
|
||||||
|
|
||||||
tft->draw_text(item.place_x + 2, item.place_y + 2, item.name, COL_BLACK);
|
tft->draw_text(item.place_x + 2, item.place_y + 2, item.name, COL_BLACK, 1);
|
||||||
} else {
|
} else {
|
||||||
tft->draw_box(item.place_x - 1, item.place_y - 1, item.width + 1, item.height + 1, COL_WHITE);
|
tft->draw_box(item.place_x - 1, item.place_y - 1, item.width + 1, item.height + 1, COL_WHITE);
|
||||||
tft->draw_box(item.place_x, item.place_y, item.width + 2, item.height + 2, COL_BLACK);
|
tft->draw_box(item.place_x, item.place_y, item.width + 2, item.height + 2, COL_BLACK);
|
||||||
tft->draw_rect(item.place_x, item.place_y, item.width + 1, item.height + 1, 1, COL_DARK_GREY);
|
tft->draw_rect(item.place_x, item.place_y, item.width + 1, item.height + 1, 1, COL_DARK_GREY);
|
||||||
tft->draw_box(item.place_x, item.place_y, item.width, item.height, COL_GREY);
|
tft->draw_box(item.place_x, item.place_y, item.width, item.height, COL_GREY);
|
||||||
|
|
||||||
tft->draw_text(item.place_x + 2, item.place_y + 2, item.name, COL_BLACK);
|
tft->draw_text(item.place_x + 2, item.place_y + 2, item.name, COL_BLACK, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,9 +31,9 @@ void TFT_Handler::draw_line(int x1, int y1, int x2, int y2, int color) {
|
|||||||
tft.drawLine(x1, y1, x2, y2, color);
|
tft.drawLine(x1, y1, x2, y2, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TFT_Handler::draw_text(int x, int y, std::string str, int color) {
|
void TFT_Handler::draw_text(int x, int y, std::string str, int color, int size) {
|
||||||
tft.setTextColor(color);
|
tft.setTextColor(color);
|
||||||
tft.setTextSize(1);
|
tft.setTextSize(size);
|
||||||
tft.drawString(str.c_str(), x, y);
|
tft.drawString(str.c_str(), x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -62,7 +62,7 @@ public:
|
|||||||
void draw_box(int x, int y, int size_x, int size_y, int color);
|
void draw_box(int x, int y, int size_x, int size_y, int color);
|
||||||
void draw_rect(int x, int y, int size_x, int size_y, int thickness, int color);
|
void draw_rect(int x, int y, int size_x, int size_y, int thickness, int color);
|
||||||
void draw_line(int x1, int y1, int x2, int y2, int color);
|
void draw_line(int x1, int y1, int x2, int y2, int color);
|
||||||
void draw_text(int x, int y, std::string str, int color);
|
void draw_text(int x, int y, std::string str, int color, int size);
|
||||||
void fill_screen(int color);
|
void fill_screen(int color);
|
||||||
|
|
||||||
void draw_box_sprite(int x, int y, int size_x, int size_y, int color);
|
void draw_box_sprite(int x, int y, int size_x, int size_y, int color);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user