Browse Source

CHange IVSysMan for bq switch.

yuchuli 4 years ago
parent
commit
a803059fb8

+ 2 - 0
src/tool/IVSysMan/IVSysMan.pro

@@ -45,6 +45,7 @@ contains(QMAKE_HOST.os, Windows){
 
 
 SOURCES += \
+    ../../include/msgtype/switch.pb.cc \
         main.cpp \
         mainwindow.cpp \
     sysman.cpp \
@@ -58,6 +59,7 @@ SOURCES += \
     progunit.cpp
 
 HEADERS += \
+    ../../include/msgtype/switch.pb.h \
         mainwindow.h \
     sysman.h \
     progmon.h \

+ 104 - 0
src/tool/IVSysMan/mainwindow.cpp

@@ -1,6 +1,8 @@
 #include "mainwindow.h"
 #include "ui_mainwindow.h"
 
+#include <iostream>
+
 extern std::string gstrxmlpath;
 
 
@@ -10,6 +12,10 @@ extern iv::Ivlog  * ivlog;
 static bool gbupdate =  false;
 static std::string gstrivsyspath;
 
+static iv::Switch::settingsCmd  gsettingcmd;
+static bool gbupdatesetting = false;
+QMutex gMutexSetting;
+
 
 
 void ListenChange(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
@@ -23,6 +29,24 @@ void ListenChange(const char * strdata,const unsigned int nSize,const unsigned i
 
 }
 
+void ListenSysSwitch(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+    iv::Switch::settingsCmd x;
+    if(!x.ParseFromArray(strdata,nSize))
+    {
+        std::cout<<"ListenSysSwitch Parse error."<<std::endl;
+        return;
+    }
+    gMutexSetting.lock();
+    gsettingcmd.CopyFrom(x);
+    gbupdatesetting = true;
+    gMutexSetting.unlock();
+    (void)&index;
+    (void)dt;
+    (void)strmemname;
+
+}
+
 
 MainWindow::MainWindow(QWidget *parent) :
     QMainWindow(parent),
@@ -89,9 +113,14 @@ MainWindow::MainWindow(QWidget *parent) :
     mpivexit = iv::ivexit::RegIVExitCmd();
 
     mpa = iv::modulecomm::RegisterRecv("ivsyschange",ListenChange);
+    mpaswitch = iv::modulecomm::RegisterRecv("sys_switch",ListenSysSwitch);
     QTimer * timerchange = new QTimer(this);
     connect(timerchange,SIGNAL(timeout()),this,SLOT(onTimerChangeXML()));
     timerchange->start(100);
+
+    QTimer * timerswitch = new QTimer(this);
+    connect(timerswitch,SIGNAL(timeout()),this,SLOT(onTimerSysSwitch()));
+    timerswitch->start(50);
 }
 
 MainWindow::~MainWindow()
@@ -239,4 +268,79 @@ void MainWindow::ChangeXML(std::string strxmlpath)
 //    pLabel->setGeometry(30,30,100,30);
 }
 
+void MainWindow::ProcdataAnalysisCmd(const iv::Switch::dataAnalysisCmd *pdataAnalysisCmd)
+{
+    if(pdataAnalysisCmd->mwrdataanalysismodule())
+    {
+        mPM->StartProc("driver_can_nvidia_agx");
+    }
+    else
+    {
+        mPM->StopProc("driver_can_nvidia_agx");
+    }
+    if(pdataAnalysisCmd->lidardataanalysismodule())
+    {
+        mPM->StartProc("driver_lidar_vlp32c");
+        mPM->StartProc("driver_lidar_vlp16","-s vlp16_left.yaml -n driver_lidar_vlp32_l");
+        mPM->StartProc("driver_lidar_vlp16","-s vlp16_right.yaml -n driver_lidar_vlp32_r");
+    }
+    else
+    {
+        mPM->StopProc("driver_lidar_vlp32c");
+        mPM->StopProc("driver_lidar_vlp16","-s vlp16_left.yaml -n driver_lidar_vlp32_l");
+        mPM->StopProc("driver_lidar_vlp16","-s vlp16_right.yaml -n driver_lidar_vlp32_r");
+    }
+    if(pdataAnalysisCmd->gpsimudataanalysismodule())
+    {
+        mPM->StartProc("detection_state_delphi_ins500d");
+    }
+    else
+    {
+        mPM->StartProc("detection_state_delphi_ins500d");
+    }
+}
+
+void MainWindow::ProcperceptualFusion(const iv::Switch::perceptualFusion *pperceptualFusion)
+{
+    if(pperceptualFusion->spaceregistrationmodule())
+    {
+        mPM->StartProc("driver_lidar_merge");
+    }
+    else
+    {
+        mPM->StopProc("driver_lidar_merge");
+    }
+    if(pperceptualFusion->fusionpositioningmodule())
+    {
+        mPM->StartProc("detection_ndt_matching_gpu_multi");
+    }
+    else
+    {
+        mPM->StopProc("detection_ndt_matching_gpu_multi");
+    }
+    if(pperceptualFusion->lidarandmayconstructmodule())
+    {
+        mPM->StartProc("adcndtmultimapping");
+    }
+    else
+    {
+        mPM->StopProc("adcndtmultimapping");
+    }
+}
+
+void MainWindow::onTimerSysSwitch()
+{
+    if(gbupdatesetting == false)return;
+    iv::Switch::settingsCmd pswitch;
+
+    gMutexSetting.lock();
+    pswitch.CopyFrom(gsettingcmd);
+    gbupdatesetting = false;
+    gMutexSetting.unlock();
+
+    iv::Switch::fucSetControlCmd xcmd = pswitch.fucsetcontrol();
+    ProcdataAnalysisCmd(&xcmd.dataanalysis());
+    ProcperceptualFusion(&xcmd.perceptualfusion());
+}
+
 

+ 9 - 0
src/tool/IVSysMan/mainwindow.h

@@ -18,6 +18,8 @@
 
 #include "modulecomm.h"
 
+#include "switch.pb.h"
+
 namespace Ui {
 class MainWindow;
 }
@@ -54,6 +56,8 @@ private slots:
 
     void onTimerChangeXML();
 
+    void onTimerSysSwitch();
+
 
 
 private:
@@ -69,6 +73,8 @@ private:
 
     void * mpivexit;
 
+    void * mpaswitch;
+
     int mnTestIndex = 0;
 
     void * mpa;
@@ -76,6 +82,9 @@ private:
 public:
     void ChangeXML(std::string strxmlpath);
 
+    void ProcdataAnalysisCmd(const iv::Switch::dataAnalysisCmd * pdataAnalysisCmd);
+    void ProcperceptualFusion(const iv::Switch::perceptualFusion * pperceptualFusion);
+
 
 
     //add tjc

+ 65 - 0
src/tool/IVSysMan/progmon.cpp

@@ -318,8 +318,68 @@ void ProgMon::restartProc(ProgUnit *pu){
     ivlog->info("start program: AppGroup - %s; AppDir - %s; AppName - %s; StartArgs - %s;", pu->strgroup.c_str(), pu->strappdir.c_str(), pu->strappname.c_str(), pu->strargs.c_str());
 }
 
+ProgUnit * ProgMon::FindProcByName(std::string strappname, std::string strargs)
+{
+    ProgUnit * pu = 0;
+    int i;
+    int nsize =  mvectorprog.size();
+    for(i=0;i<nsize;i++)
+    {
+        ProgUnit * putem = &mvectorprog.at(i);
+        if(strargs.size()<1)
+        {
+            if(strappname == putem->strappname)
+            {
+                pu = putem;
+                break;
+            }
+        }
+        else
+        {
+            if((strappname == putem->strappname)&&(strargs == putem->strargs))
+            {
+                pu = putem;
+                break;
+            }
+        }
+    }
+
+    return pu;
+}
+
+void ProgMon::StartProc(std::string strappname, std::string strargs)
+{
+    ProgUnit * pu = FindProcByName(strappname,strargs);
+
+    if(pu == 0)
+    {
+        qDebug("StartProc can't find app = %s args = %s",strappname.data(),strargs.data());
+        return;
+    }
+
+    StartProc(pu);
+}
+
+void ProgMon::StopProc(std::string strappname, std::string strargs)
+{
+    ProgUnit * pu = FindProcByName(strappname,strargs);
+
+    if(pu == 0)
+    {
+        qDebug("StopProc can't find app = %s args = %s",strappname.data(),strargs.data());
+        return;
+    }
+
+    StopProc(pu);
+}
+
 void ProgMon::StartProc(ProgUnit *pu)
 {
+    if(pu->mbRun)
+    {
+        qDebug("process %s is running. not need start.",pu->strappname.data());
+        return;
+    }
     pu->mProcess = new QProcess(this);
 
     connect(pu->mProcess,SIGNAL(started()),this,SLOT(onProcessStarted()));
@@ -352,6 +412,11 @@ void ProgMon::StopProc(ProgUnit *pu)
 {
     if(pu == 0)return;
     if(pu->mProcess == 0)return;
+    if(!pu->mbRun)
+    {
+        qDebug("process %s is not running. not need stop.",pu->strappname.data());
+        return;
+    }
     pu->mProcess->kill();
     if(!checkStartState(pu)){
         return;

+ 5 - 0
src/tool/IVSysMan/progmon.h

@@ -62,9 +62,14 @@ public:
 
     std::vector<ProgUnit> loadprogunit(std::string path);
 
+    void StartProc(std::string strappname,std::string strargs="");
+    void StopProc(std::string strappname,std::string strargs="");
+
 private:
     QMutex mMutex;
 
+    ProgUnit * FindProcByName(std::string strappname,std::string strargs);
+
 signals:
     /* Signal when proc started */
     void SigProcStarted(ProgUnit * pu);