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 4ed1629..460d007 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 @@ -779,7 +779,11 @@ fun PiezoMonitoringView(appState: AppState) { Log.d("ImuDbg", "imuCollector log: $msg") } while (isActive) { - if (isConnected && !isMeasuring && !isAutoMeasuring && !isSpotInProgress) { + // Auto Scan 의 cycle 사이 idle 시간에도 polling 가능 — isAutoMeasuring 조건 제외. + // isMeasuring 은 현재 measure() 호출 중인 짧은 시간만 true → 사이 idle 에서 mtb 가능. + // isSpotInProgress 는 5회 연속 측정이라 분리 (충돌 회피). + // 이전: Auto Scan 켜두면 isAutoMeasuring=true 영원 유지 → mtb 영원 skip → posture UNKNOWN + if (isConnected && !isMeasuring && !isSpotInProgress) { Log.d("ImuDbg", "→ sendMtb (posture poll)") bleManager.piezoCollector.skipNextComplete = true val sent = bleManager.sendMtb() @@ -788,12 +792,20 @@ fun PiezoMonitoringView(appState: AppState) { Log.d("ImuDbg", "mtb throttled — skip this cycle") } } else { - Log.d("ImuDbg", "skip (connected=$isConnected measuring=$isMeasuring auto=$isAutoMeasuring spot=$isSpotInProgress)") + Log.d("ImuDbg", "skip (connected=$isConnected measuring=$isMeasuring spot=$isSpotInProgress)") } kotlinx.coroutines.delay(GreenZoneConstants.posturePollIntervalMs) } } + // PiezoMonitoring 이탈 시 imuCollector callback cleanup — 다른 화면 (PlacementGuide 등) 이 + // 자기 콜백 등록하기 전에 우리 콜백 해제. 다시 진입하면 위 LaunchedEffect 가 재등록. + androidx.compose.runtime.DisposableEffect(Unit) { + onDispose { + bleManager.imuCollector.onComplete = null + } + } + // Add catheter dialog if (showAddCatheterDialog) { var addAmount by remember { mutableStateOf("1") }