From f08f71e7475eb71ceca6a99a32742a576cd6d97c Mon Sep 17 00:00:00 2001 From: Markus Bullmann Date: Sat, 9 Nov 2019 12:32:12 +0100 Subject: [PATCH] Added timeout feature --- Manager.cpp | 14 ++++++++++---- Manager.h | 14 ++++++++++++-- main.qml | 50 ++++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 64 insertions(+), 14 deletions(-) diff --git a/Manager.cpp b/Manager.cpp index 33e01b7..3d8540e 100644 --- a/Manager.cpp +++ b/Manager.cpp @@ -56,13 +56,13 @@ void Manager::test() { } bool Manager::trigger() { - if (isRunning) { + if (_isRunning) { stop(); } else { start(); } - return isRunning; + return _isRunning; } void Manager::start() { @@ -107,7 +107,8 @@ void Manager::start() { //QAndroidJniObject::callStaticMethod("android/net/wifi/UWB", "start", "()I"); QAndroidJniObject::callStaticMethod("android/net/wifi/RTT", "start", "()I"); - isRunning = true; + _isRunning = true; + emit isRunningChanged(); #else std::random_device rd; std::mt19937 gen{rd()}; @@ -144,7 +145,8 @@ void Manager::stop() { ftmLogger = nullptr; } - isRunning = false; + _isRunning = false; + emit isRunningChanged(); } int Manager::runTimeInMs() const { @@ -184,6 +186,10 @@ void Manager::onWifiData(WifiRttResult result) { << endl; } } + + if (_maxRuntime != 0 && runTimeInMs() > _maxRuntime) { + stop(); + } } void Manager::onUWBData(std::vector data) { diff --git a/Manager.h b/Manager.h index d9b2130..ef20cc9 100644 --- a/Manager.h +++ b/Manager.h @@ -40,14 +40,18 @@ private: float _uwbDist[4]; - bool isRunning = false; + bool _isRunning = false; bool _logToDisk = false; + int _maxRuntime = 0; std::shared_ptr ftmLogger; public: + Q_PROPERTY(bool isRunning READ getIsRunning NOTIFY isRunningChanged) Q_PROPERTY(bool logToDisk READ getLogToDisk WRITE setLogToDisk NOTIFY logToDiskChanged) + Q_PROPERTY(int maxRuntime READ getMaxRuntime WRITE setMaxRuntime) + Q_PROPERTY(float uwbDist1 READ getUwbDist1() NOTIFY uwbDistChanged) Q_PROPERTY(float uwbDist2 READ getUwbDist2() NOTIFY uwbDistChanged) Q_PROPERTY(float uwbDist3 READ getUwbDist3() NOTIFY uwbDistChanged) @@ -66,11 +70,16 @@ public: void onWifiData(WifiRttResult result); void onUWBData(std::vector data); -public: +private: + + bool getIsRunning() const { return _isRunning; } bool getLogToDisk() const { return _logToDisk; } void setLogToDisk(bool v) { _logToDisk = v; emit logToDiskChanged(v); } + int getMaxRuntime() const { return _maxRuntime; } + void setMaxRuntime(int value) { _maxRuntime = value; } + float getUwbDist1() {return _uwbDist[0];} float getUwbDist2() {return _uwbDist[1];} float getUwbDist3() {return _uwbDist[2];} @@ -81,6 +90,7 @@ signals: void uwbDistChanged(); void newDistMeas(int idx, int value); void logToDiskChanged(bool newValue); + void isRunningChanged(); public: diff --git a/main.qml b/main.qml index 98b17e4..903e9de 100644 --- a/main.qml +++ b/main.qml @@ -26,6 +26,21 @@ Window { lblRunTime.text = "Time: " + (mgmt.runTimeInMs() / 1000.0).toFixed(0) + "s"; } } + + onIsRunningChanged: { + if (mgmt.isRunning) { + // running + btnTrigger.text = "Stop"; + cbNUC.enabled = false; + cbLogToDisk.enabled = false; + cbMeasTime.enabled = false; + } else { + btnTrigger.text = "Start"; + cbNUC.enabled = true; + cbLogToDisk.enabled = true; + cbMeasTime.enabled = true; + } + } } GridLayout { @@ -39,32 +54,51 @@ Window { ComboBox { id: cbNUC; height: 60; + width: 85; model: ["NUC1", "NUC2", "NUC3", "NUC4", "NUC5"]; onCurrentIndexChanged: { chart.reset(); } } + + ComboBox { + id: cbMeasTime; + height: 60; + width: 85; + model: ["Inf", "5s", "10s", "30s", "60s", "120s"]; + onCurrentIndexChanged: { + chart.reset(); + + var maxRuntime = 0; + + switch(currentIndex) { + case 0: maxRuntime = 0; break; + case 1: maxRuntime = 5; break; + case 2: maxRuntime = 10; break; + case 3: maxRuntime = 30; break; + case 4: maxRuntime = 60; break; + case 5: maxRuntime = 120; break; + } + + mgmt.maxRuntime = maxRuntime * 1000; + } + } + Button { id: btnTrigger; text: "Start"; height: 60; onClicked: { - if (mgmt.trigger()) { - // running - btnTrigger.text = "Stop"; - cbLogToDisk.enabled = false; - } else { - btnTrigger.text = "Start"; - cbLogToDisk.enabled = true; - } + mgmt.trigger(); } } Button { text: "Reset"; height: 60; + width: 60; onClicked: { chart.reset();