Bläddra i källkod

update screen by fixed frequency

xuqiang 4 månader sedan
förälder
incheckning
9874daf4c4
9 ändrade filer med 88 tillägg och 11 borttagningar
  1. 3 0
      include/appcontext.h
  2. 24 0
      include/datadict.h
  3. 5 3
      include/mainwindow.h
  4. 1 1
      scripts/run.sh
  5. 5 0
      src/appcontext.cpp
  6. 25 0
      src/datadict.cpp
  7. 5 2
      src/datafifo.cpp
  8. 8 1
      src/main.cpp
  9. 12 4
      src/mainwindow.cpp

+ 3 - 0
include/appcontext.h

@@ -10,6 +10,7 @@
 #include "datafifo.h"
 #include "netparseprocess.h"
 #include "calprocess.h"
+#include "datadict.h"
 
 class AppContext : public QObject
 {
@@ -28,6 +29,7 @@ public:
     DataFifo &dataFifo();
     NetParseProcess &netParseProcess();
     CalProcess &calProcess();
+    DataDict &dataDict();
 
 private:
     PluginManager m_pluginMgr;
@@ -38,6 +40,7 @@ private:
     DataFifo m_dataFifo;
     NetParseProcess m_netParseProcess;
     CalProcess m_calProcess;
+    DataDict m_dataDict;
 };
 
 #endif  // APPCONTEXT_H

+ 24 - 0
include/datadict.h

@@ -0,0 +1,24 @@
+#ifndef __DATADICT_H__
+#define __DATADICT_H__
+
+#include <QObject>
+#include <QMap>
+#include <QJsonObject>
+
+class DataDict : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit DataDict(QObject *parent = nullptr);
+    ~DataDict();
+
+    void updateData(const QJsonObject data);
+    const QJsonObject data();
+
+private:
+    QJsonObject m_data;
+
+};
+
+#endif  // DATADICT_H

+ 5 - 3
include/mainwindow.h

@@ -13,7 +13,7 @@ class MainWindow : public QMainWindow
     Q_OBJECT
 
 public:
-    explicit MainWindow(QWidget *parent = nullptr);
+    explicit MainWindow(const int &frequency, QWidget *parent = nullptr);
     ~MainWindow();
 
 protected:
@@ -24,11 +24,13 @@ protected:
 
 private:
     QStackedWidget *m_pStackedWidget;
-    QTimer m_timer;
+    QTimer m_timer;     // 数据中断检测定时器
+    QTimer m_updateScreenTimer;     // 更新画面显示定时器
+    int m_frequency;                // 更新频率
     QLabel *m_pErrStrLabel;
 
 public slots:
-    void onUpdateScreen(const QJsonObject &obj);
+    void onUpdateScreen();
     void onPageSwitdh(int state);
     void onConfigureUpdate(const QString &filename);
     void onReloadCanvas();

+ 1 - 1
scripts/run.sh

@@ -9,4 +9,4 @@ export QT_QPA_PLATFORMTHEME=qt5ct
 
 # run
 export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH
-./bin/monitor
+./bin/monitor 32

+ 5 - 0
src/appcontext.cpp

@@ -66,3 +66,8 @@ CalProcess &AppContext::calProcess()
 {
     return m_calProcess;
 }
+
+DataDict &AppContext::dataDict()
+{
+    return m_dataDict;
+}

+ 25 - 0
src/datadict.cpp

@@ -0,0 +1,25 @@
+#include "datadict.h"
+
+DataDict::DataDict(QObject *parent)
+    : QObject{parent}
+{
+
+}
+
+DataDict::~DataDict()
+{
+
+}
+
+void DataDict::updateData(const QJsonObject data)
+{
+    QStringList keys = data.keys();
+    foreach(QString key, keys) {
+        m_data[key] = data[key];
+    }
+}
+
+const QJsonObject DataDict::data()
+{
+    return m_data;
+}

+ 5 - 2
src/datafifo.cpp

@@ -10,6 +10,7 @@
 #include <fcntl.h>
 #include "logger.h"
 #include "defs.h"
+#include "appcontext.h"
 
 DataFifo::DataFifo(QObject *parent)
     : QObject(parent)
@@ -49,6 +50,7 @@ const qint64 DataFifo::recvTimestamp()
 
 void DataFifo::doWork()
 {
+    DataDict &dataDict = AppContext::instance().dataDict();
     while(m_isRunning) {
         // 1. 创建 FIFO(如果已存在忽略错误)
         if (mkfifo(NETPARSE_FIFO_PATH, 0666) == -1) {
@@ -83,13 +85,14 @@ void DataFifo::doWork()
             n = getline(&line, &len, stream);
             if(n > 0) {
                 m_recvTimestamp = QDateTime::currentMSecsSinceEpoch();  // 更新接收数据时间戳
-                LOG_INFO("read size: {}, buffer size: {}, data: {}", n, len, line);
+                // LOG_INFO("read size: {}, buffer size: {}, data: {}", n, len, line);
                 QByteArray byteArray(line, n);
                 QJsonParseError error;
                 QJsonDocument doc = QJsonDocument::fromJson(byteArray, &error);
                 if(error.error == QJsonParseError::NoError && doc.isObject()) {
                     QJsonObject obj = doc.object();
-                    emit updateScreen(obj);
+                    dataDict.updateData(obj);
+                    // emit updateScreen(obj);
                 } else {
                     LOG_ERROR("data fifo: invalid json");
                 }

+ 8 - 1
src/main.cpp

@@ -28,9 +28,16 @@ int main(int argc, char *argv[])
     LOG_INFO("PROJECT_GIT_BRANCH:   {}", PROJECT_GIT_BRANCH);
     LOG_INFO("PROJECT_BUILD_TIME:   {}", PROJECT_BUILD_TIME);
 
+    if(argc != 2) {
+        LOG_ERROR("miss arg: frequency");
+        return -1;
+    }
+
+    int frequency = QString(argv[1]).toInt();
+
     AppContext &appCtx = AppContext::instance();
 
-    MainWindow w;
+    MainWindow w(frequency);
     w.resize(SCREEN_WIDTH, SCREEN_HEIGHT);
     w.showFullScreen();
 

+ 12 - 4
src/mainwindow.cpp

@@ -11,10 +11,11 @@
 #include <QDateTime>
 #include <time.h>
 
-MainWindow::MainWindow(QWidget *parent)
+MainWindow::MainWindow(const int &frequency, QWidget *parent)
     : QMainWindow(parent)
     , m_pStackedWidget(nullptr)
     , m_pErrStrLabel(nullptr)
+    , m_frequency(frequency)
 {
     setWindowFlags(Qt::FramelessWindowHint | Qt::Window);
     init_ui();
@@ -29,8 +30,8 @@ MainWindow::MainWindow(QWidget *parent)
     connect(&httpServer, &HttpServer::monitorConfigureUpdate, this, &MainWindow::onConfigureUpdate);
     connect(&httpServer, &HttpServer::reloadCanvas, this, &MainWindow::onReloadCanvas);
 
-    DataFifo &dataFifo = AppContext::instance().dataFifo();
-    connect(&dataFifo, &DataFifo::updateScreen, this, &MainWindow::onUpdateScreen);
+    // DataFifo &dataFifo = AppContext::instance().dataFifo();
+    // connect(&dataFifo, &DataFifo::updateScreen, this, &MainWindow::onUpdateScreen);
 
     connect(&m_timer, &QTimer::timeout, this, [this](){
         DataFifo &dataFifo = AppContext::instance().dataFifo();
@@ -62,6 +63,9 @@ MainWindow::MainWindow(QWidget *parent)
     });
 
     m_timer.start(1000);
+
+    connect(&m_updateScreenTimer, &QTimer::timeout, this, &MainWindow::onUpdateScreen);
+    m_updateScreenTimer.start(1000 / m_frequency);
 }
 
 MainWindow::~MainWindow()
@@ -159,12 +163,16 @@ void MainWindow::setCurrentCanvas(bool isNewComfigure)
     m_pStackedWidget->setCurrentIndex(index);
 }
 
-void MainWindow::onUpdateScreen(const QJsonObject &obj)
+void MainWindow::onUpdateScreen()
 {
     // QElapsedTimer timer;
     // timer.start(); // 开始计时
+    LOG_INFO("update screen");
 
     ProjectManager &projectMgr = AppContext::instance().projectManager();
+    DataDict &dataDict = AppContext::instance().dataDict();
+    const QJsonObject obj = dataDict.data();
+
     int canvasCount = projectMgr.canvasCount();
     QString timestamp = obj["timestamp"].toString();
     LOG_DEBUG("timestamp {}", timestamp.toStdString());