From eee065a76a96bdf58eca30540772d7a04733c6dd Mon Sep 17 00:00:00 2001 From: jjangddu Date: Tue, 23 Jun 2026 15:33:03 +0900 Subject: [PATCH] =?UTF-8?q?debug(imu):=20rim:=20raw=20byte/int16=20dump=20?= =?UTF-8?q?(ImuRaw=20tag)=20=E2=80=94=20FSR/format=20=EC=A7=84=EB=8B=A8?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 증상: - JSON 의 imu_samples 에 gz=0 같은 의심값 - sqrt(ax²+ay²+az²) 가 1g 아닌 ~0.5g 일관 표시 - 펌웨어 FSR vs 앱 변환 (/8192) 불일치 가능성 수정: ImuPacketCollector.parseRim 에 raw dump 로깅 추가. - 전체 byte hex dump (188B) - 첫 sample + 마지막 sample 의 raw int16 값 (division 전) - 참고용으로 /8192 시 g 환산값 같이 표시 logcat: adb logcat | grep ImuRaw 기대 출력: ImuRaw: rim FULL HEX (188B): 72 69 6D 3A 00 0F ... ImuRaw: rim sample[0] raw int16: ax=-170 ay=4034 az=735 gx=-8 gy=16 gz=0 (g if /8192: ax=-0.0208 ay=0.4925 az=0.0898) 진단 판정: - raw az ≈ 8192 → ±4g FSR 정상 - raw az ≈ 4096 → ±8g FSR (앱 변환식과 mismatch, FSR=±8g) - raw az ≈ 2048 → ±16g FSR - raw gz=0 일관적 → 펌웨어가 GZ 안 보내거나 sensitivity 다름 - bytes 순서 다르면 endian/offset 문제 Co-Authored-By: Claude Opus 4.7 --- .../medilightv2android/ble/ImuPacketCollector.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/src/main/java/com/example/medilightv2android/ble/ImuPacketCollector.kt b/app/src/main/java/com/example/medilightv2android/ble/ImuPacketCollector.kt index 3e64c11..cac90b2 100644 --- a/app/src/main/java/com/example/medilightv2android/ble/ImuPacketCollector.kt +++ b/app/src/main/java/com/example/medilightv2android/ble/ImuPacketCollector.kt @@ -129,6 +129,10 @@ class ImuPacketCollector { onLog?.invoke("rim: too short (${data.size}B)") return } + // RAW DUMP — division 전 원본 byte + int16 값 logcat 으로 출력 (디버그용). + val totalHex = data.joinToString(" ") { "%02X".format(it) } + android.util.Log.d("ImuRaw", "rim FULL HEX (${data.size}B): $totalHex") + val numSamples = readBe16(data, 4) val payloadBytes = data.size - HEADER_BYTES - CRC_BYTES val expectedBytes = numSamples * SAMPLE_SIZE_BYTES @@ -145,6 +149,15 @@ class ImuPacketCollector { val gxRaw = readBe16Signed(data, off + 6) val gyRaw = readBe16Signed(data, off + 8) val gzRaw = readBe16Signed(data, off + 10) + + // 첫 sample / 마지막 sample 만 raw int16 dump (모든 sample 로깅하면 폭주) + if (i == 0 || i == numSamples - 1) { + android.util.Log.d("ImuRaw", + "rim sample[$i] raw int16: ax=$axRaw ay=$ayRaw az=$azRaw " + + "gx=$gxRaw gy=$gyRaw gz=$gzRaw " + + "(g if /8192: ax=${"%.4f".format(axRaw / 8192f)} ay=${"%.4f".format(ayRaw / 8192f)} az=${"%.4f".format(azRaw / 8192f)})") + } + parsed.add(ImuSample( ax = axRaw / ACCEL_LSB_PER_G, ay = ayRaw / ACCEL_LSB_PER_G,