WiFi设备配网
涉及到操作设备的底层接口,sdk将函数体定义好,具体需要开发者根据设备实现,sdk需要时会调用函数; 函数位置:tuya_iot_sdk/demo_soc_dev_wifi/tuya_iot_wifi_net.c文件中,文件中接口实现供参考,需要可以根据设备调整
wifi配网支持模式设置
WiFi设备配网主要有Smart模式和AP模式两种, Smart配网模式需要设备wifi网卡支持sniffer模式。
配网模式切换说明:
- WF_START_AP_ONLY, 调用tuya_iot_wf_gw_unactive,重启tuya_sdk后进入AP配网模式;
- WF_START_SMART_ONLY, 调用tuya_iot_wf_gw_unactive,重启tuya_sdk后进入Smart配网模式;
- WF_START_AP_FIRST, 设备已连接到涂鸦云情况下,第一次调用tuya_iot_wf_gw_unactive,重启tuya_sdk后进入AP配网模式;第二次调用进入Smart配网模式;如此循环切换
- WF_START_SMART_FIRST, 设备已连接到涂鸦云情况下,第一次调用tuya_iot_wf_gw_unactive,重启tuya_sdk后进入Smart配网模式;第二次调用进入Ap配网模式;如此循环切换
设备进入配网模式流程
[!NOTE] 说明:tuya_sdk会开启多线程,进入配网模式生效必须重启进程,不可只重启主线程。
Title:
participant 用户层
participant tuya_sdk
用户层->tuya_sdk: call tuya_iot_wf_gw_unactive
tuya_sdk-->用户层: return OPRT_OK
tuya_sdk->用户层: GW_RESET_IFM_CB(GW_LOCAL_UNACTIVE)
用户层->tuya_sdk: 重启 tuya_sdk 进程
tuya_sdk-->用户层: 进入配网模式
用户层->tuya_sdk: tuya_iot_wf_fast_get_nc_type
tuya_sdk-->用户层: 返回当前配网模式
用户层-->用户层: 配网LED闪烁,可以添加设备
设备重置
tuya_iot_wf_gw_unactive
/***********************************************************
* @Function:tuya_iot_wf_gw_unactive
* @Desc: 重置设备,解除与涂鸦云的绑定
* @Return: OPRT_OK: success Other: fail
***********************************************************/
OPERATE_RET tuya_iot_wf_gw_unactive(VOID);
在下面两种情况下,应用层需要调用 tuya_iot_wf_gw_unactive
- 设备没有连接到涂鸦云,调用以进入配网模式 或者切换配网模式在AP和Smart之间。
- 设备已连接到涂鸦云,调用以移除设备,切换绑定到其他用户。
__soc_dev_reset_req_cb
/***********************************************************
* @Function:__soc_dev_reset_req_cb
* @Desc: sdk进程重启请求,由tuya_sdk回调,应用层处理
* @Param: type,通知应用层网关重置类型,如下说明:
GW_LOCAL_RESET_FACTORY,本地恢复出厂设置
GW_REMOTE_UNACTIVE, TuyaApp端移除网关
GW_LOCAL_UNACTIVE, 本地移除网关
GW_REMOTE_RESET_FACTORY, 远程恢复出厂设置
GW_RESET_DATA_FACTORY, 云端和本地数据不一致
* @Return: OPRT_OK: success Other: fail
* @Note: 必须重启整个进程,不可只取消线程,tuya_sdk会创建多线程
***********************************************************/
STATIC VOID __soc_dev_reset_req_cb(GW_RESET_TYPE_E type)
{
PR_DEBUG("SOC Rev Reset Req %d", type);
if(type == GW_RESET_DATA_FACTORY){
//该设备之前被恢复过出厂设置,是否需要进行本地用户数据清理
return;
}
// UserTODO 重启sdk线程
}
说明: __soc_dev_reset_req_cb(GW_RESET_DATA_FACTORY) 主要是用来解决云端数据状态和本地数据状态不匹配的问题。 比如设备先在本地移除,然后APP上进行了恢复出厂设置操作,此时如果设备重新配网,SDK会告知应用该设备之前被恢复过出厂设置,需要进行本地数据清理,您这边如果没有本地数据需要清理,可以直接返回,无需进行后续的本地重置处理。
配网模式获取
用途:做配网LED闪烁,以表明设备处于AP配网模式还是Smart配网模式;用户在TuyaApp选择对应入口添加设备;
/***********************************************************
* @Function:tuya_iot_wf_fast_get_nc_type
* @Desc: 获取tuya_sdk保存的配网模式字段值
* @Param: nc_type, 说明如下
GWNS_FAST_LOWPOWER 0-关闭配网
GWNS_FAST_UNCFG_SMC 1-Smart配网模式
GWNS_FAST_UNCFG_AP 2-Ap配网模式
GWNS_FAST_UNCFG_NORMAL 3-工作模式
* @Return: OPRT_OK: success Other: fail
* @Note: tuya_sdk进程重启后,应用层调用获取,做设备配网指示
***********************************************************/
OPERATE_RET tuya_iot_wf_fast_get_nc_type(GW_WF_NWC_FAST_STAT_T *nc_type)
//使用参考
GW_WF_NWC_FAST_STAT_T wf_nwc_fast_stat;
OPERATE_RET op_ret = tuya_iot_wf_fast_get_nc_type(&wf_nwc_fast_stat);
if(OPRT_OK != op_ret) {
PR_ERR("tuya_iot_wf_fast_get_nc_type op_ret:%d",op_ret);
}
if(wf_nwc_fast_stat == GWNS_FAST_UNCFG_SMC){
// tuya-sdk is in Smart distribution mode
}
else if(wf_nwc_fast_stat == GWNS_FAST_UNCFG_AP){
// tuya-sdk is in AP distribution mode
}
配网结果回调
__soc_dev_net_status_cb(STAT_CLOUD_CONN) 为配网成功 或 设备成功连接到涂鸦云