58 lines
1.9 KiB
C++
58 lines
1.9 KiB
C++
#include "WifiScanService.h"
|
|
#include <ArduinoJson.h>
|
|
|
|
WifiScanService::WifiScanService(NetworkManager& networkManager)
|
|
: networkManager(networkManager) {}
|
|
|
|
void WifiScanService::registerEndpoints(ApiServer& api) {
|
|
// POST /api/wifi/scan - Start WiFi scan
|
|
api.addEndpoint("/api/wifi/scan", HTTP_POST,
|
|
[this](AsyncWebServerRequest* request) { this->handleScanRequest(request); },
|
|
std::vector<ParamSpec>{});
|
|
|
|
// GET /api/wifi - Get all access points
|
|
api.addEndpoint("/api/wifi", HTTP_GET,
|
|
[this](AsyncWebServerRequest* request) { this->handleGetAccessPoints(request); },
|
|
std::vector<ParamSpec>{});
|
|
}
|
|
|
|
void WifiScanService::handleScanRequest(AsyncWebServerRequest* request) {
|
|
networkManager.scanWifi();
|
|
|
|
AsyncResponseStream *response = request->beginResponseStream("application/json");
|
|
JsonDocument doc;
|
|
doc["status"] = "scanning";
|
|
doc["message"] = "WiFi scan started";
|
|
|
|
serializeJson(doc, *response);
|
|
request->send(response);
|
|
}
|
|
|
|
void WifiScanService::handleGetAccessPoints(AsyncWebServerRequest* request) {
|
|
auto accessPoints = networkManager.getAccessPoints();
|
|
|
|
JsonDocument doc;
|
|
|
|
doc["access_points"].to<JsonArray>();
|
|
|
|
for (const auto& ap : accessPoints) {
|
|
JsonObject apObj = doc["access_points"].add<JsonObject>();
|
|
apObj["ssid"] = ap.ssid;
|
|
apObj["rssi"] = ap.rssi;
|
|
apObj["channel"] = ap.channel;
|
|
apObj["encryption_type"] = ap.encryptionType;
|
|
apObj["hidden"] = ap.isHidden;
|
|
|
|
// Convert BSSID to string
|
|
char bssid[18];
|
|
sprintf(bssid, "%02X:%02X:%02X:%02X:%02X:%02X",
|
|
ap.bssid[0], ap.bssid[1], ap.bssid[2],
|
|
ap.bssid[3], ap.bssid[4], ap.bssid[5]);
|
|
apObj["bssid"] = bssid;
|
|
}
|
|
|
|
AsyncResponseStream *response = request->beginResponseStream("application/json");
|
|
serializeJson(doc, *response);
|
|
request->send(response);
|
|
}
|