Bluetooth upgrade library
3.1 Functional Overview
The SDK upgrade function is only responsible for firmware upgrade. Firmware version determination and firmware download are not handled. Pay attention to the integrity of firmware downloads, pass in firmware local sandbox paths during upgrades, monitor upgrade progress and completion status, and error proxy callbacks. The current version of the upgrade library adds nordic, realtk, apollo platforms. The upgrade management library (IDOBlueUpdate) depends on the Bluetooth protocol library (IDOBlueProtocol), so before using the upgrade management library, import the Bluetooth protocol library first.。
3.2 Corresponding function table
//Device update
funcTable4Model.deviceUpdate
3.3 Upgrade initialization
Objc:
[IDOUpdateFirmwareManager shareInstance].delegate = self;
[IDOUpdateFirmwareManager shareInstance].updateType = IDO_NORDIC_PLATFORM_TYPE;
Swift:
IDOUpdateFirmwareManager.shareInstance().delegate = self;
IDOUpdateFirmwareManager.shareInstance().updateType = IDO_UPDATE_PLATFORM_TYPE.NORDIC_PLATFORM_TYPE;
3.4 Parameter Description
Parameters | illustrate | Remarks |
---|---|---|
packagePath | Firmware package local path | local sandbox path |
errorCode | upgrade error code | readonly |
state | upgrade status | readonly |
updateType | Upgrade platform type | Support nordic、realtk、apollo |
3.5 basic method
Objc:
//startUpdate
[IDOUpdateFirmwareManager startUpdate];
Swift:
//startUpdate
IDOUpdateFirmwareManager.startUpdate();
3.6 proxy method
Objc:
<IDOUpdateManagerDelegate>
- (NSString *)currentPackagePathWithUpdateManager:(IDOUpdateFirmwareManager *)manager
{
// Firmware package local storage path
return filePath;
}
- (void)updateManager:(IDOUpdateFirmwareManager *)manager
state:(IDO_UPDATE_STATE)state
{
if (state == IDO_UPDATE_COMPLETED) {
//update completed
}else if state == IDO_UPDATE_DID_ENTER_OTA{
//enter ota mode
}else if state == IDO_UPDATE_STARTING {
//Upgrading
}
}
- (void)updateManager:(IDOUpdateFirmwareManager *)manager updateError:(NSError *)error
{
// upgrade unsuccessful
}
- (void)updateManager:(IDOUpdateFirmwareManager *)manager
progress:(float)progress
message:(NSString *)message
{
// Upgrade progress (0-1)
}
@optional
- (IDO_UPDATE_DFU_FIRMWARE_TYPE)selectDfuFirmwareTypeWithUpdateManager:(IDOUpdateFirmwareManager * _Nullable)manager
{
// Upgrade nordic application Type
return IDO_DFU_FIRMWARE_APPLICATION_TYPE;
// Upgrade nordic bootloader Type
return IDO_DFU_FIRMWARE_BOOTLOADER_TYPE;
}
- (IDO_REALTK_UPDATE_TYPE)selectRealtkTypeWithUpdateManager(IDOUpdateFirmwareManager *_Nullable)manager
supportOtaMode:(BOOL)isOtaMode
supportSilentMode:(BOOL)isSilentMode
{
// Upgrade realtk main control program
return IDO_NORMAL_MODE_UPDATE_TYPE;
// Upgrade realtk flash file
return IDO_SILENT_MODE_UPDATE_TYPE;
}
- (IDO_DATA_FILE_TRAN_TYPE)selectFileTranTypeUpdateManager:(IDOUpdateFirmwareManager *_Nullable)manager
{
return IDO_DATA_FILE_TRAN_DIAL_TYPE;
}
- (IDO_DATA_TRAN_COMPRESSION_TYPE)fileTranCompressionTypeUpdateManager:(IDOUpdateFirmwareManager *)manager
{
return IDO_DATA_TRAN_COMPRESSION_FASTLZ_TYPE;
}
- (NSString * _Nullable)fileTranNameUpdateManager:(IDOUpdateFirmwareManager *_Nullable)manager
{
//Firmware upgrade name: @".fw" Image resource name: @".fzbin" font name:@".bin" language:@".lang",bt upgrade:@".bt"
return @".bt";
}
- (NSInteger)setTransferNumberPacketsUpdateManager:(IDOUpdateFirmwareManager *)manager
{
//default value is 10
return 10;
}
Swift:
IDOUpdateManagerDelegate
func currentPackagePath(withUpdate manager: IDOUpdateFirmwareManager?) -> String? {
// Firmware package local storage path
return filePath;
}
func update(_ manager: IDOUpdateFirmwareManager?, progress: Float, message: String?) {
// Upgrade progress (0-1)
}
func update(_ manager: IDOUpdateFirmwareManager?, state: IDO_UPDATE_STATE) {
if state == IDO_UPDATE_STATE.COMPLETED {
//update completed
}else if state == IDO_UPDATE_STATE.DID_ENTER_OTA{
//enter ota mode
}else if state == IDO_UPDATE_STATE.STARTING {
//Upgrading
}
}
func update(_ manager: IDOUpdateFirmwareManager?, updateError error: Error?) {
// upgrade unsuccessful
}
func selectDfuFirmwareType(withUpdate manager: IDOUpdateFirmwareManager?) -> IDO_UPDATE_DFU_FIRMWARE_TYPE {
// Upgrade nordic application Type
return IDO_UPDATE_DFU_FIRMWARE_TYPE.DFU_FIRMWARE_APPLICATION_TYPE;
// Upgrade nordic bootloader Type
return IDO_UPDATE_DFU_FIRMWARE_TYPE.DFU_FIRMWARE_BOOTLOADER_TYPE;
}
func selectRealtkType(withUpdate manager: IDOUpdateFirmwareManager?, supportOtaMode isOtaMode: Bool, supportSilentMode isSilentMode: Bool) -> IDO_REALTK_UPDATE_TYPE {
// Upgrade realtk main control program
return IDO_REALTK_UPDATE_TYPE.NORMAL_MODE_UPDATE_TYPE;
// Upgrade realtk flash file
return IDO_REALTK_UPDATE_TYPE.SILENT_MODE_UPDATE_TYPE;
}
func selectFileTranTypeUpdate(_ manager: IDOUpdateFirmwareManager?) -> IDO_DATA_FILE_TRAN_TYPE {
return .DIAL_TYPE
}
func fileTranCompressionTypeUpdate(_ manager: IDOUpdateFirmwareManager?) -> IDO_DATA_TRAN_COMPRESSION_TYPE {
return .FASTLZ_TYPE
}
func fileTranNameUpdate(_ manager: IDOUpdateFirmwareManager?) -> String? {
//Firmware upgrade name: @".fw" Image resource name: @".fzbin" font name:@".bin" language:@".lang",bt upgrade:@".bt"
return "bt"
}
func setTransferNumberPacketsUpdate(_ manager: IDOUpdateFirmwareManager?) -> Int {
return 10
}
3.7 Demo Upgrade function entry