ESP32: временно отключить PIN-вход в subserver UI

This commit is contained in:
AidarKC 2026-06-08 12:29:47 +04:00
parent b9185e761b
commit 66975862f7
4 changed files with 21 additions and 14 deletions

View File

@ -1,12 +1,12 @@
# ESP32 UI-прототип сабсервера SHiNE
- краткое описание фичи:
для `Waveshare ESP32-S3-Touch-AMOLED-2.16` добавлен новый интерактивный UI-скетч сабсервера `SHiNE` с хранением данных в `NVS`, PIN-блокировкой, настройками `Wi-Fi`, настройками серверов, кошельком, экраном `QR/URI`, живой Solana-регистрацией и экраном входящих запросов. В текущей версии `Wi-Fi` подключается реально, адреса `API/RPC/WS` проверяются реально, баланс кошелька читается из `Solana RPC`, а регистрация отправляет `create_user_pda` в `shine_users`.
для `Waveshare ESP32-S3-Touch-AMOLED-2.16` добавлен новый интерактивный UI-скетч сабсервера `SHiNE` с хранением данных в `NVS`, настройками `Wi-Fi`, настройками серверов, кошельком, экраном `QR/URI`, живой Solana-регистрацией и экраном входящих запросов. Логика PIN в коде сохранена, но вход по PIN во временной сборке отключён, чтобы не блокировать проверку остальных экранов. В текущей версии `Wi-Fi` подключается реально, адреса `API/RPC/WS` проверяются реально, баланс кошелька читается из `Solana RPC`, а регистрация отправляет `create_user_pda` в `shine_users`.
- что именно проверять:
1. Прошить режим `subserver-ui` и дождаться старта экрана блокировки.
1. Прошить режим `subserver-ui` и дождаться открытия главного экрана без PIN.
2. Проверить, что русский текст в заголовках, кнопках и статусах отображается корректно, без кракозябр и замены на английский.
3. Ввести PIN `1234` и убедиться, что открывается главный экран.
3. Открыть `Настройки` и убедиться, что показывается пометка о временно отключённом входе по PIN.
4. Открыть `Подключение -> Wi-Fi`, ввести `SSID` и пароль, нажать `Проверить`, дождаться реального подключения, затем перезагрузить устройство и проверить, что значения сохранились.
5. Открыть `Подключение -> Серверы`, проверить или изменить `API/RPC/WS`, нажать `Проверить` и убедиться, что показываются реальные статусы доступности, затем перезагрузить устройство и проверить сохранение значений.
6. Открыть `Аккаунт`, ввести логин, имя сабсервера и нажать `Сгенерировать`; проверить, что появились секрет и адрес кошелька, а после перезагрузки они не исчезают.
@ -16,7 +16,7 @@
10. Выполнить регистрацию и убедиться, что статус меняется на `Сабсервер активен`, онлайн-статус становится активным, а на экране появляются краткие отпечатки `PDA/TX`.
11. После регистрации проверить через `Solana`/UI проекта, что `user_pda` для этого логина реально создана и соответствует `device`-адресу устройства.
12. Открыть `Запросы`, поочерёдно открыть оба демонстрационных запроса и проверить, что кнопки `Разрешить` и `Отклонить` меняют их статус.
13. Открыть `Настройки`, сменить PIN, затем заблокировать/перезагрузить устройство и проверить вход с новым PIN.
13. При необходимости открыть `Настройки -> Сменить PIN` и убедиться, что новый PIN сохраняется, хотя вход по PIN временно не используется на старте.
14. Выполнить `Полный сброс` и убедиться, что все поля, секрет, баланс, онлайн и регистрация очищаются.
- ожидаемый результат:

View File

@ -26,7 +26,7 @@
- проверка обязательных условий перед регистрацией;
- живая on-chain регистрация серверного `user_pda` в `shine_users` через `device key` устройства;
- прототип входящих запросов с подтверждением и отклонением;
- PIN-блокировка;
- PIN-блокировка (в текущей временной сборке вход по PIN отключён, устройство открывает `HOME` сразу после старта);
- базовые настройки, статус и главный экран;
- сохранение `PDA` и `tx signature` после успешной регистрации.
@ -117,8 +117,8 @@
Назначение:
- блокировка устройства после запуска;
- вход по PIN.
- экран блокировки предусмотрен в UI, но в текущей временной сборке после запуска пропускается;
- вход по PIN временно отключён для отладки остальных экранов.
Отображается:
@ -131,7 +131,8 @@
Поведение:
- если PIN введён верно, открывается `HOME`;
- если PIN неверный, показывается ошибка `Неверный PIN`.
- если PIN неверный, показывается ошибка `Неверный PIN`;
- в текущей временной сборке этот экран не показывается автоматически при старте.
## Экран HOME
@ -424,7 +425,7 @@ QR должен быть сканируемым, а не декоративны
Ожидаемый путь пользователя:
1. разблокировать устройство PIN-кодом;
1. открыть устройство сразу после старта; экран PIN временно не требуется;
2. открыть `Подключение -> Wi-Fi`;
3. ввести `SSID` и пароль, нажать `Проверить`;
4. открыть `Подключение -> Серверы`;
@ -466,7 +467,7 @@ QR должен быть сканируемым, а не декоративны
Минимально нужно проверить:
1. устройство загружается и показывает экран блокировки;
1. устройство загружается и сразу открывает `HOME`; экран блокировки временно отключён;
2. русский текст отображается без кракозябр;
3. ввод по экранной клавиатуре работает;
4. после перезагрузки сохранённые поля остаются в памяти;

View File

@ -200,7 +200,7 @@ struct RuntimeNetState {
int32_t rssi;
};
static ScreenId gScreen = SCR_LOCK;
static ScreenId gScreen = SCR_HOME;
static ScreenId gPrevScreen = SCR_HOME;
static EditTarget gEditTarget = EDIT_NONE;
static ConfirmTarget gConfirmTarget = CONFIRM_NONE;
@ -252,6 +252,7 @@ static const uint8_t kBlockTypeServerProfile = 30;
static const uint8_t kBlockTypeAccessServers = 40;
static const uint8_t kBlockTypeSessions = 50;
static const uint8_t kBlockTypeTrustedState = 70;
static const bool kPinLockEnabled = false;
static const char *KB_ALPHA[4] = {
"qwertyuiop",
@ -1901,7 +1902,7 @@ static void drawSettingsScreen() {
drawTopBar("Настройки");
drawPanel(20, 92, 440, 176, C_PANEL, C_BORDER, 16);
drawText(36, 122, "PIN: " + repeatChar('*', gData.pin.length()), C_TEXT);
drawText(36, 152, "Онлайн после старта: " + boolText(gData.online), C_TEXT);
drawText(36, 152, String("Вход по PIN: ") + (kPinLockEnabled ? "активен" : "временно отключён"), kPinLockEnabled ? C_TEXT : C_WARN);
drawText(36, 182, "Русский UI: активен", C_ACCENT);
drawWrappedText(36, 214, 48, 16, "Русский текст рисуется через UTF-8 и кириллический U8g2-шрифт. Это обязательная часть прототипа.", C_MUTE, (const uint8_t *)FONT_SMALL);
addButton(20, 286, 212, 48, ACT_CHANGE_PIN, "Сменить PIN");
@ -2432,6 +2433,11 @@ void setup() {
gPrefs.begin("shine-ui", false);
loadData();
if (!kPinLockEnabled) {
gScreen = SCR_HOME;
gPrevScreen = SCR_HOME;
gLockBuffer = "";
}
syncWifiRuntimeState();
if (WiFi.status() != WL_CONNECTED) {
gData.online = false;

View File

@ -1,2 +1,2 @@
client.version=1.2.138
server.version=1.2.130
client.version=1.2.139
server.version=1.2.131