器件型号:CC3220
工具/软件:Code Composer Studio
你好。
我将 CC3220MOD 与"CC32XX SDK 2.30.00.05"和"sp_3.9.0.6_2.0.0.0_2.2.0.6.bin"服务包搭配使用、并且在开发过程中遇到了 WLAN 扫描问题。
器件设置为 AP 模式、扫描间隔设置为10秒(我不会发布整个项目代码、仅关注此处的错误)。
如果在启动扫描后调用"sl_WlanGetNetworkList"、则该函数应返回已扫描 WLAN 的数量或"sl_error_WLAN_get_network_list_EAGAIN"(这意味着扫描结果尚未就绪、应再次调用该函数)、但此函数发生了一些问题。
我在开发过程中使用了以下代码(此处为简化版本)来检索扫描结果。
void wlan_scan_test()
{
int32_t f_result;
uint32_t scan_timeout_ms、lapsed_time_ms;
SlWlanNetworkEntry_t scanned_wlan_info[30];
bool scan_finished;
scan_finished = false;
number_for_scanned_WLANs = 0;
SCAN_TIMEOUT_ms = 8000;
Elapsed_time_ms = 0;
操作
{
f_result = sl_WlanGetNetworkList (0、30、scanned_wlan_info);
switch (f_result)
{
案例(SL_ERROR_WLAN_GET_NETWORK_LIST_EAGAIN):
{
f_result = 0;
继续;
}
}
如果(f_result < 0)
{
while (1);//NWP 错误
}
if (elapsed_time_ms >= scan_timeout_ms)
{
//扫描超时已过。 完成。
scan_finished = true;
}
否则、如果(((0!= number_for_scanned_WLANs)&&
(F_RESULT = NUMBER_O_ON_SCAND_WLAN)
{
//扫描 fond 至少1个网络,最后检索到
//扫描的网络列表与当前检索的网络列表相同。
//或其扫描可能已完成、并且收集了足够的数据。
scan_finished = true;
}
其他
{
//扫描过程中未找到网络,或者扫描的网络数不断增加。
//继续检索扫描结果。
vTaskDelay (1000);//FreeRTOS 1000节拍超时(每个节拍为1 [ms])
Elapsed_time_ms += 1000;
}
number_for_scanned_WLANs = f_result;
f_result = 0;
}while (!scan_finished);
返回;
}
此代码运行正常、直到在没有任何 WLAN 的区域测试设备。
在没有任何 WLAN 的情况下、函数"sl_WlanGetNetworkList"会一直返回"sl_error_WLAN_get_network_list_EAGAIN"。
我假设函数"sl_WlanGetNetworkList"在未找到 WLAN 时应返回零(0)、但却未找到、我的代码被卡住。
所附示例的修复方法是在"switch"情况下将"Continue"语句替换为"break"语句、这将触发超时并保留此函数。
扫描功能的实施非常糟糕、无论我的问题是"sl_WlanGetNetworkList"如果找不到 WLAN、则永远不返回0、
扫描过程应报告某些事件或在完成时设置标志。
在当前实施中,我们必须保持共用扫描的网络列表,并在某个时候假设扫描已完成,而不知道它是否已完成。
此致。