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]);
     }