diff --git a/dfu/src/main/java/no/nordicsemi/android/dfu/DfuBaseService.java b/dfu/src/main/java/no/nordicsemi/android/dfu/DfuBaseService.java index 0ab16ab..e6ef294 100644 --- a/dfu/src/main/java/no/nordicsemi/android/dfu/DfuBaseService.java +++ b/dfu/src/main/java/no/nordicsemi/android/dfu/DfuBaseService.java @@ -627,6 +627,13 @@ public abstract class DfuBaseService extends IntentService implements DfuProgres * Thrown when device had to be paired before the DFU process was started. */ public static final int ERROR_DEVICE_NOT_BONDED = ERROR_MASK | 0x0E; + /** + * Thrown when breakpoint resume fw + *
+ * Check https://github.com/NordicSemiconductor/Android-DFU-Library/issues/229 + *
+ */ + public static final int ERROR_BREAKPOINT_RESUME = ERROR_MASK | 0x0F; /** * Flag set when the DFU target returned a DFU error. Look for DFU specification to get error * codes. The error code is binary OR-ed with one of: {@link #ERROR_REMOTE_TYPE_LEGACY}, diff --git a/dfu/src/main/java/no/nordicsemi/android/dfu/SecureDfuImpl.java b/dfu/src/main/java/no/nordicsemi/android/dfu/SecureDfuImpl.java index c7ef467..d1002e4 100644 --- a/dfu/src/main/java/no/nordicsemi/android/dfu/SecureDfuImpl.java +++ b/dfu/src/main/java/no/nordicsemi/android/dfu/SecureDfuImpl.java @@ -653,6 +653,12 @@ class SecureDfuImpl extends BaseCustomDfuImpl { loge("Error while reading firmware stream", e); mService.terminateConnection(gatt, DfuBaseService.ERROR_FILE_IO_EXCEPTION); return; + } catch (final Throwable tr) { + // crash fix + // Check https://github.com/NordicSemiconductor/Android-DFU-Library/issues/229 + loge("Error while reading firmware stream", tr); + mService.terminateConnection(gatt, DfuBaseService.ERROR_BREAKPOINT_RESUME); + return; } // To decrease the chance of loosing data next time let's set PRN to 1. // This will make the update very long, but perhaps it will succeed.