From eff6f57aa5dd8f69ddf0bbcd6e41e514c2a84aa7 Mon Sep 17 00:00:00 2001 From: ahormann <ahormann@gmx.net> Date: Thu, 14 Nov 2024 23:24:27 +0100 Subject: [PATCH] Soundcore Q30: Cleanup Code --- .../liberty/SoundcoreLibertyProtocol.java | 2 +- .../soundcore/q30/SoundcoreQ30Protocol.java | 35 +++++++++++-------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/soundcore/liberty/SoundcoreLibertyProtocol.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/soundcore/liberty/SoundcoreLibertyProtocol.java index 4285c330f..7a3167809 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/soundcore/liberty/SoundcoreLibertyProtocol.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/soundcore/liberty/SoundcoreLibertyProtocol.java @@ -55,7 +55,7 @@ public class SoundcoreLibertyProtocol extends AbstractSoundcoreProtocol { LOG.debug("Unknown incoming message - command: " + cmd + ", dump: " + hexdump(responseData)); } else if (cmd == (short) 0x0105) { LOG.debug("Unknown incoming message - command: " + cmd + ", dump: " + hexdump(responseData)); - } else if (cmd == (short) 0x0106) { //Sound Mode Update + } else if (cmd == (short) 0x0106) { // ANC Mode Update decodeAudioMode(payload); } else if (cmd == (short) 0x0301) { // Battery Update int batteryLeft = payload[0] * 20; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/soundcore/q30/SoundcoreQ30Protocol.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/soundcore/q30/SoundcoreQ30Protocol.java index 397862191..1c5a003f8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/soundcore/q30/SoundcoreQ30Protocol.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/soundcore/q30/SoundcoreQ30Protocol.java @@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory; import java.nio.ByteBuffer; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; @@ -39,18 +40,24 @@ public class SoundcoreQ30Protocol extends AbstractSoundcoreProtocol { byte[] payload = packet.getPayload(); if (cmd == (short) 0x0101) { - // a lot of other data is in here, anything interesting? + int battery = payload[0] * 20; // only 20% steps available here + devEvts.add(buildBatteryInfo(0, battery)); + + byte[] eq_data = Arrays.copyOfRange(payload, 2, 12); + decodeEqualizer(eq_data); + + // a lot of zeros is in range 12 - 34 + + byte[] anc_data = Arrays.copyOfRange(payload, 35, 39); + decodeAudioMode(anc_data); + String firmware1 = readString(payload, 39, 5); String firmware2 = ""; String serialNumber = readString(payload, 44, 16); devEvts.add(buildVersionInfo(firmware1, firmware2, serialNumber)); - decodeEqualizer(payload); // payload[2] bis payload[11] } else if (cmd == (short) 0x0106) { // ANC Mode Updated by Button decodeAudioMode(payload); - } else if (cmd == (short) 0x0301) { // Battery Update - int battery = payload[0] * 20; // untested - devEvts.add(buildBatteryInfo(0, battery)); } else if (cmd == (short) 0x8106) { // Acknowledgement for changed Ambient Mode // empty payload @@ -175,15 +182,15 @@ public class SoundcoreQ30Protocol extends AbstractSoundcoreProtocol { } private void decodeEqualizer(byte[] payload) { - // payload[2] und payload[3] immer 0xfe ? - int band1 = Byte.toUnsignedInt(payload[4]); - int band2 = Byte.toUnsignedInt(payload[5]); - int band3 = Byte.toUnsignedInt(payload[6]); - int band4 = Byte.toUnsignedInt(payload[7]); - int band5 = Byte.toUnsignedInt(payload[8]); - int band6 = Byte.toUnsignedInt(payload[9]); - int band7 = Byte.toUnsignedInt(payload[10]); - int band8 = Byte.toUnsignedInt(payload[11]); + // payload[0] und payload[1] immer 0xfe ? + int band1 = Byte.toUnsignedInt(payload[2]); + int band2 = Byte.toUnsignedInt(payload[3]); + int band3 = Byte.toUnsignedInt(payload[4]); + int band4 = Byte.toUnsignedInt(payload[5]); + int band5 = Byte.toUnsignedInt(payload[6]); + int band6 = Byte.toUnsignedInt(payload[7]); + int band7 = Byte.toUnsignedInt(payload[8]); + int band8 = Byte.toUnsignedInt(payload[9]); }