BLE fix: msn? ASCII " " 포맷 변경 + PiezoMonitoring 진입 시 강제 polling
사용자 검증: ble.log에 rsn 응답이 보이지만 도넛차트는 0% 표시.
원인 1 — msn? 송신 포맷:
기존: CRC16.buildCommandBE("msn", intArrayOf(0))
→ bytes: 6D 73 6E 3F 00 00 03 FE (BE param 2B)
→ 펌웨어가 응답 안 함 (rsn: 자체가 안 옴)
다른 query 명령(mid?, mtb?, maa?, mqq?, mag?)은 모두 ASCII " " 포맷.
msn?만 BE param 포맷이라 펌웨어가 인식 못 한 듯.
수정: CRC16.buildCommandASCII("msn", " ")
→ bytes: 6D 73 6E 3F 20 ?? ?? (다른 query와 동일 패턴)
원인 2 — Clinical → Unpair → 새 연결 후 도넛차트 진입 시 batteryLevel=0:
disconnectAndUnbond()에서 batteryLevel.value=0 reset됨.
새 BLE 연결의 onDescriptorWrite → startBatteryPolling 호출은 PiezoMonitoring
진입 전에 이미 완료. PiezoMonitoring의 LaunchedEffect에서 등록하는
onConnectionStateChanged 콜백은 '상태 변경 시점'에만 트리거되므로
이미 connected인 상태로 진입하면 호출 안 됨.
수정: PiezoMonitoring 진입 시 isConnected.value==true이면 명시적으로
startBatteryPolling() 한 번 더 호출 (idempotent — stopBatteryPolling 후 재시작).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -461,7 +461,9 @@ class BleManager private constructor(private val context: Context) {
|
|||||||
// ── Common Commands ──
|
// ── Common Commands ──
|
||||||
|
|
||||||
fun sendBatteryQuery() {
|
fun sendBatteryQuery() {
|
||||||
sendRaw(CRC16.buildCommandBE("msn", intArrayOf(0)))
|
// mid?/mtb?/maa? 등 다른 단순 query와 동일한 ASCII " " 형식 — BE [0]은
|
||||||
|
// 펌웨어가 응답 안 함이 확인됨 (rsn: 자체가 안 옴, 2026-06-08).
|
||||||
|
sendRaw(CRC16.buildCommandASCII("msn", " "))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun sendDeviceInfoQuery() {
|
fun sendDeviceInfoQuery() {
|
||||||
|
|||||||
+7
@@ -573,6 +573,13 @@ fun PiezoMonitoringView(appState: AppState) {
|
|||||||
bleManager.startBatteryPolling()
|
bleManager.startBatteryPolling()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 진입 시 이미 연결되어 있으면 한 번 polling 재시작 (안전망).
|
||||||
|
// 이전 화면(Clinical Unpair → 새 연결 등)에서 batteryLevel=0으로 reset된 채로
|
||||||
|
// 도넛차트 진입 시 onDescriptorWrite/onConnectionStateChanged 둘 다 이미 끝나 있어
|
||||||
|
// 콜백이 트리거 안 됨. 진입 시점에 강제 1회 polling으로 보강.
|
||||||
|
if (bleManager.isConnected.value) {
|
||||||
|
bleManager.startBatteryPolling()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add catheter dialog
|
// Add catheter dialog
|
||||||
|
|||||||
Reference in New Issue
Block a user