From bf6d0d0f83c308d4fa8f6358c17b45921e45dbae Mon Sep 17 00:00:00 2001 From: Vitaliy Tomin Date: Sat, 3 Aug 2024 22:05:43 +0800 Subject: [PATCH] [Huawei] Add Huawei Watch GT Runner gadget * created new gadget classes * make tag 0x01 in TimeRequest response optional. There is no such tag on GT Runner, at least on HarmonyOS 2 firmware. --- .../devices/huawei/HuaweiConstants.java | 1 + .../HuaweiWatchGTRunnerCoordinator.java | 41 +++++++++++++++++++ .../devices/huawei/packets/DeviceConfig.java | 6 ++- .../gadgetbridge/model/DeviceType.java | 2 + app/src/main/res/values/strings.xml | 1 + 5 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/huaweiwatchgtrunner/HuaweiWatchGTRunnerCoordinator.java diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiConstants.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiConstants.java index 12925f694..88a839d82 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiConstants.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiConstants.java @@ -65,6 +65,7 @@ public final class HuaweiConstants { public static final String HU_BAND9_NAME = "huawei band 9-"; public static final String HU_WATCHGT3_NAME = "huawei watch gt 3-"; public static final String HU_WATCHGT3PRO_NAME = "huawei watch gt 3 pro-"; + public static final String HU_WATCHGTRUNNER_NAME = "huawei watch gt runner-"; public static final String HU_WATCH3_NAME = "huawei watch 3-"; public static final String HU_WATCH3PRO_NAME = "huawei watch 3 pro-"; public static final String HU_WATCHGT4_NAME = "huawei watch gt 4-"; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/huaweiwatchgtrunner/HuaweiWatchGTRunnerCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/huaweiwatchgtrunner/HuaweiWatchGTRunnerCoordinator.java new file mode 100644 index 000000000..d91b0d6a9 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/huaweiwatchgtrunner/HuaweiWatchGTRunnerCoordinator.java @@ -0,0 +1,41 @@ +/* Copyright (C) 2024 Vitalii Tomin + + This file is part of Gadgetbridge. + + Gadgetbridge is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Gadgetbridge is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . */ +package nodomain.freeyourgadget.gadgetbridge.devices.huawei.huaweiwatchgtrunner; + +import java.util.regex.Pattern; + +import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator; +import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants; +import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; + +public class HuaweiWatchGTRunnerCoordinator extends HuaweiBRCoordinator { + @Override + public DeviceType getDeviceType() { + return DeviceType.HUAWEIWATCHGTRUNNER; + } + + @Override + protected Pattern getSupportedDeviceName() { + return Pattern.compile("(" + HuaweiConstants.HU_WATCHGTRUNNER_NAME + ").*", Pattern.CASE_INSENSITIVE); + } + + @Override + public int getDeviceNameResource() { + return R.string.devicetype_huawei_watchgtrunner; + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/DeviceConfig.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/DeviceConfig.java index ec0234a1e..796668ba1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/DeviceConfig.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/DeviceConfig.java @@ -401,7 +401,7 @@ public class DeviceConfig { } public static class Response extends HuaweiPacket { - public int deviceTime; + public int deviceTime=0; public Response(ParamsProvider paramsProvider) { super(paramsProvider); @@ -409,7 +409,9 @@ public class DeviceConfig { @Override public void parseTlv() throws ParseException { - this.deviceTime = this.tlv.getInteger(0x01); + if (this.tlv.contains(0x01)) { + this.deviceTime = this.tlv.getInteger(0x01); + } } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java index f49ae2578..540ba27f8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java @@ -167,6 +167,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.huawei.huaweiwatchgt2.Huawei import nodomain.freeyourgadget.gadgetbridge.devices.huawei.huaweiwatchgt2e.HuaweiWatchGT2eCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.huaweiwatchgt3.HuaweiWatchGT3Coordinator; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.huaweiwatchgt4.HuaweiWatchGT4Coordinator; +import nodomain.freeyourgadget.gadgetbridge.devices.huawei.huaweiwatchgtrunner.HuaweiWatchGTRunnerCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.huaweiwatchultimate.HuaweiWatchUltimateCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.id115.ID115Coordinator; import nodomain.freeyourgadget.gadgetbridge.devices.itag.ITagCoordinator; @@ -449,6 +450,7 @@ public enum DeviceType { HONORMAGICWATCH2(HonorMagicWatch2Coordinator.class), HUAWEIWATCHGT3(HuaweiWatchGT3Coordinator.class), HUAWEIWATCHGT4(HuaweiWatchGT4Coordinator.class), + HUAWEIWATCHGTRUNNER(HuaweiWatchGTRunnerCoordinator.class), HUAWEIBAND8(HuaweiBand8Coordinator.class), HUAWEIBAND9(HuaweiBand9Coordinator.class), HUAWEIWATCHFIT(HuaweiWatchFitCoordinator.class), diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bfdd7a4d9..1a730fce7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1613,6 +1613,7 @@ Huawei Talk Band B6 Huawei Watch GT 3 (Pro) Huawei Watch GT 4 + Huawei Watch GT Runner Huawei Watch Fit Huawei Watch Fit 2 Huawei Watch Fit 3