From 14e4b33072a583e9b6bdf91baa8c3a12c4e1d4e1 Mon Sep 17 00:00:00 2001 From: jjangddu Date: Fri, 11 Sep 2026 09:17:20 +0900 Subject: [PATCH] =?UTF-8?q?fix(ble):=20=ED=8F=B4=EB=A7=81=20=EA=B1=B4?= =?UTF-8?q?=EB=84=88=EB=9B=B0=EA=B8=B0=EB=A5=BC=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EB=A1=9C=20=C2=B7=20=EA=B4=91=EA=B3=A0=20?= =?UTF-8?q?=EC=97=86=EC=9D=8C=20=EB=AC=B8=EA=B5=AC=EB=A5=BC=20=EC=8B=A4?= =?UTF-8?q?=EC=A0=9C=20=EC=9B=90=EC=9D=B8=EC=97=90=20=EB=A7=9E=EA=B2=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2026-09-11 실기기 시험(IM-H091)에서 둘이 드러났다. ## ① 건너뛰기가 파일 로그에 안 남았다 `logd` 로 남겨서 logcat 에만 갔다. 현장에서는 `Download/VesiScan_BLE_*.log` 파일만 받아 보므로, 그러면 **"왜 배터리가 안 갱신되나"를 파일로 답할 수 없다.** `debugLogger.info` 로 올렸다 — `BATT_POLL_SKIP`. 최대 30초에 한 줄이라 부담이 없다. ## ② 문구가 틀린 원인을 가리켰다 시험 로그가 이랬다: 09:11:11.980 DISCONNECTED 09:11:12.863 ADVERT_WAIT 0.88초 뒤 연결 누름 — 광고를 못 봐서 대기 09:11:18.867 ADVERT_TIMEOUT 6초 기다려도 없음 09:11:26.988 ADVERT_TIMEOUT 또 없음 09:11:28.967 ADVERT_FOUND 16초 만에 광고 재개 → 연결 성공 **프로브가 빠른 연결/해제 반복 뒤 약 16초간 광고를 멈췄다.** 가드는 정확히 작동했다 — 연결을 시도하지 않아 반쪽 연결도, 무한 스피너도, 본드 비대칭도 없었다(HALF_CONNECTED · CONNECT_TIMEOUT · stale GATT 전부 안 찍힘). 그런데 문구가 "전원이 켜져 있는지 확인" 이었다. 기기는 켜져 있었다 — 광고를 아직 안 시작한 것이다. 사용자를 엉뚱한 곳으로 보낸다. 실제 원인과 할 일을 적었다: 기기 신호가 잡히지 않습니다. 방금 연결을 끊었다면 기기가 다시 신호를 보낼 때까지 10~20초 걸릴 수 있습니다 — 잠시 뒤 다시 눌러 주세요. 계속 안 되면 전원을 확인하세요. ## 펌웨어 쪽에 남길 것 광고 재개가 16초 걸린 것은 **펌웨어 동작**이다. 빠른 연결/해제를 7회 반복한 뒤였다. 앱은 기다리고 다시 시도하면 되지만, 그 지연 자체는 펌웨어팀이 볼 문제다. demo-final 143 · user 79 · caregiver 33 테스트 통과. Co-Authored-By: Claude Opus 5 --- .../java/com/medithings/vesiscan/ble/BleManager.kt | 14 +++++++++----- app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/medithings/vesiscan/ble/BleManager.kt b/app/src/main/java/com/medithings/vesiscan/ble/BleManager.kt index 64e767c..8068866 100644 --- a/app/src/main/java/com/medithings/vesiscan/ble/BleManager.kt +++ b/app/src/main/java/com/medithings/vesiscan/ble/BleManager.kt @@ -1512,12 +1512,16 @@ class BleManager private constructor(private val context: Context) { override fun run() { if (!isConnected.value) return when { - isMtbBusy -> logd { "battery poll skip: mtb stream in progress" } + // 건너뛴 사실을 **파일 로그**에 남긴다. logd 는 logcat 에만 가는데 + // 현장에서는 파일만 받아 보므로, 그러면 "왜 배터리가 안 갱신되나"를 + // 파일로 답할 수 없다. 최대 30초에 한 줄이라 부담이 없다. + isMtbBusy -> + debugLogger.info("BATT_POLL_SKIP mtb 응답 진행 중 — 다음 주기에") // 측정 중이다. 건너뛰고 다음 tick 에 다시 본다 — 끝나면 잡힌다. - !isTxQuiet -> logd { - "battery poll skip: TX active " + - "(${System.currentTimeMillis() - lastTxAtMs}ms ago)" - } + !isTxQuiet -> debugLogger.info( + "BATT_POLL_SKIP 측정 중 " + + "(직전 TX ${System.currentTimeMillis() - lastTxAtMs}ms 전) — 다음 주기에" + ) else -> sendBatteryQuery() } handler.postDelayed(this, BATTERY_POLL_INTERVAL_MS) diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 5f2562b..c6cfa96 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -373,7 +373,7 @@ 연결이 끝나지 않았습니다. 기기를 다시 눌러 주세요. 연결이 끝까지 되지 않았습니다 — 기기가 응답했지만 준비를 마치지 못했습니다. 다시 연결합니다. 페어링을 삭제할 수 없습니다: 기기에 명령이 닿지 않습니다. 기기 버튼을 15초 길게 눌러 초기화한 뒤, 저장된 기기를 삭제하고 다시 페어링하세요. - 기기를 찾을 수 없습니다. 전원이 켜져 있는지 확인한 뒤 다시 눌러 주세요. + 기기 신호가 잡히지 않습니다. 방금 연결을 끊었다면 기기가 다시 신호를 보낼 때까지 10~20초 걸릴 수 있습니다 — 잠시 뒤 다시 눌러 주세요. 계속 안 되면 전원을 확인하세요. 새 기기 권한 허용 검색 중지 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6e9273e..65468c5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -373,7 +373,7 @@ Connection did not finish. Tap the device again. Connection was incomplete — the device answered but did not finish setup. Reconnecting. Cannot delete pairing: the device is not reachable. Hold the device button for 15 seconds to reset it, then delete the saved device and pair again. - Device not found. Make sure it is powered on, then tap it again. + No signal from the device. If you just disconnected, it can take 10-20 seconds to start advertising again — wait a moment and tap it again. If it keeps failing, check the power. New Devices Grant Permissions Stop Scan