From 6dddc003e9ab7d3db758bd9e3ef16c73e20bdac2 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sun, 12 Apr 2020 20:56:41 +0200 Subject: [PATCH] Fossil Hybrid HR: Interpret and show fimware version in firmware installer --- .../qhybrid/FossilHRInstallHandler.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/qhybrid/FossilHRInstallHandler.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/qhybrid/FossilHRInstallHandler.java index 56df44809..e8666c00c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/qhybrid/FossilHRInstallHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/qhybrid/FossilHRInstallHandler.java @@ -36,10 +36,11 @@ import nodomain.freeyourgadget.gadgetbridge.util.UriHelper; public class FossilHRInstallHandler implements InstallHandler { private final Context mContext; private boolean mIsValid; + private String mVersion = "(Unknown version)"; FossilHRInstallHandler(Uri uri, Context context) { mContext = context; - UriHelper uriHelper = null; + UriHelper uriHelper; try { uriHelper = UriHelper.get(uri, mContext); } catch (IOException e) { @@ -47,18 +48,28 @@ public class FossilHRInstallHandler implements InstallHandler { return; } try (InputStream in = new BufferedInputStream(uriHelper.openInputStream())) { - byte[] bytes = new byte[16]; - in.read(bytes); + byte[] bytes = new byte[32]; + int read = in.read(bytes); + if (read < 32) { + mIsValid = false; + return; + } + ByteBuffer buf = ByteBuffer.wrap(bytes); buf.order(ByteOrder.LITTLE_ENDIAN); int header0 = buf.getInt(); - int size = buf.getInt(); + buf.getInt(); // size int header2 = buf.getInt(); int header3 = buf.getInt(); if (header0 != 1 || header2 != 0x00012000 || header3 != 0x00012000) { mIsValid = false; return; } + + buf.getInt(); // unknown + int version1 = buf.get() % 0xff; + int version2 = buf.get() & 0xff; + mVersion = "DN1.0." + version1 + "." + version2; } catch (Exception e) { mIsValid = false; return; @@ -81,7 +92,7 @@ public class FossilHRInstallHandler implements InstallHandler { GenericItem installItem = new GenericItem(); installItem.setIcon(R.drawable.ic_firmware); installItem.setName("Fossil Hybrid HR Firmware"); - installItem.setDetails("Unknown version"); + installItem.setDetails(mVersion); installActivity.setInfoText(mContext.getString(R.string.firmware_install_warning, "(unknown)")); installActivity.setInstallEnabled(true);