Browse Source

1.ultra parse error
2.ssr send feature
3.esr send featrue

HAPO 4 years ago
parent
commit
4a1a6425f1

+ 0 - 1
src/detection/detection_radar_delphi_esr_send/detection_radar_delphi_esr_send.pro

@@ -37,7 +37,6 @@ SOURCES += main.cpp \
 
 INCLUDEPATH += $$PWD/../../include/msgtype
 
-
 LIBS += -lprotobuf
 ################### 2020 added by fjk ##################################
 unix:LIBS += -lboost_thread -lboost_system -lboost_serialization

+ 41 - 27
src/detection/detection_radar_delphi_esr_send/main.cpp

@@ -4,7 +4,12 @@
 #include <QDateTime>
 #include <math.h>
 #include <thread>
-#include <linux/timer.h>
+#include <QDebug>
+
+#include <signal.h>
+#include <stdlib.h>
+#include <setjmp.h>
+#include <unistd.h>
 
 #include "modulecomm.h"
 #include "xmlparam.h"
@@ -50,8 +55,6 @@ void * gpa , * gpb;
 QTime gTime;
 int gnRadarState = 0;
 
-
-
 #ifdef fujiankuan
 /****==================================================================================***/
 static int gnIndex = 0;
@@ -120,6 +123,28 @@ void Listencancar(const char * strdata,const unsigned int nSize,const unsigned i
 /****==================================================================================***/
 #endif
 
+/****************timer*********************/
+
+void signalHandler(int num)
+{
+    unsigned int speed = (unsigned int)(Vehicle_Speed / 0.0625);
+    int yawRate = (int)(Vehicle_Yaw_Rate / 0.0625);
+    canData4f0.bit.canVehicleSpeedH = speed >> 8;
+    canData4f0.bit.canVehicleSpeedL = speed & 0xFF;
+    canData4f0.bit.canYawRateH = yawRate >> 8;
+    canData4f0.bit.canYawRateL = yawRate & 0xFF;
+    canData4f0.bit.canRadiusCurvatureH = CAN_Radius_Curvature >> 8;
+    canData4f0.bit.canRadiusCurvatureL = CAN_Radius_Curvature & 0x3F;
+    ExecSend1(0x4f0,canData4f0.byte,8);
+
+    canData4f1.bit.canScanIndexAckH = CAN_Scan_Index >> 8;
+    canData4f1.bit.canScanIndexAckL = CAN_Scan_Index & 0xFF;
+    ExecSend1(0x4f1,canData4f1.byte,8);
+    ExecSend1(0x5f2,canData5f2.byte,8);
+    ExecSend1(0x5f4,canData5f4.byte,8);
+}
+
+/*****************************************/
 void ShareResult()
 {
     char * str = new char[gobj.ByteSize()];
@@ -287,6 +312,7 @@ void DecodeRadar(iv::can::canmsg xmsg)
                     iv::radar::radarobject * pobj = gobj.mutable_obj(i + group_id * 7);
                     int8_t power = cdata[i+1] & 0x1F;
                     pobj->set_power(power - 10);
+                    qDebug()<<power;
                     pobj->set_moving((cdata[i+1] >> 5) & 0x01);
                     pobj->set_fast_movable((cdata[i+1] >> 7) & 0x01);
                     pobj->set_slow_movable((cdata[i+1] >> 6) & 0x01);
@@ -427,24 +453,7 @@ void threadstate()
 
     }
 }
-void onTimerSend()
-{
-    unsigned int speed = (unsigned int)(Vehicle_Speed / 0.0625);
-    int yawRate = (int)(Vehicle_Yaw_Rate / 0.0625);
-    canData4f0.bit.canVehicleSpeedH = speed >> 8;
-    canData4f0.bit.canVehicleSpeedL = speed & 0xFF;
-    canData4f0.bit.canYawRateH = yawRate >> 8;
-    canData4f0.bit.canYawRateL = yawRate & 0xFF;
-    canData4f0.bit.canRadiusCurvatureH = CAN_Radius_Curvature >> 8;
-    canData4f0.bit.canRadiusCurvatureL = CAN_Radius_Curvature & 0x3F;
-    ExecSend1(0x4f0,canData4f0.byte,8);
 
-    canData4f1.bit.canScanIndexAckH = CAN_Scan_Index >> 8;
-    canData4f1.bit.canScanIndexAckL = CAN_Scan_Index & 0xFF;
-    ExecSend1(0x4f1,canData4f1.byte,8);
-    ExecSend1(0x5f2,canData5f2.byte,8);
-    ExecSend1(0x5f4,canData5f4.byte,8);
-}
 int main(int argc, char *argv[])
 {
     QCoreApplication a(argc, argv);
@@ -486,12 +495,12 @@ int main(int argc, char *argv[])
 
     iv::xmlparam::Xmlparam xp(strpath.toStdString());
 
-    std::string strmemcan = xp.GetParam("canrecv","canrecv1");
-    std::string strmemsend = xp.GetParam("cansend","cansend1");
+    std::string strmemcan = xp.GetParam("canrecv","canrecv0");
+    std::string strmemsend = xp.GetParam("cansend","cansend0");
     std::string strmemradar = xp.GetParam("radar","radar");
     std::string strmodulename = xp.GetParam("modulename","detection_radar_delphi_esr");
 #ifdef fujiankuan
-    gstrmemgpsimu = xp.GetParam("gpsimu_name","ins550d_gpsimu");
+    gstrmemgpsimu = xp.GetParam("gpsimu_name","hcp_gpsimu");
     gstrmemcancar = xp.GetParam("cancar","can_car");
 #endif
 
@@ -512,11 +521,16 @@ int main(int argc, char *argv[])
 #endif
 
     std::thread threadfault(threadstate);
+//    signal(SIGALRM, signalHandler);
+//    ualarm(2000,2000);
 
-    QTimer * timer = new QTimer(); //car数据发送定时器,每隔30ms发送一次
-//    connect(timer,SIGNAL(timeout()),this,SLOT(onTimerSend()));
-    timer->setTimerType(Qt::PreciseTimer);
-    timer->start(20);
+    signal(SIGALRM, signalHandler);
 
+    struct itimerval new_value, old_value;
+    new_value.it_value.tv_sec = 0;
+    new_value.it_value.tv_usec = 1;
+    new_value.it_interval.tv_sec = 0;
+    new_value.it_interval.tv_usec = 20000;
+    setitimer(ITIMER_REAL, &new_value, NULL);
     return a.exec();
 }

+ 15 - 0
src/detection/detection_radar_delphi_srr/detection_radar_delphi_srr.pro

@@ -20,12 +20,14 @@ HEADERS += \
     ../../include/msgtype/radarobject.pb.h \
     ../../include/msgtype/radarobjectarray.pb.h \
     ../../include/msgtype/canmsg.pb.h \
+    ../../include/msgtype/gpsimu.pb.h \
     ../../include/msgtype/canraw.pb.h
 
 SOURCES += main.cpp \
     ../../include/msgtype/radarobject.pb.cc \
     ../../include/msgtype/radarobjectarray.pb.cc \
     ../../include/msgtype/canmsg.pb.cc \
+    ../../include/msgtype/gpsimu.pb.cc \
     ../../include/msgtype/canraw.pb.cc
 
 INCLUDEPATH += $$PWD/../../include/msgtype
@@ -38,3 +40,16 @@ LIBS += -L$$PWD/../../../bin/ -lmodulecomm
 
 INCLUDEPATH += $$PWD/../../common/xmlparam/
 LIBS += -L$$PWD/../../../bin/ -lxmlparam
+
+
+!include(../../../include/common.pri ) {
+    error( "Couldn't find the common.pri file!" )
+}
+
+!include(../../../include/ivprotobuf.pri ) {
+    error( "Couldn't find the ivprotobuf.pri file!" )
+}
+
+!include(../../../include/ivboost.pri ) {
+    error( "Couldn't find the ivboost.pri file!" )
+}

+ 117 - 1
src/detection/detection_radar_delphi_srr/main.cpp

@@ -3,23 +3,87 @@
 #include <iostream>
 #include <QDateTime>
 #include <math.h>
+#include <QTimer>
+#include <sys/time.h>
+#include <signal.h>
+#include <QThread>
 
 #include "modulecomm.h"
 #include "xmlparam.h"
+#include "ivlog.h"
+#include "ivfault.h"
 
 #include "canmsg.pb.h"
 #include "radarobjectarray.pb.h"
+#include "gpsimu.pb.h"
+
+/*Vcan send data*/
+std::string gstrmemgpsimu;
+std::string gstrmemcancar;
+double g_gyro_z;   //
+double g_v;        //
 
 iv::radar::radarobjectarray gobj;
+iv::Ivlog *givlog;
 
 iv::radar::radarobjectarray gobjright;
 int gntemp = 0;
 int gntmpright=0;
 
-void * gpa , * gpb,*gpc;
+void * gpa , * gpb, *gpc, *gpcanSend;
 
 QTime gTime;
 
+/*vcan send begin*/
+int gnIndex = 0;
+
+void ExecSend(uint16_t id, unsigned char _data[8])
+{
+    iv::can::canmsg xmsg;
+    iv::can::canraw xraw;
+
+    unsigned char canbyte[8];
+
+    memcpy(canbyte,_data,sizeof(_data));
+
+    xraw.set_id(id);
+    xraw.set_data(canbyte,8);
+    xraw.set_bext(false);
+    xraw.set_bremote(false);
+    xraw.set_len(8);
+    iv::can::canraw * pxraw = xmsg.add_rawmsg();
+    pxraw->CopyFrom(xraw);
+    xmsg.set_channel(0);
+    xmsg.set_index(gnIndex);
+    gnIndex++;
+    xmsg.set_mstime(QDateTime::currentMSecsSinceEpoch());
+    int ndatasize = xmsg.ByteSize();
+    char * strser = new char[ndatasize];
+    std::shared_ptr<char> pstrser;
+    pstrser.reset(strser);
+    if(xmsg.SerializePartialToArray(strser,ndatasize))
+    {
+        iv::modulecomm::ModuleSendMsg(gpcanSend,strser,ndatasize);
+    }
+    else
+    {
+        std::cout<<"MainWindow::onTimer serialize error."<<std::endl;
+    }
+}
+
+void Listengpsimu(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+    if(nSize<1)return;
+    iv::gps::gpsimu xgpsimu;
+    if(false == xgpsimu.ParseFromArray(strdata,nSize))
+    {
+        givlog->warn("detection_radar_delphi_esr_send--Listengpsimu parse errror. nSize is %d",nSize);
+        return;
+    }
+    g_gyro_z = xgpsimu.gyro_z();
+    g_v = sqrt(pow(xgpsimu.vn(),2) + pow(xgpsimu.ve(),2));
+}
+/*vcan end*/
 void ShareResult()
 {
     char * str = new char[gobj.ByteSize()];
@@ -232,6 +296,37 @@ void Listencan0(const char * strdata,const unsigned int nSize,const unsigned int
 //    qDebug("latence = %ld ",xt-pic.time());
 
 }
+
+void signalHandler(int sig)
+{
+    unsigned char dataYaw[8] = {0,0,0,0,0,0,0,0};
+    unsigned char dataSpeed[8] = {0,0,0,0,0,0,0,0};
+    uint16_t id;
+    int32_t value = 0;
+    id = 0x278;
+    value = int32_t(g_gyro_z * 100);
+    dataYaw[5] = value & 0xFF;
+    dataYaw[4] = (value >> 8) & 0x3F;
+    dataYaw[6] = 0x00;//0x80
+    ExecSend(id, dataYaw);
+    QThread::msleep(2);
+    id = 0x218;
+    value = int32_t(g_v * 20);
+    dataYaw[5] = value & 0xFF;
+    dataSpeed[4] = ((value >> 8) & 0x0F) | 0x00;//0x30
+    QThread::msleep(2);
+    ExecSend(id,dataSpeed);
+//    id = 0x180;
+//    unsigned char a[8] = {0,0,0,0,0,0,0,0};
+//    QThread::msleep(2);
+//    ExecSend(id,a);
+    id = 0x270;
+//    unsigned char b[8] = {0,0,0,0x80,0x15,0xFF,0,0x2};
+    unsigned char b[8] = {0,0,0,0,0x05,0,0,0};
+    QThread::msleep(2);
+    ExecSend(id,b);
+}
+
 int main(int argc, char *argv[])
 {
     QCoreApplication a(argc, argv);
@@ -271,17 +366,38 @@ int main(int argc, char *argv[])
     iv::xmlparam::Xmlparam xp(strpath.toStdString());
 
     std::string strmemcan = xp.GetParam("canrecv","canrecv0");
+    std::string strmemsend = xp.GetParam("cansend","cansend0");
 
     std::string strmemradarleft = xp.GetParam("radarleft","corner_radar_left");
     std::string strmemradaright = xp.GetParam("radaright","corner_radar_right");
+    gstrmemgpsimu = xp.GetParam("gpsimu_name","hcp2_gpsimu");
 
     gpa = iv::modulecomm::RegisterSend(strmemradarleft.data(),100000,3);
     gpb = iv::modulecomm::RegisterSend(strmemradaright.data(),100000,3);
+    gpcanSend = iv::modulecomm::RegisterSend(strmemsend.data(),100000,3);
 
     void * pa = iv::modulecomm::RegisterRecv(strmemcan.data(),Listencan0);
+    void * pb = iv::modulecomm::RegisterRecv(gstrmemgpsimu.data(),Listengpsimu);
+
+    givlog = new iv::Ivlog("detection_radar_delphi_srr");
 
+//    QWidget *mwidget = new QWidget(nullptr);
 
+//    QTimer * timer = new QTimer(); //car数据发送定时器,每隔30ms发送一次
+//    mwidget->connect(timer,SIGNAL(timeout()),mwidget,SLOT(onTimer()));
+//    timer->setTimerType(Qt::PreciseTimer);
+//    timer->start(100);
 
+    signal(SIGALRM, signalHandler);
+
+    struct itimerval new_value, old_value;
+    new_value.it_value.tv_sec = 0;
+    new_value.it_value.tv_usec = 1;
+    new_value.it_interval.tv_sec = 0;
+    new_value.it_interval.tv_usec = 100000;
+    setitimer(ITIMER_REAL, &new_value, NULL);
 
     return a.exec();
 }
+
+

+ 35 - 11
src/detection/detection_ultra_forvision/main.cpp

@@ -38,7 +38,7 @@ void ShareResult()
 
 void DecodeData(iv::can::canmsg xmsg)
 {
-
+    static int32_t dataSt = 0;
     if(xmsg.rawmsg_size() < 1)
         return;
 
@@ -59,6 +59,19 @@ void DecodeData(iv::can::canmsg xmsg)
                 gobj.set_sigpavoltagest((data[3] & 0xF0) >> 4);
                 gobj.set_sigdtcvoltagest(data[4] & 0x0F);
                 gobj.set_sigsenspwrst(data[5] & 0x07);
+                gobj.set_sigsensor_front_l(data[0] & 0x01);
+                gobj.set_sigsensor_front_lm(data[0] & 0x04);
+                gobj.set_sigsensor_front_ls(data[0] & 0x10);
+                gobj.set_sigsensor_front_r(data[0] & 0x40);
+                gobj.set_sigsensor_front_rm(data[1] & 0x01);
+                gobj.set_sigsensor_front_rs(data[1] & 0x04);
+                gobj.set_sigsensor_rear_l(data[1] & 0x10);
+                gobj.set_sigsensor_rear_lm(data[1] & 0x40);
+                gobj.set_sigsensor_rear_ls(data[2] & 0x01);
+                gobj.set_sigsensor_rear_r(data[2] & 0x04);
+                gobj.set_sigsensor_rear_rm(data[2] & 0x10);
+                gobj.set_sigsensor_rear_rs(data[2] & 0x40);
+                dataSt = dataSt | 0x01;
                 break;
 
             case 0x110: //Rear DE
@@ -68,16 +81,27 @@ void DecodeData(iv::can::canmsg xmsg)
                 gobj.set_sigobjdist_flmiddle((data[4] | data[3]) >> 6);
                 gobj.set_sigobjdist_flcorner((data[6] | data[5]) & 0x3FF);
                 gobj.set_sigobjdist_flside(((data[7] | data[6]) & 0x0FFF) >> 6);
+                dataSt = dataSt | 0x02;
                 break;
 
             case 0x112: //Front DE
-                gobj.set_sigobjdist_rlside((data[1] | data[0]) & 0x3FF);
-                gobj.set_sigobjdist_rlcorner(((data[2] | data[1]) & 0x0FFF) >> 6);
-                gobj.set_sigobjdist_rlmiddle(((data[3] | data[2]) & 0x3FF0) >> 4);
-                gobj.set_sigobjdist_rrmiddle((data[4] | data[3]) >> 6);
-                gobj.set_sigobjdist_rrcorner((data[6] | data[5]) & 0x3FF);
-                gobj.set_sigobjdist_rrside(((data[7] | data[6]) & 0x0FFF) >> 6);
-                ShareResult();
+                if(dataSt == 3)
+                {
+                    gobj.set_sigobjdist_rlside((data[1] | data[0]) & 0x3FF);
+                    gobj.set_sigobjdist_rlcorner(((data[2] | data[1]) & 0x0FFF) >> 6);
+                    gobj.set_sigobjdist_rlmiddle(((data[3] | data[2]) & 0x3FF0) >> 4);
+                    gobj.set_sigobjdist_rrmiddle((data[4] | data[3]) >> 6);
+                    gobj.set_sigobjdist_rrcorner((data[6] | data[5]) & 0x3FF);
+                    gobj.set_sigobjdist_rrside(((data[7] | data[6]) & 0x0FFF) >> 6);
+                    dataSt = 0;
+                    qDebug("fls:%d, flc:%d, flm:%d, frm:%d, frc:%d, frs:%d",\
+                           gobj.sigobjdist_flside(),gobj.sigobjdist_flcorner(),gobj.sigobjdist_flmiddle(),
+                           gobj.sigobjdist_frmiddle(),gobj.sigobjdist_frcorner(),gobj.sigobjdist_frside());
+                    qDebug("rls:%d, rlc:%d, rlm:%d, rrm:%d, rrc:%d, rrs:%d",\
+                           gobj.sigobjdist_rlside(),gobj.sigobjdist_rlcorner(),gobj.sigobjdist_rlmiddle(),
+                           gobj.sigobjdist_rrmiddle(),gobj.sigobjdist_rrcorner(),gobj.sigobjdist_rrside());
+                    ShareResult();
+                }
                 break;
 
             default:
@@ -142,8 +166,8 @@ int main(int argc, char *argv[])
 
     iv::xmlparam::Xmlparam xp(strpath.toStdString());
 
-    std::string strmemcan = xp.GetParam("canrecv","canrecv1_01710000376");
-    std::string strmemsend = xp.GetParam("cansend","cansend1_01710000376");
+    std::string strmemcan = xp.GetParam("canrecv","canrecv1");
+    std::string strmemsend = xp.GetParam("cansend","cansend1");
     std::string strmemvbox = xp.GetParam("ultra","ultra");
     std::string strmodulename = xp.GetParam("modulename","ultra");
 
@@ -152,7 +176,7 @@ int main(int argc, char *argv[])
     givfault = new iv::Ivfault(strmodulename.data());
 
     givfault->SetFaultState(1,1,"初始化");
-    givlog->info("vbox","Initialized");
+    givlog->info("ultra","Initialized");
 
     gpa = iv::modulecomm::RegisterSend(strmemvbox.data(),100000,3);
     gpb = iv::modulecomm::RegisterSend(strmemsend.data(),100000,1);