固件升级

更新时间:2024-05-30 03:35:25下载pdf

用户通过 App 检测设备固件版本,触发设备进行固件升级。本文侧重设备端感知升级、进行升级、上报进度、完成升级等步骤涉及的技术细节。

感知升级

操作

如果设备固件有新版本,进入设备预览界面会提示固件升级。

或者在 App 里,单击目标设备后,进入设备面板。单击右上角设置按钮并找到 设备升级,主动选择新版本进行升级。

代码

固件开发通过下面注册的回调接口感知升级,当启动升级时,会触发此回调。

ipc_sdk_run_var.upgrade_info.upgrade_cb = TUYA_IPC_Upgrade_Inform_cb;

如果主固件和拓展固件升级,可关注 FW_UG_S 里的 DEV_TYPE_T tp; 参数。

可参考 app_user_upgrade 里的 ty_sdk_upgrade.c 的实现,需要在 TUYA_IPC_Upgrade_Inform_cb 中调用以下接口,来注册获取数据回调和获取升级状态通知的回调。

OPERATE_RET tuya_ipc_upgrade_sdk(IN CONST FW_UG_S *fw,
                                 IN CONST GET_FILE_DATA_CB get_file_cb,
                                 IN CONST UPGRADE_NOTIFY_CB upgrd_nofity_cb,
                                 IN PVOID_T pri_data);

进行升级

升级过程中,只需要关注以下两个回调接口的参数:

  • GET_FILE_DATA_CB get_file_cb
  • UPGRADE_NOTIFY_CB upgrd_nofity_cb

SDK 会通过 get_file_cb 不断地给出升级包的分片数据,用户收到升级包数据后,需要自己进行缓存或者升级处理。

上报进度

参考以下接口来上报进度。具体升级进度上报的节奏,用户可自行设计。

OPERATE_RET tuya_ipc_upgrade_progress_report(IN UINT_T percent);

拓展固件版本上报,参考:

OPERATE_RET tuya_ipc_upgrade_progress_report_by_type(IN UINT_T percent, IN BYTE_T type);
//type 参考 FW_UG_S -> DEV_TYPE_T tp

完成升级

设备升级完成需要更新固件版本,设备再次启动时传入新版本,云端校验通过则提示升级成功。具体代码参考:

strcpy(env.dev_sw_version, pRunInfo->iot_info.dev_sw_version);

拓展固件升级完成需要调用以下接口,来更新拓展固件版本号。

OPERATE_RET tuya_iot_dev_update_attachs(UINT_T attr_num, GW_ATTACH_ATTR_T *attrs)