Files
rayneo-vm/BLOCKERS.md
T

5.7 KiB
Raw Blame History

BLOCKERS ночной сессии 2026-09-27

B1 — Нет общей L3-сети между телефоном и очками для проверки ON_PHONE end-to-end

Задача: #2 (проброс звука VirtualDisplay → телефон).

Что сделано:

  • 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 — работает.

В чём стена: WebSocket-канал (AudioPath между очками и телефоном) требует общую L3-сеть. На данный момент:

  • 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 сети.

Без общего IP между устройствами WebSocket /vm-audio не пройдёт — AudioPlaybackManager на телефоне подключиться не сможет. Сам захват звука на очках доказан, но отправка байтов по WS до телефона — нет.

Что проверял:

  • 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).

Обход (нужна помощь пользователя):

  1. Самый прямой: пользователь включает Wi-Fi-хотспот на телефоне (через UI, ~30 секунд).
    • SSID/пароль любые.
    • Телефон и очки → обе в одну сеть, получают IP от телефона.
    • Очки уже умеют авто-коннектиться к сохранённой сети (Caffeine Portable или любая).
  2. Альтернатива: пользователь подключает очки к USB-tethering'у с телефона (если dev'ы возможно на устройстве).
  3. Самый сложный: настроить прямой Wi-Fi Direct между телефоном и очками — cmd wifi p2p ... потребует более глубокой интеграции.

После появления общей сети проверить:

# на телефоне:
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=…

Статус: #2 прогресс в работе, ядро (MediaProjection + AudioPlaybackCapture) доказано рабочим. Только финальная L3-проверка отложена до пробуждения пользователя.

B2 — USB-adb / сеть очков: на руках есть USB-adb хост ↔ очки; очки же сейчас в wlan0 без IP

Зафиксировано в #B1 — нужно чтобы устройства в общей IP-сети. Wi-Fi-xотспот на телефоне решает.

B3 (выяснено, не блокер) — Mercury path ble.request.debug не зарегистрирован на прошивке RayNeo X3 Pro

Что: RayNeoMercury.enableWirelessAdb() отправляет ble.request.debug/enableWirelessAdb, на очках приходит Can not resolve(uri = ble.request.debug) — RayNeo Mercury system-app на этой прошивке не знает этот URI.

Это означает: провайдер Mercurry не работает на X3 Pro для управления wireless-adb.

Workaround: включение wireless-adb через service call adb 4 i32 1 s16 <ssid> от shell — отлично работает (с shell UID через Shizuku или напрямую). Используется в AdbController/ShizukuProvisioner.