diff --git a/Dev_Docs/Pending_Features/2026-06-07_1650_esp32_subserver_ui_прототип.md b/Dev_Docs/Pending_Features/2026-06-07_1650_esp32_subserver_ui_прототип.md index 0505c21..afff00a 100644 --- a/Dev_Docs/Pending_Features/2026-06-07_1650_esp32_subserver_ui_прототип.md +++ b/Dev_Docs/Pending_Features/2026-06-07_1650_esp32_subserver_ui_прототип.md @@ -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. Выполнить `Полный сброс` и убедиться, что все поля, секрет, баланс, онлайн и регистрация очищаются. - ожидаемый результат: diff --git a/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/reference/shine_subserver_ui_spec.md b/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/reference/shine_subserver_ui_spec.md index 97ccafe..eaa39f6 100644 --- a/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/reference/shine_subserver_ui_spec.md +++ b/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/reference/shine_subserver_ui_spec.md @@ -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. после перезагрузки сохранённые поля остаются в памяти; diff --git a/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/test-device/shine_subserver_ui/shine_subserver_ui.ino b/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/test-device/shine_subserver_ui/shine_subserver_ui.ino index a628271..ec348e7 100644 --- a/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/test-device/shine_subserver_ui/shine_subserver_ui.ino +++ b/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/test-device/shine_subserver_ui/shine_subserver_ui.ino @@ -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; diff --git a/VERSION.properties b/VERSION.properties index 5d0ad21..1eaaa28 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.138 -server.version=1.2.130 +client.version=1.2.139 +server.version=1.2.131