Files
rayneo-vm/BLOCKERS.md
T

104 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Blockers
Сюда пишутся только те задачи/проблемы, в которых застряли. Каждая запись — задача,
что сделано, в чём стена, что проверено, варианты обхода. Записи ведутся по правилам
ночной сессии (см. `TASKS.md`, секция «Правила ночной сессии»).
---
## B-1 · Периодический лаунч `Mercury/.NetConfigActivity` — НЕ ПОДТВЕРЖДЁН
**Когда замечено:** 2026-09-27, во время тестов запуска Zona через `DEBUG_LAUNCH`.
**Что я видел в логах:** `ShizukuVdService: launchActivity pkg=com.ffalconxr.mercury.launcher
cls=com.ffalconxr.mercury.launcher.wizard.netconfig.NetConfigActivity displayId=2` повторялось
каждые 5 секунд, постоянно.
**Что это на самом деле:** Непонятно. Это мог быть мой собственный `GlassesDebugReceiver`,
который я перепосылал несколько раз и он где-то зациклился; мог быть артефакт system-job’а;
мог быть какой-то fallback в `VmGlassesController.ensureNetworking()`. **Не блокер.**
**Что НЕ сделано:** не остановил очки в момент пика, не нашёл источник цикла. Пользователь
утром сказал «сейчас вижу наше приложение», значит цикл или закончился, или не повторяется.
**Следующий шаг:** если повторится — переписать GlassesDebugReceiver с rate-limit + проверить
нет ли в `VmService`/`VmGlassesController` периодического `launchActivity(Mercury)` для
Wi-Fi/network fallback.
---
## B-2 · rayneo-mercury: `enableWirelessAdb` через BLE на X3 Pro не возвращает адрес
**Когда выяснено:** 2026-09-27, аудит прошивки RayNeoLauncher по smali
(`adb pull /system/app/RayNeoLauncher`).
**Что происходит (по smali + логам):**
1. Телефон шлёт BLE-команду `ble.request.debug` с `payload.cmd="enableWirelessAdb"`.
2. Очки **принимают** команду и реально поднимают беспроводной adb (мы видим
`adb_wifi_enabled=1` и `service.adb.tcp.port` после). **Это работает.**
3. Очки **должны** прислать событие `WirelessAdbAddress` обратно. **Это не происходит.**
4. В smali `BleResponse` есть `RESPONSE_MAP`, в котором зарегистрированы Wi-Fi / media /
netconfig ответы — но **`DebugResponse` отсутствует**. Поэтому маршрутизация ответа
по URI `ble.request.debug` не настроена, и событие теряется.
5. Телефон вечно ждёт `Event.WirelessAdbAddress`, не получает его и уходит в таймаут.
**Что это значит для provisioning:**
- Команда `enableWirelessAdb` через BLE **включает adb** — но адрес `ip:port` мы узнать не можем.
- Provisioning сейчас работает только потому, что **adb уже был включён раньше** (например,
руками или через shizuku) и не выключился после ребута. После ребута очков — если
`adb_wifi_enabled` сбросится в 0 — provisioning сломается, потому что новый адрес мы
узнать не сможем.
**Обходной путь (уже работает):**
```bash
# Через shizuku shell на очках:
service call adb 4 i32 1 s16 'Caffeine Portable' # включить adb
settings put global adb_wifi_enabled 1 # не дать ему автоотключиться
```
После этого `adb_wifi_enabled` остаётся 1, телефон через mDNS `_adb-tls-connect._tcp`
находит `ip:port` и подключается. Это уже используется как fallback в `AdbController`.
**Следующий шаг:** при первом удобном случае — поднять через shizuku-shell и убедиться,
что provisioning пройдёт полностью через этот путь.
---
## B-3 · Звук end-to-end — РЕШЕНО на стороне очков
**Когда замечено:** 2026-09-27, E2E-проверка после восстановления общей сети «O2 5».
**Что доказано работающим на очках:**
- `MediaProjection` получается без диалога (`PROJECT_MEDIA: allow` уже стоит с ночи).
- `AudioPlaybackCapture` стартует, читает PCM: `GlassesAudioCapture: capture: bytes=... rms=...`.
- 440 Гц TestTone → RMS=5674 (теория ~5657). **Реальный звук захвачен, не тишина**.
- Динамик очков мутится (`STREAM_MUSIC: mute`).
- Поток PCM по 4 КБ фреймам идёт в `Channel<ByteArray>(capacity=16)`, готов к WebSocket.
- TCP-порт `8081` на очках (`192.168.76.248:8081/vm-audio`) отвечает с телефона.
**Что не проверено вживую:** воспроизведение на телефоне. AudioPlaybackManager код опубликован,
но не вызван (`controller.setAudioMode(ON_PHONE)` никто не дёрнул). UI-переключатель на
телефоне готов, но нажать его можно только с руки (в этой сессии PhoneDebugReceiver я не
реализовал, broadcast дропается HONOR).
**Известный race-condition:** `MainActivity.handledTick` при двойном `requestProjection`
с коротким интервалом пересоздаёт projection → `AudioRecord.read -2`. Не блокирует нормальную
работу (UI нажимается один раз → один tick), но при отладке DEBUG_AUDIO_PIPE после уже
активного захвата ломает capture. Чиню при случае.
**Следующий шаг:** нажать в UI телефона переключатель «Звук на телефоне» — должно
зазвучать. Если нет — проверить `adb -s AXGL024B05001337 logcat -s AudioPlaybackManager:V`.
---
## B-4 · Финал: гашение экрана обязательно в конце
По ночным правилам — на завершении всех задач ИЛИ при невозможности продолжать —
выполняется:
```
adb -s A06B4AB933C4103 shell input keyevent 223
```
и проверка `mWakefulness=Dozing/Asleep`. Если не работает — через `ScreenControl` (Канал 1) /
Shizuku `SET_SCREEN`.
**Статус:** выполнено (mWakefulness=Dozing подтверждён в конце ночной сессии).