scan_controller.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "pairing_service/scan_controller.h"
  2. #include <vector>
  3. #include <nlohmann_json/json.hpp>
  4. #include <kbf/wifi.h>
  5. using std::vector;
  6. using namespace kbf;
  7. using nlohmann::json;
  8. ScanController::ScanController() : Controller("/scan") {}
  9. http::Response ScanController::get(const http::Request &request) {
  10. if (!scanning && lastScanResults.empty()) {
  11. scanning = true;
  12. wifi::sta::onScanDone = &handleScanDone;
  13. wifi::sta::startScan((void *) this);
  14. }
  15. if (scanning) {
  16. return kbf::http::Response(((json) {
  17. {"finished", false},
  18. {"results", json::array()}
  19. }).dump());
  20. }
  21. json responseJson = {{"finished", true}, {"results", json::array()}};
  22. for (const auto &ap : lastScanResults) {
  23. responseJson["results"].push_back({{"ssid", ap.ssid},
  24. {"rssi", ap.rssi}});
  25. }
  26. lastScanResults.clear();
  27. return http::Response(responseJson.dump());
  28. }
  29. void ScanController::handleScanDone(vector<kbf::wifi::APInfo> &aps, void *data) {
  30. auto instance = static_cast<ScanController *>(data);
  31. instance->lastScanResults = std::move(aps);
  32. instance->scanning = false;
  33. }