feat(ui): экран оперативной памяти и переключение кнопкой BOOT

Второй экран показывает загрузку ОЗУ крупной цифрой и её график со
шкалой 0-100 - у памяти она естественная, подбирать нечего. В углу свой
значок, планка памяти вместо микросхемы: он же и говорит, какой экран
открыт.

Тревога в приоритете: при перегреве плата принудительно возвращается на
экран процессора и кнопка не работает, пока температура не упадёт. Смысл
тревоги в том, что её нельзя прощёлкать.

Экран памяти выпадает из листания, если агент не шлёт ключ M - со старым
агентом кнопка просто ничего не делает. То же решение подойдёт машинам
без дискретной видеокарты.

Выбранный экран не запоминается при перезагрузке: хранить негде.
Тревоги по памяти нет намеренно - загрузка ОЗУ под 100% здесь обычное
рабочее состояние.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
oskarvitaliiandClaude Opus 5 committed 2026-09-17 19:56:33 +07:00
1 parent 4344fa8873
commit f18090b5b7
8 files changed
+201 -59

No files matched your search

+5 -1
View File
@@ -16,7 +16,7 @@ void linkBegin() {
static bool parseLine(char *line, CpuStats &out) {
bool haveTemp = false;
bool haveLoad = false;
CpuStats parsed = {0.0f, 0};
CpuStats parsed = {0.0f, 0, -1};
char *save = nullptr;
for (char *tok = strtok_r(line, ";", &save); tok; tok = strtok_r(nullptr, ";", &save)) {
@@ -32,6 +32,10 @@ static bool parseLine(char *line, CpuStats &out) {
} else if (strcmp(key, "L") == 0) {
parsed.loadPct = atoi(val);
haveLoad = true;
} else if (strcmp(key, "M") == 0) {
// Память необязательна: старый агент её не шлёт, и это не повод
// отбрасывать строку целиком.
parsed.memPct = atoi(val);
}
// прочие ключи игнорируются намеренно: протокол расширяемый
}