feat: services
This commit is contained in:
57
src/WifiScanService.cpp
Normal file
57
src/WifiScanService.cpp
Normal file
@@ -0,0 +1,57 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user