diff --git a/android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java b/android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java index 5d54214..ddd8865 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.toLowerCase().endsWith(".bin") || filePath.toLowerCase().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