From 444aa6280fc27b0089be3f3386e15096b9b85c49 Mon Sep 17 00:00:00 2001 From: dwjang Date: Tue, 21 Apr 2026 16:21:43 +0900 Subject: [PATCH] fix: critical bug in PiezoPacketCollector processEndPacket MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CRITICAL: In multi-channel mode, "ree:" packets between channels were silently dropped instead of saving the current channel data. This caused channel data loss when channels are separated by "ree:". Fixed: Added missing isMultiChannel + ree: branch that calls saveCurrentChannel() — matching Swift behavior exactly. Found via line-by-line Swift vs Kotlin verification. Co-Authored-By: Claude Opus 4.6 --- .../medilightv2android/ble/PiezoPacketCollector.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/example/medilightv2android/ble/PiezoPacketCollector.kt b/app/src/main/java/com/example/medilightv2android/ble/PiezoPacketCollector.kt index 567622a..c0644a2 100644 --- a/app/src/main/java/com/example/medilightv2android/ble/PiezoPacketCollector.kt +++ b/app/src/main/java/com/example/medilightv2android/ble/PiezoPacketCollector.kt @@ -130,12 +130,19 @@ class PiezoPacketCollector { private fun processEndPacket(prefix: String, bytes: ByteArray) { if (isMultiChannel && prefix == "raa:") { + // Final completion marker — save last channel and finish if (hasFirstPacket && rawData.isNotEmpty()) saveCurrentChannel() isComplete = true val validChannels = channelResults.filterNotNull() onLog?.invoke("raa: multi-channel complete — ${validChannels.size} channels") onMultiChannelComplete?.invoke(validChannels) - } else if (!isMultiChannel) { + } else if (isMultiChannel) { + // ree: in multi-channel = channel separator, save and continue + if (hasFirstPacket && rawData.isNotEmpty()) { + saveCurrentChannel() + } + } else { + // Single-channel complete (ree:) finishSingleChannel() } }