mainwindow.cpp 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QProcess>
  4. #include <QTimer>
  5. MainWindow::MainWindow(QWidget *parent)
  6. : QMainWindow(parent)
  7. , ui(new Ui::MainWindow)
  8. {
  9. ui->setupUi(this);
  10. apollo::cyber::Init("pilot_apollo_bridge_gui");
  11. pilot_node = apollo::cyber::CreateNode("pilot_apollo_bridge_gui");
  12. mpthreadtest = new std::thread(&MainWindow::threadtest,this);
  13. ui->pushButton_StartApollo->setEnabled(true);
  14. ui->pushButton_StopApollo->setEnabled(false);
  15. connect(&mProc,SIGNAL(readyReadStandardOutput()),this,SLOT(onReadStandardOutput()));
  16. connect(&mProc,SIGNAL(readyReadStandardError()),this,SLOT(onReadStandardError()));
  17. connect(&mProcNode,SIGNAL(readyReadStandardOutput()),this,SLOT(onReadStandardOutput()));
  18. connect(&mProcNode,SIGNAL(readyReadStandardError()),this,SLOT(onReadStandardError()));
  19. connect(&mProcNode,SIGNAL(finished(int)),this,SLOT(onProcessFinished(int)));
  20. connect(&mProcStopDreamview,SIGNAL(readyReadStandardOutput()),this,SLOT(onReadStandardOutput()));
  21. connect(&mProcStopDreamview,SIGNAL(readyReadStandardError()),this,SLOT(onReadStandardError()));
  22. connect(&mProcStopDreamview,SIGNAL(finished(int)),this,SLOT(onProcessFinished(int)));
  23. connect(&mProcStopMonitor,SIGNAL(readyReadStandardOutput()),this,SLOT(onReadStandardOutput()));
  24. connect(&mProcStopMonitor,SIGNAL(readyReadStandardError()),this,SLOT(onReadStandardError()));
  25. connect(&mProcStopMonitor,SIGNAL(finished(int)),this,SLOT(onProcessFinished(int)));
  26. std::string strxmlpath = "/apollo_workspace/code/xml/pilotlaunch.xml";
  27. //从配置文件中读取当前系统包含的所有模块信息-tjc
  28. mPM = new ProgMon(strxmlpath.data());
  29. // connect(mPM,SIGNAL(SigProcStarted(ProgUnit*)),this,SLOT(onProcessStarted(ProgUnit*)));
  30. // connect(mPM,SIGNAL(SigProcStoped(ProgUnit*)),this,SLOT(onProcessEnd(ProgUnit*)));
  31. setGeometry(0,0,800,600);
  32. QTabWidget * p = new QTabWidget(ui->centralwidget);
  33. p->setGeometry(30,150,800,450);
  34. mTabMain = p;
  35. CenterView * pcv = new CenterView(p,mPM);
  36. mpCV = pcv;
  37. connect(pcv,SIGNAL(ProgClick(ProgUnit*,ProgramViewUnit * ,bool)),this,SLOT(onProgClick(ProgUnit*,ProgramViewUnit * ,bool)));
  38. connect(pcv,SIGNAL(ProgLogClick(ProgUnit*,ProgramViewUnit*,bool)),this,SLOT(onProgLogClick(ProgUnit*,ProgramViewUnit*,bool)));
  39. mPM->start();
  40. QTimer * timer = new QTimer(this);
  41. connect(timer,SIGNAL(timeout()),this,SLOT(onTimerState()));
  42. timer->start(1000);
  43. setWindowTitle("Pilot Apollo Bridge GUI");
  44. }
  45. MainWindow::~MainWindow()
  46. {
  47. if(mbMonitorRunning)
  48. {
  49. QProcess * pProc = new QProcess(this);
  50. pProc->start("cyber_launch",QStringList() << "stop"<<"modules/monitor/launch/monitor.launch");
  51. pProc->waitForFinished();
  52. }
  53. if(mbDreamviewRunning)
  54. {
  55. QProcess * pProc = new QProcess(this);
  56. pProc->start("cyber_launch",QStringList() << "stop"<<"modules/dreamview_plus/launch/dreamview_plus.launch");
  57. pProc->waitForFinished();
  58. }
  59. mbtestrun = false;
  60. mpthreadtest->join();
  61. mPM->requestInterruption();
  62. qint64 time;
  63. time = QDateTime::currentMSecsSinceEpoch();
  64. while((QDateTime::currentMSecsSinceEpoch() - time)<1500)
  65. {
  66. if(mPM->isFinished())
  67. {
  68. qDebug("PM finish");
  69. break;
  70. }
  71. }
  72. delete mPM;
  73. std::this_thread::sleep_for(std::chrono::milliseconds(10));
  74. delete ui;
  75. }
  76. void MainWindow::threadtest()
  77. {
  78. while(mbtestrun && (apollo::cyber::OK())){
  79. std::this_thread::sleep_for(std::chrono::milliseconds(100));
  80. }
  81. }
  82. void MainWindow::on_pushButton_StartApollo_clicked()
  83. {
  84. // mProc.start("cd /apollo_workspace;cyber_launch start modules/dreamview_plus/launch/dreamview_plus.launch;");
  85. mProc.setWorkingDirectory("/apollo_workspace");
  86. mProc.start("cyber_launch",QStringList() << "start"<<"modules/dreamview_plus/launch/dreamview_plus.launch");
  87. mbDreamviewRunning = true;
  88. mProcMonitor.setWorkingDirectory("/apollo_workspace");
  89. mProcMonitor.start("cyber_launch",QStringList() << "start"<<"modules/monitor/launch/monitor.launch");
  90. mbMonitorRunning = true;
  91. mProcNode.start("cyber_node",QStringList() <<"list");
  92. mnNodeListRetry = 3;
  93. ui->pushButton_StartApollo->setEnabled(false);
  94. }
  95. void MainWindow::onReadStandardOutput()
  96. {
  97. QProcess * proc = (QProcess *)sender();
  98. QByteArray ba = proc->readAllStandardOutput();
  99. if(proc == &mProcNode)
  100. {
  101. QList<QByteArray> strnode = ba.split('\n');
  102. std::cout<<strnode.size()<<std::endl;
  103. int nodesize = static_cast<int>(strnode.size());
  104. if(nodesize>2)
  105. {
  106. QString str(strnode[0]);
  107. if(str.indexOf("Number of active nodes")>=0)
  108. {
  109. int i;
  110. for(i=1;i<nodesize;i++)
  111. {
  112. QString strnodename(strnode[i]);
  113. if(strnodename.indexOf("HMI")>=0)
  114. {
  115. // std::cout<<" find hmi "<<i<<" nodename"<<strnodename.toLatin1().data()<<std::endl;
  116. ui->pushButton_StopApollo->setEnabled(true);
  117. mnNodeListRetry = 0;
  118. break;
  119. }
  120. }
  121. }
  122. // std::cout<<"node size: "<<strnode.size()<<std::endl;
  123. }
  124. }
  125. std::cout<<"output: "<<ba.data()<<std::endl;
  126. }
  127. void MainWindow::onReadStandardError()
  128. {
  129. QProcess * proc = (QProcess *)sender();
  130. QByteArray ba = proc->readAllStandardError();
  131. std::cout<<"error: "<<ba.data()<<std::endl;
  132. }
  133. void MainWindow::on_pushButton_StopApollo_clicked()
  134. {
  135. mProcStopDreamview.setWorkingDirectory("/apollo_workspace");
  136. mProcStopDreamview.start("cyber_launch",QStringList() << "stop"<<"modules/dreamview_plus/launch/dreamview_plus.launch");
  137. mProcStopMonitor.setWorkingDirectory("/apollo_workspace");
  138. mProcStopMonitor.start("cyber_launch",QStringList() << "stop"<<"modules/monitor/launch/monitor.launch");
  139. mbProcStopApolloRunning = true;
  140. ui->pushButton_StopApollo->setEnabled(false);
  141. }
  142. void MainWindow::onProcessFinished(int nStatus)
  143. {
  144. (void)nStatus;
  145. QProcess * proc = (QProcess *)sender();
  146. if(proc == &mProcNode)
  147. {
  148. std::cout<<"Process Node Finished."<<std::endl;
  149. if((!ui->pushButton_StopApollo->isEnabled()) && (mnNodeListRetry > 0))
  150. {
  151. std::cout<<"Process Node List Retry. Because Not Enable"<<std::endl;
  152. mProcNode.start("cyber_node",QStringList() <<"list");
  153. mnNodeListRetry--;
  154. }
  155. }
  156. if(proc == &mProcStopMonitor)
  157. {
  158. mbMonitorRunning = false;
  159. if((mbDreamviewRunning == false)&&(mbMonitorRunning == false))
  160. {
  161. ui->pushButton_StartApollo->setEnabled(true);
  162. mbProcStopApolloRunning = false;
  163. }
  164. }
  165. if(proc == &mProcStopDreamview)
  166. {
  167. mbDreamviewRunning = false;
  168. if((mbDreamviewRunning == false)&&(mbMonitorRunning == false))
  169. {
  170. ui->pushButton_StartApollo->setEnabled(true);
  171. mbProcStopApolloRunning = false;
  172. }
  173. }
  174. }
  175. void MainWindow::resizeEvent(QResizeEvent *event)
  176. {
  177. (void)event;
  178. QSize sizemain = ui->centralwidget->size();
  179. mTabMain->setGeometry(30,100,sizemain.width()-60,sizemain.height()-130);
  180. }
  181. void MainWindow::onProgClick(ProgUnit *pu,ProgramViewUnit * pvu, bool bClick)
  182. {
  183. qDebug(" %s click is data is %d",pu->strlaunch,bClick);
  184. pu->mbautostart = false; //if click,not need auto start.
  185. if(bClick == true)
  186. {
  187. mPM->StartProc(pu);
  188. // mPM->restartProc(pu);
  189. // mPM->restartProc(pu);
  190. // mPM->restartProc(pu);
  191. }
  192. else
  193. {
  194. mPM->StopProc(pu);
  195. }
  196. }
  197. void MainWindow::onTimerState()
  198. {
  199. // qDebug("log");
  200. // int i;
  201. // for(i=0;i<10000;i++)
  202. // ivlog->warn("test","adfassssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssadfsadgfgsdfagafdaf");
  203. mpCV->UpdateState();
  204. }
  205. void MainWindow::onProgLogClick(ProgUnit *pu, ProgramViewUnit *pvu, bool bClick)
  206. {
  207. pu->mbSavestdout = bClick;
  208. }