From bac54fb070743f2c94073c3bda1b3df9d35b4958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Both=C3=A9n?= Date: Mon, 28 Feb 2022 08:44:25 +0100 Subject: [PATCH 1/2] Add support for binary and hex files In some cases it is more convinient to use a binary or hex file directly instead of using a zip file. We can check the extention and do the appropriate action. --- .../main/java/com/pilloxa/dfu/RNNordicDfuModule.java | 8 +++++++- ios/RNNordicDfu.m | 11 +++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java b/android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java index 5d54214..938f55f 100644 --- a/android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java +++ b/android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java @@ -40,7 +40,13 @@ public void startDFU(String address, String name, String filePath, ReadableMap o } starter.setPacketsReceiptNotificationsValue(1); starter.setUnsafeExperimentalButtonlessServiceInSecureDfuEnabled(true); - starter.setZip(filePath); + + if (filePath.endsWith(".bin") || filePath.endsWith(".hex")) { + starter.setBinOrHex(DfuBaseService.TYPE_APPLICATION, filePath).setInitFile(null, null); + } else { + starter.setZip(filePath); + } + final DfuServiceController controller = starter.start(this.reactContext, DfuService.class); } diff --git a/ios/RNNordicDfu.m b/ios/RNNordicDfu.m index dd68681..0f10942 100644 --- a/ios/RNNordicDfu.m +++ b/ios/RNNordicDfu.m @@ -217,10 +217,17 @@ - (void)logWith:(enum LogLevel)level message:(NSString * _Nonnull)message reject(@"unable_to_find_device", @"Could not find device with deviceAddress", nil); } else { CBPeripheral * peripheral = [peripherals objectAtIndex:0]; + DFUFirmware * firmware; NSURL * url = [NSURL URLWithString:filePath]; - - DFUFirmware * firmware = [[DFUFirmware alloc] initWithUrlToZipFile:url]; + NSString * extension = [url pathExtension]; + + if (([extension caseInsensitiveCompare:@"bin"] == NSOrderedSame) || + ([extension caseInsensitiveCompare:@"hex"] == NSOrderedSame)) { + firmware = [[DFUFirmware alloc] initWithUrlToBinOrHexFile:url urlToDatFile:nil type:4]; + } else { + firmware = [[DFUFirmware alloc] initWithUrlToZipFile:url]; + } DFUServiceInitiator * initiator = [[[DFUServiceInitiator alloc] initWithCentralManager:centralManager From 30f1b4eb3f28f82095a24075e7f23ebc78f09f2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Both=C3=A9n?= Date: Thu, 13 Apr 2023 10:28:02 +0200 Subject: [PATCH 2/2] android: Add case insensitive filename check --- android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java b/android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java index 938f55f..ddd8865 100644 --- a/android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java +++ b/android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java @@ -41,7 +41,7 @@ public void startDFU(String address, String name, String filePath, ReadableMap o starter.setPacketsReceiptNotificationsValue(1); starter.setUnsafeExperimentalButtonlessServiceInSecureDfuEnabled(true); - if (filePath.endsWith(".bin") || filePath.endsWith(".hex")) { + if (filePath.toLowerCase().endsWith(".bin") || filePath.toLowerCase().endsWith(".hex")) { starter.setBinOrHex(DfuBaseService.TYPE_APPLICATION, filePath).setInitFile(null, null); } else { starter.setZip(filePath);