远程升级
青莲云提供安全的设备远程升级服务,可支持整机器固件升级和系统补丁升级操作。其中,固件升级完成后,需设备端执行重启操作,并以高版本固件重新连接云平台;补丁升级完成后,需告知云平台补丁升级状态。
固件升级
具体流程,请参考ota升级文档《青莲云OTA升级操作流程》及本小节内容进行实现。
设置ota属性
iot_s32 iot_ota_option_set ( iot_u32 expect_time , iot_u32 chunk_size );
参数 | 说明 |
expect_time | 期望升级倒计时,单位秒,范围120-3600 |
chunk_size | 云端会将固件按chunk_size分块,分块后一次下发一块。 2的n次幂,范围256-1048576,默认1024 |
返回值 | 0:设置属性成功,可在log中查看实际升级时间 -1:失败,参数错误 |
ota固件信息
void iot_ota_info_cb ( char name[16],iot_u32 total_len,char version[6],iot_u16 file_crc)
参数 | 说明 |
name | 待升级固件名称 |
version | 待升级固件版本,"xx.xx",0≤x≤9 |
total_len | 待升级固件文件总大小,单位字节 |
file_crc | 待升级固件文件crc |
接收固件数据块
参考5.3节,chunk_stat为OTA数据块的情况。
接收升级指令
收到此命令,重启,运行新版本固件。回调函数中不可执行太多耗时代码。
void iot_ota_upgrade_cb( void );
补丁升级
补丁信息
设备定时查询云端是否有新补丁发布,自动调用此函数。
void iot_patchs_list_cb( iot_s32 count, patchs_list_t patchs[ ] );
参数 | 说明 |
count | 云端已发布,本设备未升级的补丁数量,范围0-n |
patchs | 补丁信息结构体,如已发布多个补丁,将以列表形式展示 |
typedef struct patchs_list{
char * name; //补丁名称
char * version; //补丁版本
iot_u32 total_len; //补丁文件总大小
}patchs_list_t;
获取补丁
收到补丁列表后,请调用此函数,请求需要升级的补丁文件。
iot_s32 iot_patch_req( char name[16], char version[16] );
参数 | 说明 |
name | 欲升级的补丁名称 |
version | 补丁版本,格式自定义 |
返回值 | 0:成功,可在5.3节中收到补丁数据块 -1:失败,参数错误 |
接收补丁数据块
参考5.3节,chunk_stat为补丁数据块的情况。
补丁状态上报
补丁升级结束后,调用此函数告知云端完成状态。
iot_s32 iot_patch_end ( const char name[16], const char version[16], DEV_STATUS_T patch_state );
参数 | 说明 |
name | 升级补丁的名称 |
version | 升级补丁的版本 |
patch_state | 升级补丁的结束状态 DEV_STA_PATCH_FAILED(13) :失败 DEV_STA_PATCH_SUCCESS(14):成功 |
接收数据块接口
sdk自动调用该函数,接受云端发来的数据块,收到后需更新本地固件或补丁。回调函数中不可执行太多耗时代码。
iot_s32 iot_chunk_cb( iot_u8 chunk_stat, iot_u32 chunk_offset,
iot_u32 chunk_size, const iot_s8* chunk );
参数 | 说明 |
chunk_stat | 高四位代表chunk的类型:0:OTA数据块;1:补丁数据块低四位代表chunk是否是最后一个分块:0:不是最后一个分块;1:是最后一个分块,固件传输结束 |
chunk_offset | 本数据块相对于完整固件的偏移量即,第一个数据块,此参数值是0 |
chunk_size | 本数据块的长度 |
chunk | 固件数据块 |
返回值 | 0:写入固件块成功 -1:写入固件块失败 |