OTA升级流程参考:
以下是手表、手环及戒指OTA升级流程,注意:戒指的示例有所不同
一、前置条件:
- 设备电量大于30%(该值根据具体产品定义,APP端可自定义,如40%,只要大于固件限制的最低电量)
- 需要连接上设备
二、检查升级
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
}
}
}
)