mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-06-02 19:36:14 +02:00
7ee82e6afa
note: only weather message definition and data tested so far also enable weather support for Instinct 2S and vivomove style also cleanup some unused constants that have been migrated to new enums in GFDIMessage additionally switch to new local implementation of GarminTimeUtils with needed methods
53 lines
1.9 KiB
Java
53 lines
1.9 KiB
Java
package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages;
|
|
|
|
|
|
import java.util.Calendar;
|
|
import java.util.TimeZone;
|
|
|
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.GarminTimeUtils;
|
|
|
|
public class CurrentTimeRequestMessage extends GFDIMessage {
|
|
private final int referenceID;
|
|
private final int messageType;
|
|
|
|
public CurrentTimeRequestMessage(int messageType, int referenceID) {
|
|
this.messageType = messageType;
|
|
this.referenceID = referenceID;
|
|
this.statusMessage = this.getStatusMessage(messageType);
|
|
}
|
|
|
|
public static CurrentTimeRequestMessage parseIncoming(MessageReader reader, int messageType) {
|
|
final int referenceID = reader.readInt();
|
|
|
|
reader.warnIfLeftover();
|
|
return new CurrentTimeRequestMessage(messageType, referenceID);
|
|
}
|
|
|
|
@Override
|
|
protected boolean generateOutgoing() {
|
|
long now = System.currentTimeMillis();
|
|
final TimeZone timeZone = TimeZone.getDefault();
|
|
final Calendar calendar = Calendar.getInstance(timeZone);
|
|
calendar.setTimeInMillis(now);
|
|
int dstOffset = calendar.get(Calendar.DST_OFFSET) / 1000;
|
|
int timeZoneOffset = timeZone.getOffset(now) / 1000;
|
|
int garminTimestamp = GarminTimeUtils.javaMillisToGarminTimestamp(now);
|
|
|
|
LOG.info("Processing current time request #{}: time={}, DST={}, ofs={}", referenceID, garminTimestamp, dstOffset, timeZoneOffset);
|
|
|
|
final MessageWriter writer = new MessageWriter(response);
|
|
writer.writeShort(0); // packet size will be filled below
|
|
writer.writeShort(GarminMessage.RESPONSE.getId());
|
|
writer.writeShort(messageType);
|
|
writer.writeByte(Status.ACK.ordinal());
|
|
writer.writeInt(referenceID);
|
|
writer.writeInt(garminTimestamp);
|
|
writer.writeInt(timeZoneOffset);
|
|
// TODO: next DST start/end
|
|
writer.writeInt(0);
|
|
writer.writeInt(0);
|
|
|
|
return true;
|
|
}
|
|
}
|