Files
spore/src/WifiScanService.cpp
2025-09-13 12:35:52 +02:00

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);
}