#ifndef WIFISENSORANDROID_H #define WIFISENSORANDROID_H #ifdef ANDROID #include #include "../../misc/Debug.h" #include "../WiFiSensor.h" class WiFiSensorAndroid : public WiFiSensor { private: /** hidden ctor. use singleton! */ WiFiSensorAndroid() {;} bool started = false; public: /** singleton access */ static WiFiSensorAndroid& get() { static WiFiSensorAndroid wifi; return wifi; } void start() override { // start scanning int res = QAndroidJniObject::callStaticMethod("indoor/java/WiFi", "start", "()I"); if (res != 0) {throw Exception("error while starting WiFi");} started = true; } void stop() override { throw "todo"; } bool isRunning() const override { return started; } /** called from java. handle the given incoming scan result */ void handle(const std::string data) { // to-be-constructed sensor data WiFiMeasurements sensorData; // parse each mac->rssi entry for (int i = 0; i < (int)data.length(); i += 17+1+2) { const std::string bssid = data.substr(i, 17); const int8_t rssi = data[i+17]; const int8_t pad1 = data[i+18]; const int8_t pad2 = data[i+19]; if (pad1 != 0 || pad2 != 0) {Debug::error("padding error within WiFi scan result");} sensorData.entries.push_back(WiFiMeasurement(AccessPoint(bssid), rssi)); } // call listeners informListeners(sensorData); } }; #endif #endif // WIFISENSORANDROID_H