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)
tuya_iot_init_params @desc init tuya_iot_sdk

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

Wi-Fi 设备初始化

OPERATE_RET tuya_iot_wf_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 CONST CHAR_T *firmware_key,
IN CONST CHAR_T *product_key, IN CONST CHAR_T *wf_sw_ver,
IN CONST GW_ATTACH_ATTR_T *attr, IN CONST UINT_T attr_num);
Definition of attach moudule attribute
Definition: tuya_cloud_com_defs.h:175
Definition of gateway callback funtions
Definition: tuya_cloud_com_defs.h:726
OPERATE_RET tuya_iot_wf_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 CONST CHAR_T *firmware_key, IN CONST CHAR_T *product_key, IN CONST CHAR_T *wf_sw_ver, IN CONST DEV_TYPE_T tp, IN CONST GW_ATTACH_ATTR_T *attr, IN CONST UINT_T attr_num)
tuya_iot_wf_dev_init

此接口用来初始化设备能力。在涂鸦物联网开发五步走步骤,会对产品进行定义,得到产品的PID等信息;PID信息在涂鸦云端对应了产品的功能信息,以及设备上其他的附属固件、文件等配置信息。在这个接口里,会对这些信息进行校验,并向尝试配网、网络连接、连接云端,进行设备的激活绑定,在设备激活之后,启动各种涂鸦TuyaOS服务,并连接涂鸦云,进行正常的业务交互。

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

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 CONST CHAR_T *p_firmware_key,
IN CONST CHAR_T *product_key,IN CONST CHAR_T *wf_sw_ver,IN CONST CHAR_T *mcu_sw_ver);
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 CONST CHAR_T *p_firmware_key, IN CONST CHAR_T *product_key, IN CONST 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 CONST CHAR_T *firmware_key,
IN CONST CHAR_T *product_key,IN CONST 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 CONST CHAR_T *firmware_key, IN CONST CHAR_T *product_key, IN CONST 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:137
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配网主要是在初始化的时候指定了配网模式,其主要的工作是初始化的时候进行的,以下是一断示例代码,在初始化的时候设置了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 main(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:584
Definition of DP query
Definition: tuya_cloud_com_defs.h:497
GW_RESET_IFM_CB gw_reset_cb
Definition: tuya_cloud_com_defs.h:732
DEV_RAW_DP_CMD_CB dev_raw_dp_cb
Definition: tuya_cloud_com_defs.h:736
DEV_DP_QUERY_CB dev_dp_query_cb
Definition: tuya_cloud_com_defs.h:738
DEV_OBJ_DP_CMD_CB dev_obj_dp_cb
Definition: tuya_cloud_com_defs.h:734
GW_STATUS_CHANGED_CB gw_status_cb
Definition: tuya_cloud_com_defs.h:728
GW_UG_INFORM_CB gw_ug_cb
Definition: tuya_cloud_com_defs.h:730
Definition of recved structured dp
Definition: tuya_cloud_com_defs.h:459
Definition of recved raw dp
Definition: tuya_cloud_com_defs.h:477
Definition: tuya_cloud_wifi_defs.h:116
the event dispatch raw data
Definition: base_event.h:50
OPERATE_RET tuya_iot_reg_get_nw_stat_cb_params(IN CONST GET_NW_STAT_CB nw_stat_cb, IN CONST INT_T min_interval_s)
tuya_iot_reg_get_nw_stat_cb_params @desc enable tuya-sdk network check. sdk will check the network ev...
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