main.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. #include <QCoreApplication>
  2. #include <iostream>
  3. #include <QDateTime>
  4. #include <math.h>
  5. #include <thread>
  6. #include <QElapsedTimer>
  7. #include "modulecomm.h"
  8. #include "xmlparam.h"
  9. #include "ivlog.h"
  10. #include "ivfault.h"
  11. iv::Ivlog * givlog;
  12. iv::Ivfault * givfault;
  13. #include "ultrasonic.pb.h"
  14. #include "ultraarea.pb.h"
  15. iv::ultrasonic::ultrasonic gobj;
  16. void * gpa , * gpb;
  17. QElapsedTimer gTime;
  18. int min(int ids[],int len)
  19. {
  20. int i = 1;
  21. int* p = &ids[0];
  22. for(; i < len; i++)
  23. {
  24. if (*p>ids[i]){
  25. p = &ids[i];
  26. }
  27. }
  28. return *p;
  29. }
  30. void ProcessData(iv::ultrasonic::ultrasonic xmsg)
  31. {
  32. std::cout<<xmsg.sigobjdist_flside()<<" ";//4
  33. std::cout<<xmsg.sigobjdist_flcorner()<<" ";//4
  34. std::cout<<xmsg.sigobjdist_flmiddle()<<" ";//1
  35. std::cout<<xmsg.sigobjdist_frmiddle()<<" ";//1
  36. std::cout<<xmsg.sigobjdist_frcorner()<<" ";//2
  37. std::cout<<xmsg.sigobjdist_frside()<<" ";//2
  38. std::cout<<xmsg.sigobjdist_rrside()<<" ";//2
  39. std::cout<<xmsg.sigobjdist_rrcorner()<<" ";//2
  40. std::cout<<xmsg.sigobjdist_rrmiddle()<<" ";//3
  41. std::cout<<xmsg.sigobjdist_rlmiddle()<<" ";//3
  42. std::cout<<xmsg.sigobjdist_rlcorner()<<" ";//4
  43. std::cout<<xmsg.sigobjdist_rlside()<<std::endl;//4
  44. iv::ultrasonic::ultraarea areas;
  45. areas.set_timestamp(xmsg.timestamp());
  46. if(xmsg.sigsensor_front_lm()==0 && xmsg.sigsensor_front_rm()==0){
  47. iv::ultrasonic::Area area;
  48. area.set_id(1);
  49. area.set_valid(false);
  50. iv::ultrasonic::Area * p = areas.add_area();
  51. p->CopyFrom(area);
  52. }else{
  53. int tmp[2];
  54. tmp[0] = xmsg.sigobjdist_flmiddle();
  55. tmp[1] = xmsg.sigobjdist_frmiddle();
  56. int min_dist = min(tmp,2);
  57. iv::ultrasonic::Area area;
  58. area.set_id(1);
  59. area.set_dist(min_dist);
  60. iv::ultrasonic::Area * p = areas.add_area();
  61. p->CopyFrom(area);
  62. }
  63. if(xmsg.sigsensor_front_rc()==0 && xmsg.sigsensor_front_rs()==0 && xmsg.sigsensor_rear_rs()==0 && xmsg.sigsensor_rear_rc()==0){
  64. iv::ultrasonic::Area area;
  65. area.set_id(2);
  66. area.set_valid(false);
  67. iv::ultrasonic::Area * p = areas.add_area();
  68. p->CopyFrom(area);
  69. }else{
  70. int tmp[4];
  71. tmp[0] = xmsg.sigobjdist_frcorner();
  72. tmp[1] = xmsg.sigobjdist_frside();
  73. tmp[2] = xmsg.sigobjdist_rrside();
  74. tmp[3] = xmsg.sigobjdist_rrcorner();
  75. int min_dist = min(tmp,4);
  76. iv::ultrasonic::Area area;
  77. area.set_id(2);
  78. area.set_dist(min_dist);
  79. iv::ultrasonic::Area * p = areas.add_area();
  80. p->CopyFrom(area);
  81. }
  82. if(xmsg.sigsensor_rear_rm()==0 && xmsg.sigsensor_rear_lm()==0){
  83. iv::ultrasonic::Area area;
  84. area.set_id(3);
  85. area.set_valid(false);
  86. iv::ultrasonic::Area * p = areas.add_area();
  87. p->CopyFrom(area);
  88. }else{
  89. int tmp[2];
  90. tmp[0] = xmsg.sigobjdist_rrmiddle();
  91. tmp[1] = xmsg.sigobjdist_rlmiddle();
  92. int min_dist = min(tmp,2);
  93. iv::ultrasonic::Area area;
  94. area.set_id(3);
  95. area.set_dist(min_dist);
  96. iv::ultrasonic::Area * p = areas.add_area();
  97. p->CopyFrom(area);
  98. }
  99. if(xmsg.sigsensor_rear_lc()==0 && xmsg.sigsensor_rear_ls()==0 && xmsg.sigsensor_front_ls()==0 && xmsg.sigsensor_front_lc()==0){
  100. iv::ultrasonic::Area area;
  101. area.set_id(4);
  102. area.set_valid(false);
  103. iv::ultrasonic::Area * p = areas.add_area();
  104. p->CopyFrom(area);
  105. }else{
  106. int tmp[4];
  107. tmp[0] = xmsg.sigobjdist_rlcorner();
  108. tmp[1] = xmsg.sigobjdist_rlside();
  109. tmp[2] = xmsg.sigobjdist_flside();
  110. tmp[3] = xmsg.sigobjdist_flcorner();
  111. int min_dist = min(tmp,4);
  112. iv::ultrasonic::Area area;
  113. area.set_id(4);
  114. area.set_dist(min_dist);
  115. iv::ultrasonic::Area * p = areas.add_area();
  116. p->CopyFrom(area);
  117. }
  118. std::cout<<"---------- "<<areas.area_size()<<" ---------"<<std::endl;
  119. for(int i=0;i<areas.area_size();i++){
  120. iv::ultrasonic::Area area = areas.area(i);
  121. std::cout<<area.id()<<": "<<area.dist()<<" "<<area.valid()<<std::endl;
  122. }
  123. std::string out = areas.SerializeAsString();
  124. iv::modulecomm::ModuleSendMsg(gpb,out.data(),out.length());
  125. }
  126. void ListenUltra(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  127. {
  128. if(nSize<1) return;
  129. iv::ultrasonic::ultrasonic xmsg;
  130. // givlog->verbose("vbox","rec rsu data");
  131. if(false == xmsg.ParseFromArray(strdata,nSize))
  132. {
  133. std::cout<<"Listenultra fail."<<std::endl;
  134. return;
  135. }
  136. ProcessData(xmsg);
  137. // qDebug("can size is %d",xmsg.rawmsg_size());
  138. // xt = QDateTime::currentMSecsSinceEpoch();
  139. // qDebug("latence = %ld ",xt-pic.time());
  140. }
  141. void threadstate()
  142. {
  143. while(1)
  144. {
  145. std::this_thread::sleep_for(std::chrono::milliseconds(10));
  146. // if(gnRadarState > -100)gnRadarState--;
  147. // if(gnRadarState > 0)
  148. // {
  149. // givfault->SetFaultState(0,0,"OK");
  150. // }
  151. // else
  152. // {
  153. // if(gnRadarState > -100)
  154. // {
  155. // givfault->SetFaultState(1,1,"无CAN数据");
  156. // }
  157. // else
  158. // {
  159. // givfault->SetFaultState(2,2,"无CAN数据");
  160. // }
  161. // }
  162. }
  163. }
  164. int main(int argc, char *argv[])
  165. {
  166. QCoreApplication a(argc, argv);
  167. std::string strmemultra = "sonar";
  168. std::string strmemsend = "ultra_output";
  169. givlog = new iv::Ivlog(strmemultra.data());
  170. givfault = new iv::Ivfault(strmemultra.data());
  171. givfault->SetFaultState(1,1,"初始化");
  172. givlog->info("ultra","Initialized");
  173. gpb = iv::modulecomm::RegisterSend(strmemsend.data(),100000,1);
  174. iv::modulecomm::RegisterRecv(strmemultra.data(), ListenUltra);
  175. std::thread threadfault(threadstate);
  176. return a.exec();
  177. }