远程升级OTA服务可对终端的模组固件升级(FOTA)和MCU应用软件升级(SOTA)。两种方式使用了同一个数据通道,通过不同的参数来区分不同的升级内容。
/**
* @brief OTA初始化,需用户传入相关参数
*
* @param evt_cb 事件回调,用于接收平台响应数据
* @param dev_token 鉴权信息
* @param dev_id 设备id
* @param version 当前版本号
* @param manuf 厂商编号
* @param model 模组编号
* @param type 升级类型(1:fota,2:sota)
* @param cdn 是否返回拉取升级包ip
* @return 0-成功
*/
int32_t ota_init(ota_evt_cb evt_cb, const uint8_t *dev_token, const uint8_t *dev_id, const uint8_t *version, const uint8_t *manuf, const uint8_t *model, uint8_t type, boolean cdn);
/**
* @brief OTA初始化内存释放
*/
void ota_deinit(void);
对应应用流程步骤1。
/**
* @brief 上报版本号
* @param timeout_ms 超时时间(毫秒)
* @return 0-成功,<0-错误码,<100-平台响应错误码,>=100-HTTP状态码
*/
int32_t ota_post_version(uint32_t timeout_ms);
上报的版本号内容来自于初始化接口设定的版本信息。
对应应用流程步骤3。
/**
* @brief 检测升级任务
* @param task_info 平台响应参数(需用户保存)
* @param timeout_ms 超时时间(毫秒)
* @return 0-成功,<0-错误码,<100-平台响应错误码,>=100-HTTP状态码
*/
int32_t ota_check_task(struct ota_task_info_t *task_info, uint32_t timeout_ms)
升级任务类型及各项参数均来自于初始化接口设定的信息。检查成功时,获得的具体任务信息通过
task_info
返回。
对应应用流程步骤4。
/**
* @brief 检测升级token(token有效期为2天)
* @param token token参数(通过检测升级任务获取)
* @param timeout_ms 超时时间(毫秒)
* @return 0-成功,<0-错误码,<100-平台响应错误码,>=100-HTTP状态码
*/
int32_t ota_check_token(uint8_t *token, uint32_t timeout_ms);
对应应用流程步骤5。
/**
* @brief 下载升级包(通过事件返回升级包数据)
* @param token token参数(通过检测升级任务获取)
* @param range_start 下载起始字节(从0开始)
* @param range_size 下载分片大小(字节)
* @param timeout_ms 超时时间(毫秒)
* @return 0-成功,<0-错误码,<100-平台响应错误码,>=100-HTTP状态码
*/
int32_t ota_download_package(uint8_t *token, uint32_t range_start, uint32_t range_size, uint32_t timeout_ms);
如果设备侧使用了分片方式下载升级包,下载每个分片前,都需要调用检查升级token接口。
对应应用流程步骤6。
/**
* @brief 上报下载进度与升级状态
* @param token token参数(通过检测升级任务获取)
* @param status_code <=100-下载进度,>100-状态码
* @param timeout_ms 超时时间(毫秒)
* @return 0-成功,<0-错误码,<100-平台响应错误码,>=100-HTTP状态码
*/
int32_t ota_report_status(uint8_t *token, uint32_t status_code, uint32_t timeout_ms);
请参考远程OTA示例代码。