From 837e8438db1a2fe60d91e93ccbc335631f0cfd1f Mon Sep 17 00:00:00 2001
From: rhunt <rhunt@iastate.edu>
Date: Sun, 27 Mar 2022 20:50:55 +0200
Subject: [PATCH] merged

---
 groundStation/gui/MicroCART/mainwindow.cpp | 217 ++++++++++++++++++---
 groundStation/gui/MicroCART/mainwindow.h   |   2 +
 groundStation/gui/MicroCART/mainwindow.ui  |   5 +-
 3 files changed, 191 insertions(+), 33 deletions(-)

diff --git a/groundStation/gui/MicroCART/mainwindow.cpp b/groundStation/gui/MicroCART/mainwindow.cpp
index ff500b528..c82b64746 100644
--- a/groundStation/gui/MicroCART/mainwindow.cpp
+++ b/groundStation/gui/MicroCART/mainwindow.cpp
@@ -1,6 +1,9 @@
 #include "mainwindow.h"
 #include "ui_mainwindow.h"
 
+#include <bits/stdc++.h>
+#include <math.h>
+
 #include <QFileDialog>
 #include <QDesktopServices>
 #include <QMessageBox>
@@ -288,23 +291,16 @@ void MainWindow::updatePosAtt()
     // emit(getNodeOutput(ui->yAttitudeSelect->currentText()));
 }
 
-void MainWindow::updateTracker(float x, float y, float z, float p, float r, float yaw)
+void MainWindow::updateTracker(float thrust, float pitch, float roll, float yaw, float pitchRate, float rollRate, float yawRate)
 {
-    // ui->xActual->setText(QString::number(x));
-    // ui->yActual->setText(QString::number(y));
-    // ui->zActual->setText(QString::number(z));
-    ui->currPitchActual->setText(QString::number(p));
-    ui->currRollActual->setText(QString::number(r));
+    ui->currThrustActual->setText(QString::number(thrust));
+    ui->currPitchActual->setText(QString::number(pitch));
+    ui->currRollActual->setText(QString::number(roll));
     ui->currYawActual->setText(QString::number(yaw));
-
-    //float dist = sqrt(pow(x - sp_x, 2.0) + pow(y - sp_y, 2.0) + pow(z - sp_z, 2.0));
-
-    // ui->dist->setText(QString::number(dist));
-
-    // if (!nextSpTimer->isActive() && ui->autonavEnabled->isChecked() &&
-    //         (dist < ui->autonavThreshold->text().toFloat())) {
-    //     nextSpTimer->start(ui->autonavDelay->text().toInt());
-    // }
+    ui->currPitchRateActual->setText(QString::number(pitchRate));
+    ui->currRollRateActual->setText(QString::number(rollRate));
+    ui->currYawRateActual->setText(QString::number(yawRate));
+    
 }
 
 void MainWindow::on_pbStart_clicked()
@@ -1059,35 +1055,183 @@ void MainWindow::on_gamepadPitchScale_valueChanged(int arg1)
 
 void MainWindow::graphLogs(QStringList logs)
 {   
+    qInfo() << "start" << endl;
+
+    ui->dataPlot->addGraph();
+    ui->dataPlot->addGraph();
+    ui->dataPlot->addGraph();
+    ui->dataPlot->addGraph();
+    ui->dataPlot->addGraph();
+
     ui->dataPlot->graph(0)->setPen(QPen(Qt::blue)); 
     ui->dataPlot->graph(1)->setPen(QPen(Qt::red)); 
     ui->dataPlot->graph(2)->setPen(QPen(Qt::green)); 
     ui->dataPlot->graph(3)->setPen(QPen(Qt::black)); 
-    //ui->dataPlot->graph(4)->setPen(QPen(Qt::purple)); 
-
+    ui->dataPlot->graph(4)->setPen(QPen(Qt::yellow)); 
+    
+    qInfo() << "color" << endl;
 
     //parse data and put into vector
-    QVector<float> x0(logs.size()), y0(logs.size());
-    QVector<float> x1(logs.size()), y1(logs.size());
-    QVector<float> x2(logs.size()), y2(logs.size());
-    QVector<float> x3(logs.size()), y3(logs.size());
-    QVector<float> x4(logs.size()), y4(logs.size());
+    QVector<double> x0(logs.size()), y0(logs.size());
+    QVector<double> x1(logs.size()), y1(logs.size());
+    QVector<double> x2(logs.size()), y2(logs.size());
+    QVector<double> x3(logs.size()), y3(logs.size());
+    QVector<double> x4(logs.size()), y4(logs.size());
 
-    for(int i=0; i< logs.size(); i++) {
+    qInfo() << "vector size" << endl;
+
+    QVector<std::string> tempConv;
+    
+    for(int i=0; i<logs.size(); i++) {
+        qInfo() << "i:" << i << endl;
+        tempConv.append(logs.at(i).toStdString());
+    }
+    qInfo() << QString::fromStdString(tempConv.at(0)) << endl;
+    qInfo() << QString::fromStdString(tempConv.at(1)) << endl;
+
+    float xmax = -INFINITY;
+    float ymax = -INFINITY;
+    float ymin = INFINITY;
+    bool log0 = true;
+    bool log1 = true;
+    bool log2 = true;
+    bool log3 = true;
+    bool log4 = true;
+
+    for(int i=0; i<logs.size(); i++) {
         //use tokenizer here
+        std::vector <std::string> tokens;
+        std::stringstream check1(tempConv.at(i));
+        std::string intermediate;
+        while(getline(check1, intermediate, ',')) {
+            tokens.push_back(intermediate);
+        }
+        
+        qInfo() << logs.size() << endl;
+        qInfo() << "tokens " << i << " :\n " << endl;
+        qInfo() << QString::fromStdString(tokens[0]) << endl;
+        qInfo() << QString::fromStdString(tokens[1]) << endl;
+        qInfo() << QString::fromStdString(tokens[2]) << endl;
+        qInfo() << QString::fromStdString(tokens[3]) << endl;
+        qInfo() << QString::fromStdString(tokens[4]) << endl;
+        qInfo() << QString::fromStdString(tokens[5]) << endl;
+
+        //assign x and y values for log variables
+        if(tokens[1] != "NULL") {
+            x0[i] = std::stod(tokens[0]);
+            y0[i] = std::stod(tokens[1]);
+            if(y0[i]<ymin) {
+                ymin = y0[i];
+            }
+            if(y0[i]>ymax) {
+                ymax = y0[i];
+            }
+            if(i == logs.size()-1) {
+                xmax = x0[i];
+            }
+        }
+        else {
+            log0 = false;
+        }
+
+        qInfo() << ymin << endl;
+
+        if(tokens[2] != "NULL") {
+            x1[i] = std::stod(tokens[0]);
+            y1[i] = std::stod(tokens[2]);
+            if(y1[i]<ymin) {
+                ymin = y1[i];
+            }
+            if(y1[i]>ymax) {
+                ymax = y1[i];
+            }
+            if(i == logs.size()-1) {
+                xmax = x1[i];
+            }
+        }
+        else {
+            log1 = false;
+        }
+        if(tokens[3] != "NULL") {
+            x2[i] = std::stod(tokens[0]);
+            y2[i] = std::stod(tokens[3]);
+            if(y2[i]<ymin) {
+                ymin = y2[i];
+             }
+             if(y2[i]>ymax) {
+                ymax = y2[i];
+             }
+            if(i == logs.size()-1) {
+                xmax = x2[i];
+            }
+        }
+        else {
+            log2 = false;
+        }
+        if(tokens[4] != "NULL") {
+            x3[i] = std::stod(tokens[0]);
+            y3[i] = std::stod(tokens[4]);
+            if(y3[i]<ymin) {
+                ymin = y3[i];
+            }
+            if(y3[i]>ymax) {
+                ymax = y3[i];
+            }
+            if(i == logs.size()-1) {
+                xmax = x3[i];
+            }
+        }
+        else {
+            log3 = false;
+        }
+        if(tokens[5] != "NULL") {
+            x4[i] = std::stod(tokens[0]);
+            y4[i] = std::stod(tokens[5]);
+            if(y4[i]<ymin) {
+                ymin = y4[i];
+            }
+            if(y4[i]>ymax) {
+                ymax = y4[i];
+            }
+            if(i == logs.size()-1) {
+                xmax = x4[i];
+            }
+        }
+        else {
+            log4 = false;
+        }
+        qInfo() << "i: " << i << endl;
     }
 
+    qInfo() << "yMin: " << ymin << endl;
+    qInfo() << "yMax: " << ymax << endl;
+    qInfo() << "xMax: " << xmax << endl;
+    qInfo() << x0 << endl;
+    qInfo() << y0 << endl;
+
     //start graph and set data
-    ui->dataPlot->addGraph();
-   // ui->dataPlot->graph(0)->setData(x0, y0);
+    
+    if(log0) {
+        ui->dataPlot->graph(0)->setData(x0, y0);
+    }
+    if(log1) {
+        ui->dataPlot->graph(1)->setData(x1, y1);
+    }
+    if(log2) {
+        ui->dataPlot->graph(2)->setData(x2, y2);
+    }
+    if(log3) {
+        ui->dataPlot->graph(3)->setData(x3, y3);
+    }
+    if(log4) {
+        ui->dataPlot->graph(4)->setData(x4, y4);
+    }
 
     //set lables and boundaries
-    ui->dataPlot->xAxis->setLabel("time");
-    ui->dataPlot->yAxis->setLabel("angle");
-
-    ui->dataPlot->xAxis->setRange(0, 1);
-    ui->dataPlot->yAxis->setRange(0, 360);
-
+    ui->dataPlot->xAxis->setLabel("Time");
+    ui->dataPlot->yAxis->setLabel("Value");
+    ui->dataPlot->xAxis->setRange(0, xmax);
+    ui->dataPlot->yAxis->setRange(ymin, ymax);
     ui->dataPlot->replot();
 }
 
@@ -1308,4 +1452,13 @@ void MainWindow::getLogEntryBoxChange5(QString text) {
            ui->logEntriesComboBox1->removeItem(idx);
         }
     }
-}
\ No newline at end of file
+}
+
+void MainWindow::on_pb_stopLog_clicked()
+{
+    
+    qInfo() << "Hello?" << endl;
+    QStringList test = {"0,10,50,25,NULL,NULL","1,NULL,NULL,NULL,NULL,NULL"};
+    graphLogs(test);
+
+}
diff --git a/groundStation/gui/MicroCART/mainwindow.h b/groundStation/gui/MicroCART/mainwindow.h
index 843c614e4..660cbef6b 100644
--- a/groundStation/gui/MicroCART/mainwindow.h
+++ b/groundStation/gui/MicroCART/mainwindow.h
@@ -172,6 +172,8 @@ private slots:
     void getLogEntryBoxChange4(QString text);
     void getLogEntryBoxChange5(QString text);
 
+    void on_pb_stopLog_clicked();
+
 private:
     Ui::MainWindow *ui;
     QStandardItemModel * setpointList;
diff --git a/groundStation/gui/MicroCART/mainwindow.ui b/groundStation/gui/MicroCART/mainwindow.ui
index b8e8daee5..64b5edd94 100644
--- a/groundStation/gui/MicroCART/mainwindow.ui
+++ b/groundStation/gui/MicroCART/mainwindow.ui
@@ -339,6 +339,9 @@
           <height>26</height>
          </rect>
         </property>
+        <property name="decimals">
+         <number>3</number>
+        </property>
        </widget>
       </widget>
       <widget class="QWidget" name="Gamepad">
@@ -1229,7 +1232,7 @@
               <item row="0" column="0">
                <widget class="QLabel" name="tsLabel">
                 <property name="text">
-                 <string>TS: </string>
+                 <string>Curent Thrust:</string>
                 </property>
                </widget>
               </item>
-- 
GitLab