TuyaOS
OTA

涂鸦 TuyaOS 支持对 Powered by Tuya 设备的固件进行升级。在涂鸦IoT平台上创建的产品,可以上传固件、绑定升级通道 OTA channel ,每一个通道对应着设备上的一个可以进行版本升级的固件或者是文件、配置,开发者通过对该固件、文件或配置进行配置升级,然后推送到设备上。设备在接收到升级通知的时候,会去涂鸦IoT平台上获取对应通道所绑定的升级版本固件、文件或者配置,在本地进行校验、写入更新,然后上报新的版本号,完成升级过程。

涂鸦 TuyaOS 的升级操作主要分为以下几种类型:

升级类型 描述
静默升级 设备在启动之时以及每运行6小时,都会自动向IoT平台请求检测是否有静默升级任务。
如果存在静默升级任务,则进入升级流程进行升级;
如果不存在静默升级任务,则再等待6个小时重新检测。
静默升级中打开设备面板,会有进度框显示,并且无法操作设备。
提醒升级 用户手机APP首次打开设备面板时,会收到升级提醒弹框,可以选择升级或者不升级。
如果用户选择升级,则会推送升级任务到设备,设备并获取升级任务,进入升级流程,并上报升级进度。设备面板显示升级进度,并且无法操作设备。
检测升级 用户手机APP打开设备面板,点击点击右上角进入设备信息界面,检测设备固件版本,主动更新。
如果检测到有新的固件版本,则会推送升级任务到设备,设备并获取升级任务,进入升级流程,并上报升级进度。设备面板显示升级进度,并且无法操作设备。
强制升级 用户手机APP首次打开设备面板时,会收到升级提醒弹框,只有确定可以选择,无法取消。
用户选择升级,则会推送升级任务到设备,设备并获取升级任务,进入升级流程,并上报升级进度。设备面板显示升级进度,并且无法操作设备。

OTA Channel

OTA Channel 是涂鸦 TuyaOS 对设备内部可以进行升级的固件、文件或者配置进行升级通道绑定的一种机制,主要分为两种,分别为系统 OTA channel 和扩展 OTA Channel

  • 系统 OTA channel:涂鸦 TuyaOS 使用的,固化的一些通道,用于指定类型的固件升级使用。
  • 扩展 OTA Channel:涂鸦 TuyaOS 定义的,开发者可以根据自己的实际需求进行规划使用。
名称 通道号 描述
DEV_NM_ATH_SNGL 0 系统 OTA Channel,主联网固件升级通道
DEV_BLE_SNGL 1 系统 OTA Channel,蓝牙固件升级通道
DEV_ZB_SNGL 3 系统 OTA Channel,ZigBee固件升级通道
DEV_NM_NOT_ATH_SNGL 9 系统 OTA Channel,MCU固件升级通道
DEV_ATTACH_MOD_x >=10 扩展 OTA Channel,开发者自定义的升级通道

在升级过程中,涂鸦 TuyaOS 在获取到升级信息之后,会对升级通道进行一个检查。如果升级通道是主联网固件升级通道,即 DEV_NM_ATH_SNGL,涂鸦 TuyaOS 会自行处理;如果升级通道是其他的系统 OTA Channel 或者是扩展的 OTA Channel,则会调用开发者在初始化时候提供的 TY_IOT_CBS_S 里的回调函数 gw_ug_cb。在这个回调函数里,开发者可以根据里面的 tp 来判断是什么样的 OTA Channel,然后进行区分处理。

一些客户对主联网固件的升级也有特殊的定制需求,可以通过一个接口 tuya_svc_upgrade_register_pre_cb 进行定制,只要注册一个 NULL 指针即可。

除了回调函数之外,OTA的其他功能不需要用于进行编码开发,涂鸦 TuyaOS 直接提供相关的能力。

接口描述

启动升级

int tuya_svc_upgrade_start(CONST CHAR_T *dev_id,
CONST FW_UG_S *fw,
CONST GET_FILE_DATA_CB get_file_cb,
VOID *pri_data,
CONST UPGRADE_NOTIFY_CB upgrd_nofity_cb,
CONST BOOL_T upload_upgrade_percent,
CONST UINT_T download_buf_size);
tuya sdk ota firmware info
Definition: tuya_cloud_com_defs.h:584
OPERATE_RET tuya_svc_upgrade_start(CONST CHAR_T *dev_id, CONST FW_UG_S *fw, CONST GET_FILE_DATA_CB get_file_cb, VOID *pri_data, CONST UPGRADE_NOTIFY_CB upgrd_nofity_cb, CONST BOOL_T upload_upgrade_percent, CONST UINT_T download_buf_size)
Start to download the specific firmware

此接口用于在开发者提供的 gw_ug_cb 里启动OTA流程。接口里需要提供 get_file_cb,用于获取文件内容写入flash,upgrd_notify_cb 用于通知升级结束。

注册升级回调pre_cb

void tuya_svc_upgrade_register_pre_cb(dev_upgrade_pre_inform_cb pre_ug_cb);
VOID tuya_svc_upgrade_register_pre_cb(DEV_UPGRADE_PRE_INFORM_CB pre_ug_cb)
Register pre-precess handler to replace the default one

此接口用于注册升级回调之前的特殊操作,涂鸦 TuyaOS 内部默认有一个 pre_cb,在内部的 pre_cb 里,涂鸦 TuyaOS 处理了主联网固件的升级逻辑。如果需要关闭此逻辑,把主联网固件的升级也放到开发者在初始化时候提供的回调函数 gw_ug_cb 里处理,可以通过 tuya_svc_upgrade_register_pre_cb(NULL) 来替换涂鸦 TuyaOS 内部的默认 pre_cb