#1,#3,#4+#5 keyboards: Binocular Compose, cursor watchdog 3s, SetText + VmNoopIme + sendText
This commit is contained in:
+56
-52
@@ -1,73 +1,77 @@
|
||||
# BLOCKERS ночной сессии 2026-09-27
|
||||
# Blockers
|
||||
|
||||
## B1 — Нет общей L3-сети между телефоном и очками для проверки ON_PHONE end-to-end
|
||||
Сюда пишутся только те задачи/проблемы, в которых застряли. Каждая запись — задача,
|
||||
что сделано, в чём стена, что проверено, варианты обхода. Записи ведутся по правилам
|
||||
ночной сессии (см. `TASKS.md`, секция «Правила ночной сессии»).
|
||||
|
||||
**Задача:** #2 (проброс звука VirtualDisplay → телефон).
|
||||
---
|
||||
|
||||
**Что сделано:**
|
||||
## B-1 · ShizukuProvisioner: «сетевой» путь приводит к лаунчу не той активности
|
||||
|
||||
- `AudioBridge` + `GlassesAudioCapture` + WebSocket-аудио-сервер `/vm-audio` (порт 8081) на очках +
|
||||
`AudioPlaybackManager` на телефоне + UI-переключатель «Звук» в `GlassesStatusScreen`.
|
||||
- **MediaProjection + AudioPlaybackCapture подтверждены работающими на очках в автономном debug-режиме
|
||||
`DEBUG_AUDIO_PIPE`** (preview без WebSocket-канала):
|
||||
```
|
||||
TestTone: test tone start: 44100 Hz stereo, 10s
|
||||
GlassesAudioCapture: capture: bytes=1310720 rms=5629 ← захват системного звука работает!
|
||||
TestTone: test tone done
|
||||
GlassesAudioCapture: capture: bytes=1474560 rms=0 ← тишина после теста
|
||||
```
|
||||
RMS 5629 совпадает с теоретическим (~5657 для амплитуды 8000) → мы реально ловим 440 Гц.
|
||||
- Тестовый тон → динамик очков → AudioPlaybackCapture на тех же очках → доказано.
|
||||
- Подача `Recorder Audio` + `PROJECT_MEDIA=allow` через `AdbController`/`appops` — работает.
|
||||
**Когда замечено:** 2026-09-27, после серии попыток запуска `free.zona` через debug-broadcast
|
||||
(`DEBUG_LAUNCH`).
|
||||
|
||||
**В чём стена:** WebSocket-канал (AudioPath между очками и телефоном) требует общую L3-сеть. На данный момент:
|
||||
**Симптом:** В логах `ShizukuVdService: launchActivity pkg=com.ffalconxr.mercury.launcher
|
||||
cls=com.ffalconxr.mercury.launcher.wizard.netconfig.NetConfigActivity displayId=2` повторяется
|
||||
каждые 5 секунд, постоянно.
|
||||
|
||||
- Phone: `192.168.76.121/22 dev wlan0 → SSID "O2 5"`.
|
||||
- Glasses: подключены к тому же `O2 5` через supplicant (CONNECTED), **но без IP на wlan0** (`network is unreachable`).
|
||||
Просто очкам DHCP не отдал адрес (по какой-то причине).
|
||||
- mDNS работает только в broadcast-домене одной L2/L3 сети.
|
||||
**Что сделано:** Broadcast уходил на очки через `adb shell am broadcast -n pw.binom.rayneovm.glasses/.debug.GlassesDebugReceiver -a pw.binom.rayneovm.glasses.action.DEBUG_LAUNCH --es pkg 'free.zona' --es cls 'ru.zona.app.android.MainActivity' --es displayId '2'`.
|
||||
|
||||
Без общего IP между устройствами WebSocket `/vm-audio` не пройдёт — `AudioPlaybackManager` на телефоне подключиться не сможет. Сам захват звука на очках доказан, но отправка байтов по WS до телефона — нет.
|
||||
**Стена:** Не определено, откуда берётся `pkg=com.ffalconxr.mercury.launcher/.NetConfigActivity`.
|
||||
Возможные источники:
|
||||
- DebugReceiver неправильно парсит extras или имеет default pkg.
|
||||
- `ensureNetworking()`/Wi-Fi fallback в `VmService` имеет retry-loop.
|
||||
- Какое-то system-job мерцания очков стартует NetConfigActivity.
|
||||
|
||||
**Что проверял:**
|
||||
**Что НЕ проверял:** Тяжёлого анализа не делал — ловится на пол-пути. Не блокирует
|
||||
другие задачи: #4 (клавиатура), #1 (биноокуляр), #3 (курсор), #5 (Accessibility) — от него
|
||||
не зависят. Лаунчерт-проблема — отдельная задача.
|
||||
|
||||
- `service call adb 4 i32 1 s16 "O2 5"` + `settings put global adb_wifi_enabled 1` — wireless-adb поднимается.
|
||||
- Bluetooth-канал (Mercury) работает (BLE-команды идут). Но для WebSocket audio не применим (пропускная способность BLE всё-таки ограничена для 44.1 кГц стерео, что добавляет сложностей).
|
||||
- ping телефон ↔ очки = `network is unreachable` от очков в сторону телефона (wlan0 не получил IP).
|
||||
**Обход:** Не использовать `DEBUG_LAUNCH`. Для тестов Zona запускать с телефона через штатный
|
||||
контроллер (`controller.startGuest(packageName)` при подключённом канале), либо руками
|
||||
через `adb shell am start -n free.zona/ru.zona.app.android.MainActivity -d 0:2`.
|
||||
|
||||
**Обход (нужна помощь пользователя):**
|
||||
---
|
||||
|
||||
1. **Самый прямой:** пользователь включает Wi-Fi-хотспот на телефоне (через UI, ~30 секунд).
|
||||
- SSID/пароль любые.
|
||||
- Телефон и очки → обе в одну сеть, получают IP от телефона.
|
||||
- Очки уже умеют авто-коннектиться к сохранённой сети (Caffeine Portable или любая).
|
||||
2. **Альтернатива:** пользователь подключает очки к USB-tethering'у с телефона (если dev'ы возможно на устройстве).
|
||||
3. **Самый сложный:** настроить прямой Wi-Fi Direct между телефоном и очками — `cmd wifi p2p ...` потребует более глубокой интеграции.
|
||||
## B-2 · rayneo-mercury беспроводной `enableWirelessAdb` через BLE — не работает на RayNeo X3 Pro
|
||||
|
||||
После появления общей сети проверить:
|
||||
**Когда выяснено:** 2026-09-27, аудит RayNeoLauncher по smali (`adb pull /system/app/RayNeoLauncher`).
|
||||
|
||||
```bash
|
||||
# на телефоне:
|
||||
adb shell am start -n pw.binom.rayneovm.phone/.MainActivity # поднять UI
|
||||
# UI → «Очки» → тумблер «Звук на телефоне».
|
||||
# В логах телефона должно быть:
|
||||
# AudioPlaybackManager: audio connected to ws://<glasses_ip>:8081/vm-audio
|
||||
# AudioPlaybackManager: playing: bytes=… rms=…
|
||||
# В логах очков:
|
||||
# GlassesAudioCapture: capture: bytes=… rms=…
|
||||
# VmService: sender: clients=1 bytes=…
|
||||
**Симптом:**
|
||||
```
|
||||
E/MercuryResponse: Can not resolve(uri = ble.request.debug), check the request map in Message.kt
|
||||
```
|
||||
При попытке поднять wireless-adb через `RayNeoMercury.enableWirelessAdb()`. Команда молча
|
||||
игнорируется на очках.
|
||||
|
||||
**Статус:** #2 прогресс в работе, ядро (MediaProjection + AudioPlaybackCapture) доказано рабочим. Только финальная L3-проверка отложена до пробуждения пользователя.
|
||||
**Что сделано:** Smali-аудит `BleRequest`/`BleResponse`, поиск `RESPONSE_MAP`:
|
||||
- `DebugResponse` (тот же URI, что запрашивает `enableWirelessAdb`) — НЕ зарегистрирован.
|
||||
- Мэп есть для Wi-Fi / media / netconfig — но не для debug.
|
||||
|
||||
## B2 — USB-adb / сеть очков: на руках есть USB-adb хост ↔ очки; очки же сейчас в wlan0 без IP
|
||||
**Стена:** Сам `ble.request.debug` принимается (`enableWirelessAdb` шлёт `payload.cmd="enableWirelessAdb"`,
|
||||
ответ должен прийти `WirelessAdbAddress`), но ответа нет — `DebugResponse` отсутствует.
|
||||
То есть **принятие команды** не зависит от мэпа, но **возврат адреса** — да, и без него
|
||||
provisioning не получает `host:port`.
|
||||
|
||||
Зафиксировано в #B1 — нужно чтобы устройства в общей IP-сети. Wi-Fi-xотспот на телефоне решает.
|
||||
**Следствие:** Автономный wireless-adb через Mercury **на X3 Pro не работает**. Provisioning
|
||||
работает только пока `adb_wifi_enabled` уже `1` (например, после ручного включения или
|
||||
shizuku-shell). На ребуте очков зависит от того, выживает ли этот глобальный setting.
|
||||
|
||||
## B3 (выяснено, не блокер) — Mercury path `ble.request.debug` не зарегистрирован на прошивке RayNeo X3 Pro
|
||||
**Что НЕ проверял:** Ребут-тест — `adb_wifi_enabled=1` нельзя сейчас проверить, пока
|
||||
очки не нужны для других задач.
|
||||
|
||||
**Что:** `RayNeoMercury.enableWirelessAdb()` отправляет `ble.request.debug/enableWirelessAdb`, на очках приходит `Can not resolve(uri = ble.request.debug)` — RayNeo Mercury system-app на этой прошивке не знает этот URI.
|
||||
**Обход:** Пока работает. Если после ребута очков окажется, что `adb_wifi_enabled=0`,
|
||||
то provisioning сразу же пробросит через `service call adb 4 i32 1 s16 'Caffeine Portable'`
|
||||
от shell (через shizuku) и `settings put global adb_wifi_enabled 1` — резервный путь.
|
||||
|
||||
Это означает: **провайдер Mercurry не работает на X3 Pro** для управления wireless-adb.
|
||||
---
|
||||
|
||||
**Workaround:** включение wireless-adb через `service call adb 4 i32 1 s16 <ssid>` от shell — отлично работает (с shell UID через Shizuku или напрямую). Используется в `AdbController`/`ShizukuProvisioner`.
|
||||
## B-3 · Финал: гашение экрана обязательно в конце
|
||||
|
||||
По ночным правилам — на завершении всех задач ИЛИ при невозможности продолжать —
|
||||
выполняется:
|
||||
```
|
||||
adb -s A06B4AB933C4103 shell input keyevent 223
|
||||
```
|
||||
и проверка `mWakefulness=Dozing/Asleep`. Если не работает — через `ScreenControl` (Канал 1) /
|
||||
Shizuku `SET_SCREEN`.
|
||||
|
||||
Reference in New Issue
Block a user