fix(ui): "기기 응답 없음" false-positive 배너 — lastBleRxAt 갱신 확대
증상: posture chip 이 정상 갱신되기 시작한 후에도 도넛차트 상단에 "기기 응답 없음" 빨강 배너가 뜸. 원인: FirmwareWarningBanner.showTimedOut = timedOut && !deviceAlive. deviceAlive = lastBleRxAt > 0 && (now - lastBleRxAt) < 12_000. 기존 lastBleRxAt 갱신은 `reb:` (piezo 측정 응답) 케이스에만 있었음. Auto scan 꺼진 도넛차트 idle 상태에서는 reb 이 아예 안 오고 mim → rim (IMU) 응답만 매 초 옴. 그래서 lastBleRxAt = 0 유지 → deviceAlive false → timedOut 되는 순간 배너 노출. 수정: processReceivedData 진입점에서 무조건 lastBleRxAt = now 갱신. 이제 rim / rsn / rid / rls / rpa / rbb 등 모든 유효 응답이 alive 마크 대상. Auto scan 상관없이 rim 폴링만으로도 deviceAlive=true 유지. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1155,7 +1155,14 @@ class BleManager private constructor(private val context: Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun processReceivedData(data: ByteArray) {
|
private fun processReceivedData(data: ByteArray) {
|
||||||
lastRxTimestamp = System.currentTimeMillis()
|
val now = System.currentTimeMillis()
|
||||||
|
lastRxTimestamp = now
|
||||||
|
// 2026-07-07 fix: lastBleRxAt 을 processReceivedData 진입점에서 무조건 갱신.
|
||||||
|
// 이전에는 reb: (piezo 측정) 응답 케이스에만 세팅 → auto scan 꺼진 도넛차트
|
||||||
|
// idle 상태 (mim 폴링만) 에서는 rim 응답이 매초 오는데도 lastBleRxAt = 0.
|
||||||
|
// FirmwareWarningBanner 의 deviceAlive 판정이 false → 어떤 이유로 timedOut=true
|
||||||
|
// 되면 "기기 응답 없음" false-positive 배너 노출.
|
||||||
|
lastBleRxAt.value = now
|
||||||
// Raw BLE capture (디버그 — 사용자가 토글로 enable 했을 때만 writes)
|
// Raw BLE capture (디버그 — 사용자가 토글로 enable 했을 때만 writes)
|
||||||
com.medithings.vesiscan.services.RawBleLogger.write(data)
|
com.medithings.vesiscan.services.RawBleLogger.write(data)
|
||||||
val prefix = String(data, 0, minOf(4, data.size), Charsets.US_ASCII)
|
val prefix = String(data, 0, minOf(4, data.size), Charsets.US_ASCII)
|
||||||
|
|||||||
Reference in New Issue
Block a user