20 KiB
SHiNE ESP32 Homeserver UI Spec
Назначение
Этот документ описывает актуальный UI-прототип homeserver SHiNE для платы Waveshare ESP32-S3-Touch-AMOLED-2.16.
Актуальный основной Arduino-скетч лежит в ../main-device/shine_homeserver_main/.
Документ является источником истины для Arduino-скетча:
- если меняется этот документ, должен меняться и скетч;
- если меняется скетч, должен обновляться и этот документ;
- экраны, кнопки, поля, статусы, переходы и тексты не должны расходиться.
Текущий объём реализации
Текущая реализация является интерактивным прототипом экрана устройства, пригодным для ручной проверки на железе.
Что уже входит в прототип:
- локальный UI на тач-экране;
- хранение настроек и секретов во внутренней памяти
ESP32черезNVS; - русский текст в логике интерфейса; в текущей временной сборке отображение на экране идёт через ASCII-транслитерацию, потому что
U8g2-шрифты на устройстве временно не рисуются; - экран пополнения с реальным
solana:URI и рисованием QR-кода; - реальное подключение к
Wi-Fiпо сохранённымSSID/паролю; - реальная проверка доступности
API,RPCиWS-адресов; - реальное чтение баланса кошелька из
Solana RPC; - проверка обязательных условий перед регистрацией;
- живая on-chain регистрация серверного
user_pdaвshine_usersпо нажатию кнопки на главном экране; - прототип входящих запросов с подтверждением и отклонением;
- PIN-блокировка (в текущей временной сборке вход по PIN отключён, устройство открывает
HOMEсразу после старта); - базовые настройки, статус и главный экран;
- сохранение
PDAиtx signatureпосле успешной регистрации.
Что пока считается именно прототипом, а не финальной интеграцией:
- приём реальных входящих запросов на вход/подпись пока не подключён к живой сети;
- входящие запросы пока демонстрационные, чтобы можно было проверить UX и логику подтверждения.
Основная идея устройства
Устройство работает как отдельный homeserver:
- хранит секрет на самом устройстве;
- позволяет ввести логин, секрет и имя homeserver;
- показывает адрес кошелька устройства;
- позволяет пополнить баланс перед регистрацией;
- после выполнения условий даёт зарегистрировать устройство как homeserver;
- после регистрации может принимать входящие запросы на вход и на подпись.
SD-карта не нужна для постоянного хранения секрета в этом прототипе.
Основное сохранение идёт во внутреннюю flash-память через NVS.
Данные, которые хранятся на устройстве
Прототип хранит:
PIN;Wi-Fi SSID;Wi-Fi password;login;session/homeserver name;master secret;wallet address;user pda address;registration signature;balance;server api url;server rpc url;server ws url;- флаги:
wifiReady,serversReady,secretReady,registered,online.
Правила готовности к регистрации
Кнопка регистрации доступна только если одновременно выполнены условия:
- настроен и подтверждён
Wi-Fi; - заполнены и подтверждены серверные адреса;
- задан логин;
- сгенерирован или введён секрет;
- баланс кошелька не меньше
0.20 SOL; - устройство ещё не зарегистрировано.
Если хотя бы одно условие не выполнено, главный экран показывает, чего именно не хватает.
Экранная модель
В прототипе используются следующие экраны:
LOCKHOMESTATUSCONNECTIONWIFI_EDITSERVERSACCOUNTWALLETWALLET_QRREQUESTSREQUEST_DETAILSETTINGSPIN_EDITTEXT_INPUTCONFIRMREGISTER_ACCOUNT_CONFIRMREGISTER_ACCOUNT_RESULT
Общие правила интерфейса
- Верхняя строка всегда показывает краткий статус устройства:
PIN,Wi-Fi,сервер,регистрация. - Основной язык прототипа: русский.
- Для вывода текста в текущей временной сборке используется стандартный шрифт
Arduino_GFX. - Русские строки на экране временно показываются в ASCII-транслитерации.
- Кнопки крупные, с тач-ориентированным размером.
- Опасные действия подтверждаются отдельным диалогом.
- После изменения данных конфигурация сразу сохраняется в
NVS.
Экран LOCK
Назначение:
- экран блокировки предусмотрен в UI, но в текущей временной сборке после запуска пропускается;
- вход по PIN временно отключён для отладки остальных экранов.
Отображается:
- заголовок
SHiNE Device; - статус
Устройство заблокировано; - поле ввода PIN в виде маски;
- кнопки цифровой клавиатуры;
- кнопки
СтеретьиОткрыть.
Поведение:
- если PIN введён верно, открывается
HOME; - если PIN неверный, показывается ошибка
Неверный PIN; - в текущей временной сборке этот экран не показывается автоматически при старте.
Экран HOME
Это основной экран устройства.
Показывает:
- крупный статус регистрации;
- имя логина;
- имя homeserver;
- короткий статус Wi-Fi;
- короткий статус сервера;
- короткий статус баланса.
Нижние кнопки:
СтатусПодключениеАккаунтКошелёкЗапросыНастройки
Дополнительная большая кнопка:
REGISTER ACCOUNT
Если регистрация уже сделана:
- вместо призыва к регистрации показывается статус
Homeserver активен. - две нижние кнопки внизу экрана не прилегают вплотную друг к другу, между ними есть небольшой зазор.
Экран REGISTER_ACCOUNT_CONFIRM
Показывает предварительную проверку перед отправкой транзакции регистрации.
Отображается:
- повторный
login; - сообщение о том, что логин свободен или уже занят;
- баланс кошелька с проверкой порога
0.020 SOL; - имя homeserver;
- пометка, если используется стандартное значение
homeserver1; - отдельное предупреждение, если
Wi-Fiне подключён.
Кнопки:
ЗАРЕГИСТРИРОВАТЬ В СИЯНИИBACK
Поведение:
- если
Wi-Fiне подключён, на экране прямо показывается уведомление об этом и кнопка регистрации недоступна; - если
loginуже занят вshine_users, регистрация недоступна; - если баланс меньше
0.020 SOL, на экране показывается соответствующая ошибка; - если все проверки пройдены, кнопка регистрации активна и запускает on-chain регистрацию.
Экран REGISTER_ACCOUNT_RESULT
Показывает результат отправки регистрации.
Отображается:
- текст успеха или ошибки;
- подробное сообщение;
- при успехе краткий
user_pda; - при успехе краткий
tx signature.
Кнопки:
BACK HOMEACCOUNT
Поведение:
- после успешной регистрации данные
user_pdaиtx signatureсохраняются вNVS; - при ошибке на экране показывается причина отказа.
Экран STATUS
Показывает сводку:
- логин;
- homeserver;
- есть ли секрет;
- зарегистрировано ли устройство;
- подключён ли Wi-Fi;
- доступны ли серверы;
- хватает ли баланса;
- находится ли устройство онлайн;
- краткий отпечаток
PDAилиtx.
Кнопки:
НазадОбновить статус
Обновить статус в прототипе не делает сеть, а просто перерисовывает текущие вычисленные состояния.
Экран CONNECTION
Показывает:
Wi-Fi: готов / не готов;Серверы: готовы / не готовы;Онлайн: да / нет.
Кнопки:
Wi-FiСерверыПодключитьОтключитьНазад
Поведение:
Подключитьпереводит устройство вonline=true, еслиWi-Fiреально подключён и серверы реально проверены;Отключитьпереводит устройство вonline=false.
Экран WIFI_EDIT
Поля:
SSIDПароль
Кнопки:
Изменить SSIDИзменить парольПроверитьСброситьНазад
Поведение:
Проверитьделает реальную попытку подключения кWi-Fi;Сброситьочищает обе строки и ставитwifiReady=false.
Экран SERVERS
Поля:
API URLRPC URLWS URL
Кнопки:
Изменить APIИзменить RPCИзменить WSПроверитьТестовыеНазад
Поведение:
Тестовыеподставляет дефолтные тестовые значения;Проверитьделает реальные сетевые проверки:API URLдолжен отвечать поHTTP/HTTPS;RPC URLдолжен отвечать наSolana JSON-RPC;WS URLдолжен приниматьTCP/TLS-соединение.
Экран ACCOUNT
Показывает:
- логин;
- имя homeserver;
- статус секрета;
- короткий отпечаток секрета;
- статус регистрации;
- короткий отпечаток
PDAилиtx.
Кнопки:
Изменить логинСекретИмя homeserverСгенерироватьОчиститьНазад
Поведение:
Сгенерироватьсоздаёт новыйmaster secretи пересчитывает из негоdevice-кошелёк;Очиститьудаляет секрет, адрес кошелька,PDA,tx, регистрацию и онлайн-статус;- логин приводится к нижнему регистру и trim.
- после успешной регистрации на экране сохраняются и отображаются краткие отпечатки
PDAиTX.
Экран WALLET
Показывает:
- адрес кошелька устройства;
- баланс в
SOL; - минимально рекомендуемую сумму для регистрации;
- статус
Хватает / Не хватает.
Кнопки:
QR и URI+0.10 SOL+0.25 SOL-0.10 SOLПроверитьНазад
Поведение:
- кнопки пополнения/уменьшения нужны для теста сценариев;
Проверитьчитает реальный баланс изSolana RPC;- адрес кошелька должен совпадать с
device key, вычисленным из сохранённогоmaster secret; - отрицательный баланс не допускается.
Экран WALLET_QR
Показывает:
- QR-код для строки вида:
solana:<wallet>?amount=0.20&label=SHiNE%20Register; - адрес кошелька;
- сумму;
- текст URI.
Кнопки:
Назад
QR должен быть сканируемым, а не декоративным.
Экран REQUESTS
Показывает список демонстрационных запросов:
Вход в сессиюПодпись сообщения
Для каждого запроса:
- тип;
- источник;
- короткий статус.
Кнопки:
Открыть запрос 1Открыть запрос 2Назад
Экран REQUEST_DETAIL
Показывает детали выбранного запроса:
- тип запроса;
- кто запросил;
- время;
- описание;
- отпечаток/идентификатор.
Кнопки:
РазрешитьОтклонитьНазад
Поведение:
- после разрешения или отклонения запрос помечается обработанным;
- экран списка отражает новый статус.
Экран SETTINGS
Показывает:
- текущий PIN;
- базовые флаги безопасности;
- технические действия прототипа.
Кнопки:
Сменить PINСбросить онлайнПолный сбросНазад
Полный сброс очищает весь локальный конфиг и возвращает устройство к стартовому состоянию.
Экран PIN_EDIT
Используется для ввода нового PIN.
Правила:
- допустимы только цифры;
- длина PIN: 4..8 символов;
- после сохранения новый PIN немедленно пишется в
NVS.
Экран TEXT_INPUT
Это общий экран редактирования текстовых полей.
Используется для:
SSIDПароль Wi-FiЛогинИмя homeserverAPI URLRPC URLWS URL
Состав экрана:
- заголовок поля;
- текущее значение;
- программная клавиатура;
- кнопки
Стереть,OK,Отмена.
Экран CONFIRM
Это модальный экран подтверждения.
Используется для:
- регистрации;
- очистки секрета;
- полного сброса.
Кнопки:
ПодтвердитьОтмена
Сценарий первой настройки
Ожидаемый путь пользователя:
- открыть устройство сразу после старта; экран PIN временно не требуется;
- открыть
Подключение -> Wi-Fi; - ввести
SSIDи пароль, нажатьПроверить; - открыть
Подключение -> Серверы; - проверить или задать серверные адреса;
- открыть
Аккаунт; - ввести логин;
- задать имя homeserver;
- сгенерировать секрет;
- открыть
Кошелёк; - при необходимости пополнить баланс;
- вернуться на
HOME; - нажать
REGISTER ACCOUNT; - на экране проверки ещё раз увидеть
login, статус свободногоPDA, баланс,homeserver1и при необходимости сообщение о неподключённомWi-Fi; - нажать
ЗАРЕГИСТРИРОВАТЬ В СИЯНИИ; - после завершения увидеть либо экран успеха с
user_pdaиtx signature, либо подробную ошибку; - после успешной регистрации увидеть статус
Homeserver активен.
Примечание:
- устройство реально отправляет
create_user_pdaвshine_users, а после подтверждения сохраняетPDAиtx signature.
Сценарий входящего запроса
- открыть
Запросы; - выбрать один из запросов;
- прочитать детали;
- нажать
РазрешитьилиОтклонить; - убедиться, что статус запроса изменился.
Временный режим текста
В текущей диагностической версии:
- строковые литералы в коде остаются русскими и в
UTF-8; - перед выводом на экран они временно транслитерируются в ASCII;
- рендер выполняется стандартным шрифтом
Arduino_GFX; - это обходной режим, пока
U8g2-шрифты на устройстве не начнут рисоваться стабильно.
Критерии ручной проверки
Минимально нужно проверить:
- устройство загружается и сразу открывает
HOME; экран блокировки временно отключён; - текст отображается читаемо хотя бы в ASCII-транслитерации;
- ввод по экранной клавиатуре работает;
- после перезагрузки сохранённые поля остаются в памяти;
- секрет и адрес кошелька сохраняются на устройстве;
- экран
QR и URIрисует читаемый QR-код; - регистрация блокируется, пока условия не выполнены;
- после выполнения условий регистрация становится доступной;
- список запросов и экран подтверждения работают;
- полный сброс действительно очищает сохранённое состояние.