123456789101112131415161718192021222324252627282930313233343536373839404142 |
- #include "pairing_service/scan_controller.h"
- #include <vector>
- #include <nlohmann_json/json.hpp>
- #include <kbf/wifi.h>
- using std::vector;
- using namespace kbf;
- using nlohmann::json;
- ScanController::ScanController() : Controller("/scan") {}
- http::Response ScanController::get(const http::Request &request) {
- if (!scanning && lastScanResults.empty()) {
- scanning = true;
- wifi::sta::onScanDone = &handleScanDone;
- wifi::sta::startScan((void *) this);
- }
- if (scanning) {
- return kbf::http::Response(((json) {
- {"finished", false},
- {"results", json::array()}
- }).dump());
- }
- json responseJson = {{"finished", true}, {"results", json::array()}};
- for (const auto &ap : lastScanResults) {
- responseJson["results"].push_back({{"ssid", ap.ssid},
- {"rssi", ap.rssi}});
- }
- lastScanResults.clear();
- return http::Response(responseJson.dump());
- }
- void ScanController::handleScanDone(vector<kbf::wifi::APInfo> &aps, void *data) {
- auto instance = static_cast<ScanController *>(data);
- instance->lastScanResults = std::move(aps);
- instance->scanning = false;
- }
|