Added data logger (again)

This commit is contained in:
2019-11-09 12:06:59 +01:00
parent f377535ed8
commit 257d076668
4 changed files with 85 additions and 4 deletions

View File

@@ -28,7 +28,7 @@ const std::string NUC5 = "d0:c6:37:bc:5c:41";
static long long startTime = 0; static long long startTime = 0;
static QString GetCurrentTimeForFileName() static QString getCurrentTimeForFileName()
{ {
auto time = std::time(nullptr); auto time = std::time(nullptr);
std::stringstream ss; std::stringstream ss;
@@ -66,8 +66,43 @@ bool Manager::trigger() {
} }
void Manager::start() { void Manager::start() {
if (_logToDisk) {
QString folder = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation) + "/ftm/";
QString prefix = getCurrentTimeForFileName();
ftmLogger = std::make_shared<QFile>(folder+"/"+prefix+"_ftm.txt");
if (!ftmLogger->exists()) {
// create the folder, if necessary
QDir dir(folder);
if (!dir.exists()) {
qWarning("creating new folder");
if (!dir.mkpath(".")) {
qWarning() << "Failed to create new folder";
}
}
}
if (!ftmLogger->open(QIODevice::ReadWrite)) {
qWarning() << "Failed to create data logger file" << ftmLogger->fileName();
ftmLogger = nullptr;
}
// write header
if (ftmLogger) {
QTextStream out(ftmLogger.get());
out << "timeInMS;" << "MAC;" << "NucIdx;" << "Success;"
<< "DistMM;" << "DistStdDevMM;" << "Rssi;" << "NumSuccessfullMeas;" << "NumAttemptedMeas"
<< endl;
}
} else {
ftmLogger = nullptr;
}
startTime = nowInMsec(); startTime = nowInMsec();
#ifdef ANDROID #ifdef ANDROID
//QAndroidJniObject::callStaticMethod<int>("android/net/wifi/UWB", "start", "()I"); //QAndroidJniObject::callStaticMethod<int>("android/net/wifi/UWB", "start", "()I");
QAndroidJniObject::callStaticMethod<int>("android/net/wifi/RTT", "start", "()I"); QAndroidJniObject::callStaticMethod<int>("android/net/wifi/RTT", "start", "()I");
@@ -91,6 +126,8 @@ void Manager::start() {
onWifiData(res); onWifiData(res);
} }
stop();
#endif #endif
} }
@@ -101,6 +138,12 @@ void Manager::stop() {
//QAndroidJniObject::callStaticMethod<int>("android/net/wifi/UWB", "stop", "()I"); //QAndroidJniObject::callStaticMethod<int>("android/net/wifi/UWB", "stop", "()I");
#endif #endif
if (ftmLogger) {
ftmLogger->flush();
ftmLogger->close();
ftmLogger = nullptr;
}
isRunning = false; isRunning = false;
} }
@@ -125,6 +168,21 @@ void Manager::onWifiData(WifiRttResult result) {
if(NUC5 == result.mac) {nucIdx = 4;} if(NUC5 == result.mac) {nucIdx = 4;}
emit newDistMeas(nucIdx, result.distMM); emit newDistMeas(nucIdx, result.distMM);
if (ftmLogger) {
QTextStream out(ftmLogger.get());
out << result.timeMS << ";"
<< QString::fromStdString(result.mac) << ";"
<< nucIdx << ";"
<< result.success << ";"
<< result.distMM << ";"
<< result.distStdDevMM << ";"
<< result.rssi << ";"
<< result.numSuccessfullMeas << ";"
<< result.numAttemptedMeas
<< endl;
}
} }
} }

View File

@@ -41,8 +41,13 @@ private:
float _uwbDist[4]; float _uwbDist[4];
bool isRunning = false; bool isRunning = false;
bool _logToDisk = false;
std::shared_ptr<QFile> ftmLogger;
public: public:
Q_PROPERTY(bool logToDisk READ getLogToDisk WRITE setLogToDisk NOTIFY logToDiskChanged)
Q_PROPERTY(float uwbDist1 READ getUwbDist1() NOTIFY uwbDistChanged) Q_PROPERTY(float uwbDist1 READ getUwbDist1() NOTIFY uwbDistChanged)
Q_PROPERTY(float uwbDist2 READ getUwbDist2() NOTIFY uwbDistChanged) Q_PROPERTY(float uwbDist2 READ getUwbDist2() NOTIFY uwbDistChanged)
Q_PROPERTY(float uwbDist3 READ getUwbDist3() NOTIFY uwbDistChanged) Q_PROPERTY(float uwbDist3 READ getUwbDist3() NOTIFY uwbDistChanged)
@@ -63,6 +68,9 @@ public:
public: public:
bool getLogToDisk() const { return _logToDisk; }
void setLogToDisk(bool v) { _logToDisk = v; emit logToDiskChanged(v); }
float getUwbDist1() {return _uwbDist[0];} float getUwbDist1() {return _uwbDist[0];}
float getUwbDist2() {return _uwbDist[1];} float getUwbDist2() {return _uwbDist[1];}
float getUwbDist3() {return _uwbDist[2];} float getUwbDist3() {return _uwbDist[2];}
@@ -71,7 +79,8 @@ public:
signals: signals:
void uwbDistChanged(); void uwbDistChanged();
void newDistMeas(int idx, int value); void newDistMeas(int idx, int value);
void logToDiskChanged(bool newValue);
public: public:

View File

@@ -66,7 +66,7 @@ public:
qreal mean() const { return stats.getMean(); } qreal mean() const { return stats.getMean(); }
qreal stdDev() const { return stats.getStdDev(); } qreal stdDev() const { return stats.getStdDev(); }
int totalCount() const { return stats.getCount(); } int totalCount() const { return stats.getCount(); }
qreal maxBinValue() const { return maxBinIndex * binWidth(); } qreal maxBinValue() const { return minValue + (maxBinIndex * binWidth()); }
void paint(QPainter *painter); void paint(QPainter *painter);

View File

@@ -38,6 +38,7 @@ Window {
ComboBox { ComboBox {
id: cbNUC; id: cbNUC;
height: 60;
model: ["NUC1", "NUC2", "NUC3", "NUC4", "NUC5"]; model: ["NUC1", "NUC2", "NUC3", "NUC4", "NUC5"];
onCurrentIndexChanged: { onCurrentIndexChanged: {
chart.reset(); chart.reset();
@@ -47,23 +48,36 @@ Window {
Button { Button {
id: btnTrigger; id: btnTrigger;
text: "Start"; text: "Start";
height: 60;
onClicked: { onClicked: {
if (mgmt.trigger()) { if (mgmt.trigger()) {
// running // running
btnTrigger.text = "Stop"; btnTrigger.text = "Stop";
cbLogToDisk.enabled = false;
} else { } else {
btnTrigger.text = "Start"; btnTrigger.text = "Start";
cbLogToDisk.enabled = true;
} }
} }
} }
Button { Button {
text: "Reset" text: "Reset";
height: 60;
onClicked: { onClicked: {
chart.reset(); chart.reset();
chart.update(); chart.update();
} }
} }
CheckBox {
id: cbLogToDisk;
text: "Log";
onClicked: mgmt.logToDisk = checked
}
} }
Row { Row {