diff --git a/android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java b/android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java index 39a0347..cf3dfa3 100644 --- a/android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java +++ b/android/src/main/java/com/pilloxa/dfu/RNNordicDfuModule.java @@ -45,6 +45,14 @@ public void startDFU(String address, String name, String filePath, int packetRec int mtu = options.getInt("maxMtu"); starter.setMtu(mtu); } + + if(options.hasKey("disableResume")) { + boolean disableResume = options.getBoolean("disableResume"); + if(disableResume){ + starter.disableResume(); + } + } + if (name != null) { starter.setDeviceName(name); } diff --git a/index.d.ts b/index.d.ts index a7f4b3d..9176f9e 100644 --- a/index.d.ts +++ b/index.d.ts @@ -6,6 +6,7 @@ declare module "react-native-nordic-dfu" { filePath, alternativeAdvertisingNameEnabled, packetReceiptNotificationParameter, + disableDfuResume, retries, maxMtu, }: { @@ -14,6 +15,7 @@ declare module "react-native-nordic-dfu" { filePath: string | null; alternativeAdvertisingNameEnabled?: boolean; packetReceiptNotificationParameter?: number; + disableDfuResume?: boolean; retries?: number; maxMtu?: number; }): Promise; diff --git a/index.js b/index.js index 3ad12b9..aae844b 100644 --- a/index.js +++ b/index.js @@ -26,6 +26,7 @@ function rejectPromise(message) { * @param {string} obj.filePath The file system path to the zip-file used for updating * @param {Boolean} obj.alternativeAdvertisingNameEnabled Send unique name to device before it is switched into bootloader mode (iOS only) * @param {number} obj.packetReceiptNotificationParameter set number of packets of firmware data to be received by the DFU target before sending a new Packet Receipt Notification + * @param {boolean} obj.disableDfuResume Disable resuming of an interrupted DFU process * @returns {Promise} A promise that resolves or rejects with the `deviceAddress` in the return value * * @example @@ -45,6 +46,7 @@ function startDFU({ filePath, alternativeAdvertisingNameEnabled = true, //iOS only packetReceiptNotificationParameter = 12, + disableDfuResume = true, retries = 3, // Android only maxMtu = 23, // Android only }) { @@ -61,6 +63,7 @@ function startDFU({ deviceName, filePath, packetReceiptNotificationParameter, + disableDfuResume, alternativeAdvertisingNameEnabled ); } else if (Platform.OS === "android") { diff --git a/ios/RNNordicDfu.m b/ios/RNNordicDfu.m index e56f5b7..313e34f 100644 --- a/ios/RNNordicDfu.m +++ b/ios/RNNordicDfu.m @@ -187,6 +187,7 @@ - (void)logWith:(enum LogLevel)level message:(NSString * _Nonnull)message filePath:(NSString *)filePath packetReceiptNotificationParameter:(NSInteger *)packetReceiptNotificationParameter alternativeAdvertisingNameEnabled:(BOOL *)alternativeAdvertisingNameEnabled + disableDfuResume:(BOOL *)disableDfuResume resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { @@ -243,6 +244,8 @@ - (void)logWith:(enum LogLevel)level message:(NSString * _Nonnull)message initiator.packetReceiptNotificationParameter = packetReceiptNotificationParameter; initiator.alternativeAdvertisingNameEnabled = alternativeAdvertisingNameEnabled; + initiator.disableResume = disableDfuResume; + // Change for iOS 13 initiator.packetReceiptNotificationParameter = 1; //Rate limit the DFU using PRN. [NSThread sleepForTimeInterval: 2]; //Work around for being stuck in iOS 13