feat: auto scan interval 500ms 기본 + 배터리 → Disconnect 전환

1) Auto scan interval default 600 → 500ms
   PiezoSettings.autoScanIntervalMs default 변경. 사용자가 별도 조정 안 하면
   기본 0.5초 간격으로 측정 사이클 진행.

2) BLE canSendMaa throttle 600 → 500ms
   응답이 280~420ms 라 500ms = 평균 + 80~220ms 안전 마진. 디바이스에 무리 X.
   throttle 도 같이 내려야 autoScanIntervalMs=500 이 실제로 적용됨.

3) PiezoMonitoring 도넛 상단 배터리 → 연결 끊기면 Disconnect 표시
   기존: 배터리 바 + xx% (항상 표시, 비-demo)
   변경: isConnected=false → Icons.BluetoothDisabled + "Disconnect" (빨강)
        isConnected=true  → 기존 배터리 바 + %
   demo flavor 는 영향 0 (!isDemoMode 가드 그대로).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-17 10:08:10 +09:00
parent 7b8b8fb6ae
commit 062c611649
3 changed files with 44 additions and 29 deletions
@@ -586,10 +586,10 @@ class BleManager private constructor(private val context: Context) {
* 6채널 측정 명령(maa) 송신 가능 여부:
* (A) 이전 응답이 아직 진행 중(isMultiChannel && !isComplete)이면 차단.
* 단 3초 넘게 응답이 안 오면 강제 통과(영영 deadlock 방지).
* (B) 마지막 송신으로부터 600ms 미만이면 차단(펌웨어 burst 방어).
* (B) 마지막 송신으로부터 500ms 미만이면 차단(펌웨어 burst 방어).
*
* FW VBTFW0116 + MTU 247 + CONN_PRIORITY HIGH 조합에서 한 사이클 응답이
* 약 280~420ms이므로, 600ms = 응답 평균 + 안전 마진 ~200ms.
* 약 280~420ms이므로, 500ms = 응답 평균 + 안전 마진 ~80~220ms.
*/
private var lastMaaSentMs = 0L
private fun canSendMaa(caller: String): Boolean {
@@ -603,7 +603,7 @@ class BleManager private constructor(private val context: Context) {
}
android.util.Log.w("BleManager", "maa FORCE [$caller] — prev incomplete after ${sinceLast}ms, abandoning")
}
if (sinceLast < 600) {
if (sinceLast < 500) {
android.util.Log.w("BleManager", "maa THROTTLED [$caller] — ${sinceLast}ms since last")
return false
}