main.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  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. iv::can::canraw * praw = xsend.add_rawmsg();
  51. praw->CopyFrom(x);
  52. int nsize = xsend.ByteSize();
  53. char * str = new char[nsize];
  54. if(xsend.SerializeToArray(str,nsize))
  55. {
  56. iv::modulecomm::ModuleSendMsg(gpb,str,nsize);
  57. }
  58. else
  59. {
  60. }
  61. delete str;
  62. gnNotSend--;
  63. }
  64. int i;
  65. if(xmsg.id() == 0x60A)
  66. {
  67. gbinit = true;
  68. mradararray.set_mstime(QDateTime::currentMSecsSinceEpoch());
  69. ShareResult();
  70. mradararray.clear_obj();
  71. }
  72. if(xmsg.id() == 0x60B)
  73. {
  74. if(xmsg.len()<8)
  75. {
  76. std::cout<<"ProcRadarMsg can message length is small "<<xmsg.len()<<std::endl;
  77. return;
  78. }
  79. char data[8];
  80. memcpy(data,xmsg.data().data(),8);
  81. unsigned char id;
  82. id = data[0];
  83. float y;
  84. float x;
  85. float vx,vy;
  86. unsigned char a,b;
  87. a = data[1];
  88. b = data[2];
  89. b = b&0xf8;
  90. y = a;
  91. y = y*256 + b;
  92. y = y/8;
  93. y = y*0.2 - 500;
  94. a = data[2];b = data[3];
  95. a = a&0x07;
  96. x = a;
  97. x = x*256 + b;
  98. x = x*0.2 -204.6;
  99. a = data[4];b = data[5];
  100. b = b&0xc0;b = b/64;
  101. vy = a; vy = vy*4 + b;
  102. vy = vy *0.25 - 128;
  103. a = data[5];b = data[6];
  104. a = a&0x3f;b = b&0xe0;b = b/32;
  105. vx = a; vx = vx*8 + b;
  106. vx = vx *0.25 - 64;
  107. iv::radar::radarobject xobj;
  108. xobj.set_bvalid(true);
  109. xobj.set_x(x*(-1));
  110. xobj.set_y(y);
  111. xobj.set_vx(vx*(-1));
  112. xobj.set_vy(vy);
  113. xobj.set_vel(vy);
  114. iv::radar::radarobject * pxobj = mradararray.add_obj();
  115. pxobj->CopyFrom(xobj);
  116. }
  117. }
  118. void DecodeRadar(iv::can::canmsg xmsgvetor)
  119. {
  120. int i;
  121. for(i=0;i<xmsgvetor.rawmsg_size();i++)
  122. {
  123. ProcRadarMsg(xmsgvetor.rawmsg(i));
  124. }
  125. }
  126. void Listencanmsg(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::can::canmsg xmsg;
  130. if(false == xmsg.ParseFromArray(strdata,nSize))
  131. {
  132. givlog->error("radar Listencanmsg fail");
  133. gfault->SetFaultState(1, 0, "radar Listencanmsg error");
  134. std::cout<<"radar Listencanmsg fail."<<std::endl;
  135. return;
  136. }
  137. DecodeRadar(xmsg);
  138. // qDebug("can size is %d",xmsg.rawmsg_size());
  139. // xt = QDateTime::currentMSecsSinceEpoch();
  140. // qDebug("latence = %ld ",xt-pic.time());
  141. }
  142. int main(int argc, char *argv[])
  143. {
  144. RegisterIVBackTrace();
  145. showversion("driver_radar_conti_ARS408_SRR308");
  146. QCoreApplication a(argc, argv);
  147. gfault = new iv::Ivfault("radar_conti_ARS408_SRR308");
  148. givlog = new iv::Ivlog("radar_conti_ARS408_SRR308");
  149. QString strpath = QCoreApplication::applicationDirPath();
  150. if(argc < 2)
  151. strpath = strpath + "/driver_radar_conti_ARS408_SRR308.xml";
  152. else
  153. strpath = argv[1];
  154. givlog->verbose("%s", strpath.data());
  155. std::cout<<strpath.toStdString()<<std::endl;
  156. iv::xmlparam::Xmlparam xp(strpath.toStdString());
  157. std::string strmemcan = xp.GetParam("canrecv","canrecv0");
  158. std::string strmemsend = xp.GetParam("cansend","cansend0");
  159. std::string strmemradar = xp.GetParam("radar","radar0");
  160. gTime.start();
  161. gpa = iv::modulecomm::RegisterSend(strmemradar.data(),100000,3);
  162. gpb = iv::modulecomm::RegisterSend(strmemsend.data(),100000,3);
  163. void * pa = iv::modulecomm::RegisterRecv(strmemcan.data(),Listencanmsg);
  164. return a.exec();
  165. }