1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-12-25 10:05:49 +01:00

Garmin: implement (some kind of) auth negotiation message

Blindly implemented based on the legacy vivomoveHR code, not tested against real devices.
This commit is contained in:
Daniele Gobbetti 2024-08-07 14:58:26 +02:00
parent 14478f89ac
commit 1d4c85b732
2 changed files with 60 additions and 0 deletions

View File

@ -0,0 +1,59 @@
package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages;
import org.apache.commons.lang3.EnumUtils;
import java.util.EnumSet;
public class AuthNegotiationMessage extends GFDIMessage {
private final int unknown;
private final EnumSet<AuthFlags> requestedAuthFlags;
public AuthNegotiationMessage(GarminMessage garminMessage, int unknown, EnumSet<AuthFlags> requestedAuthFlags) {
this.garminMessage = garminMessage;
this.unknown = unknown;
this.requestedAuthFlags = requestedAuthFlags;
LOG.info("Message {}, unkByte: {}, flags: {}", garminMessage, unknown, requestedAuthFlags);
this.statusMessage = getStatusMessage();
}
public static AuthNegotiationMessage parseIncoming(MessageReader reader, GarminMessage garminMessage) {
final int unk = reader.readByte();
final EnumSet<AuthFlags> authFlags = AuthFlags.fromBitMask(reader.readInt());
return new AuthNegotiationMessage(garminMessage, unk, authFlags);
}
@Override
protected boolean generateOutgoing() {
final MessageWriter writer = new MessageWriter(response);
writer.writeShort(0); // placeholder for packet size
writer.writeShort(this.garminMessage.getId());
//set all to 0 as we don't know what else to do
writer.writeByte(0);
writer.writeInt((int) EnumUtils.generateBitVector(AuthFlags.class, EnumSet.noneOf(AuthFlags.class)));
return true;
}
private enum AuthFlags {
UNK_00000001, //saw in logs
UNK_00000010,
UNK_00000100,
UNK_00001000,
UNK_00010000,
UNK_00100000,
UNK_01000000,
UNK_10000000,
;
public static EnumSet<AuthFlags> fromBitMask(final int code) {
return EnumUtils.processBitVector(AuthFlags.class, code);
}
}
}

View File

@ -116,6 +116,7 @@ public abstract class GFDIMessage {
MUSIC_CONTROL_ENTITY_UPDATE(5049, MusicControlEntityUpdateMessage.class),
CONFIGURATION(5050, ConfigurationMessage.class),
CURRENT_TIME_REQUEST(5052, CurrentTimeRequestMessage.class),
AUTH_NEGOTIATION(5101, AuthNegotiationMessage.class)
;
private final Class<? extends GFDIMessage> objectClass;
private final int id;