OTA升级流程参考:

以下是手表、手环及戒指OTA升级流程,注意:戒指的示例有所不同

一、前置条件:
  1. 设备电量大于30%(该值根据具体产品定义,APP端可自定义,如40%,只要大于固件限制的最低电量)
  2. 需要连接上设备
二、检查升级

1、根据设备固件版本信息 https://idoosmart.github.io/Native_GitBook/en/doc/IDODeviceInfo.html ,"${fwVersion1}.${fwVersion2}.${fwVersion3}"

调用OTA根据接口(服务端实现)

2、判断有升级后,根据服务端返回的ota文件地址,下载该文件到设备

三、执行升级

1、调用文件传输接口,把ota文件传给设备

2、传输完成后,设备会自动进入升级状态,期间蓝牙连接会断开

3、设备升级完成会重启,升级流程结束

示例参考:

设备OTA升级并不复杂,可以把它看作只是一个文件传输到设备的过程

SDK只有一个方法用于传输所有文件,参考:

https://idoosmart.github.io/Native_GitBook/en/doc/transfer/IDOFileTransfer.html

示例1(手表、手环):

var items = mutableListOf<IDOTransBaseModel>()

// Firmware 
items.add(
    IDOTransNormalModel(
        fileType = IDOTransType.FW,
        filePath = "/xx/xx/xx.fw[bin|zip]",
        fileName = "xx"
    )
)

// Call transfer 
val cancelable = sdk.transfer.transferFiles(
    items,
    cancelPre,
    { currentIndex, totalCount, currentProgress, totalProgress -> 
        print("Transmitting ${currentIndex + 1}/$totalCount...")
    },
    { currentIndex: Int, status: IDOTransStatus, errorCode: Int?, finishingTime: Int? ->
        if (status != IDOTransStatus.FINISHED || errorCode != 0) {
            print("Transmission failed: $errorCode")
        }
    },
    { resultList -> 
        resultList.forEach {
            if (it) {
                // Transmission successful
            } else { 
                // Transfer failed
            }
        }
    }
)

示例2(戒指)

1、主动断开蓝牙连接

2、标记ota模式

3、执行ota文件传输(同手表、手环)

// 1.断开蓝牙连接
sdk.ble.cancelConnect(macAddress) { ... }

// 2.标记ota模式
sdk.bridge.markOtaMode(macAddress = macAddress, platform = sdk.device.platform, deviceId = sdk.device.deviceId) {
    _startTransfer()
 }

// 3.执行ota文件传输(同手表、手环),以下代码和示例1相同
var items = mutableListOf<IDOTransBaseModel>()

// Firmware 
items.add(
    IDOTransNormalModel(
        fileType = IDOTransType.FW,
        filePath = "/xx/xx/xx.fw[bin|zip]",
        fileName = "xx"
    )
)

// Call transfer 
val cancelable = sdk.transfer.transferFiles(
    items,
    cancelPre,
    { currentIndex, totalCount, currentProgress, totalProgress -> 
        print("Transmitting ${currentIndex + 1}/$totalCount...")
    },
    { currentIndex: Int, status: IDOTransStatus, errorCode: Int?, finishingTime: Int? ->
        if (status != IDOTransStatus.FINISHED || errorCode != 0) {
            print("Transmission failed: $errorCode")
        }
    },
    { resultList -> 
        resultList.forEach {
            if (it) {
                // Transmission successful
            } else { 
                // Transfer failed
            }
        }
    }
)
Copyright © 2023-2024 IDO. All rights reserved. all right reserved,powered by Gitbook修改日期: 2026-03-24 15:10:48

results matching ""

    No results matching ""