From bf2f16b20727669fd01431240156ea600b81c4f8 Mon Sep 17 00:00:00 2001 From: jjangddu Date: Fri, 24 Apr 2026 12:09:02 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20Spot=20=EC=B8=A1=EC=A0=95=20mbb=E2=86=92?= =?UTF-8?q?maa=20=EB=B3=B5=EC=9B=90=20(rbb=20=ED=97=A4=EB=8D=94=EA=B0=80?= =?UTF-8?q?=20collector=20=ED=98=BC=EB=8F=99=20=EC=9C=A0=EB=B0=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mbb 응답(rbb:→reb:×6→raa:)에서 rbb: 헤더가 piezoCollector를 혼동시켜 그래프가 안 뜨는 문제 발생. - Spot 단일 측정: sendChannelsOnly(maa) 사용 - 자동 측정 10초째: measure()→maa 사용 (mbb는 파싱 검증 후 전환) - IMU 전송 시 isMeasuring 체크 추가 (측정 중 충돌 방지) - sendChannelsOnly() 함수 추가 (기존 sendAllChannels와 동일) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../java/com/example/medilightv2android/ble/BleManager.kt | 6 ++++++ .../ui/views/monitoring/PiezoMonitoringView.kt | 8 ++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/example/medilightv2android/ble/BleManager.kt b/app/src/main/java/com/example/medilightv2android/ble/BleManager.kt index 413848d..5f0cab0 100644 --- a/app/src/main/java/com/example/medilightv2android/ble/BleManager.kt +++ b/app/src/main/java/com/example/medilightv2android/ble/BleManager.kt @@ -367,6 +367,12 @@ class BleManager private constructor(private val context: Context) { sendRaw(CRC16.buildCommand("mbb")) } + /** 6채널 측정만 (maa, rbb 헤더 없이 바로 reb×6→raa) */ + fun sendChannelsOnly() { + piezoCollector.startMultiChannel(6) + sendRaw(CRC16.buildCommand("maa", intArrayOf(0))) + } + fun startBatteryPolling() { batteryTimer?.let { handler.removeCallbacks(it) } sendBatteryQuery() diff --git a/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PiezoMonitoringView.kt b/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PiezoMonitoringView.kt index cc79a4d..2ebb4f9 100644 --- a/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PiezoMonitoringView.kt +++ b/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PiezoMonitoringView.kt @@ -181,7 +181,7 @@ fun PiezoMonitoringView(appState: AppState) { } bleManager.piezoCollector.onLog = { msg -> Log.d("PiezoCollector", msg) } - bleManager.sendFullMeasurement() + bleManager.sendChannelsOnly() // Timeout with auto-retry (15s) handler.postDelayed({ @@ -190,7 +190,7 @@ fun PiezoMonitoringView(appState: AppState) { measureRetryCount++ Log.w("PiezoMonitor", "Timeout — auto-retry $measureRetryCount/$maxMeasureRetries") bleManager.piezoCollector.reset() - bleManager.sendFullMeasurement() + bleManager.sendChannelsOnly() // Second timeout for retry handler.postDelayed({ if (!isMeasuring) return@postDelayed @@ -236,11 +236,11 @@ fun PiezoMonitoringView(appState: AppState) { autoTickCount++ if (autoTickCount % 10 == 0) { - // 10초째: 전체 측정 (mbb → rbb + reb×6 + raa) + // 10초째: 6ch 측정 if (!isMeasuring) measure() } else { // 1~9초: IMU 쿼리 (msp → rsp) - bleManager.sendImuQuery() + if (!isMeasuring) bleManager.sendImuQuery() } } }