[realtek-ambz] Simplify WiFi scan result handler
This commit is contained in:
@@ -156,6 +156,7 @@ class WiFiClass {
|
||||
);
|
||||
|
||||
int16_t scanComplete();
|
||||
uint8_t scanAlloc(uint8_t count);
|
||||
void scanInit();
|
||||
void scanDelete();
|
||||
|
||||
|
||||
@@ -31,39 +31,45 @@ void WiFiClass::scanDelete() {
|
||||
if (!scan)
|
||||
return;
|
||||
for (uint8_t i = 0; i < scan->count; i++) {
|
||||
free(scan->ssid[i]);
|
||||
free(scan->ap[i].ssid);
|
||||
}
|
||||
free(scan->ssid);
|
||||
free(scan->auth);
|
||||
free(scan->rssi);
|
||||
free(scan->bssid);
|
||||
free(scan->channel);
|
||||
free(scan->ap);
|
||||
free(scan);
|
||||
scan = NULL;
|
||||
}
|
||||
|
||||
uint8_t WiFiClass::scanAlloc(uint8_t count) {
|
||||
uint8_t last = scan->count;
|
||||
scan->count = count;
|
||||
scan->ap = (WiFiScanAP *)realloc(scan->ap, count * sizeof(WiFiScanAP));
|
||||
if (!scan->ap)
|
||||
return 255;
|
||||
memset(scan->ap + last, 0, sizeof(WiFiScanAP));
|
||||
return last;
|
||||
}
|
||||
|
||||
String WiFiClass::SSID(uint8_t networkItem) {
|
||||
if (!scan || networkItem >= scan->count)
|
||||
return "";
|
||||
return scan->ssid[networkItem];
|
||||
return scan->ap[networkItem].ssid;
|
||||
}
|
||||
|
||||
WiFiAuthMode WiFiClass::encryptionType(uint8_t networkItem) {
|
||||
if (!scan || networkItem >= scan->count)
|
||||
return WIFI_AUTH_INVALID;
|
||||
return scan->auth[networkItem];
|
||||
return scan->ap[networkItem].auth;
|
||||
}
|
||||
|
||||
int32_t WiFiClass::RSSI(uint8_t networkItem) {
|
||||
if (!scan || networkItem >= scan->count)
|
||||
return 0;
|
||||
return scan->rssi[networkItem];
|
||||
return scan->ap[networkItem].rssi;
|
||||
}
|
||||
|
||||
uint8_t *WiFiClass::BSSID(uint8_t networkItem) {
|
||||
if (!scan || networkItem >= scan->count)
|
||||
return NULL;
|
||||
return scan->bssid[networkItem].addr;
|
||||
return scan->ap[networkItem].bssid.addr;
|
||||
}
|
||||
|
||||
String WiFiClass::BSSIDstr(uint8_t networkItem) {
|
||||
@@ -73,5 +79,5 @@ String WiFiClass::BSSIDstr(uint8_t networkItem) {
|
||||
int32_t WiFiClass::channel(uint8_t networkItem) {
|
||||
if (!scan || networkItem >= scan->count)
|
||||
return 0;
|
||||
return scan->channel[networkItem];
|
||||
return scan->ap[networkItem].channel;
|
||||
}
|
||||
|
||||
@@ -129,13 +129,17 @@ typedef enum {
|
||||
} wifi_err_reason_t;
|
||||
|
||||
typedef struct {
|
||||
bool running = false;
|
||||
uint8_t count = 0;
|
||||
char **ssid = NULL;
|
||||
WiFiAuthMode *auth = NULL;
|
||||
int32_t *rssi = NULL;
|
||||
WiFiMacAddr *bssid = NULL;
|
||||
int32_t *channel = NULL;
|
||||
char *ssid;
|
||||
WiFiAuthMode auth;
|
||||
int32_t rssi;
|
||||
WiFiMacAddr bssid;
|
||||
int32_t channel;
|
||||
} WiFiScanAP;
|
||||
|
||||
typedef struct {
|
||||
bool running = false;
|
||||
uint8_t count = 0;
|
||||
WiFiScanAP *ap = NULL;
|
||||
} WiFiScanData;
|
||||
|
||||
typedef enum {
|
||||
|
||||
@@ -17,20 +17,13 @@ static rtw_result_t scanHandler(rtw_scan_handler_result_t *result) {
|
||||
rtw_scan_result_t *net = &result->ap_details;
|
||||
net->SSID.val[net->SSID.len] = '\0';
|
||||
|
||||
uint8_t newSize = scan->count + 1;
|
||||
scan->ssid = (char **)realloc(scan->ssid, newSize * sizeof(char *));
|
||||
scan->auth = (WiFiAuthMode *)realloc(scan->auth, newSize * sizeof(WiFiAuthMode));
|
||||
scan->rssi = (int32_t *)realloc(scan->rssi, newSize * sizeof(int32_t));
|
||||
scan->bssid = (WiFiMacAddr *)realloc(scan->bssid, newSize * sizeof(WiFiMacAddr));
|
||||
scan->channel = (int32_t *)realloc(scan->channel, newSize * sizeof(int32_t));
|
||||
uint8_t last = cls->scanAlloc(scan->count + 1);
|
||||
|
||||
scan->ssid[scan->count] = (char *)malloc((net->SSID.len + 1) * sizeof(char));
|
||||
strcpy(scan->ssid[scan->count], (char *)net->SSID.val);
|
||||
scan->auth[scan->count] = securityTypeToAuthMode(net->security);
|
||||
scan->rssi[scan->count] = net->signal_strength;
|
||||
memcpy(scan->bssid[scan->count].addr, net->BSSID.octet, ETH_ALEN);
|
||||
scan->channel[scan->count] = net->channel;
|
||||
scan->count++;
|
||||
scan->ap[last].ssid = strdup((char *)net->SSID.val);
|
||||
scan->ap[last].auth = securityTypeToAuthMode(net->security);
|
||||
scan->ap[last].rssi = net->signal_strength;
|
||||
scan->ap[last].channel = net->channel;
|
||||
memcpy(scan->ap[last].bssid.addr, net->BSSID.octet, ETH_ALEN);
|
||||
|
||||
return RTW_SUCCESS;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user