123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <QProcess>
- #include <QTimer>
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- apollo::cyber::Init("pilot_apollo_bridge_gui");
- pilot_node = apollo::cyber::CreateNode("pilot_apollo_bridge_gui");
- mpthreadtest = new std::thread(&MainWindow::threadtest,this);
- ui->pushButton_StartApollo->setEnabled(true);
- ui->pushButton_StopApollo->setEnabled(false);
- connect(&mProc,SIGNAL(readyReadStandardOutput()),this,SLOT(onReadStandardOutput()));
- connect(&mProc,SIGNAL(readyReadStandardError()),this,SLOT(onReadStandardError()));
- connect(&mProcNode,SIGNAL(readyReadStandardOutput()),this,SLOT(onReadStandardOutput()));
- connect(&mProcNode,SIGNAL(readyReadStandardError()),this,SLOT(onReadStandardError()));
- connect(&mProcNode,SIGNAL(finished(int)),this,SLOT(onProcessFinished(int)));
- connect(&mProcStopDreamview,SIGNAL(readyReadStandardOutput()),this,SLOT(onReadStandardOutput()));
- connect(&mProcStopDreamview,SIGNAL(readyReadStandardError()),this,SLOT(onReadStandardError()));
- connect(&mProcStopDreamview,SIGNAL(finished(int)),this,SLOT(onProcessFinished(int)));
- connect(&mProcStopMonitor,SIGNAL(readyReadStandardOutput()),this,SLOT(onReadStandardOutput()));
- connect(&mProcStopMonitor,SIGNAL(readyReadStandardError()),this,SLOT(onReadStandardError()));
- connect(&mProcStopMonitor,SIGNAL(finished(int)),this,SLOT(onProcessFinished(int)));
- std::string strxmlpath = "/apollo_workspace/code/xml/pilotlaunch.xml";
- //从配置文件中读取当前系统包含的所有模块信息-tjc
- mPM = new ProgMon(strxmlpath.data());
- // connect(mPM,SIGNAL(SigProcStarted(ProgUnit*)),this,SLOT(onProcessStarted(ProgUnit*)));
- // connect(mPM,SIGNAL(SigProcStoped(ProgUnit*)),this,SLOT(onProcessEnd(ProgUnit*)));
- setGeometry(0,0,800,600);
- QTabWidget * p = new QTabWidget(ui->centralwidget);
- p->setGeometry(30,150,800,450);
- mTabMain = p;
- CenterView * pcv = new CenterView(p,mPM);
- mpCV = pcv;
- connect(pcv,SIGNAL(ProgClick(ProgUnit*,ProgramViewUnit * ,bool)),this,SLOT(onProgClick(ProgUnit*,ProgramViewUnit * ,bool)));
- connect(pcv,SIGNAL(ProgLogClick(ProgUnit*,ProgramViewUnit*,bool)),this,SLOT(onProgLogClick(ProgUnit*,ProgramViewUnit*,bool)));
- mPM->start();
- QTimer * timer = new QTimer(this);
- connect(timer,SIGNAL(timeout()),this,SLOT(onTimerState()));
- timer->start(1000);
- setWindowTitle("Pilot Apollo Bridge GUI");
- }
- MainWindow::~MainWindow()
- {
- if(mbMonitorRunning)
- {
- QProcess * pProc = new QProcess(this);
- pProc->start("cyber_launch",QStringList() << "stop"<<"modules/monitor/launch/monitor.launch");
- pProc->waitForFinished();
- }
- if(mbDreamviewRunning)
- {
- QProcess * pProc = new QProcess(this);
- pProc->start("cyber_launch",QStringList() << "stop"<<"modules/dreamview_plus/launch/dreamview_plus.launch");
- pProc->waitForFinished();
- }
- mbtestrun = false;
- mpthreadtest->join();
- mPM->requestInterruption();
- qint64 time;
- time = QDateTime::currentMSecsSinceEpoch();
- while((QDateTime::currentMSecsSinceEpoch() - time)<1500)
- {
- if(mPM->isFinished())
- {
- qDebug("PM finish");
- break;
- }
- }
- delete mPM;
- std::this_thread::sleep_for(std::chrono::milliseconds(10));
- delete ui;
- }
- void MainWindow::threadtest()
- {
- while(mbtestrun && (apollo::cyber::OK())){
- std::this_thread::sleep_for(std::chrono::milliseconds(100));
- }
- }
- void MainWindow::on_pushButton_StartApollo_clicked()
- {
- // mProc.start("cd /apollo_workspace;cyber_launch start modules/dreamview_plus/launch/dreamview_plus.launch;");
- mProc.setWorkingDirectory("/apollo_workspace");
- mProc.start("cyber_launch",QStringList() << "start"<<"modules/dreamview_plus/launch/dreamview_plus.launch");
- mbDreamviewRunning = true;
- mProcMonitor.setWorkingDirectory("/apollo_workspace");
- mProcMonitor.start("cyber_launch",QStringList() << "start"<<"modules/monitor/launch/monitor.launch");
- mbMonitorRunning = true;
- mProcNode.start("cyber_node",QStringList() <<"list");
- mnNodeListRetry = 3;
- ui->pushButton_StartApollo->setEnabled(false);
- }
- void MainWindow::onReadStandardOutput()
- {
- QProcess * proc = (QProcess *)sender();
- QByteArray ba = proc->readAllStandardOutput();
- if(proc == &mProcNode)
- {
- QList<QByteArray> strnode = ba.split('\n');
- std::cout<<strnode.size()<<std::endl;
- int nodesize = static_cast<int>(strnode.size());
- if(nodesize>2)
- {
- QString str(strnode[0]);
- if(str.indexOf("Number of active nodes")>=0)
- {
- int i;
- for(i=1;i<nodesize;i++)
- {
- QString strnodename(strnode[i]);
- if(strnodename.indexOf("HMI")>=0)
- {
- // std::cout<<" find hmi "<<i<<" nodename"<<strnodename.toLatin1().data()<<std::endl;
- ui->pushButton_StopApollo->setEnabled(true);
- mnNodeListRetry = 0;
- break;
- }
- }
- }
- // std::cout<<"node size: "<<strnode.size()<<std::endl;
- }
- }
- std::cout<<"output: "<<ba.data()<<std::endl;
- }
- void MainWindow::onReadStandardError()
- {
- QProcess * proc = (QProcess *)sender();
- QByteArray ba = proc->readAllStandardError();
- std::cout<<"error: "<<ba.data()<<std::endl;
- }
- void MainWindow::on_pushButton_StopApollo_clicked()
- {
- mProcStopDreamview.setWorkingDirectory("/apollo_workspace");
- mProcStopDreamview.start("cyber_launch",QStringList() << "stop"<<"modules/dreamview_plus/launch/dreamview_plus.launch");
- mProcStopMonitor.setWorkingDirectory("/apollo_workspace");
- mProcStopMonitor.start("cyber_launch",QStringList() << "stop"<<"modules/monitor/launch/monitor.launch");
- mbProcStopApolloRunning = true;
- ui->pushButton_StopApollo->setEnabled(false);
- }
- void MainWindow::onProcessFinished(int nStatus)
- {
- (void)nStatus;
- QProcess * proc = (QProcess *)sender();
- if(proc == &mProcNode)
- {
- std::cout<<"Process Node Finished."<<std::endl;
- if((!ui->pushButton_StopApollo->isEnabled()) && (mnNodeListRetry > 0))
- {
- std::cout<<"Process Node List Retry. Because Not Enable"<<std::endl;
- mProcNode.start("cyber_node",QStringList() <<"list");
- mnNodeListRetry--;
- }
- }
- if(proc == &mProcStopMonitor)
- {
- mbMonitorRunning = false;
- if((mbDreamviewRunning == false)&&(mbMonitorRunning == false))
- {
- ui->pushButton_StartApollo->setEnabled(true);
- mbProcStopApolloRunning = false;
- }
- }
- if(proc == &mProcStopDreamview)
- {
- mbDreamviewRunning = false;
- if((mbDreamviewRunning == false)&&(mbMonitorRunning == false))
- {
- ui->pushButton_StartApollo->setEnabled(true);
- mbProcStopApolloRunning = false;
- }
- }
- }
- void MainWindow::resizeEvent(QResizeEvent *event)
- {
- (void)event;
- QSize sizemain = ui->centralwidget->size();
- mTabMain->setGeometry(30,100,sizemain.width()-60,sizemain.height()-130);
- }
- void MainWindow::onProgClick(ProgUnit *pu,ProgramViewUnit * pvu, bool bClick)
- {
- qDebug(" %s click is data is %d",pu->strlaunch,bClick);
- pu->mbautostart = false; //if click,not need auto start.
- if(bClick == true)
- {
- mPM->StartProc(pu);
- // mPM->restartProc(pu);
- // mPM->restartProc(pu);
- // mPM->restartProc(pu);
- }
- else
- {
- mPM->StopProc(pu);
- }
- }
- void MainWindow::onTimerState()
- {
- // qDebug("log");
- // int i;
- // for(i=0;i<10000;i++)
- // ivlog->warn("test","adfassssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssadfsadgfgsdfagafdaf");
- mpCV->UpdateState();
- }
- void MainWindow::onProgLogClick(ProgUnit *pu, ProgramViewUnit *pvu, bool bClick)
- {
- pu->mbSavestdout = bClick;
- }
|