#include #include #include #include #include "modulecomm.h" #include "ivversion.h" #include "ivbacktrace.h" #include "ivfault.h" #include "ivlog.h" #include "ivexit.h" #include "canmsg.pb.h" #include "radarobjectarray.pb.h" #include "chassis.pb.h" #include "gpsimu.pb.h" #include "decode_cfg.h" #include "can_producer_consumer.h" #include "canrecv_consumer.h" #include "cansend_consumer.h" #include "cansend_producer.h" #include "iv_msgunit.h" /* * Notice : the radar config setting function is not finished * Notice : the number of object is less than 64. so this version is used for object mode. */ QCoreApplication * gApp; iv::Ivfault *gfault = nullptr; iv::Ivlog *givlog = nullptr; setupConfig_t setupConfig; iv::msgunit shmCANRecv; iv::msgunit shmCANSend; iv::msgunit shmRadar; iv::msgunit shmGPSIMU; iv::msgunit shmChassis; CAN_Producer_Consumer CANRecv(4096); CAN_Producer_Consumer CANSend(4096); uint8_t chassisShift = 0; //1P 2R 3N 4D double chassisVelocity = 0; //m/s QMutex chassisDataLock; double GPSIMUVelocity = 0; // m/s double GPSIMUYawRate = 0; // deg/s QMutex GPSIMUDataLock; //------------------------------------ iv::radar::radarobjectarray gobj; int gntemp = 0; static int gnNotSend = 10; static bool gbinit = false; iv::radar::radarobjectarray mradararray; void ShareResult() { char * str = new char[mradararray.ByteSize()]; int nsize = mradararray.ByteSize(); if(mradararray.SerializeToArray(str,nsize)) { iv::modulecomm::ModuleSendMsg(shmCANSend.mpa,str,nsize); } givlog->verbose("obj size is %d ",mradararray.obj_size()); // qDebug("share time is %d ",gTime.elapsed()); delete str; } void ProcRadarMsg(iv::can::canraw xmsg) { if(gbinit == false)gnNotSend = 10; if(gnNotSend > 0) { givlog->verbose("send valid data."); iv::can::canraw x; x.set_id(0x200); x.set_bext(false); x.set_bremote(false); x.set_len(8); unsigned char strdata[8]; strdata[0] = 0x08; strdata[4] = 0x08; x.set_data(strdata,8); iv::can::canmsg xsend; iv::can::canraw * praw = xsend.add_rawmsg(); praw->CopyFrom(x); int nsize = xsend.ByteSize(); char * str = new char[nsize]; if(xsend.SerializeToArray(str,nsize)) { iv::modulecomm::ModuleSendMsg(shmRadar.mpa,str,nsize); } else { } delete str; gnNotSend--; } int i; if(xmsg.id() == 0x60A) { gbinit = true; mradararray.set_mstime(QDateTime::currentMSecsSinceEpoch()); ShareResult(); mradararray.clear_obj(); } if(xmsg.id() == 0x60B) { if(xmsg.len()<8) { std::cout<<"ProcRadarMsg can message length is small "<CopyFrom(xobj); } } void DecodeRadar(iv::can::canmsg xmsgvetor) { int i; for(i=0;ierror("radar Listencanmsg fail"); gfault->SetFaultState(1, 0, "radar Listencanmsg error"); std::cout<<"radar ListenCANMsg parse fail."<quit(); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); } void signal_handler(int sig) { if(sig == SIGINT) { ExitFunc(); } } int main(int argc, char *argv[]) { RegisterIVBackTrace(); showversion("driver_radar_continental_ARS408_SRR308"); QCoreApplication a(argc, argv); gApp = &a; givlog = new iv::Ivlog("driver_radar_continental_ARS408_SRR308"); gfault = new iv::Ivfault("driver_radar_continental_ARS408_SRR308"); // iv::ivexit::RegIVExitCall(ExitFunc); signal(SIGINT,signal_handler); QString strpath = QCoreApplication::applicationDirPath(); if(argc < 2) strpath = strpath + "/driver_radar_continental_ARS408_SRR308.xml"; else strpath = argv[1]; // givlog->verbose("%s", strpath.data()); // std::cout<