main.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. #include <QCoreApplication>
  2. #include <iostream>
  3. #include <QDateTime>
  4. #include "modulecomm.h"
  5. #include "xmlparam.h"
  6. #include "ivversion.h"
  7. #include "ivbacktrace.h"
  8. #include "canmsg.pb.h"
  9. #include "radarobjectarray.pb.h"
  10. #include "ivfault.h"
  11. #include "ivlog.h"
  12. iv::radar::radarobjectarray gobj;
  13. int gntemp = 0;
  14. void * gpa;
  15. void * gpb;
  16. iv::Ivfault *gfault = nullptr;
  17. iv::Ivlog *givlog = nullptr;
  18. static int gnNotSend = 10;
  19. QTime gTime;
  20. static bool gbinit = false;
  21. iv::radar::radarobjectarray mradararray;
  22. void ShareResult()
  23. {
  24. char * str = new char[mradararray.ByteSize()];
  25. int nsize = mradararray.ByteSize();
  26. if(mradararray.SerializeToArray(str,nsize))
  27. {
  28. iv::modulecomm::ModuleSendMsg(gpa,str,nsize);
  29. }
  30. givlog->verbose("obj size is %d ",mradararray.obj_size());
  31. // qDebug("share time is %d ",gTime.elapsed());
  32. delete str;
  33. }
  34. void ProcRadarMsg(iv::can::canraw xmsg)
  35. {
  36. if(gbinit == false)gnNotSend = 10;
  37. if(gnNotSend > 0)
  38. {
  39. givlog->verbose("send valid data.");
  40. iv::can::canraw x;
  41. x.set_id(0x200);
  42. x.set_bext(false);
  43. x.set_bremote(false);
  44. x.set_len(8);
  45. unsigned char strdata[8];
  46. strdata[0] = 0x08;
  47. strdata[4] = 0x08;
  48. x.set_data(strdata,8);
  49. iv::can::canmsg xsend;
  50. xsend.set_channel(0);
  51. xsend.set_index(0);
  52. iv::can::canraw * praw = xsend.add_rawmsg();
  53. praw->CopyFrom(x);
  54. int nsize = xsend.ByteSize();
  55. char * str = new char[nsize];
  56. if(xsend.SerializeToArray(str,nsize))
  57. {
  58. iv::modulecomm::ModuleSendMsg(gpb,str,nsize);
  59. }
  60. else
  61. {
  62. }
  63. delete str;
  64. gnNotSend--;
  65. }
  66. int i;
  67. if(xmsg.id() == 0x60A)
  68. {
  69. gbinit = true;
  70. mradararray.set_mstime(QDateTime::currentMSecsSinceEpoch());
  71. ShareResult();
  72. mradararray.clear_obj();
  73. }
  74. if(xmsg.id() == 0x60B)
  75. {
  76. if(xmsg.len()<8)
  77. {
  78. std::cout<<"ProcRadarMsg can message length is small "<<xmsg.len()<<std::endl;
  79. return;
  80. }
  81. char data[8];
  82. memcpy(data,xmsg.data().data(),8);
  83. unsigned char id;
  84. id = data[0];
  85. float y;
  86. float x;
  87. float vx,vy;
  88. unsigned char a,b;
  89. a = data[1];
  90. b = data[2];
  91. b = b&0xf8;
  92. y = a;
  93. y = y*256 + b;
  94. y = y/8;
  95. y = y*0.2 - 500;
  96. a = data[2];b = data[3];
  97. a = a&0x07;
  98. x = a;
  99. x = x*256 + b;
  100. x = x*0.2 -204.6;
  101. a = data[4];b = data[5];
  102. b = b&0xc0;b = b/64;
  103. vy = a; vy = vy*4 + b;
  104. vy = vy *0.25 - 128;
  105. a = data[5];b = data[6];
  106. a = a&0x3f;b = b&0xe0;b = b/32;
  107. vx = a; vx = vx*8 + b;
  108. vx = vx *0.25 - 64;
  109. iv::radar::radarobject xobj;
  110. xobj.set_bvalid(true);
  111. xobj.set_x(x*(-1));
  112. xobj.set_y(y);
  113. xobj.set_vx(vx*(-1));
  114. xobj.set_vy(vy);
  115. xobj.set_vel(vy);
  116. iv::radar::radarobject * pxobj = mradararray.add_obj();
  117. pxobj->CopyFrom(xobj);
  118. }
  119. }
  120. void DecodeRadar(iv::can::canmsg xmsgvetor)
  121. {
  122. int i;
  123. for(i=0;i<xmsgvetor.rawmsg_size();i++)
  124. {
  125. ProcRadarMsg(xmsgvetor.rawmsg(i));
  126. }
  127. }
  128. void Listencanmsg(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  129. {
  130. if(nSize<1)return;
  131. iv::can::canmsg xmsg;
  132. if(false == xmsg.ParseFromArray(strdata,nSize))
  133. {
  134. givlog->error("radar Listencanmsg fail");
  135. gfault->SetFaultState(1, 0, "radar Listencanmsg error");
  136. std::cout<<"radar Listencanmsg fail."<<std::endl;
  137. return;
  138. }
  139. DecodeRadar(xmsg);
  140. // qDebug("can size is %d",xmsg.rawmsg_size());
  141. // xt = QDateTime::currentMSecsSinceEpoch();
  142. // qDebug("latence = %ld ",xt-pic.time());
  143. }
  144. int main(int argc, char *argv[])
  145. {
  146. RegisterIVBackTrace();
  147. showversion("detection_radar_conti_sr308");
  148. QCoreApplication a(argc, argv);
  149. gfault = new iv::Ivfault("radar_conti_sr308");
  150. givlog = new iv::Ivlog("radar_conti_sr308");
  151. QString strpath = QCoreApplication::applicationDirPath();
  152. if(argc < 2)
  153. strpath = strpath + "/detection_radar_conti_sr308.xml";
  154. else
  155. strpath = argv[1];
  156. givlog->verbose("%s", strpath.data());
  157. std::cout<<strpath.toStdString()<<std::endl;
  158. iv::xmlparam::Xmlparam xp(strpath.toStdString());
  159. std::string strmemcan = xp.GetParam("canrecv","canrecv1");
  160. std::string strmemsend = xp.GetParam("cansend","cansend1");
  161. std::string strmemradar = xp.GetParam("radar","radar4");
  162. gTime.start();
  163. gpa = iv::modulecomm::RegisterSend(strmemradar.data(),100000,3);
  164. gpb = iv::modulecomm::RegisterSend(strmemsend.data(),100000,3);
  165. void * pa = iv::modulecomm::RegisterRecv(strmemcan.data(),Listencanmsg);
  166. return a.exec();
  167. }