我们设计了一款采用 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