#ifndef CANRECV_CONSUMER_H #define CANRECV_CONSUMER_H #include #include #include #include #include "modulecomm.h" #include "radarobjectarray.pb.h" #include "can_producer_consumer.h" #include "decode_cfg.h" #include "iv_msgunit.h" #define RADAR_OBJ_MAX_NUM 128 class CANRecv_Consumer : public QThread { Q_OBJECT public: CANRecv_Consumer(CAN_Producer_Consumer *pBuf); ~CANRecv_Consumer(); void Clear_CAN_PrivateTempVariable(void); protected: void run(); uint32_t Trans_From_CANRaw(const iv::can::canraw &xraw); //only for standard data frame, return can id void Pack_Info_To_SHM_ch0(uint32_t can_id); void Pack_Info_To_SHM_ch1(uint32_t can_id); void Pack_Info_To_SHM_ch2(uint32_t can_id); void Pack_Info_To_SHM_ch3(uint32_t can_id); void Pack_Info_To_SHM_ch4(uint32_t can_id); void Pack_Info_To_SHM_ch5(uint32_t can_id); void Pack_Info_To_SHM_ch6(uint32_t can_id); void Pack_Info_To_SHM_ch7(uint32_t can_id); //ro trans phy 3 double Trans_DVA_RMS_Ro_To_Phy(uint8_t data); double Trans_Ori_RMS_Ro_To_Phy(uint8_t data); double Trans_ProbOfExist_Ro_To_Phy(uint8_t data); //rotation and translation void Rotate_Translate(double &x,double &y,double theta,double offset_x,double offset_y); //RFU,deg signals: void RadarObjectArray_Ready(void); private slots: void RadarObjectArray_Ready_Slot(void); private: CAN_Producer_Consumer *pBuffer; uint8_t radarType = 0; //0 ARS408-21xx 1 ARS408-21sc3 2 SRR308 uint32_t CAN_ID = 0x000u; uint8_t CAN_DLC = 0; uint8_t CAN_data[8] = {0}; ars408_can_database_ch0_rx_t ars408_can_database_ch0_rx; ars408_can_database_ch1_rx_t ars408_can_database_ch1_rx; ars408_can_database_ch2_rx_t ars408_can_database_ch2_rx; ars408_can_database_ch3_rx_t ars408_can_database_ch3_rx; ars408_can_database_ch4_rx_t ars408_can_database_ch4_rx; ars408_can_database_ch5_rx_t ars408_can_database_ch5_rx; ars408_can_database_ch6_rx_t ars408_can_database_ch6_rx; ars408_can_database_ch7_rx_t ars408_can_database_ch7_rx; iv::radar::radarobjectarray xradarObjArray; QVector vradarObj; QVector radarObjFreshFlag; bool persistent_Error = false; //notice if multi thread, these param need a mutex lock bool interference_Error = false; // bool temperature_Error = false; // bool temporary_Error = false; // bool voltage_Error = false; // bool speed_Loss = false; // bool yaw_Rate_Loss = false; // std::string radar_Version = "4.30.1"; // iv::radar::radarobjectarray radarObjArray_Send; QMutex radarObjArraySend_Lock; }; #endif // CANRECV_CONSUMER_H