#include "mainwindow.h" #include "ui_mainwindow.h" #include #include 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 strnode = ba.split('\n'); std::cout<(strnode.size()); if(nodesize>2) { QString str(strnode[0]); if(str.indexOf("Number of active nodes")>=0) { int i; for(i=1;i=0) { // std::cout<<" find hmi "<pushButton_StopApollo->setEnabled(true); mnNodeListRetry = 0; break; } } } // std::cout<<"node size: "<readAllStandardError(); std::cout<<"error: "<pushButton_StopApollo->setEnabled(false); } void MainWindow::onProcessFinished(int nStatus) { (void)nStatus; QProcess * proc = (QProcess *)sender(); if(proc == &mProcNode) { std::cout<<"Process Node Finished."<pushButton_StopApollo->isEnabled()) && (mnNodeListRetry > 0)) { std::cout<<"Process Node List Retry. Because Not Enable"<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; }