diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/no1f1/No1F1Constants.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/no1f1/No1F1Constants.java index c0a34524..e839955e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/no1f1/No1F1Constants.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/no1f1/No1F1Constants.java @@ -8,13 +8,17 @@ public final class No1F1Constants { public static final UUID UUID_CHARACTERISTIC_MEASURE = UUID.fromString("000033f2-0000-1000-8000-00805f9b34fb"); public static final UUID UUID_SERVICE_NO1 = UUID.fromString("000055ff-0000-1000-8000-00805f9b34fb"); + public static final byte CMD_DISPLAY_SETTINGS = (byte) 0xa0; public static final byte CMD_FIRMWARE_VERSION = (byte) 0xa1; public static final byte CMD_BATTERY = (byte) 0xa2; public static final byte CMD_DATETIME = (byte) 0xa3; public static final byte CMD_USER_DATA = (byte) 0xa9; public static final byte CMD_ALARM = (byte) 0xab; + public static final byte CMD_FACTORY_RESET = (byte) 0xad; public static final byte CMD_NOTIFICATION = (byte) 0xc1; public static final byte CMD_ICON = (byte) 0xc3; + public static final byte CMD_DEVICE_SETTINGS = (byte) 0xd3; + public static final byte CMD_HEARTRATE_SETTINGS = (byte) 0xd6; public static final byte NOTIFICATION_HEADER = (byte) 0x01; public static final byte NOTIFICATION_CALL = (byte) 0x02; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java index 43e9b02e..4d4e8f29 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java @@ -101,6 +101,7 @@ public class No1F1Support extends AbstractBTLEDeviceSupport { return true; case No1F1Constants.CMD_NOTIFICATION: case No1F1Constants.CMD_ICON: + case No1F1Constants.CMD_DEVICE_SETTINGS: return true; default: LOG.warn("Unhandled characteristic change: " + characteristicUUID + " code: " + Arrays.toString(data)); @@ -205,7 +206,15 @@ public class No1F1Support extends AbstractBTLEDeviceSupport { @Override public void onReboot() { - + try { + TransactionBuilder builder = performInitialized("clearNotification"); + byte[] msg = new byte[]{ + (byte) 0xad + }; + builder.write(ctrlCharacteristic, msg); + performConnected(builder.getTransaction()); + } catch (IOException e) { + } } @Override @@ -311,7 +320,39 @@ public class No1F1Support extends AbstractBTLEDeviceSupport { userBytes[14] = 2; // female else userBytes[14] = 1; // male + builder.write(ctrlCharacteristic, userBytes); + + // more settings + builder.write(ctrlCharacteristic, new byte[]{ + No1F1Constants.CMD_DEVICE_SETTINGS, + 0x00, // 1 - turns on inactivity alarm + 0x3c, + 0x02, + 0x03, + 0x01, + 0x00 + }); + + // display settings + builder.write(ctrlCharacteristic, new byte[]{ + No1F1Constants.CMD_DISPLAY_SETTINGS, + 0x01, // 1 - display distance in kilometers, 2 - in miles + 0x01 // 1 - display 24-hour clock, 2 - for 12-hour with AM/PM + }); + + // heart rate measurement mode + builder.write(ctrlCharacteristic, new byte[]{ + No1F1Constants.CMD_HEARTRATE_SETTINGS, + 0x02, // 1 - static (measure for 15 seconds), 2 - realtime + }); + + // periodic heart rate measurement + builder.write(ctrlCharacteristic, new byte[]{ + No1F1Constants.CMD_HEARTRATE_SETTINGS, + 0x01, + 0x02 // measure heart rate every 2 hours (0 to turn off) + }); } private void setVibration(int duration, int count) {