ESP32: временно отключить PIN-вход в subserver UI
This commit is contained in:
parent
b9185e761b
commit
66975862f7
@ -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. Выполнить `Полный сброс` и убедиться, что все поля, секрет, баланс, онлайн и регистрация очищаются.
|
||||
|
||||
- ожидаемый результат:
|
||||
|
||||
@ -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. после перезагрузки сохранённые поля остаются в памяти;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
client.version=1.2.138
|
||||
server.version=1.2.130
|
||||
client.version=1.2.139
|
||||
server.version=1.2.131
|
||||
|
||||
Loading…
Reference in New Issue
Block a user