介绍设备通过一键配网方式配网过程中遇到的常见问题和解决方法。
背景信息
一键配网的流程图如下。
手机App向空中加密发送热点的SSID和密码。
设备在监听模式即可接收和上报给SDK。
SDK解密到SSID和密码后,作为入参调用
HAL_Awss_Connect_Ap()
接口,此时设备则能连接上热点。
一、用手机App发送配网信息流
手机App向空中发送配网信息流,通过设备是否可以正常接收到相应信息,来判断一键配网的HAL接口实现是否正确。
二、用自测工具和设备接收信息流
自测工具以源码形式提供,您需要自行下载,再编写HAL_XXX()
接口进行交叉编译。
+-- include
| +-- hal_awss.h
| +-- hal_common.h
| +-- ieee80211.h
| +-- ieee80211_radiotap.h
| +-- smartconfig_ieee80211.h
| +-- zconfig_protocol.h
+-- src
+-- hal_awss.c
+-- haltest.c
+-- ieee80211.c
+-- smartconfig_ieee80211.c
+-- TestProbeRx.c
+-- wrapper.c
将src/wrapper.c中所有
HAL_XXX()
的函数内容实现替换为适合您系统的代码。将替换后的 src/wrapper.c 和其它的源文件编译到您的固件中。
浏览include/hal_awss.h文件,其中列举的函数
verfiy_xxx()
称为自测函数。每个自测函数可以验证一到多个HAL_XXX()
实现。选择合适的程序入口,调用自测函数
verify_xxx()
。调用方法,可以参考src/haltest.c中对自测函数进行调用的示意代码。
#include <stdio.h> #include <unistd.h> #include "hal_common.h" #define TEST_SWITCH_CHANNEL_INTERNVAL_MS (250) ... ... int main(int argc, char *argv[]) { int time_passed = 0; uint8_t bssid[ETH_ALEN] = {0x11,0x22,0x33,0x44,0x55,0x66}; verify_awss_preprocess(); verify_awss_close_monitor(); verify_awss_open_monitor(); while(1) { if (time_passed > 10 *1000) { break; } verify_awss_switch_channel(switch_channel()); usleep(TEST_SWITCH_CHANNEL_INTERNVAL_MS*1000); time_passed += TEST_SWITCH_CHANNEL_INTERNVAL_MS; } verfiy_awss_connect_ap(5000, "ssid", "passwd", AWSS_AUTH_TYPE_WPAPSKWPA2PSK, AWSS_ENC_TYPE_AES, bssid, 6); verify_awss_get_ap_info(); verify_awss_net_is_ready(); return 0; }
编译嵌入您HAL实现的自测工具全部源码,并观察
verify_xxx()
这类函数的运行输出,来检验您的HAL_XXX()
实现是否正确。使用自测函数,调用HAL接口。
使用一键配网模式,仅需要对接这些公共HAL接口即可。
verify_awss_preprocess
对HAL_Awss_Get_Timeout_Interval_Ms、HAL_Awss_Get_Channelscan_Interval_Ms和HAL_Wifi_Get_Mac进行自测。查看HAL返回的配置参数值,是否符合预期。
/***********************************************/ /* Verify HAL_Awss_Get_Timeout_Interval_Ms */ /* Awss Timeout Interval Ms: 600000 ms */ /***********************************************/ /***********************************************/ /* Verify HAL_Awss_Get_Channelscan_Interval_Ms */ /* Awss Channel Scan Interval Ms: 250 ms */ /***********************************************/ /***********************************************/ /* Verify HAL_Wifi_Get_Mac */ /* Wifi Mac: 11:22:33:44:55:66 */ /***********************************************/ /***********************************************/ /* Verify HAL_Awss_Switch_Channel In Loop */ /***********************************************/
verify_awss_open_monitor
对HAL_Awss_Open_Monitor进行自测。
确保设备附近有运行配网App在发送配网报文。
输出日志为当前收到的配网模块帧类型的表格,其中有 SmartConfig Start Frame 、 SmartConfig Group Frame 、 SmartConfig Data Frame 字样,说明当前监听模式可以接收到一键配网所需的帧类型。
/***********************************************/ /* Verify HAL_Awss_Open_Monitor */ /***********************************************/ |---------------------------------------------------------------------| | Frame Type | Direction | Packet Length | Channel | |-----------------------------|-----------|-----------------|---------| | SmartConfig Data Frame | FromDS | 1256 (0x04E8) | 8 | | SmartConfig Start Frame | FromDS | 1248 (0x04E0) | 8 | | SmartConfig Data Frame | FromDS | 1256 (0x04E8) | 8 | | SmartConfig Data Frame | FromDS | 0532 (0x0214) | 9 | | SmartConfig Data Frame | FromDS | 0288 (0x0120) | 1 | | SmartConfig Data Frame | FromDS | 0457 (0x01C9) | 3 | | SmartConfig Group Frame | FromDS | 1002 (0x03EA) | 4 | | SmartConfig Group Frame | FromDS | 0994 (0x03E2) | 4 | | SmartConfig Data Frame | FromDS | 0284 (0x011C) | 4 | | SmartConfig Data Frame | FromDS | 0421 (0x01A5) | 4 | | SmartConfig Data Frame | FromDS | 0413 (0x019D) | 4 |
verify_awss_close_monitor
对HAL_Awss_Close_Monitor进行自测,观察是否可以按预期停止监听模式。
/***********************************************/ /* Verify HAL_Awss_Close_Monitor */ /***********************************************/
verify_awss_switch_channel
对HAL_Awss_Switch_Channel进行自测,观察是否可以按预期切换到指定的WiFi信道(1-13)。
verfiy_awss_connect_ap
对HAL_Awss_Connect_Ap进行自测,观察是否可以根据SSID和密码,连接到指定的AP热点。
/***********************************************/ /* Verify HAL_Awss_Connect_Ap */ /* Result: 0 */ /***********************************************/
其中,Result的值为0表示成功,为-1表示失败。
verify_awss_get_ap_info
对HAL_Wifi_Get_Ap_Info进行自测,观察是否可以按预期收集AP热点的连接信息。成功调用该函数后,系统会打印获取到的ssid、密码和bssid。
/***********************************************/ /* Verify HAL_Wifi_Get_Ap_Info */ /* Result: 0 */ /* SSID: test_ssid */ /* PASSWD: test_passwd */ /* PASSWD: test_bssid */ /***********************************************/
其中,无论设备是否连接上路由器,Result的值都为0。
verify_awss_net_is_ready
对HAL_Sys_Net_Is_Ready进行自测,观察是否调用该函数后,会获取当前网络状态。
/***********************************************/ /* Verify HAL_Sys_Net_Is_Ready */ /* Result: 0 */ /***********************************************/
其中,Result的值为0表示处于连网状态,值为1表示处于非连网状态。