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/SetDeviceSettingsMessage.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
2.0 KiB
Java

package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages;
import java.util.Map;
public class SetDeviceSettingsMessage extends GFDIMessage {
private final Map<GarminDeviceSetting, Object> settings;
public SetDeviceSettingsMessage(Map<GarminDeviceSetting, Object> settings) {
this.settings = settings;
final int settingsCount = settings.size();
if (settingsCount == 0) throw new IllegalArgumentException("Empty settings");
if (settingsCount > 255) throw new IllegalArgumentException("Too many settings");
}
@Override
protected boolean generateOutgoing() {
final MessageWriter writer = new MessageWriter(response);
writer.writeShort(0); // packet size will be filled below
writer.writeShort(GarminMessage.DEVICE_INFORMATION.getId());
writer.writeByte(settings.size());
for (Map.Entry<GarminDeviceSetting, Object> settingPair : settings.entrySet()) {
final GarminDeviceSetting setting = settingPair.getKey();
writer.writeByte(setting.ordinal());
final Object value = settingPair.getValue();
if (value instanceof String) {
writer.writeString((String) value);
} else if (value instanceof Integer) {
writer.writeByte(4);
writer.writeInt((Integer) value);
} else if (value instanceof Boolean) {
writer.writeByte(1);
writer.writeByte(Boolean.TRUE.equals(value) ? 1 : 0);
} else {
throw new IllegalArgumentException("Unsupported setting value type " + value);
}
}
return true;
}
public enum GarminDeviceSetting {
DEVICE_NAME,
CURRENT_TIME,
DAYLIGHT_SAVINGS_TIME_OFFSET,
TIME_ZONE_OFFSET,
NEXT_DAYLIGHT_SAVINGS_START,
NEXT_DAYLIGHT_SAVINGS_END,
AUTO_UPLOAD_ENABLED,
WEATHER_CONDITIONS_ENABLED,
WEATHER_ALERTS_ENABLED
}
}