radar_ip.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #include <stdint.h>
  2. #include <chrono>
  3. #include "radar_ip.h"
  4. #include "message_queue.h"
  5. #pragma pack(1)
  6. struct Radar_Frame_Nl_Revice
  7. {
  8. int8_t DLC_Nl_radar;
  9. int32_t Addr_Nl_radar;
  10. uint8_t RegData_Nl_radar1[8];
  11. };
  12. CRadarSensor::CRadarSensor(CMessageQueue* q):_message(q)
  13. {
  14. _run = false;
  15. }
  16. uint16_t CRadarSensor::bcd2dec(const int8_t *data)
  17. {
  18. /*int32_t h=data[0]&0x00FF;
  19. int32_t l=data[1]&0x00FF;
  20. return h * 10 + l;*/
  21. unsigned char Dst[4];
  22. memset(Dst, 0, 4);
  23. uint16_t i = (((data[0] & 0x00FF) << 8) | (data[1] & 0x00FF));
  24. sprintf((char *)Dst,"%x", i);
  25. return strtol((const char *)Dst, NULL, 10);
  26. }
  27. // void CRadarSensor::Notify(int8_t * buffer,int32_t size)
  28. // {
  29. // int i = 0;
  30. // int8_t source[13];
  31. // if(_run)
  32. // {
  33. // for(i = 0 ; i < size ; i += 13)
  34. // {
  35. // memset(source,0,13);
  36. // memcpy(source,buffer + i,13);
  37. // Radar_Frame_Nl_Revice * p = (Radar_Frame_Nl_Revice *)source;
  38. // if ((htonl(p->Addr_Nl_radar) & 0x60B) == 0x60B)
  39. // {
  40. // int Nl_Index = (int)(((htonl(p->Addr_Nl_radar)) & 0x00f0) >> 4);
  41. // switch (Nl_Index)
  42. // {
  43. // case 1:
  44. // _data.r0 = ((((p->RegData_Nl_radar1[1] * 32) + (p->RegData_Nl_radar1[2] >> 3)) * 0.2) - 500);
  45. // break;
  46. // case 2:
  47. // _data.r1 = ((((p->RegData_Nl_radar1[1] * 32) + (p->RegData_Nl_radar1[2] >> 3)) * 0.2) - 500);
  48. // break;
  49. // case 3:
  50. // _data.r2 = ((((p->RegData_Nl_radar1[1] * 32) + (p->RegData_Nl_radar1[2] >> 3)) * 0.2) - 500);
  51. // break;
  52. // case 4:
  53. // _data.r3 = ((((p->RegData_Nl_radar1[1] * 32) + (p->RegData_Nl_radar1[2] >> 3)) * 0.2) - 500);
  54. // break;
  55. // case 5:
  56. // _data.r4 = ((((p->RegData_Nl_radar1[1] * 32) + (p->RegData_Nl_radar1[2] >> 3)) * 0.2) - 500);
  57. // break;
  58. // case 6:
  59. // _data.r5 = ((((p->RegData_Nl_radar1[1] * 32) + (p->RegData_Nl_radar1[2] >> 3)) * 0.2) - 500);
  60. // break;
  61. // case 7:
  62. // _data.r6 = ((((p->RegData_Nl_radar1[1] * 32) + (p->RegData_Nl_radar1[2] >> 3)) * 0.2) - 500);
  63. // break;
  64. // case 8:
  65. // _data.r7 = ((((p->RegData_Nl_radar1[1] * 32) + (p->RegData_Nl_radar1[2] >> 3)) * 0.2) - 500);
  66. // break;
  67. // default:
  68. // break;
  69. // }
  70. // }
  71. // }
  72. // std::cout << "radar :" << _data.r0 << " " << _data.r1 << " " << _data.r2 << " " << _data.r3 << " "
  73. // << _data.r4 << " " << _data.r5 << " " << _data.r6 << " " << _data.r7 << " "<< std::endl;
  74. // _count++;
  75. // if (_count > 8)
  76. // {
  77. // _message->WriteRadarData(_data);
  78. // _count = 0;
  79. // }
  80. // }
  81. // }
  82. void CRadarSensor::Notify(int8_t * buffer,int32_t size)
  83. {
  84. if(_run)
  85. {
  86. Radar_Frame_CM_Revice * p = (Radar_Frame_CM_Revice *)buffer;
  87. if (ntohl(p->Addr_radar1) == 0x611)
  88. {
  89. _data.r0 = bcd2dec((const int8_t*)p->RegData_radar1);
  90. _data.r1 = bcd2dec((const int8_t*)p->RegData_radar1 + 2);
  91. _data.r2 = bcd2dec((const int8_t*)p->RegData_radar1 + 4);
  92. _data.r3 = bcd2dec((const int8_t*)p->RegData_radar1 + 6);
  93. std::cout << "radar1:" << _data.r0 << " " << _data.r1 << " " << _data.r2 << " " << _data.r3 << " " << std::endl;
  94. }
  95. if (ntohl(p->Addr_radar2) == 0x612)
  96. {
  97. _data.r4 = bcd2dec((const int8_t*)p->RegData_radar2);
  98. _data.r5 = bcd2dec((const int8_t*)p->RegData_radar2 + 2);
  99. //װ�ػ�6���״ץ�ֻ�8���״�
  100. _data.r6 = bcd2dec((const int8_t*)p->RegData_radar2 + 4);
  101. _data.r7 = bcd2dec((const int8_t*)p->RegData_radar2 + 6);
  102. std::cout << "radar2:" << _data.r4 << " " << _data.r5 << " " << _data.r6 << " " << _data.r7 << " " << std::endl;
  103. }
  104. _count++;
  105. if (_count > 4)
  106. {
  107. _message->WriteRadarData(_data);
  108. //std::cout << "Send Date" << std::endl;
  109. _count = 0;
  110. }
  111. }
  112. }
  113. void CRadarSensor::Start()
  114. {
  115. if(!_run)
  116. {
  117. _run = true;
  118. _count = 0;
  119. }
  120. }
  121. void CRadarSensor::Run()
  122. {
  123. if (_run)
  124. {
  125. }
  126. }
  127. void CRadarSensor::SetSensorSocket(SensorSocket<CRadarSensor>* can)
  128. {
  129. _socket = can;
  130. }
  131. void CRadarSensor::Stop()
  132. {
  133. if (_run)
  134. {
  135. _run = false;
  136. _count = 0;
  137. }
  138. }