mainwindow.cpp 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. MainWindow::MainWindow(QWidget *parent) :
  4. QMainWindow(parent),
  5. ui(new Ui::MainWindow)
  6. {
  7. m_tbox=new Tbox();
  8. initTboxMemory();
  9. m_radio=new Radio();
  10. ui->setupUi(this);
  11. initUi();
  12. //enableTbox();
  13. initRadio();
  14. //20211009,jiaolili
  15. mivlog = new iv::Ivlog("v2x");
  16. //ShareMem: gps
  17. ModuleFun fungpsimu =std::bind(&MainWindow::UpdateGPSIMU,this,std::placeholders::_1, \
  18. std::placeholders::_2,std::placeholders::_3,std::placeholders::_4,std::placeholders::_5);
  19. mpMemGps = iv::modulecomm::RegisterRecvPlus("hcp2_gpsimu",fungpsimu);
  20. //ShareMem: ui
  21. ModuleFun funUI =std::bind(&MainWindow::UpdateUI,this,std::placeholders::_1, \
  22. std::placeholders::_2,std::placeholders::_3,std::placeholders::_4,std::placeholders::_5);
  23. mpMemUI = iv::modulecomm::RegisterRecvPlus("hcp2_gpsimu",funUI);
  24. }
  25. MainWindow::~MainWindow()
  26. {
  27. delete ui;
  28. }
  29. void MainWindow::initUi()
  30. {
  31. ui->lineEdit_enableTox->setText("Init status");
  32. ui->lineEdit_enableRadio->setText("Init status");
  33. }
  34. void MainWindow::initRadio()
  35. {
  36. std::string str="12345678912345678";
  37. int randId0,randId1,randId2,randId3,randId4,randId5,randId6,randId7,randId8,randId9,randId10,randId11,randId12,randId13,randId14,randId15,randId16;
  38. for(int i=0;i<1000;i++) {
  39. randId0=qrand()%10;
  40. randId1=qrand()%10;
  41. randId2=qrand()%10;
  42. randId3=qrand()%10;
  43. randId4=qrand()%10;
  44. randId5=qrand()%10;
  45. randId6=qrand()%10;
  46. randId7=qrand()%10;
  47. randId8=qrand()%10;
  48. randId9=qrand()%10;
  49. randId10=qrand()%10;
  50. randId11=qrand()%10;
  51. randId12=qrand()%10;
  52. randId13=qrand()%10;
  53. randId14=qrand()%10;
  54. randId15=qrand()%10;
  55. randId16=qrand()%10;
  56. char c[17]={char('0'+randId0),
  57. char('0'+randId1),
  58. char('0'+randId2),
  59. char('0'+randId3),
  60. char('0'+randId4),
  61. char('0'+randId5),
  62. char('0'+randId6),
  63. char('0'+randId7),
  64. char('0'+randId8),
  65. char('0'+randId9),
  66. char('0'+randId10),
  67. char('0'+randId11),
  68. char('0'+randId12),
  69. char('0'+randId13),
  70. char('0'+randId14),
  71. char('0'+randId15),
  72. char('0'+randId16)};
  73. str=c;
  74. m_vectorVin.push_back(str);
  75. }
  76. }
  77. void MainWindow::enableTbox()
  78. {
  79. ui->lineEdit_enableTox->setText("OPEN");
  80. m_tbox->setTboxConnectEnable(true);
  81. }
  82. void MainWindow::disableTbox()
  83. {
  84. ui->lineEdit_enableTox->setText("CLOSE");
  85. m_tbox->setTboxConnectEnable(false);
  86. }
  87. void MainWindow::initTboxMemory()
  88. {
  89. m_structM.gps_lng=137.0;
  90. m_structM.gps_lat=39.0;
  91. m_structM.speed=20.0;
  92. m_structM.yaw=12.0;
  93. m_structM.ele_voltage=90.0;
  94. m_structM.error=0x02;
  95. m_tbox->setTboxMemmory(m_structM);
  96. m_tbox->setTboxConnectEnable(false);
  97. }
  98. void MainWindow::on_pushButton_connect_clicked()
  99. {
  100. if(ui->pushButton_connect->text() == tr("connect")) {
  101. enableTbox();
  102. //修改按键文字
  103. ui->pushButton_connect->setText("disconnect");
  104. } else {
  105. disableTbox();
  106. //修改按键文字
  107. ui->pushButton_connect->setText("connect");
  108. }
  109. }
  110. void MainWindow::on_pushButton_vinChange_clicked()
  111. {
  112. std::string str=ui->lineEdit_VIN->text().toStdString();
  113. m_tbox->setTboxNewVin(str);
  114. }
  115. void MainWindow::on_checkBox_trafficBroadcast_stateChanged(int arg1)
  116. {
  117. if(arg1==2) {
  118. m_radio->getTrafficBroadcast(true);
  119. } else {
  120. m_radio->getTrafficBroadcast(false);
  121. }
  122. }
  123. void MainWindow::on_checkBox_collisionWarning_stateChanged(int arg1)
  124. {
  125. if(arg1==2) {
  126. m_radio->getCollisonWarning(true);
  127. } else {
  128. m_radio->getCollisonWarning(false);
  129. }
  130. }
  131. void MainWindow::on_checkBox_busyRoad_stateChanged(int arg1)
  132. {
  133. if(arg1==2) {
  134. m_radio->getBusyRoad(true);
  135. } else {
  136. m_radio->getBusyRoad(false);
  137. }
  138. }
  139. void MainWindow::on_checkBox_dangerousDrive_stateChanged(int arg1)
  140. {
  141. if(arg1==2) {
  142. m_radio->getDangerDrive(true);
  143. } else {
  144. m_radio->getDangerDrive(false);
  145. }
  146. }
  147. void MainWindow::on_pushButton_setVirtualVehicle_clicked()
  148. {
  149. int virtualVehicleNum=ui->lineEdit_virtualVehicleNum->text().toInt();
  150. double latMax=ui->lineEdit_latMax->text().toDouble();
  151. double latMin=ui->lineEdit_latMin->text().toDouble();
  152. double lngMax=ui->lineEdit_lngMax->text().toDouble();
  153. double lngMin=ui->lineEdit_lngMin->text().toDouble();
  154. float speedMax=ui->lineEdit_speedMax->text().toFloat();
  155. float speedMin=ui->lineEdit_speedMin->text().toFloat();
  156. float yawMax=ui->lineEdit_yawMax->text().toFloat();
  157. float yawMin=ui->lineEdit_yawMin->text().toFloat();
  158. int randId=qrand()%10000;
  159. m_vectorRandom.push_back(randId);
  160. virtualVehicleM structVirtualVehicle;
  161. for(int i=1;i<virtualVehicleNum;i++) {
  162. getRandomNum();
  163. }
  164. for(int i=0;i<virtualVehicleNum;i++) {
  165. structVirtualVehicle.vin = m_vectorVin[i];
  166. structVirtualVehicle.gps_lat=latMin+((double(m_vectorRandom[i]))/10000.0)*(latMax-latMin);
  167. structVirtualVehicle.gps_lng=lngMin+((double(m_vectorRandom[i]))/10000.0)*(lngMax-lngMin);
  168. structVirtualVehicle.speed=speedMin+((float(m_vectorRandom[i]))/10000.0)*(speedMax-speedMin);
  169. structVirtualVehicle.yaw=yawMin+((float(m_vectorRandom[i]))/10000.0)*(yawMax-yawMin);
  170. m_radio->upVirtualVehicle(structVirtualVehicle);
  171. }
  172. //m_radio
  173. }
  174. void MainWindow::getRandomNum()
  175. {
  176. int randId=qrand()%10000;
  177. for(int i=0;i<m_vectorRandom.size();i++) {
  178. if(randId==m_vectorRandom[i]) {
  179. getRandomNum();
  180. }
  181. }
  182. m_vectorRandom.push_back(randId);
  183. }
  184. void MainWindow::setEnRadio(bool en)
  185. {
  186. if(en) {
  187. ui->lineEdit_enableRadio->setText("OPEN");
  188. } else {
  189. ui->lineEdit_enableRadio->setText("CLOSE");
  190. }
  191. m_radio->setEnConnect(en);
  192. }
  193. void MainWindow::on_pushButton_radioConnect_clicked()
  194. {
  195. if(ui->pushButton_radioConnect->text() == tr("connect")) {
  196. setEnRadio(true);
  197. //修改按键文字
  198. ui->pushButton_radioConnect->setText("disconnect");
  199. } else {
  200. setEnRadio(false);
  201. //修改按键文字
  202. ui->pushButton_radioConnect->setText("connect");
  203. }
  204. }
  205. //接收GPS数据
  206. void MainWindow::UpdateGPSIMU(const char * strdata,const unsigned int nSize,const unsigned int index,\
  207. const QDateTime * dt,const char * strmemname)
  208. {
  209. double accX,accY,lat,lon,heading,rtk,ins,vd,ve,vn;
  210. iv::gps::gpsimu xgpsimu;
  211. if(!xgpsimu.ParseFromArray(strdata,nSize))
  212. {
  213. mivlog->warn("ADCIntelligentVehicle::UpdateGPSIMU parse error. nSize is %d",nSize);
  214. return;
  215. }
  216. lat = xgpsimu.lat();
  217. lon = xgpsimu.lon();
  218. heading = xgpsimu.heading();
  219. rtk = xgpsimu.rtk_state();
  220. ins = xgpsimu.ins_state();
  221. vd = xgpsimu.vd(); //地向速度,单位(米/秒)
  222. ve = xgpsimu.ve(); //东向速度,单位(米/秒)
  223. vn = xgpsimu.vn(); //北向速度,单位(米/秒)
  224. if(xgpsimu.has_acce_x())
  225. {
  226. accX = xgpsimu.acce_x();
  227. }
  228. if(xgpsimu.has_acce_y())
  229. {
  230. accY = xgpsimu.acce_y();
  231. }
  232. // mfAcc = (float)sqrt(pow(accX,2)+pow(accY,2));
  233. // mfspeed = sqrt(pow(data->vel_E,2)+pow(data->vel_N,2)) * 3.6; //double pow(double x, double y) 返回 x 的 y 次幂,即 xy。
  234. //mistGPS = 0;
  235. }
  236. //UI DATA
  237. void MainWindow::UpdateUI(const char * strdata,const unsigned int nSize,const unsigned int index,\
  238. const QDateTime * dt,const char * strmemname)
  239. {
  240. double accX,accY,lat,lon,heading,rtk,ins,vd,ve,vn;
  241. iv::hmi::hmimsg xhmi;
  242. if(!xhmi.ParseFromArray(strdata,nSize))
  243. {
  244. mivlog->warn("ADCIntelligentVehicle::UpdateGPSIMU parse error. nSize is %d",nSize);
  245. return;
  246. }
  247. if(xhmi.has_obuen()) {
  248. bool enRadio=xhmi.obuen();
  249. setEnRadio(enRadio);
  250. }
  251. if(xhmi.has_platformen()) {
  252. bool enTbox=xhmi.platformen();
  253. if(enTbox) {
  254. enableTbox();
  255. } else {
  256. disableTbox();
  257. }
  258. }
  259. if(xhmi.has_platformen()) {
  260. bool enTbox=xhmi.platformen();
  261. if(enTbox) {
  262. enableTbox();
  263. } else {
  264. disableTbox();
  265. }
  266. }
  267. if(xhmi.has_rodeinfoen()) {
  268. bool enRadioBroadcast = xhmi.rodeinfoen();
  269. m_radio->getTrafficBroadcast(enRadioBroadcast);
  270. ui->checkBox_trafficBroadcast->setChecked(enRadioBroadcast);
  271. }
  272. if(xhmi.has_rodefcwen()) {
  273. bool enRadioWarning = xhmi.rodefcwen();
  274. m_radio->getCollisonWarning(enRadioWarning);
  275. ui->checkBox_collisionWarning->setChecked(enRadioWarning);
  276. }
  277. if(xhmi.has_roadjamsen()) {
  278. }
  279. }