diff --git a/build.gradle b/build.gradle index 41fcd0ee..50c2c7b5 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.1' + classpath 'com.android.tools.build:gradle:3.1.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/library/build.gradle b/library/build.gradle index 17fa037d..951108f9 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -31,8 +31,8 @@ android { defaultConfig { minSdkVersion 18 targetSdkVersion 27 - versionCode 56 - versionName "3.4.6" + versionCode 57 + versionName "3.4.7" } buildTypes { release { diff --git a/library/src/main/java/com/mbientlab/metawear/impl/JseMetaWearBoard.java b/library/src/main/java/com/mbientlab/metawear/impl/JseMetaWearBoard.java index 080469f7..6658af35 100644 --- a/library/src/main/java/com/mbientlab/metawear/impl/JseMetaWearBoard.java +++ b/library/src/main/java/com/mbientlab/metawear/impl/JseMetaWearBoard.java @@ -523,29 +523,32 @@ private Task downloadFirmware(Pair latest) { @Override public Task downloadFirmwareAsync(final String version) { - if (connected) { - if (version == null) { - File info1Json = io.findDownloadedFile("info1.json"); - if (!info1Json.exists() || info1Json.lastModified() < Calendar.getInstance().getTimeInMillis() - RELEASE_INFO_TTL) { - return io.downloadFileAsync(String.format(Locale.US, "%s/metawear/info1.json", RELEASES_URL), "info1.json") - .onSuccessTask(task -> downloadFirmware(findRelease(task.getResult()))); - } else { - try { - Pair latest = findRelease(info1Json); - File firmware = io.findDownloadedFile(buildFirmwareFileName(latest)); - return !firmware.exists() ? downloadFirmware(latest) : Task.forResult(firmware); - } catch (Exception e) { - return Task.forError(e); - } - } + if (persist.boardInfo.hardwareRevision == null) { + return Task.forError(new IllegalStateException("Hardware revision unavailable")); + } + if (persist.boardInfo.modelNumber == null) { + return Task.forError(new IllegalStateException("Model number unavailable")); + } + if (version == null) { + File info1Json = io.findDownloadedFile("info1.json"); + if (!info1Json.exists() || info1Json.lastModified() < Calendar.getInstance().getTimeInMillis() - RELEASE_INFO_TTL) { + return io.downloadFileAsync(String.format(Locale.US, "%s/metawear/info1.json", RELEASES_URL), "info1.json") + .onSuccessTask(task -> downloadFirmware(findRelease(task.getResult()))); } else { - final Version versionObj = new Version(version); - return downloadFirmware(new Pair<>(versionObj, "firmware.zip")) - .continueWithTask(task -> task.isFaulted() ? downloadFirmware(new Pair<>(versionObj, "firmware.bin")) : task) - .continueWithTask(task -> task.isFaulted() ? Task.forError(new RuntimeException("Firmware version \'" + version + "\' not available for this board", task.getError())) : task); + try { + Pair latest = findRelease(info1Json); + File firmware = io.findDownloadedFile(buildFirmwareFileName(latest)); + return !firmware.exists() ? downloadFirmware(latest) : Task.forResult(firmware); + } catch (Exception e) { + return Task.forError(e); + } } + } else { + final Version versionObj = new Version(version); + return downloadFirmware(new Pair<>(versionObj, "firmware.zip")) + .continueWithTask(task -> task.isFaulted() ? downloadFirmware(new Pair<>(versionObj, "firmware.bin")) : task) + .continueWithTask(task -> task.isFaulted() ? Task.forError(new RuntimeException("Firmware version \'" + version + "\' not available for this board", task.getError())) : task); } - return Task.forError(new IllegalStateException("No active BLE connection")); } @Override public Task downloadLatestFirmwareAsync() { @@ -752,6 +755,7 @@ public Task connectAsync() { if (task.isFaulted()) { if (inMetaBootMode()) { + connected = true; return Task.forResult(null); } else { if (task.getError() instanceof TaskTimeoutException) {