message_queue.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. #pragma once
  2. #include<mutex>
  3. #include<memory>
  4. #include<string>
  5. #include<condition_variable>
  6. #include <vector>
  7. #include "protocol.pb.h"
  8. #include "../common/iobuffer.h"
  9. #include "../common/socket_client.h"
  10. #include "../common/sensor_socket.h"
  11. #include "../common/update_thread.h"
  12. #include "MqttClient.h"
  13. #include "DataMqttClient.h"
  14. #include "can_bus.h"
  15. #include "radar_can.h"
  16. #include "pcan_sensor.h"
  17. #include "radar_ip.h"
  18. #ifdef LIDAR_SENSOR
  19. #include "./lidar/lidar_sensor.h"
  20. #endif
  21. class CImuSensor;
  22. class SocketClient;
  23. class CPeerConnection;
  24. class VideoRenderer;
  25. class CMqttSensor;
  26. class CRtkSensor;
  27. class CDataMqttSensor;
  28. class CCanBusSensor;
  29. class CCanRadarSensor;
  30. class CPcanSensor;
  31. class CRadarSensor;
  32. struct ImuData;
  33. enum MessageType:int32_t
  34. {
  35. ReqVideo,
  36. RepVideo,
  37. Connected,
  38. Leave,
  39. StopSensor,
  40. Ping,
  41. AsyncMessage,
  42. //BootStrap,
  43. //Startup,
  44. };
  45. struct Message
  46. {
  47. MessageType cmd;
  48. int64_t param_l;
  49. int64_t param_r;
  50. };
  51. struct LocalCameraInfo
  52. {
  53. int32_t index;
  54. std::string label;
  55. };
  56. enum RA {
  57. RA_Boot,
  58. RA_Stop,
  59. RA_Goal,
  60. RA_Encode,
  61. };
  62. class CIOBuffer;
  63. struct RadarData;
  64. class CMessageQueue:public INativeNotify
  65. {
  66. public:
  67. CMessageQueue();
  68. virtual ~CMessageQueue();
  69. void Create();
  70. void EnQueue(CIOBuffer* pBuffer);
  71. void Process();
  72. //virtual void OnAdd(bool bRet) override;
  73. virtual void OnAdd(bool bRet) override;
  74. virtual void OnConnected(bool bRet) override;
  75. // virtual bool IsCarId(int32_t value) override;
  76. // virtual void WriteCanMessage(std::unordered_map<int32_t, cannet_frame>& node,bool islidar) override;
  77. #ifdef WIN32
  78. virtual void OnVideoRep(int32_t index,int32_t peer) override;
  79. #else
  80. virtual void OnVideoReq(int32_t index,int32_t peer) override;
  81. #endif
  82. virtual void OnVideoOffer(int32_t index,const char* type, const char* sdp) override;
  83. virtual void OnVideoAnswer(int32_t index, const char* type, const char* sdp) override;
  84. virtual void OnVideoCandidate(int32_t index,const char* candidate,
  85. int32_t sdp_mline_index,
  86. const char* sdp_mid) override;
  87. /*virtual void OnVideoAddTrack(RemoteVideoTrackWrapper* ptr) = 0;*/
  88. //virtual void OnCancelReq(int32_t index) override;
  89. virtual void OnVideoLeave(int32_t peer,EgoType type) override;
  90. virtual void OnMessageFrameNotify(ChannelType type,int16_t cmd,int16_t length,const void * data) override;
  91. void OnNotifyConnected(bool bRet);
  92. void OnNotifyReq(int32_t index);
  93. void OnNotifyRep(int32_t index);
  94. void OnNotifyStopSensor();
  95. void OnNotifyLeave();
  96. void OnNotifyMessage();
  97. void OnNotifyPing(int64_t value);
  98. void InitPeerConnection(int32_t peer,int32_t index);
  99. void WriteIMUData(ImuData* data);
  100. void WriteRadarData(RadarData& data);
  101. void WriteRobotStatus(int32_t value,int32_t desc);
  102. void WritePacket(ChannelType type, CIOBuffer & pBuffer);
  103. void SwitchCamera(bool front);
  104. void SetTick(long long tick);
  105. void ChangeState(UserState state);
  106. void OnSwitchDriver();
  107. #ifdef LIDAR_SENSOR
  108. void WriteLidarPoint(const PointCloudMsg<PointXYZI>& msg,ChannelType side);
  109. #endif
  110. void StopCar();
  111. // void StartCar();
  112. void CheckSignal();
  113. void SendZGJStatus(int status);
  114. void SendVehicleStatus(int16_t Direction,int16_t Hand_Throttle,int16_t Foot_Throttle,int16_t Brake);
  115. bool bStopedCar;
  116. long long _curStopTick;
  117. bool btimeStopedCar;
  118. long long DataMqtt_curTick;
  119. bool DataMqtt_SendDate;
  120. FILE *File_fd;
  121. int32_t _Version;
  122. void SerichFile(char *filename);
  123. long long _source = 0;
  124. long long _dst = 0;
  125. private:
  126. std::mutex _lock;
  127. std::condition_variable _cv;
  128. CIOBuffer* Head;
  129. CIOBuffer* Tail;
  130. //add-3-7
  131. //CRobotSensor *cs;
  132. // std::unique_ptr<PeerConnectionWrapper> _peer_video;
  133. std::vector<std::unique_ptr<CPeerConnection> > _peerArray;
  134. std::vector<LocalCameraInfo> _cameraArray;
  135. //EgoType _egoType;
  136. //int32_t _indexOffset;
  137. // std::vector<std::unique_ptr<VideoRenderer> > _windowArray;
  138. // std::unique_ptr<VideoRenderer> _main_window;
  139. // std::unique_ptr<VideoRenderer> _arm_window;
  140. std::unique_ptr<SocketClient> _client;
  141. std::unique_ptr<SensorSocket<CImuSensor>> _imu;
  142. std::unique_ptr<SensorMQTT<CMqttSensor>> _Mqtt_ZR;
  143. std::unique_ptr<SensorMQTT<CDataMqttSensor>> _Mqtt_SE;
  144. std::unique_ptr<SensorSocket<CRtkSensor>> _Rtk;
  145. std::unique_ptr<SensorCanBus<CCanBusSensor>> _CanBusVehicle;
  146. std::unique_ptr<SensorCanBus<CCanRadarSensor>> _CanBusRadar;
  147. std::unique_ptr<SensorPeakCan<CPcanSensor>> _PcanBusVehicle;
  148. std::unique_ptr<SensorSocket<CRadarSensor>> _RadarIp;
  149. int32_t _peerId;
  150. std::string _serial;
  151. std::string _name;
  152. int32_t _uid=0;
  153. int32_t _UdpMinPort;
  154. int32_t _UdpMaxPort;
  155. CUpdateThread _updatethread;
  156. std::mutex _canLock;
  157. long long _curTick;
  158. ////////////////////////////////////////////////////////////////
  159. #ifdef LIDAR_SENSOR
  160. std::unique_ptr<CLidarSensor> _left;
  161. std::unique_ptr<CLidarSensor> _right;
  162. #endif
  163. };