Procházet zdrojové kódy

add netparse & calculate process

xuqiang před 4 měsíci
rodič
revize
965dce38e4

+ 6 - 1
include/appcontext.h

@@ -8,6 +8,8 @@
 #include "serialport.h"
 #include "httpserver.h"
 #include "datafifo.h"
+#include "netparseprocess.h"
+#include "calprocess.h"
 
 class AppContext : public QObject
 {
@@ -24,6 +26,8 @@ public:
     SerialPort &serialPort();
     HttpServer &httpServer();
     DataFifo &dataFifo();
+    NetParseProcess &netParseProcess();
+    CalProcess &calProcess();
 
 private:
     PluginManager m_pluginMgr;
@@ -32,7 +36,8 @@ private:
     SerialPort m_serialPort;
     HttpServer m_httpServer;
     DataFifo m_dataFifo;
-
+    NetParseProcess m_netParseProcess;
+    CalProcess m_calProcess;
 };
 
 #endif  // APPCONTEXT_H

+ 28 - 0
include/calprocess.h

@@ -0,0 +1,28 @@
+#ifndef __CALPROCESS_H__
+#define __CALPROCESS_H__
+
+#include <QObject>
+#include <QProcess>
+#include <QTimer>
+
+class CalProcess : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit CalProcess(QObject *parent = nullptr);
+    ~CalProcess();
+
+    void start(const QString &configure, const QString &fifo1, const QString &fifo2);
+    void stop();
+    void restart(const QString &configure, const QString &fifo1, const QString &fifo2);
+
+    bool isRunning();
+
+private:
+    QProcess m_process;
+    QTimer m_timer;
+
+};
+
+#endif  // CALPROCESS_H

+ 28 - 0
include/netparseprocess.h

@@ -0,0 +1,28 @@
+#ifndef __NETPARSEPROCESS_H__
+#define __NETPARSEPROCESS_H__
+
+#include <QObject>
+#include <QProcess>
+#include <QTimer>
+
+class NetParseProcess : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit NetParseProcess(QObject *parent = nullptr);
+    ~NetParseProcess();
+
+    void start(const QString &configure, const QString &fifo);
+    void stop();
+    void restart(const QString &configure, const QString &fifo);
+
+    bool isRunning();
+
+private:
+    QProcess m_process;
+    QTimer m_timer;
+
+};
+
+#endif  // NETPARSEPROCESS_H

+ 17 - 1
src/appcontext.cpp

@@ -1,11 +1,17 @@
 #include "appcontext.h"
 #include <QDir>
 #include <QDebug>
+#include "defs.h"
 
 AppContext::AppContext(QObject *parent)
     : QObject{parent}
 {
-
+    connect(&m_httpServer, &HttpServer::netparseConfigureUpdate, this, [this](const QString &filename){
+        m_netParseProcess.restart(filename, NETPARSE_FIFO_PATH);
+    });
+    connect(&m_httpServer, &HttpServer::formulaConfigureUpdate, this, [this](const QString &filename){
+        m_calProcess.restart(filename, NETPARSE_FIFO_PATH, CALCULATE_FIFO_PATH);
+    });
 }
 
 AppContext::~AppContext()
@@ -48,3 +54,13 @@ DataFifo &AppContext::dataFifo()
 {
     return m_dataFifo;
 }
+
+NetParseProcess &AppContext::netParseProcess()
+{
+    return m_netParseProcess;
+}
+
+CalProcess &AppContext::calProcess()
+{
+    return m_calProcess;
+}

+ 83 - 0
src/calprocess.cpp

@@ -0,0 +1,83 @@
+#include "calprocess.h"
+#include "logger.h"
+#include "defs.h"
+
+#include <QSettings>
+#include <QMetaEnum>
+
+CalProcess::CalProcess(QObject *parent)
+{
+    // start("/home/forlinx/Desktop/workspace/TPMFM-A/extracted_params20251205.xml", NETPARSE_FIFO_PATH, CALCULATE_FIFO_PATH);
+
+    QSettings settings("storage/conf/settings.ini", QSettings::IniFormat);
+    settings.setIniCodec("UTF-8");
+    settings.beginGroup("CONFIGURE");
+    if(settings.contains("CALCULATE"))
+        start(settings.value("CALCULATE").toString(), NETPARSE_FIFO_PATH, CALCULATE_FIFO_PATH);
+    settings.endGroup();
+
+    connect(&m_timer, &QTimer::timeout, this, [this](){
+        QString state = QMetaEnum::fromType<QProcess::ProcessState>().valueToKey(m_process.state());
+        QString error = QMetaEnum::fromType<QProcess::ProcessError>().valueToKey(m_process.error());
+        // LOG_INFO("calculate process state: {}, {}", static_cast<int>(m_process.state()), static_cast<int>(m_process.error()));
+        LOG_INFO("calculate process state: {}, error: {}", state.toStdString(), error.toStdString());
+    });
+    m_timer.start(2000);
+}
+
+CalProcess::~CalProcess()
+{
+    stop();
+}
+
+void CalProcess::start(const QString &configure, const QString &fifo1, const QString &fifo2)
+{
+    if (m_process.state() != QProcess::NotRunning) {
+        LOG_WARN("netparse is already running!");
+        return;
+    }
+
+    LOG_INFO("calculate process configure: {}", configure.toStdString());
+
+    QString program = "/usr/bin/python";
+    QStringList args;
+    args << "/home/forlinx/Desktop/workspace/dataParsing/formula_calculation.py";
+    args << configure;
+    args << fifo1;
+    args << fifo2;
+
+    LOG_INFO("calculate process args: {}", args.join(" ").toStdString());
+
+    // save formula configure file path
+    QSettings settings("storage/conf/settings.ini", QSettings::IniFormat);
+    settings.setIniCodec("UTF-8");
+    settings.beginGroup("CONFIGURE");
+    settings.setValue("CALCULATE", configure);
+    settings.endGroup();
+
+    m_process.start(program, args);
+}
+
+void CalProcess::stop()
+{
+    if (m_process.state() == QProcess::NotRunning) {
+        LOG_WARN("netparse is not running!");
+        return;
+    }
+
+    LOG_INFO("stopping netparse...");
+    m_process.kill();                // 强制终止
+    m_process.waitForFinished();     // 等待退出
+    LOG_INFO("netparse stopped.");
+}
+
+void CalProcess::restart(const QString &configure, const QString &fifo1, const QString &fifo2)
+{
+    stop();
+    start(configure, fifo1, fifo2);
+}
+
+bool CalProcess::isRunning()
+{
+    return m_process.state() != QProcess::NotRunning;
+}

+ 86 - 0
src/netparseprocess.cpp

@@ -0,0 +1,86 @@
+#include "netparseprocess.h"
+#include "logger.h"
+#include "defs.h"
+
+#include <QSettings>
+#include <QMetaEnum>
+
+NetParseProcess::NetParseProcess(QObject *parent)
+    : QObject{parent}
+{
+    QSettings settings("storage/conf/settings.ini", QSettings::IniFormat);
+    settings.setIniCodec("UTF-8");
+    settings.beginGroup("CONFIGURE");
+    if(settings.contains("NETPARSE"))
+        start(settings.value("NETPARSE").toString(), NETPARSE_FIFO_PATH);
+    settings.endGroup();
+
+    connect(&m_timer, &QTimer::timeout, this, [this](){
+        QString state = QMetaEnum::fromType<QProcess::ProcessState>().valueToKey(m_process.state());
+        QString error = QMetaEnum::fromType<QProcess::ProcessError>().valueToKey(m_process.error());
+        // LOG_INFO("netparse process state: {}, {}", static_cast<int>(m_process.state()), static_cast<int>(m_process.error()));
+        LOG_INFO("netparse process state: {}, error: {}", state.toStdString(), error.toStdString());
+    });
+    m_timer.start(2000);
+
+    // connect(&m_process, &QProcess::readyReadStandardOutput, this, [this](){
+    //     QByteArray output = m_process.readAllStandardOutput();
+    //     LOG_INFO(output.data());
+    // });
+}
+
+NetParseProcess::~NetParseProcess()
+{
+    stop();
+}
+
+void NetParseProcess::start(const QString &configure, const QString &fifo)
+{
+    if (m_process.state() != QProcess::NotRunning) {
+        LOG_WARN("netparse is already running!");
+        return;
+    }
+
+    LOG_INFO("netparse process configure: {}", configure.toStdString());
+
+    QString program = "/usr/bin/python";
+    QStringList args;
+    args << "/home/forlinx/Desktop/workspace/TPMFM-A/capture_mul.py";
+    args << configure;
+    args << fifo;
+
+    LOG_INFO("netparse process args: {}", args.join(" ").toStdString());
+
+    // save netparse configure file path
+    QSettings settings("storage/conf/settings.ini", QSettings::IniFormat);
+    settings.setIniCodec("UTF-8");
+    settings.beginGroup("CONFIGURE");
+    settings.setValue("NETPARSE", configure);
+    settings.endGroup();
+
+    m_process.start(program, args);
+}
+
+void NetParseProcess::stop()
+{
+    if (m_process.state() == QProcess::NotRunning) {
+        LOG_WARN("netparse is not running!");
+        return;
+    }
+
+    LOG_INFO("stopping netparse...");
+    m_process.kill();                // 强制终止
+    m_process.waitForFinished();     // 等待退出
+    LOG_INFO("netparse stopped.");
+}
+
+void NetParseProcess::restart(const QString &configure, const QString &fifo)
+{
+    stop();
+    start(configure, fifo);
+}
+
+bool NetParseProcess::isRunning()
+{
+    return m_process.state() != QProcess::NotRunning;
+}