From fdc4047c5ca110afc9d099888bedc515eb8f7e15 Mon Sep 17 00:00:00 2001 From: jjangddu Date: Fri, 24 Apr 2026 16:38:35 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20mls=20LED=20=EB=AA=85=EB=A0=B9=20Big=20E?= =?UTF-8?q?ndian=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20(=ED=85=8C=EC=8A=A4=ED=84=B0=20exe?= =?UTF-8?q?=EC=99=80=20=EB=8F=99=EC=9D=BC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 테스터 코드 분석 결과: exe: mls? + [0x00, 0x05] (16비트 Big Endian) → LED 바뀜 앱: mls? + [0x05, 0x00] (16비트 Little Endian) → LED 안 바뀜 CRC16.buildCommandBE() 추가: 파라미터를 Big Endian으로 직렬화 sendLedMode(): buildCommandBE("mls", [state]) 사용 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../com/example/medilightv2android/ble/BleManager.kt | 2 +- .../java/com/example/medilightv2android/ble/CRC16.kt | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) 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 fa14a96..20cab69 100644 --- a/app/src/main/java/com/example/medilightv2android/ble/BleManager.kt +++ b/app/src/main/java/com/example/medilightv2android/ble/BleManager.kt @@ -354,7 +354,7 @@ class BleManager private constructor(private val context: Context) { } fun sendLedMode(state: Int) { - sendRaw(CRC16.buildCommandASCII("mls", " $state")) + sendRaw(CRC16.buildCommandBE("mls", intArrayOf(state))) } fun sendImuQuery() { diff --git a/app/src/main/java/com/example/medilightv2android/ble/CRC16.kt b/app/src/main/java/com/example/medilightv2android/ble/CRC16.kt index 28cdbe9..689b2ba 100644 --- a/app/src/main/java/com/example/medilightv2android/ble/CRC16.kt +++ b/app/src/main/java/com/example/medilightv2android/ble/CRC16.kt @@ -54,6 +54,17 @@ object CRC16 { return appendCRC("$cmd?$asciiParams".toByteArray(Charsets.UTF_8)) } + /** 파라미터를 16비트 Big Endian으로 추가 (펌웨어 테스터와 동일 포맷) */ + fun buildCommandBE(cmd: String, params: IntArray = intArrayOf()): ByteArray { + val cmdBytes = "$cmd?".toByteArray(Charsets.UTF_8) + val paramBytes = ByteArray(params.size * 2) + for (i in params.indices) { + paramBytes[i * 2] = ((params[i] shr 8) and 0xFF).toByte() // High byte first + paramBytes[i * 2 + 1] = (params[i] and 0xFF).toByte() // Low byte + } + return appendCRC(cmdBytes + paramBytes) + } + fun buildSimpleCommand(cmd: String): ByteArray { return appendCRC(cmd.toByteArray(Charsets.UTF_8)) }