From 2e8f44cd8526000852119b780b65df6468e3ede5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Sun, 12 Dec 2021 22:58:52 +0000 Subject: [PATCH] Huami: Fix weekly reminders --- .../service/btle/BLETypeConversions.java | 2 +- .../service/devices/huami/HuamiSupport.java | 22 ++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BLETypeConversions.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BLETypeConversions.java index 22d8d8001..b32affc9f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BLETypeConversions.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BLETypeConversions.java @@ -89,7 +89,7 @@ public class BLETypeConversions { return rawOffset; } - private static byte dayOfWeekToRawBytes(Calendar cal) { + public static byte dayOfWeekToRawBytes(Calendar cal) { int calValue = cal.get(Calendar.DAY_OF_WEEK); switch (calValue) { case Calendar.SUNDAY: diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java index 0537ea271..2a5a2f398 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java @@ -848,31 +848,33 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport { buf.put((byte) 0x0B); buf.put((byte) (position & 0xFF)); + final Calendar cal = Calendar.getInstance(); + cal.setTime(reminder.getDate()); + + int eventConfig = 0x01 | 0x08; // flags 0x01 = enable, 0x04 = end date present (not on reminders), 0x08 = has text + switch(reminder.getRepetition()) { case Reminder.ONCE: - buf.put(new byte[]{0x09, 0x00}); + // Default is once, nothing to do break; case Reminder.EVERY_DAY: - buf.put(new byte[]{(byte) 0xE9, 0x0F}); + eventConfig |= 0x0fe0; // all week day bits set break; case Reminder.EVERY_WEEK: - buf.put(new byte[]{0x09, 0x01}); + int dayOfWeek = BLETypeConversions.dayOfWeekToRawBytes(cal) - 1; // Monday = 0 + eventConfig |= 0x20 << dayOfWeek; break; case Reminder.EVERY_MONTH: - buf.put(new byte[]{0x09, 0x10}); + eventConfig |= 0x1000; break; case Reminder.EVERY_YEAR: - buf.put(new byte[]{0x09, 0x20}); + eventConfig |= 0x2000; break; default: LOG.warn("Unknown repetition for reminder in position {}, defaulting to once", position); - buf.put(new byte[]{0x09, 0x00}); } - buf.put(new byte[]{0x00, 0x00}); // unknown - - final Calendar cal = Calendar.getInstance(); - cal.setTime(reminder.getDate()); + buf.putInt(eventConfig); buf.put(BLETypeConversions.shortCalendarToRawBytes(cal)); buf.put((byte) 0x00);