fix: 센서 비율 기반 + LED 깜빡임 + 디바운스 + gated 체크
[Placement] - 센서 이미지 비율 기반 (너비 35%, BiasAlignment 0.44) — 태블릿 대응 - LED 깜빡임 수정: greenHeld/failCount<3 동안 LED 5 안 보냄 - 디바운스: phaseProtected 중 lastHintChangeMs 안 건드림 (화살표 안 나오던 버그) - Step 2 전환 힌트 항상 "Checking left/right balance..." - GREEN에서 ch4/ch5 개별 탈락 시 방향 안내 (lrDev NaN 처리) [도넛차트] - Fill 카드: 윗줄 65%, 아랫줄 325/500 mL - ml → mL 통일 - Spot 완료 시 displayMaxVolumeMl 즉시 갱신 - Auto 윈도우 < 5일 때 Current Measurement "—" [기타] - V41 gated 체크 + 최소 len≥3 (ungated 피크 안 보임) - CCCD 실패(status 133) 500ms 후 1회 재시도 - 기기 스캔 사전순 정렬 - 힌트 점 순환 (./.../...) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -828,8 +828,30 @@ class BleManager private constructor(private val context: Context) {
|
||||
logd { "Service ready! (CCCD written)" }
|
||||
}
|
||||
} else {
|
||||
loge { "CCCD write failed with status: $status" }
|
||||
connectionError.value = "Notification setup failed (status $status)"
|
||||
loge { "CCCD write failed with status: $status — retrying in 500ms" }
|
||||
// GATT 133 등 일시적 오류 → 500ms 후 재시도
|
||||
handler.postDelayed({
|
||||
try {
|
||||
val rx = rxCharacteristic
|
||||
if (rx != null) {
|
||||
gatt.setCharacteristicNotification(rx, true)
|
||||
val cccd = rx.getDescriptor(CCCD_UUID)
|
||||
if (cccd != null) {
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
|
||||
gatt.writeDescriptor(cccd, BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE)
|
||||
} else {
|
||||
@Suppress("DEPRECATION")
|
||||
cccd.value = BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE
|
||||
@Suppress("DEPRECATION")
|
||||
gatt.writeDescriptor(cccd)
|
||||
}
|
||||
logd { "CCCD retry sent" }
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
connectionError.value = "Notification setup failed (status $status)"
|
||||
}
|
||||
}, 500)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user