From 287b72035019e38ec4b51088cd01bbc4c3cd2d3c Mon Sep 17 00:00:00 2001 From: Vitaliy Tomin Date: Tue, 30 Jan 2024 23:17:59 +0800 Subject: [PATCH] Send gps and time before forecast --- .../devices/huawei/packets/GpsAndTime.java | 27 ++++++++++++++++ .../devices/huawei/HuaweiSupportProvider.java | 10 +++++- .../SendGpsAndTimeToDeviceRequest.java | 32 +++++++++++++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/GpsAndTime.java create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendGpsAndTimeToDeviceRequest.java diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/GpsAndTime.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/GpsAndTime.java new file mode 100644 index 000000000..78ebbc7fa --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/GpsAndTime.java @@ -0,0 +1,27 @@ +package nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets; + +import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket; +import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiTLV; + +public class GpsAndTime { + public static final byte id = 0x18; + + public static class CurrentGPSRequest extends HuaweiPacket { + public static final byte id = 0x07; + public CurrentGPSRequest ( + ParamsProvider paramsProvider + ) { + super(paramsProvider); + + this.serviceId = GpsAndTime.id; + this.commandId = id; + this.tlv = new HuaweiTLV(); + this.tlv.put(0x01, (int) 0); + this.tlv.put(0x02, (long) 0); + this.tlv.put(0x03, (long) 0); + this.isEncrypted = true; + this.complete = true; + + } + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java index 514bc4597..61a49e3c7 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java @@ -78,6 +78,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.GetEventAlarmList; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.GetNotificationConstraintsRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.GetSmartAlarmList; +import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.SendGpsAndTimeToDeviceRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.SendWeatherCurrentRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.SendNotifyHeartRateCapabilityRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.SendNotifyRestHeartRateCapabilityRequest; @@ -1658,12 +1659,19 @@ public class HuaweiSupportProvider { weatherSpec ); + SendGpsAndTimeToDeviceRequest sendGpsAndTimeToDeviceRequest = new SendGpsAndTimeToDeviceRequest( + this + ); + + sendWeatherCurrentRequest.nextRequest(sendGpsAndTimeToDeviceRequest); + + if (getHuaweiCoordinator().supportsWeatherForecasts()) { SendWeatherForecastRequest sendWeatherForecastRequest = new SendWeatherForecastRequest( this, weatherSpec ); - sendWeatherCurrentRequest.nextRequest(sendWeatherForecastRequest); + sendGpsAndTimeToDeviceRequest.nextRequest(sendWeatherForecastRequest); } sendWeatherCurrentRequest.doPerform(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendGpsAndTimeToDeviceRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendGpsAndTimeToDeviceRequest.java new file mode 100644 index 000000000..9b5a76389 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendGpsAndTimeToDeviceRequest.java @@ -0,0 +1,32 @@ +package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests; + +import java.util.List; + +import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket; +import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.GpsAndTime; +import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider; + + +public class SendGpsAndTimeToDeviceRequest extends Request { + + + public SendGpsAndTimeToDeviceRequest(HuaweiSupportProvider support) { + super(support); + this.serviceId = GpsAndTime.id; + this.commandId = GpsAndTime.CurrentGPSRequest.id; + } + + @Override + protected List createRequest() throws RequestCreationException { + try { + // TODO: support multiple units + + return new GpsAndTime.CurrentGPSRequest( + this.paramsProvider + ).serialize(); + } catch (HuaweiPacket.CryptoException e) { + throw new RequestCreationException(e); + } + } + +}