Fork of the excellent esp8266-react - https://github.com/rjwats/esp8266-react
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
2.0 KiB

  1. #include <WiFiScanner.h>
  2. WiFiScanner::WiFiScanner(AsyncWebServer *server) : _server(server) {
  3. _server->on(SCAN_NETWORKS_SERVICE_PATH, HTTP_GET, std::bind(&WiFiScanner::scanNetworks, this, std::placeholders::_1));
  4. _server->on(LIST_NETWORKS_SERVICE_PATH, HTTP_GET, std::bind(&WiFiScanner::listNetworks, this, std::placeholders::_1));
  5. }
  6. void WiFiScanner::scanNetworks(AsyncWebServerRequest *request) {
  7. if (WiFi.scanComplete() != -1){
  8. WiFi.scanDelete();
  9. WiFi.scanNetworks(true);
  10. }
  11. request->send(202);
  12. }
  13. void WiFiScanner::listNetworks(AsyncWebServerRequest *request) {
  14. int numNetworks = WiFi.scanComplete();
  15. if (numNetworks > -1){
  16. AsyncJsonResponse * response = new AsyncJsonResponse();
  17. JsonObject& root = response->getRoot();
  18. JsonArray& networks = root.createNestedArray("networks");
  19. for (int i=0; i<numNetworks ; i++){
  20. JsonObject& network = networks.createNestedObject();
  21. network["rssi"] = WiFi.RSSI(i);
  22. network["ssid"] = WiFi.SSID(i);
  23. network["bssid"] = WiFi.BSSIDstr(i);
  24. network["channel"] = WiFi.channel(i);
  25. #if defined(ESP8266)
  26. network["encryption_type"] = convertEncryptionType(WiFi.encryptionType(i));
  27. #elif defined(ESP_PLATFORM)
  28. network["encryption_type"] = (uint8_t) WiFi.encryptionType(i);
  29. #endif
  30. }
  31. response->setLength();
  32. request->send(response);
  33. } else if (numNetworks == -1){
  34. request->send(202);
  35. }else{
  36. scanNetworks(request);
  37. }
  38. }
  39. #if defined(ESP8266)
  40. /*
  41. * Convert encryption type to standard used by ESP32 rather than the translated form which the esp8266 libaries expose.
  42. *
  43. * This allows us to use a single set of mappings in the UI.
  44. */
  45. uint8_t WiFiScanner::convertEncryptionType(uint8_t encryptionType){
  46. switch (encryptionType){
  47. case ENC_TYPE_NONE:
  48. return AUTH_OPEN;
  49. case ENC_TYPE_WEP:
  50. return AUTH_WEP;
  51. case ENC_TYPE_TKIP:
  52. return AUTH_WPA_PSK;
  53. case ENC_TYPE_CCMP:
  54. return AUTH_WPA2_PSK;
  55. case ENC_TYPE_AUTO:
  56. return AUTH_WPA_WPA2_PSK;
  57. }
  58. return -1;
  59. }
  60. #endif