#include "wifi_api.h" #include "wifi_manager.h" #include "wifi_configuration.h" #include "wifi_storage.h" #include void wifi_api_sta_get_ap_info(wifi_api_ap_info_t *ap_info) { wifi_ap_record_t ap_record = {0}; int err; esp_wifi_sta_get_ap_info(&ap_record); strncpy(ap_info->ssid, (char *)ap_record.ssid, sizeof(ap_info->ssid)); strncpy(ap_info->mac, (char *)ap_record.bssid, sizeof(ap_info->mac)); ap_info->rssi = ap_record.rssi; ap_info->password[0] = '\0'; esp_netif_t *sta_netif = wifi_manager_get_sta_netif(); esp_netif_ip_info_t ip_info; esp_netif_get_ip_info(sta_netif, &ip_info); ip4_addr_set(&ap_info->ip, &ip_info.ip); ip4_addr_set(&ap_info->gateway, &ip_info.gw); ip4_addr_set(&ap_info->netmask, &ip_info.netmask); esp_netif_dns_info_t dns_info; err = esp_netif_get_dns_info(wifi_manager_get_sta_netif(), ESP_NETIF_DNS_MAIN, &dns_info); if (err) { ap_info->dns_main.addr = ap_info->gateway.addr; } else { ap_info->dns_main.addr = dns_info.ip.u_addr.ip4.addr; } err = esp_netif_get_dns_info(wifi_manager_get_sta_netif(), ESP_NETIF_DNS_BACKUP, &dns_info); if (err) { ap_info->dns_backup.addr = ap_info->gateway.addr; } else { ap_info->dns_backup.addr = dns_info.ip.u_addr.ip4.addr; } } void wifi_api_ap_get_info(wifi_api_ap_info_t *ap_info) { wifi_credential_t credential; int err = wifi_data_get_ap_credential(&credential); if (err) { strncpy(ap_info->ssid, WIFI_DEFAULT_AP_SSID, strlen(WIFI_DEFAULT_AP_SSID)+1); strncpy(ap_info->password, WIFI_DEFAULT_AP_PASS, strlen(WIFI_DEFAULT_AP_PASS)+1); } else { strncpy(ap_info->ssid, credential.ssid, sizeof(ap_info->ssid)); strncpy(ap_info->password, credential.password, sizeof(ap_info->password)); } esp_wifi_get_mac(WIFI_IF_AP, (uint8_t *) &ap_info->mac); IP4_ADDR_EXPAND(&ap_info->ip, WIFI_DEFAULT_AP_IP); IP4_ADDR_EXPAND(&ap_info->gateway, WIFI_DEFAULT_AP_GATEWAY); IP4_ADDR_EXPAND(&ap_info->netmask, WIFI_DEFAULT_AP_NETMASK); ap_info->rssi = 0; esp_netif_dns_info_t dns_info; err = esp_netif_get_dns_info(wifi_manager_get_ap_netif(), ESP_NETIF_DNS_MAIN, &dns_info); if (err) { ap_info->dns_main.addr = ap_info->gateway.addr; } else { ap_info->dns_main.addr = dns_info.ip.u_addr.ip4.addr; } err = esp_netif_get_dns_info(wifi_manager_get_ap_netif(), ESP_NETIF_DNS_BACKUP, &dns_info); if (err) { ap_info->dns_backup.addr = ap_info->gateway.addr; } else { ap_info->dns_backup.addr = dns_info.ip.u_addr.ip4.addr; } } static int rssi_comp(const void *a, const void *b) { const wifi_api_ap_scan_info_t *r1 = a; const wifi_api_ap_scan_info_t *r2 = b; return r2->rssi - r1->rssi; } /** * @brief blocking function */ int wifi_api_get_scan_list(uint16_t *number, wifi_api_ap_scan_info_t *ap_info) { wifi_ap_record_t *records; int err; records = malloc(*number * sizeof(wifi_ap_record_t)); if (records == NULL) { return ESP_ERR_NO_MEM; } err = wifi_manager_get_scan_list(number, records); if (err) { printf("get scan list err\n"); free(records); return err; } for (int i = 0; i < *number; ++i) { printf("%d %d %s\n", i, records[i].rssi, records[i].ssid); strncpy(ap_info[i].ssid, (char *) records[i].ssid, sizeof(ap_info[i].ssid)); strncpy(ap_info[i].mac, (char *) records[i].bssid, sizeof(ap_info[i].mac)); ap_info[i].rssi = records[i].rssi; } free(records); qsort(ap_info, *number, sizeof(wifi_api_ap_scan_info_t), rssi_comp); return 0; } static wifi_api_scan_done_cb scan_done_cb; static void wifi_manager_scan_done(uint16_t ap_found, wifi_ap_record_t *records, void *arg) { wifi_api_ap_scan_info_t *ap_info; ap_info = malloc(ap_found * sizeof(wifi_api_ap_scan_info_t)); for (int i = 0; i < ap_found; ++i) { strncpy(ap_info[i].ssid, (char *) records[i].ssid, sizeof(ap_info[i].ssid)); strncpy(ap_info[i].mac, (char *) records[i].bssid, sizeof(ap_info[i].mac)); ap_info[i].rssi = records[i].rssi; } printf("wifi api scan done\n"); scan_done_cb(ap_found, ap_info, arg); } int wifi_api_connect(const char *ssid, const char *password) { return wifi_manager_connect(ssid, password); } int wifi_api_disconnect(void) { return wifi_manager_disconnect(); } int wifi_api_sta_set_static_conf(wifi_api_sta_ap_static_info_t *static_info) { int err = wifi_manager_sta_set_static_conf(static_info); if (err) { return err; } return wifi_data_save_static(static_info); }