Option to force DFU without jump on pre-7.0 DFUs.
This commit is contained in:
parent
c5d3ac500a
commit
e2fa7659f7
|
@ -1158,6 +1158,18 @@ public abstract class DfuBaseService extends IntentService {
|
||||||
} catch (final NumberFormatException e) {
|
} catch (final NumberFormatException e) {
|
||||||
mbrSize = DfuSettingsConstants.SETTINGS_DEFAULT_MBR_SIZE;
|
mbrSize = DfuSettingsConstants.SETTINGS_DEFAULT_MBR_SIZE;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* In case of old DFU bootloader versions, where there was no DFU Version characteristic, the service was unable to determine whether it was in the application mode, or in
|
||||||
|
* bootloader mode. In that case, if the following boolean value is set to false (default) the bootloader will count number of services on the device. In case of 3 service
|
||||||
|
* it will start the DFU procedure (Generic Access, Generic Attribute, DFU Service). If more services will be found, it assumes that a jump to the DFU bootloader is required.
|
||||||
|
*
|
||||||
|
* However, in some cases, the DFU bootloader is used to flash firmware on other chip via nRF5x. In that case the application may support DFU operation without switching
|
||||||
|
* to the bootloader mode itself.
|
||||||
|
*
|
||||||
|
* For newer implementations of DFU in such case the DFU Version should return value other than 0x0100 (major 0, minor 1) which means that the application does not support
|
||||||
|
* DFU process itself but rather support jump to the bootloader mode.
|
||||||
|
*/
|
||||||
|
final boolean assumeDfuMode = preferences.getBoolean(DfuSettingsConstants.SETTINGS_ASSUME_DFU_NODE, false);
|
||||||
|
|
||||||
sendLogBroadcast(LOG_LEVEL_VERBOSE, "Starting DFU service");
|
sendLogBroadcast(LOG_LEVEL_VERBOSE, "Starting DFU service");
|
||||||
|
|
||||||
|
@ -1354,9 +1366,10 @@ public abstract class DfuBaseService extends IntentService {
|
||||||
* Check if we are in the DFU Bootloader or in the Application that supports the buttonless update.
|
* Check if we are in the DFU Bootloader or in the Application that supports the buttonless update.
|
||||||
*
|
*
|
||||||
* In the DFU from SDK 6.1, which was also supporting the buttonless update, there was no DFU Version characteristic. In that case we may find out whether
|
* In the DFU from SDK 6.1, which was also supporting the buttonless update, there was no DFU Version characteristic. In that case we may find out whether
|
||||||
* we are in the bootloader or application by simply checking the number of characteristics.
|
* we are in the bootloader or application by simply checking the number of characteristics. This may be overridden by setting the DfuSettingsConstants.SETTINGS_ASSUME_DFU_NODE
|
||||||
|
* property to true in Shared Preferences.
|
||||||
*/
|
*/
|
||||||
if (version == 1 || (version == 0 && gatt.getServices().size() > 3 /* No DFU Version char but more services than Generic Access, Generic Attribute, DFU Service */)) {
|
if (version == 1 || (!assumeDfuMode && version == 0 && gatt.getServices().size() > 3 /* No DFU Version char but more services than Generic Access, Generic Attribute, DFU Service */)) {
|
||||||
// The service is connected to the application, not to the bootloader
|
// The service is connected to the application, not to the bootloader
|
||||||
logw("Application with buttonless update found");
|
logw("Application with buttonless update found");
|
||||||
sendLogBroadcast(LOG_LEVEL_WARNING, "Application with buttonless update found");
|
sendLogBroadcast(LOG_LEVEL_WARNING, "Application with buttonless update found");
|
||||||
|
|
|
@ -28,4 +28,5 @@ public interface DfuSettingsConstants {
|
||||||
public static final String SETTINGS_MBR_SIZE = "settings_mbr_size";
|
public static final String SETTINGS_MBR_SIZE = "settings_mbr_size";
|
||||||
public static final int SETTINGS_DEFAULT_MBR_SIZE = 0x1000;
|
public static final int SETTINGS_DEFAULT_MBR_SIZE = 0x1000;
|
||||||
public static final int SETTINGS_NUMBER_OF_PACKETS_DEFAULT = 10;
|
public static final int SETTINGS_NUMBER_OF_PACKETS_DEFAULT = 10;
|
||||||
|
public static final String SETTINGS_ASSUME_DFU_NODE = "settings_assume_dfu_mode";
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue