From 1730064f1162f387ee8fc004cbd24d002e6eb47d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Fri, 9 Jun 2023 18:35:29 +0100 Subject: [PATCH] Zepp OS: Match zpk compatibility by deviceSource --- .../service/devices/huami/Huami2021FirmwareInfo.java | 9 ++++++++- .../huami/amazfitband7/AmazfitBand7FirmwareInfo.java | 8 ++++++++ .../huami/amazfitgtr3/AmazfitGTR3FirmwareInfo.java | 8 ++++++++ .../huami/amazfitgtr3pro/AmazfitGTR3ProFirmwareInfo.java | 8 ++++++++ .../huami/amazfitgtr4/AmazfitGTR4FirmwareInfo.java | 8 ++++++++ .../huami/amazfitgts3/AmazfitGTS3FirmwareInfo.java | 8 ++++++++ .../huami/amazfitgts4/AmazfitGTS4FirmwareInfo.java | 8 ++++++++ .../amazfitgts4mini/AmazfitGTS4MiniFirmwareInfo.java | 8 ++++++++ .../huami/amazfittrex2/AmazfitTRex2FirmwareInfo.java | 8 ++++++++ .../devices/huami/miband7/MiBand7FirmwareInfo.java | 8 ++++++++ 10 files changed, 80 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021FirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021FirmwareInfo.java index 3fea24a83..4311a85f0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021FirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021FirmwareInfo.java @@ -27,6 +27,7 @@ import java.io.IOException; import java.lang.reflect.Constructor; import java.nio.charset.StandardCharsets; import java.util.Arrays; +import java.util.Set; import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; import nodomain.freeyourgadget.gadgetbridge.util.ArrayUtils; @@ -49,6 +50,12 @@ public abstract class Huami2021FirmwareInfo extends AbstractHuamiFirmwareInfo { */ public abstract String deviceName(); + /** + * The device sources, to match compatible packages. + * As per: https://docs.zepp.com/docs/reference/related-resources/device-list/ + */ + public abstract Set deviceSources(); + @Override protected HuamiFirmwareType determineFirmwareType(final byte[] bytes) { if (ArrayUtils.equals(bytes, UIHHContainer.UIHH_HEADER, 0)) { @@ -178,7 +185,7 @@ public abstract class Huami2021FirmwareInfo extends AbstractHuamiFirmwareInfo { for (int j = 0; j < platforms.length(); j++) { final JSONObject platform = platforms.getJSONObject(j); - if (deviceName().equals(platform.getString("name"))) { + if (!deviceSources().contains(platform.getInt("deviceSource"))) { // It's compatible with the device, fetch device.zip final String name = zpkEntry.getString("name"); final byte[] zpkBytes = zipFile.getFileFromZip(name); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitband7/AmazfitBand7FirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitband7/AmazfitBand7FirmwareInfo.java index 756b51db5..96cd494ec 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitband7/AmazfitBand7FirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitband7/AmazfitBand7FirmwareInfo.java @@ -16,8 +16,11 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitband7; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; @@ -37,6 +40,11 @@ public class AmazfitBand7FirmwareInfo extends Huami2021FirmwareInfo { return HuamiConst.AMAZFIT_BAND7_NAME; } + @Override + public Set deviceSources() { + return new HashSet<>(Arrays.asList(252, 253, 254)); + } + @Override public boolean isGenerallyCompatibleWith(final GBDevice device) { return isHeaderValid() && device.getType() == DeviceType.AMAZFITBAND7; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgtr3/AmazfitGTR3FirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgtr3/AmazfitGTR3FirmwareInfo.java index e1cd6f485..ea10da33b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgtr3/AmazfitGTR3FirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgtr3/AmazfitGTR3FirmwareInfo.java @@ -19,8 +19,11 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitgtr3; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; @@ -43,6 +46,11 @@ public class AmazfitGTR3FirmwareInfo extends Huami2021FirmwareInfo { return HuamiConst.AMAZFIT_GTR3_NAME; } + @Override + public Set deviceSources() { + return new HashSet<>(Arrays.asList(226, 227)); + } + @Override public boolean isGenerallyCompatibleWith(final GBDevice device) { return isHeaderValid() && device.getType() == DeviceType.AMAZFITGTR3; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgtr3pro/AmazfitGTR3ProFirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgtr3pro/AmazfitGTR3ProFirmwareInfo.java index 7e9e4b929..649f1c665 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgtr3pro/AmazfitGTR3ProFirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgtr3pro/AmazfitGTR3ProFirmwareInfo.java @@ -19,8 +19,11 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitgtr3pr import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; @@ -43,6 +46,11 @@ public class AmazfitGTR3ProFirmwareInfo extends Huami2021FirmwareInfo { return HuamiConst.AMAZFIT_GTR3_PRO_NAME; } + @Override + public Set deviceSources() { + return new HashSet<>(Arrays.asList(229, 230, 6095106)); + } + @Override public boolean isGenerallyCompatibleWith(final GBDevice device) { return isHeaderValid() && device.getType() == DeviceType.AMAZFITGTR3PRO; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgtr4/AmazfitGTR4FirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgtr4/AmazfitGTR4FirmwareInfo.java index d8c18303f..f732a10d9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgtr4/AmazfitGTR4FirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgtr4/AmazfitGTR4FirmwareInfo.java @@ -16,8 +16,11 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitgtr4; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; @@ -40,6 +43,11 @@ public class AmazfitGTR4FirmwareInfo extends Huami2021FirmwareInfo { return HuamiConst.AMAZFIT_GTR4_NAME; } + @Override + public Set deviceSources() { + return new HashSet<>(Arrays.asList(7930112, 7930113)); + } + @Override public boolean isGenerallyCompatibleWith(final GBDevice device) { return isHeaderValid() && device.getType() == DeviceType.AMAZFITGTR4; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts3/AmazfitGTS3FirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts3/AmazfitGTS3FirmwareInfo.java index fe9638bce..e921611f9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts3/AmazfitGTS3FirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts3/AmazfitGTS3FirmwareInfo.java @@ -19,8 +19,11 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitgts3; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; @@ -43,6 +46,11 @@ public class AmazfitGTS3FirmwareInfo extends Huami2021FirmwareInfo { return HuamiConst.AMAZFIT_GTS3_NAME; } + @Override + public Set deviceSources() { + return new HashSet<>(Arrays.asList(224, 225)); + } + @Override public boolean isGenerallyCompatibleWith(final GBDevice device) { return isHeaderValid() && device.getType() == DeviceType.AMAZFITGTS3; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts4/AmazfitGTS4FirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts4/AmazfitGTS4FirmwareInfo.java index 1be99de31..c4faaec9e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts4/AmazfitGTS4FirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts4/AmazfitGTS4FirmwareInfo.java @@ -16,8 +16,11 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitgts4; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; @@ -38,6 +41,11 @@ public class AmazfitGTS4FirmwareInfo extends Huami2021FirmwareInfo { return HuamiConst.AMAZFIT_GTS4_NAME; } + @Override + public Set deviceSources() { + return new HashSet<>(Arrays.asList(7995648, 7995649)); + } + @Override public boolean isGenerallyCompatibleWith(final GBDevice device) { return isHeaderValid() && device.getType() == DeviceType.AMAZFITGTS4; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts4mini/AmazfitGTS4MiniFirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts4mini/AmazfitGTS4MiniFirmwareInfo.java index a5db2b69d..7d77e2359 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts4mini/AmazfitGTS4MiniFirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitgts4mini/AmazfitGTS4MiniFirmwareInfo.java @@ -16,8 +16,11 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitgts4mini; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; @@ -38,6 +41,11 @@ public class AmazfitGTS4MiniFirmwareInfo extends Huami2021FirmwareInfo { return HuamiConst.AMAZFIT_GTS4_MINI_NAME; } + @Override + public Set deviceSources() { + return new HashSet<>(Arrays.asList(246, 247)); + } + @Override public boolean isGenerallyCompatibleWith(final GBDevice device) { return isHeaderValid() && device.getType() == DeviceType.AMAZFITGTS4MINI; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfittrex2/AmazfitTRex2FirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfittrex2/AmazfitTRex2FirmwareInfo.java index 6d6843004..6d66a29d5 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfittrex2/AmazfitTRex2FirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfittrex2/AmazfitTRex2FirmwareInfo.java @@ -16,8 +16,11 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfittrex2; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; @@ -38,6 +41,11 @@ public class AmazfitTRex2FirmwareInfo extends Huami2021FirmwareInfo { return HuamiConst.AMAZFIT_TREX_2_NAME; } + @Override + public Set deviceSources() { + return new HashSet<>(Arrays.asList(418, 419)); + } + @Override public boolean isGenerallyCompatibleWith(final GBDevice device) { return isHeaderValid() && device.getType() == DeviceType.AMAZFITTREX2; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband7/MiBand7FirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband7/MiBand7FirmwareInfo.java index 27dab19b3..9fab786ff 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband7/MiBand7FirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband7/MiBand7FirmwareInfo.java @@ -19,8 +19,11 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.miband7; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; @@ -44,6 +47,11 @@ public class MiBand7FirmwareInfo extends Huami2021FirmwareInfo { return HuamiConst.XIAOMI_SMART_BAND7_NAME; } + @Override + public Set deviceSources() { + return new HashSet<>(Arrays.asList(260, 262, 263, 264, 265)); + } + @Override public boolean isGenerallyCompatibleWith(final GBDevice device) { return isHeaderValid() && device.getType() == DeviceType.MIBAND7;