From 032424f5134ccd3dacc256d8e9422e7a51011ee9 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Tue, 25 Aug 2026 01:15:00 +0300 Subject: [PATCH] Mercury: enable heartbeat on connect (keeps link alive), autolock endpoint --- .../kotlin/pw/binom/viewmate/phone/MercuryBridge.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app-phone/src/main/kotlin/pw/binom/viewmate/phone/MercuryBridge.kt b/app-phone/src/main/kotlin/pw/binom/viewmate/phone/MercuryBridge.kt index 5344d46..5768555 100644 --- a/app-phone/src/main/kotlin/pw/binom/viewmate/phone/MercuryBridge.kt +++ b/app-phone/src/main/kotlin/pw/binom/viewmate/phone/MercuryBridge.kt @@ -11,6 +11,7 @@ import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.serialization.json.jsonObject import pw.binom.mercury.DiscoveredGlasses @@ -54,6 +55,18 @@ object MercuryBridge { is RayNeoMercury.Event.Connected -> { _state.value = _state.value.copy(connected = true) setStatus("подключено (BLE)") + // Включаем heartbeat очков (каждые 3с они пингуют нас) — иначе + // при гашении экрана очки рвут BLE-связь через ~3 секунды. + // Повторяем, пока очки не будут готовы (они переподключаются + // в первые секунды и первое сообщение могут потерять). + scope.launch { + for (i in 0 until 30) { + if (!_state.value.connected) break + val ok = mercury?.enableHeartbeat() ?: false + if (i % 3 == 0) log("hb", "enable_heartbeat #$i ok=$ok") + delay(3000) + } + } } is RayNeoMercury.Event.Disconnected -> { _state.value = _state.value.copy(connected = false)