1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-06-02 11:26:09 +02:00
Gadgetbridge/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/CurrentTimeRequestMessage.java
Daniele Gobbetti 4363f94661 Garmin protocol: initial refactoring and basic functionalities
This commit takes aims to bring many new garmin devices up to a working status, with basic functionalities such as:
- garmin protocol initialization
- basic message exchange
- support for some messages in Garmin own format
- support for some messages in protobuf format
2024-05-01 23:35:15 +01:00

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.vivomovehr.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;
}
}