#pragma once #include #include #include #include #include #include "protocol.pb.h" #include "../common/iobuffer.h" #include "../common/socket_client.h" #include "../common/sensor_socket.h" #include "../common/update_thread.h" #include "MqttClient.h" #include "DataMqttClient.h" #include "can_bus.h" #include "radar_can.h" #include "pcan_sensor.h" #include "radar_ip.h" #ifdef LIDAR_SENSOR #include "./lidar/lidar_sensor.h" #endif class CImuSensor; class SocketClient; class CPeerConnection; class VideoRenderer; class CMqttSensor; class CRtkSensor; class CDataMqttSensor; class CCanBusSensor; class CCanRadarSensor; class CPcanSensor; class CRadarSensor; struct ImuData; enum MessageType:int32_t { ReqVideo, RepVideo, Connected, Leave, StopSensor, Ping, AsyncMessage, //BootStrap, //Startup, }; struct Message { MessageType cmd; int64_t param_l; int64_t param_r; }; struct LocalCameraInfo { int32_t index; std::string label; }; enum RA { RA_Boot, RA_Stop, RA_Goal, RA_Encode, }; // typedef struct { // int16_t fire_status; //启动/熄火 // int16_t remote_forward; //远程控制前进 // int16_t remote_backward; //远程控制后退 // int16_t Brake; //刹车 // int16_t Park; //驻车 // int16_t Outrigger_status; //支腿 // int16_t Turn_angle; //转弯角度 // int16_t Left_turn; //左旋 左手柄 左信号 // int16_t Right_turn; //右旋 右手柄 右信号 // int16_t Raised; //小臂抬起 左手柄 向后 // int16_t Decrease; //小臂下降 左手柄 向前 // int16_t Stretch; //大臂伸起 右手柄 向后 // int16_t Bulls_decline ; //大臂下降 右手柄 向前 // int16_t Material ; //吸盘吸料 // int16_t Discharge ; //吸盘放料 // int16_t zhua; //抓斗抓料 // int16_t fang; //抓斗放料 // int16_t Shell_rotation ; //贝壳斗旋转 // int16_t Cabin ; //驾驶室升 // int16_t Cab ; //驾驶室降 // int16_t Working_signal ; //作业灯开/关 // int16_t Turn_left_signal; //左转向 开/关 // int16_t Turn_right_signal ; //右转向 开/关 // int16_t Warning_Light ; //警示灯 开/关 // int16_t Trumpet; //喇叭 // int16_t Security_lock ; //安全锁 开/关 // int16_t Urget_stop ; //急停 // int16_t Vehicle_id; //车辆id // } vehicle_status; class CIOBuffer; struct RadarData; class CMessageQueue:public INativeNotify { public: CMessageQueue(); virtual ~CMessageQueue(); void Create(); void EnQueue(CIOBuffer* pBuffer); void Process(); //virtual void OnAdd(bool bRet) override; virtual void OnAdd(bool bRet) override; virtual void OnConnected(bool bRet) override; // virtual bool IsCarId(int32_t value) override; // virtual void WriteCanMessage(std::unordered_map& node,bool islidar) override; #ifdef WIN32 virtual void OnVideoRep(int32_t index,int32_t peer) override; #else virtual void OnVideoReq(int32_t index,int32_t peer) override; #endif virtual void OnVideoOffer(int32_t index,const char* type, const char* sdp) override; virtual void OnVideoAnswer(int32_t index, const char* type, const char* sdp) override; virtual void OnVideoCandidate(int32_t index,const char* candidate, int32_t sdp_mline_index, const char* sdp_mid) override; /*virtual void OnVideoAddTrack(RemoteVideoTrackWrapper* ptr) = 0;*/ //virtual void OnCancelReq(int32_t index) override; virtual void OnVideoLeave(int32_t peer,EgoType type) override; virtual void OnMessageFrameNotify(ChannelType type,int16_t cmd,int16_t length,const void * data) override; void OnNotifyConnected(bool bRet); void OnNotifyReq(int32_t index); void OnNotifyRep(int32_t index); void OnNotifyStopSensor(); void OnNotifyLeave(); void OnNotifyMessage(); void OnNotifyPing(int64_t value); void InitPeerConnection(int32_t peer,int32_t index); void WriteIMUData(ImuData* data); void WriteRadarData(RadarData& data); void WriteRobotStatus(int32_t value,int32_t desc); void WritePacket(ChannelType type, CIOBuffer & pBuffer); void SwitchCamera(bool front); void SetTick(long long tick); void ChangeState(UserState state); void OnSwitchDriver(); #ifdef LIDAR_SENSOR void WriteLidarPoint(const PointCloudMsg& msg,ChannelType side); #endif void StopCar(); // void StartCar(); void CheckSignal(); void SendZGJStatus(int status); // void SendVehicleStatus(int16_t Direction,int16_t Hand_Throttle,int16_t Foot_Throttle,int16_t Brake); void SendVehicleStatus(vehicle_status can_status); bool bStopedCar; long long _curStopTick; bool btimeStopedCar; long long DataMqtt_curTick; bool DataMqtt_SendDate; FILE *File_fd; int32_t _Version; void SerichFile(char *filename); long long _source = 0; long long _dst = 0; private: std::mutex _lock; std::condition_variable _cv; CIOBuffer* Head; CIOBuffer* Tail; //add-3-7 //CRobotSensor *cs; // std::unique_ptr _peer_video; std::vector > _peerArray; std::vector _cameraArray; //EgoType _egoType; //int32_t _indexOffset; // std::vector > _windowArray; // std::unique_ptr _main_window; // std::unique_ptr _arm_window; std::unique_ptr _client; std::unique_ptr> _imu; std::unique_ptr> _Mqtt_ZR; std::unique_ptr> _Mqtt_SE; std::unique_ptr> _Rtk; std::unique_ptr> _CanBusVehicle; std::unique_ptr> _CanBusRadar; std::unique_ptr> _PcanBusVehicle; std::unique_ptr> _RadarIp; int32_t _peerId; std::string _serial; std::string _name; int32_t _uid=0; int32_t _UdpMinPort; int32_t _UdpMaxPort; CUpdateThread _updatethread; std::mutex _canLock; long long _curTick; //////////////////////////////////////////////////////////////// #ifdef LIDAR_SENSOR std::unique_ptr _left; std::unique_ptr _right; #endif };