工具与软件:
大家好、我正在使用 sl_WlanGetNetworkList 函数进行访问点扫描、并读取 SSI、RSSI 等值。 我的问题是此函数显示关闭的访问点仍处于打开状态。
我编写了以下代码来解决此问题、但没有成功。
int32_t wifiGetCallback (uint8_t requestIdx、uint8_t * argcCallback、uint8_t ** argvCallback、SlNetAppRequest_t * netAppRequest){
SlWlanNetworkEntry_t currentEntris[MAX_WIFI_ENTRYS];
int32_t status;
char 有效载荷[1024];//根据需要调整大小
char * pPayload =有效载荷;
//清除之前的有效载荷和重置 currentEntries 数组
//在 wifiGetCallback 函数内
//清除之前的有效载荷和重置 currentEntries 数组
memset (有效载荷、0、sizeof (有效载荷));
memset (currentEntries、0、sizeof (currentEntries);
//获取 Wi-Fi 网络列表
状态= sl_WlanGetNetworkList (0、MAX_WIFI_ENTRIES、currentEntries);
如果(状态< 0){
sl_memcpy (pPayload、"Wi-Fi 扫描期间出错"、24);
pPayload +=24;
其他{
qsort (currentEntries、status、sizeof (SlWlanNetworkEntry_t)、compareRSSI);
//在当前扫描中为网络准备有效载荷
int newEntryCount = 0;
对于(int i = 0;i < status;i++){
SlWlanNetworkEntry_t * ap =¤tEntrys[i];
如果(ap->RSSI >-80){
//将有效条目添加到有效负载
pPayload += sprintf (pPayload、"|%s |%02x:%02x:%02x:%02x:%02x:%02x |%d |%d |\n"、
ap->ssid、ap->bssid[0]、ap->bssid[1]、ap->bssid[2]、
ap->bssid[3]、ap->bssid[4]、ap->bssid[5]、ap->RSSI、ap->Channel);
Display_printf (display、0、0、
"|%s |%02x:%02x:%02x:%02x:%02x:%02x |%d |%d |\n\r"、
ap->ssid、ap->bssid[0]、ap->bssid[1]、ap->bssid[2]、
ap->bssid[3]、ap->bssid[4]、ap->bssid[5]、
AP->RSSI、ap->Channel);
newEntryCount++;
}
}
//从上一次扫描中删除关闭的接入点
for (int i = 0;i < previousEntryCount;i++){
bool found= false;
对于(int j = 0;j < status;j++){
//将每个先前条目的 BSSID 与当前条目进行比较
if (memcmp (previousEntry[i])。 BSSID、currentEntry[j]。 BSSID、sizeof (previousEntry[i]。 BSSID))= 0){
found = true;//访问点仍然存在
休息;
}
}
如果(!found){
//此网络在之前的扫描中、但现在已关闭
Display_printf (display、0、0、"Access point %02x:%02x:%02x:%02x:%02x:%02x:%02x 已关闭并将被删除\n"、
PreviousEntries [我]。 BSSID[0]、previousEntry[i]。 BSSID[1]、previousEntry[i]。 BSSID[2]、
PreviousEntries [我]。 BSSID[3]、previousEntry[i]。 BSSID[4]、previousEntry[i]。 BSSID[5]);
//通过移动其余条目、从先前的已完成项中删除
for (int k = i;k < previousEntryCount - 1;k++){
previousEntries[k]= previousEntries[k + 1];
}
previousEntryCount--;//减少有效条目的计数
i --;//删除元素后调整索引
}
}
//将当前条目复制到先前的条目以进行下一次扫描
memcpy (previousEntries、currentEntries、sizeof (currentEntries);
previousEntryCount = newEntryCount;
}
*pPayload ='\0';// NULL 终止有效载荷
uint16_t metadataLen = prepareGetMetadata (0、strlen (payload)、HttpContentocrataLen List_Text 窝);
sl_NetAppSend (netAppRequest ->句柄、metadataLen、gMetaBuffer、sl_NETAPP_Request_Response_flags_Continuation | sl_NETAPP_Request_Response_flags_metadata);
sl_NetAppSend (netAppRequest ->句柄、strlen (有效载荷)、(unsigned char *)有效载荷、0);//发送最终的有效载荷
返回0;
}
sl_start 用于关闭和打开 WiFi 网络或 sl_stop 等方法、会使代码变得非常繁重、并中断与网络服务器的通信。 我想展示始终处于活动状态的网络。 如何实现这一点。