This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3220MODA:sl_WlanGetNetworkList()网络扫描并不总是返回隐藏的 SSID 信息

Guru**** 662690 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1180650/cc3220moda-sl_wlangetnetworklist-network-scan-does-not-always-return-hidden-ssid-information

器件型号:CC3220MODA

我们设计了一款采用 CC3220SFMODA 的产品、该产品从休眠状态中唤醒、与 AP 建立连接、然后向我们的服务器发送请求。 在设备与服务器建立连接之前,它会进行扫描以查看有多少个可见和隐藏的 SSID 可用。 我们知道无法看到隐藏 AP 的 SSID、但对于我们的应用、我们只需知道是否存在隐藏 SSID。  

如果我们设置一个隐藏 AP、然后进行扫描、则器件只会看到隐藏 AP 在10%或更短的时间内存在。 值得注意的是、即使隐藏的 AP 未显示在扫描中、但我们需要它们显示在应用的扫描中、我们也能够连接到这些 AP。 此外、可见 AP 始终在扫描中成功显示。 仅隐藏的 SSID 不一致扫描。

在此代码块中、您可以看到设置了扫描参数、然后立即执行扫描。 这非常简单、并且严格遵循 TI Resource Explorer 中的示例。

    _i16 Status = 0;
    Display_printf(display, 0, 0, "Set Scan Parameters\r\n");

    //Set Scan Parameters
    SlWlanScanParamCommand_t ScanParamConfig;
    ScanParamConfig.RssiThreshold = -100;
    ScanParamConfig.ChannelsMask = 0x1FFF; /* channels 1-13 */
    Status = sl_WlanSet(SL_WLAN_CFG_GENERAL_PARAM_ID, SL_WLAN_GENERAL_PARAM_OPT_SCAN_PARAMS,
    sizeof(ScanParamConfig), (_u8* )& ScanParamConfig);
    if( Status )
    {
     /* error */
    }


    //Set Scan policy
    Display_printf(display, 0, 0, "Set Scan Policy\r\n");

    _u32 intervalInSeconds = 20;

    Status = sl_WlanPolicySet(SL_WLAN_POLICY_SCAN, SL_WLAN_SCAN_POLICY(1,1),
    (_u8*)&intervalInSeconds,sizeof(intervalInSeconds));
    if( Status )
    {
     /* error */
    }

    alertus_delay(1000);

    Display_printf(display, 0, 0, "Get Network List\r\n");

    SlWlanExtNetworkEntry_t netExtEntries[10] = {0};

    _u8 i;

    Display_printf(display, 0, 0, "Get Network attempt #1");
    resultsCount = sl_WlanGetNetworkList(0,10,&netEntries[0]);

    //Try to get results again if first attemt fails
    int getScanTries = 2;

    while((resultsCount == SL_ERROR_WLAN_GET_NETWORK_LIST_EAGAIN) &&
          (getScanTries < 5)){

        Display_printf(display, 0, 0, "Get Network attempt # %d", getScanTries);

        //Wait 1 second
        alertus_delay(1000);

        //Try again
        resultsCount = sl_WlanGetNetworkList(0,10,&netEntries[0]);

        getScanTries++;
    }

    uint8_t closest_AP = 0;

    //If scan was succesful
    if(resultsCount > 0){

    Display_printf(display, 0, 0, "APs found: %d\r\n", resultsCount);

    Display_printf(display, 0, 0, "Print Network List\r\n");
    //Cycle through AP and find lowest RSSI of save networks
    int p = 0;

    //Set RSSI to unreasonably low value
    int rssiVal = -100;

    valid_config = 0;

    int hiddenAPfound = 0;

    for(p = 0; p < resultsCount; p++){

        //Capture RSSI here to prevent API overwrite during logic
        int APrssi = netEntries[p].Rssi;

         Display_printf(display, 0, 0, "AP # %d: %s\r\n", p, netEntries[p].Ssid);
         Display_printf(display, 0, 0, "RSSI: %d\r\n", netEntries[p].Rssi);

        //If hidden AP no need to check if it is the closest
        if(netEntries[p].SsidLen < 4){

            hiddenAPfound++;
            continue;

        }

下面是与上述代码块相关的调试输出示例。 在这种情况下、器件会看到隐藏的 SSID。 这种情况发生在10%或更少的扫描中。

器件仍返回 RSSI、空白 SSID 这是我们需要的行为

下面是一个未找到隐藏 SSID 的示例。

是否有人可以提供解决此问题的帮助? 我们想知道我们是否正确使用了 API、或者是否存在与我们的应用代码无关的其他问题。

谢谢你

Rodney T

工具版本:

Simplelink 版本:4.40.07

编译器版本:TI v20.2.7.LTS

XDCtools 版本:3.62.1.14_core

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    该主题已转发给专家。 请在下周开始前回复。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我假设、如果您在扫描报告中看到隐藏 AP、则表明已正确配置隐藏 AP 扫描、但为了确保正确、请参考以下代码片段进行检查。

    {
    		int ScanInterval = 0;  //default value is 600 seconds
    		_u8 Policy = 0;       //default value is 0 (disabled)
    		int ret;
    		int length = sizeof(ScanInterval);
    
    		ret = sl_WlanPolicyGet(SL_WLAN_POLICY_SCAN, &Policy, (_u8*)&ScanInterval, (_u8*)&length);
    
    		if (Policy & SL_WLAN_SCAN_POLICY(0, 1))
    		{
    			UART_PRINT("Scan Policy is set to Scan visible ssid ");
    		}
    		if (Policy & SL_WLAN_SCAN_POLICY(1, 0))
    		{
    			UART_PRINT("Scan Policy is set to Scan hidden ssid ");
    		}
    
    		ScanInterval = 30;
    		RetVal = sl_WlanPolicySet(SL_WLAN_POLICY_SCAN, SL_WLAN_SCAN_POLICY(1, 1), (_u8 *)&ScanInterval, sizeof(ScanInterval));
    		UART_PRINT("sl_WlanPolicySet...%d\n\r", RetVal);
    	}

    如果设置了隐藏网络扫描、则很可能会错过该扫描、因为获取 AP 的唯一方法是侦听信标、并且至少每~100mSec (某些 AP 为100mSec 的倍数)传输一次信标、因此在统计上可以忽略它。

    此致、

    Shlomi