From 208de17152fe7da524e4a91adcace85e469c1bfc Mon Sep 17 00:00:00 2001 From: jjangddu Date: Fri, 24 Apr 2026 16:42:02 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=AA=A8=EB=93=A0=20BLE=20=EB=AA=85?= =?UTF-8?q?=EB=A0=B9=EC=96=B4=EB=A5=BC=20=ED=85=8C=EC=8A=A4=ED=84=B0=20exe?= =?UTF-8?q?=EC=99=80=20=EB=8F=99=EC=9D=BC=20=ED=8F=AC=EB=A7=B7=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 테스터(vsbtester) buildPacket() 분석 결과: - 파라미터 있는 명령: 16비트 Big Endian (buildCommandBE) - 파라미터 없는 명령: 공백 0x20 추가 (buildCommandASCII " ") 변경: - mpa, mec, msn, mta, mls → buildCommandBE (BE 파라미터) - mps, maa, mqq, mag, mcj, mid, msp, mbb → buildCommandASCII " " (공백) - maa sendChannelsOnly도 공백 방식으로 통일 (기존 LE [0] 제거) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../medilightv2android/ble/BleManager.kt | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 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 20cab69..8bbd079 100644 --- a/app/src/main/java/com/example/medilightv2android/ble/BleManager.kt +++ b/app/src/main/java/com/example/medilightv2android/ble/BleManager.kt @@ -306,47 +306,51 @@ class BleManager private constructor(private val context: Context) { // Piezo Commands val piezoCollector = PiezoPacketCollector() + // ── Piezo Commands (테스터 exe와 동일 포맷: 파라미터=BE, 빈 파라미터=공백) ── + fun sendPiezoPowerOn(freqOption: Int = 2, cycles: Int = 5) { - sendRaw(CRC16.buildCommand("mpa", intArrayOf(freqOption, cycles))) + sendRaw(CRC16.buildCommandBE("mpa", intArrayOf(freqOption, cycles))) } fun sendPiezoStop() { - sendRaw(CRC16.buildCommand("mps")) + sendRaw(CRC16.buildCommandASCII("mps", " ")) } fun sendBurst(freqOption: Int, cycles: Int, delayUs: Int, piezoCh: Int = 0) { - sendRaw(CRC16.buildCommand("mec", intArrayOf(freqOption, delayUs, 140, cycles, 1, piezoCh))) + sendRaw(CRC16.buildCommandBE("mec", intArrayOf(freqOption, delayUs, 140, cycles, 1, piezoCh))) } - /** 6-channel measurement (maa) */ fun sendAllChannels(mode: Int = 0) { piezoCollector.startMultiChannel(6) - sendRaw(CRC16.buildCommand("maa", intArrayOf(mode))) + sendRaw(CRC16.buildCommandASCII("maa", " ")) } - // NIRS Commands + // ── NIRS Commands ── + fun sendNirsPowerOn() { - sendRaw(CRC16.buildCommand("mta", intArrayOf(1))) + sendRaw(CRC16.buildCommandBE("mta", intArrayOf(1))) } fun sendNirsPowerOff() { - sendRaw(CRC16.buildCommand("mta", intArrayOf(0))) + sendRaw(CRC16.buildCommandBE("mta", intArrayOf(0))) } fun sendMqqQuery() { - sendRaw(CRC16.buildCommand("mqq")) + sendRaw(CRC16.buildCommandASCII("mqq", " ")) } fun sendMagQuery() { - sendRaw(CRC16.buildCommand("mag")) + sendRaw(CRC16.buildCommandASCII("mag", " ")) } fun sendMcjQuery() { - sendRaw(CRC16.buildCommand("mcj")) + sendRaw(CRC16.buildCommandASCII("mcj", " ")) } + // ── Common Commands ── + fun sendBatteryQuery() { - sendRaw(CRC16.buildCommand("msn", intArrayOf(0))) + sendRaw(CRC16.buildCommandBE("msn", intArrayOf(0))) } fun sendDeviceInfoQuery() { @@ -367,10 +371,10 @@ class BleManager private constructor(private val context: Context) { sendRaw(CRC16.buildCommandASCII("mbb", " ")) } - /** 6채널 측정만 (maa, rbb 헤더 없이 바로 reb×6→raa) */ + /** 6채널 측정만 (maa) */ fun sendChannelsOnly() { piezoCollector.startMultiChannel(6) - sendRaw(CRC16.buildCommand("maa", intArrayOf(0))) + sendRaw(CRC16.buildCommandASCII("maa", " ")) } fun startBatteryPolling() {