TuyaOS
初始化(Wi-Fi)

初始化是指设备上电、启动之后,调用一系列接口,完成设备硬件环境的初始化、涂鸦TuyaOS软件的初始化、应用功能初始化等工作。

一般来说,软件启动会执行main函数,对于涂鸦TuyaOS来说,不同场景,入口不一样,比如说在Linux操作系统环境下,我们需要自己实现main函数;在RTOS系统下,我们需要实现user_main函数。并在user main函数里对TuyaOS软件和设备应用能力进行初始化。

接口描述

TuyaOS初始化

OPERATE_RET tuya_iot_init_params(IN CONST CHAR_T *fs_storge_path, IN CONST TY_INIT_PARAMS_S *p_param);
Definition of TUYA DevOS init param
Definition: tuya_cloud_com_defs.h:163
OPERATE_RET tuya_iot_init_params(IN CONST CHAR_T *fs_storge_path, IN CONST TY_INIT_PARAMS_S *p_param)
TuyaOS system service init

此接口是涂鸦TuyaOS的初始化接口,不区分模式,有线、Wi-FiWi-Fi&BLE、蜂窝网络都会使用。接口内部会对TuyaOS的内部基础功能进行资源分配、初始化。一般来说,这个接口会第一个调用,但是在一些场景下,可以在此接口之前进行一些功能配置、事件关注等工作,可以在TuyaOS初始化过程中进行一些特殊的业务逻辑处理。例如在开发照明产品的时候,需要基础功能初始化完成之后立即将灯点亮,则可以在调用此接口之前关注一下early_init事件,并在此事件回调里执行点灯逻辑,就可以实现此功能。

Wi-Fi 通用对接初始化

OPERATE_RET tuya_iot_wf_mcu_dev_init(IN CONST GW_WF_CFG_MTHD_SEL cfg, IN CONST GW_WF_START_MODE start_mode,
IN CONST TY_IOT_CBS_S *cbs, IN CHAR_T *p_firmware_key,
IN CHAR_T *product_key, IN CHAR_T *wf_sw_ver, IN CONST CHAR_T *mcu_sw_ver);
Definition of gateway callback funtions
Definition: tuya_cloud_com_defs.h:807
OPERATE_RET tuya_iot_wf_mcu_dev_init(IN CONST GW_WF_CFG_MTHD_SEL cfg, IN CONST GW_WF_START_MODE start_mode, IN CONST TY_IOT_CBS_S *cbs, IN CHAR_T *p_firmware_key, IN CHAR_T *product_key, IN CHAR_T *wf_sw_ver, IN CONST CHAR_T *mcu_sw_ver)
tuya_iot_wf_mcu_dev_init

此接口对tuya_iot_wf_dev_init进行了封装,实现了专门用于mcu通用对接的初始化接口。在mcu通用对接场景下,可以使用该接口,在收到mcu通过串口发送过来的product keymcu版本信息,对设备进行初始化。

Wi-Fi设备初始化接口,可以配置初始化的配网模式和Wi-Fi工作模式。

Wi-Fi SOC初始化

OPERATE_RET tuya_iot_wf_soc_dev_init_param(IN CONST GW_WF_CFG_MTHD_SEL cfg, IN CONST GW_WF_START_MODE start_mode,
IN CONST TY_IOT_CBS_S *cbs, IN CHAR_T *firmware_key,
IN CHAR_T *product_key, IN CHAR_T *wf_sw_ver);
OPERATE_RET tuya_iot_wf_soc_dev_init_param(IN CONST GW_WF_CFG_MTHD_SEL cfg, IN CONST GW_WF_START_MODE start_mode, IN CONST TY_IOT_CBS_S *cbs, IN CHAR_T *firmware_key, IN CHAR_T *product_key, IN CHAR_T *wf_sw_ver)
tuya_iot_wf_soc_dev_init_param

此接口对tuya_iot_wf_dev_init进行了封装,实现了专门用于soc方案的初始化接口。在soc场景下,可以使用该接口,用本地保存的product key和固件版本信息,对设备进行初始化。

Wi-Fi设备初始化接口,可以配置初始化的配网模式和Wi-Fi工作模式。

Wi-Fi网络状态回调设置

OPERATE_RET tuya_iot_reg_get_wf_nw_stat_cb_params(IN CONST GET_WF_NW_STAT_CB wf_nw_stat_cb, IN CONST INT_T min_interval_s);
VOID(* GET_WF_NW_STAT_CB)(IN CONST GW_WIFI_NW_STAT_E stat)
Handler when network connection error happens
Definition: tuya_cloud_wifi_defs.h:145
OPERATE_RET tuya_iot_reg_get_wf_nw_stat_cb_params(IN CONST GET_WF_NW_STAT_CB wf_nw_stat_cb, IN CONST INT_T min_interval_s)
tuya_iot_reg_get_wf_nw_stat_cb_params

此接口注册网络状态变化回调函数。TuyaOS在网络状态变化的时候,调用此接口注册进来的nw_stat_cb,通知应用进行相应的处理。

Wi-Fi授权信息设置

OPERATE_RET tuya_iot_set_wf_gw_prod_info(IN CONST WF_GW_PROD_INFO_S *wf_prod_info);
Definition: tuya_cloud_wifi_defs.h:123
OPERATE_RET tuya_iot_set_wf_gw_prod_info(IN CONST WF_GW_PROD_INFO_S *wf_prod_info)
tuya_iot_set_wf_gw_prod_info

此接口设置涂鸦授权信息。TuyaOS在激活的时候需要使用授权信息到涂鸦云进行设备认证,因此需要设置授权信息。授权信息里包含了产品信息,唯一标识和认证密钥,使用涂鸦产测软件进行产测授权可以不需要调用此接口,否则则需要自行获取授权信息,并在初始化的时候写入。

示例代码

Wi-Fi设备初始化的时候,需要设置回调,指定工作模式和配网模式,以下是一段示例代码,在初始化的时候设置了ap_ssidap_passwd,并以GWCM_SPCL_AUTOCFG工作模式和WF_START_AP_FIRST配网模式启动设备。

#define UUID "f2*************b0"
#define AUTHKEY "6P**************************MX"
#define PRODUCT_KEY "U0**************Zy" //DP控制开关
#define USER_SW_VER "1.0.0"
#define AP_SSID "SmartLife"
#define AP_PASSWD "tuya_wf_sample"
#define CFG_STORAGE_PATH "./tuya_db_files/"
#define WIFI_NETCFG_TIMEOUT 3
STATIC VOID __soc_dev_rev_upgrade_info_cb(IN CONST FW_UG_S *fw);// SOC设备升级入口
STATIC VOID __soc_dev_status_changed_cb(IN CONST GW_STATUS_E status);// SOC设备云端状态变更回调
STATIC VOID __soc_dev_dp_query_cb(IN CONST TY_DP_QUERY_S *dp_qry);// SOC设备特定数据查询入口
STATIC VOID __soc_dev_obj_dp_cmd_cb(IN CONST TY_RECV_OBJ_DP_S *dp);// SOC设备格式化指令数据下发入口
STATIC VOID __soc_dev_raw_dp_cmd_cb(IN CONST TY_RECV_RAW_DP_S *dp);// SOC设备透传指令数据下发入口
STATIC VOID __soc_dev_restart_req_cb(GW_RESET_TYPE_E type);// SOC设备进程重启请求入口
STATIC VOID __soc_dev_net_status_cb(IN CONST GW_BASE_NW_STAT_T stat);// SOC外网状态变动回调
STATIC VOID __soc_dev_reset_cb(event_raw_data_t *data);
int sample_wifidevice_test(int argc, char *argv[])
{
int rt = OPRT_OK;
// 此处为涂鸦TuyaOS初始化之前的一些特殊工作,代码每一个应用场景可能不同,按需实现
// TBD
// 此处为涂鸦TuyaOS基础功能初始化,为TuyaOS分配资源,并启动一些最基础的能力
TUYA_CALL_ERR_RETURN(tuya_iot_init_param(CFG_STORAGE_PATH, NULL));
// 此处为涂鸦TuyaOS授权信息写入,仅在Linux Demo代码使用,因为正式产品是在生产测试的时候写入授权信息
// 此处代码是为了避免使用产测授权
WF_GW_PROD_INFO_S prod_info = {UUID, AUTHKEY, AP_SSID, AP_PASSWD};
TUYA_CALL_ERR_RETURN(tuya_iot_set_wf_gw_prod_info(&prod_info));
// 此处为设备初始化,实现了一些基础的回调功能,满足一个设备的基本能力需求,并注册获取连接状态回调函数
TY_IOT_CBS_S iot_cbs = {0};
iot_cbs.gw_status_cb = __soc_dev_status_changed_cb;
iot_cbs.gw_ug_cb = __soc_dev_rev_upgrade_info_cb;
iot_cbs.gw_reset_cb = __soc_dev_restart_req_cb;
iot_cbs.dev_obj_dp_cb = __soc_dev_obj_dp_cmd_cb;
iot_cbs.dev_raw_dp_cb = __soc_dev_raw_dp_cmd_cb;
iot_cbs.dev_dp_query_cb = __soc_dev_dp_query_cb; TUYA_CALL_ERR_RETURN(tuya_iot_wf_soc_dev_init_param(GWCM_SPCL_AUTOCFG,WF_START_AP_FIRST,&iot_cbs,NULL,PRODUCT_KEY,DEV_SW_VERSION));
TUYA_CALL_ERR_RETURN(tuya_iot_reg_get_nw_stat_cb_params(__soc_dev_net_status_cb, 1));
// 此处为设备初始化后的一些设备应用功能初始化,,代码每一个应用场景可能不同,按需实现
// TBD
// demo状态监控
while (1)
{
sleep(10);
// 监控设备状态,打印状态提示
ty_devos_monitor();
}
return 0;
}
tuya sdk ota firmware info
Definition: tuya_cloud_com_defs.h:663
Definition of DP query
Definition: tuya_cloud_com_defs.h:564
GW_RESET_IFM_CB gw_reset_cb
Definition: tuya_cloud_com_defs.h:813
DEV_RAW_DP_CMD_CB dev_raw_dp_cb
Definition: tuya_cloud_com_defs.h:817
DEV_DP_QUERY_CB dev_dp_query_cb
Definition: tuya_cloud_com_defs.h:819
DEV_OBJ_DP_CMD_CB dev_obj_dp_cb
Definition: tuya_cloud_com_defs.h:815
GW_STATUS_CHANGED_CB gw_status_cb
Definition: tuya_cloud_com_defs.h:809
GW_UG_INFORM_CB gw_ug_cb
Definition: tuya_cloud_com_defs.h:811
Definition of recved structured dp
Definition: tuya_cloud_com_defs.h:494
Definition of recved raw dp
Definition: tuya_cloud_com_defs.h:512