-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathwindowsscan.cpp
More file actions
63 lines (50 loc) · 1.61 KB
/
windowsscan.cpp
File metadata and controls
63 lines (50 loc) · 1.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "windowsscan.h"
#include "windowsscantrigger.h"
#include "wlanapiwrapper.h"
#include <QPoint>
WindowsScan::WindowsScan(QObject *parent) : QObject(parent) {
WindowsScanTrigger *worker = new WindowsScanTrigger;
worker->moveToThread(&workerThread);
connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
connect(this, &WindowsScan::triggerScan, worker, &WindowsScanTrigger::doScan);
connect(worker, &WindowsScanTrigger::resultReady, this, &WindowsScan::onData);
workerThread.start();
}
WindowsScan::~WindowsScan() {
workerThread.quit();
workerThread.wait();
}
QVector<MeasurementEntry> WindowsScan::results() {
auto scanInfos = QVector<MeasurementEntry>{};
WLANAPI::Handle handle;
WLANAPI::BssList bssList(handle, mInterfaceIndex);
for (auto scanInfo : bssList.getScan()) {
auto scan = MeasurementEntry{
Bss{QString::fromStdString(scanInfo.bssid),
QString::fromStdString(scanInfo.ssid), scanInfo.freq / 1000, 0},
WiFiSignal, static_cast<float>(scanInfo.signal)};
scanInfos.push_back(scan);
}
return scanInfos;
}
void WindowsScan::onData(unsigned long waitResult) {
mScanning = false;
if (waitResult != 0) {
emit scanFailed(waitResult, QString::number(waitResult)); // FIXME
return;
}
auto res = results();
if (res.size() > 0) {
emit scanFinished(res);
} else {
emit scanFailed(254, "no results");
}
}
bool WindowsScan::measure() {
if (mScanning)
return false;
mScanning = true;
emit triggerScan(mInterfaceIndex);
return false;
}
void WindowsScan::setInterfaceIndex(int index) { mInterfaceIndex = index; }