From d1cba544255b3a181708d7dd2f8be62cff982da3 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sun, 1 Jul 2018 22:41:37 +0200 Subject: [PATCH] Mi Band 3: Allow flashing fonts (untested) --- .../service/devices/huami/HuamiFirmwareInfo.java | 2 ++ .../service/devices/huami/miband2/Mi2FirmwareInfo.java | 7 +++++-- .../service/devices/huami/miband3/MiBand3FirmwareInfo.java | 6 ++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFirmwareInfo.java index b1ddc33ab..48bf42c9b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFirmwareInfo.java @@ -48,6 +48,8 @@ public abstract class HuamiFirmwareInfo { 0x4e, 0x45, 0x5a, 0x4b }; + protected static final int FONT_TYPE_OFFSET = 0x9; + private HuamiFirmwareType firmwareType = HuamiFirmwareType.FIRMWARE; public String toVersion(int crc16) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/Mi2FirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/Mi2FirmwareInfo.java index 8cccc9ceb..b9e842a03 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/Mi2FirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/Mi2FirmwareInfo.java @@ -78,8 +78,11 @@ public class Mi2FirmwareInfo extends HuamiFirmwareInfo { } protected HuamiFirmwareType determineFirmwareType(byte[] bytes) { - if (ArrayUtils.startsWith(bytes, HuamiFirmwareInfo.FT_HEADER)) { - return HuamiFirmwareType.FONT; + if (ArrayUtils.startsWith(bytes, FT_HEADER)) { + if (bytes[FONT_TYPE_OFFSET] == 0x00 || bytes[FONT_TYPE_OFFSET] == (byte) 0xff) { + return HuamiFirmwareType.FONT; + } + return HuamiFirmwareType.INVALID; } if (ArrayUtils.equals(bytes, FW_HEADER, FW_HEADER_OFFSET) && (bytes[FW_MAGIC_OFFSET] == FW_MAGIC)) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband3/MiBand3FirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband3/MiBand3FirmwareInfo.java index 2f5697fc0..fcfda8127 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband3/MiBand3FirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband3/MiBand3FirmwareInfo.java @@ -53,6 +53,12 @@ public class MiBand3FirmwareInfo extends HuamiFirmwareInfo { @Override protected HuamiFirmwareType determineFirmwareType(byte[] bytes) { + if (ArrayUtils.startsWith(bytes, FT_HEADER)) { + if (bytes[FONT_TYPE_OFFSET] == 0x03 || bytes[FONT_TYPE_OFFSET] == 0x04) { + return HuamiFirmwareType.FONT; + } + return HuamiFirmwareType.INVALID; + } if (ArrayUtils.startsWith(bytes, RES_HEADER)) { if (bytes.length > 100000) { // don't know how to distinguish from Bip/Cor .res return HuamiFirmwareType.INVALID;