更新时间:2024-06-25 06:15:50下载pdf
本文主要介绍 TuyaOS 综合 SDK 的初始化流程,先阐述各阶段初始化的概念,然后介绍初始化的使用,最后介绍初始化相关的 API。
初始化不是一个独立的接口,而是由一组接口组成,它们共同构成了网关的最小软件模型。按初始化阶段划分,可以把初始化分为以下三类:
TuyaOS 初始化:初始化底层业务,为上层应用提供基础服务,如加载存储数据库、创建工作队列和定时器、初始化日志管理等。
网关初始化:初始化网关能力,为了能够在网关初始化的过程中插入其他业务的初始化,网关初始化被拆分成以下三个接口:
业务初始化(可选):业务既包含涂鸦的业务(如果有使用的话),也包含您实现的业务。其中,涂鸦业务有 Zigbee 网关能力、蓝牙网关能力、施工部署、故障替换等,具体业务可以参考对应的开发指南。
开发智能网关必须使用 TuyaOS 初始化 和 网关初始化,初始化完成就可以把硬件设备作为智能网关加入到 涂鸦开发者平台。
初始化接口要求遵循的接口调用顺序:TuyaOS 初始化 > 网关预初始化 -> 网关初始化 -> 网关启动。
您可以根据实际产品需求在初始化的各阶段插入自定义的业务模块,但是不能改变接口调用顺序。
设备绑定到涂鸦开发者平台要用到授权信息,因此,需要在初始化时设置设备的授权信息。依次调用以下接口:
tuya_iot_init
。tuya_iot_set_gw_prod_info
。tuya_iot_sdk_pre_init
。tuya_iot_wr_wf_sdk_init
。tuya_iot_sdk_start
。#include "tuya_iot_com_api.h"
#include "tuya_iot_base_api.h"
#include "tuya_cloud_wifi_defs.h"
#include "tuya_gw_com_defs.h"
#include "tuya_iot_sdk_api.h"
#include "uni_log.h"
#include "tuya_hal_system.h"
#define M_STORAGE_PATH "./"
#define M_UUID "my-uuid" /* 修改成在开发者平台申请的 UUID */
#define M_AUTHKEY "my-key" /* 修改成在开发者平台申请的 KEY */
#define M_PID "my-pid" /* 修改成在开发者平台创建的产品 ID */
#define M_SW_VERSION "1.0.0"
int main(int argc, char **argv)
{
OPERATE_RET rt = OPRT_OK;
GW_PROD_INFO_S prod_info = {
.uuid = M_UUID,
.auth_key = M_AUTHKEY,
};
/* TuyaOS 初始化 */
TUYA_CALL_ERR_RETURN(tuya_iot_init(M_STORAGE_PATH));
/* 设置授权信息 */
TUYA_CALL_ERR_RETURN(tuya_iot_set_gw_prod_info(&prod_info));
/* 网关预初始化 */
TUYA_CALL_ERR_RETURN(tuya_iot_sdk_pre_init(TRUE));
/* 网关初始化 */
TUYA_CALL_ERR_RETURN(tuya_iot_wr_wf_sdk_init(IOT_GW_NET_WIRED_WIFI, GWCM_OLD, WF_START_AP_ONLY, M_PID, M_SW_VERSION, NULL, 0));
/* 网关启动 */
TUYA_CALL_ERR_RETURN(tuya_iot_sdk_start());
while (1) {
tuya_hal_system_sleep(10*1000);
}
return OPRT_OK;
}
/**
* @brief Definition of product info
*/
typedef struct {
CHAR_T *uuid; // strlen(uuid) <= 16, must not be null
CHAR_T *auth_key; // strlen(auth_key) <= 32, must not be null
} GW_PROD_INFO_S;
/**
* @brief Gateway network mode
*/
typedef BYTE_T IOT_GW_NET_TYPE_T;
#define IOT_GW_NET_WIRED 0 /**< only support wried */
#define IOT_GW_NET_WIFI 1 /**< only support wifi */
#define IOT_GW_NET_WIRED_WIFI 2 /**< support wired and wifi */
/**
* @brief WiFi work mode
*/
typedef BYTE_T GW_WF_CFG_MTHD_SEL; // wifi config method select
#define GWCM_OLD 0 // do not have low power mode
#define GWCM_LOW_POWER 1 // with low power mode
#define GWCM_SPCL_MODE 2 // special with low power mode
#define GWCM_OLD_PROD 3 // GWCM_OLD mode with product
#define GWCM_LOW_POWER_AUTOCFG 4 // with low power mode && auto cfg
#define GWCM_SPCL_AUTOCFG 5 // special with low power mode && auto cfg
/**
* @brief WiFi pairing mode
*/
typedef BYTE_T GW_WF_START_MODE;
#define WF_START_AP_ONLY 0 // only have ap-cfg mode
#define WF_START_SMART_ONLY 1 // only have smart-cfg mode
#define WF_START_AP_FIRST 2 // have both ap-cfg and smart-cfg. default is ap-cfg mode
#define WF_START_SMART_FIRST 3 // have both ap-cfg and smart-cfg. default is smart-cfg mode
#define WF_START_SMART_AP_CONCURRENT 4 // ap-cfg and smart-cfg is concurrent
/**
* @brief Definition of attach module attribute
*/
typedef struct {
/** attach OTA channel */
GW_PERMIT_DEV_TP_T tp;
/** attach version, format xx.xx.xx */
CHAR_T ver[SW_VER_LEN + 1];
CHAR_T md5[SW_MD5_LEN + 1];
} GW_ATTACH_ATTR_T;
/**
* @brief tuya_iot_init_params
* @desc init tuya_iot_sdk
*
* @param[in] fs_storge_path: filesystem read/write storage path
* (if os have no fs, then fs_storge_path is invalid)
* @param[in] p_param: custom init params
*
* @return OPRT_OK: success Other: fail
*/
OPERATE_RET tuya_iot_init_params(IN CONST CHAR_T *fs_storge_path, IN CONST TY_INIT_PARAMS_S *p_param);
#define tuya_iot_init(fs_storge_path) tuya_iot_init_params(fs_storge_path, NULL)
/**
* @brief tuya_iot_set_gw_prod_info
* @desc set tuya-sdk product info (wired version)
*
* @param prod_info: tuya-sdk product info
*
* @return OPRT_OK: success Other: fail
*/
OPERATE_RET tuya_iot_set_gw_prod_info(IN CONST GW_PROD_INFO_S *prod_info);
/**
* @brief Preinitializes the SDK
*
* @param[in] is_gw TRUE: enable gateway feature, FALSE: disable gateway feature
*
* @return OPRT_OK on success. For others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tuya_iot_sdk_pre_init(BOOL_T is_gw);
/**
* @brief Initializes the SDK, both of wired and WiFi commissioning is supported
*
* @param[in] net_mode commissioning mode, see IOT_GW_NET_TYPE_T
* @param[in] cfg WiFi work mode, see GW_WF_CFG_MTHD_SEL
* @param[in] start_mode WiFi start mode, see GW_WF_START_MODE
* @param[in] product_key product key or product id
* @param[in] sw_ver firmware version, string format: xx.xx.xx
* @param[in] attr gw attach protocol list
* @param[in] attr_num gw attach protocol num
*
* @return OPRT_OK on success. For others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tuya_iot_wr_wf_sdk_init(IN CONST IOT_GW_NET_TYPE_T net_mode, \
IN CONST GW_WF_CFG_MTHD_SEL cfg, IN CONST GW_WF_START_MODE start_mode, \
IN CONST CHAR_T *product_key, IN CONST CHAR_T *sw_ver, \
IN CONST GW_ATTACH_ATTR_T *attr, IN CONST UINT_T attr_num);
/**
* @brief Start the SDK, which should be called at the last
*
* @return OPRT_OK on success. For others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tuya_iot_sdk_start(VOID);
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈