|
@@ -3,8 +3,8 @@
|
|
|
#include <iostream>
|
|
|
#include <QDateTime>
|
|
|
#include <math.h>
|
|
|
-
|
|
|
#include <thread>
|
|
|
+#include <linux/timer.h>
|
|
|
|
|
|
#include "modulecomm.h"
|
|
|
#include "xmlparam.h"
|
|
@@ -15,37 +15,27 @@
|
|
|
#include "radarobjectarray.pb.h"
|
|
|
#include "gpsimu.pb.h"
|
|
|
#include "can_car.pb.h"
|
|
|
+#include "can_send_data_struct.h"
|
|
|
|
|
|
/******************************************/
|
|
|
#define fujiankuan //<宏开关
|
|
|
|
|
|
std::string gstrmemgpsimu;
|
|
|
std::string gstrmemcancar;
|
|
|
-
|
|
|
static uint16_t CAN_Scan_Index;
|
|
|
-static int8_t CAN_Lateral_Mounting_Offset = 0;
|
|
|
-static int8_t CAN_Angle_Misalignment = 0;
|
|
|
-static uint8_t CAN_Max_Tracks = 64; //<max number of track objects
|
|
|
-static uint8_t CAN_Cmd_Radiate = 1; //<
|
|
|
-static uint8_t CAN_Wiper_Status = 0; //<(0)off
|
|
|
-static uint8_t CAN_Raw_Data_Enable = 0; //<(0)filtered radar data(1)raw radar data
|
|
|
-static uint8_t CAN_Grouping_Mode = 3; //<(0)no(1)grouping moving target(2)grouping stationary target(3)grouping both target
|
|
|
-static uint8_t CAN_Upside_Down = 0; //<(0)normal setup
|
|
|
-static uint8_t CAN_Turn_Signal_Status = 0; //<(0)none(1)left(2)right
|
|
|
-static uint8_t CAN_Blockage_Disable = 0; //<used in EMC testing. should be set 0 normally
|
|
|
-static uint8_t CAN_Use_Angle_Misalignment = 0; //<
|
|
|
-static uint8_t CAN_Clear_Faults = 0; //<clear faults codes
|
|
|
-static uint8_t CAN_High_Yaw_Angle = 0; //<
|
|
|
-static uint8_t CAN_LR_Only_Transmit = 0; //<
|
|
|
-static uint8_t CAN_MR_Only_Transmit = 0; //<
|
|
|
-static uint8_t CAN_VOLVO_Short_Track_Roc = 0; //<
|
|
|
-
|
|
|
static double Vehicle_Yaw_Rate;
|
|
|
|
|
|
static double Vehicle_Speed; //<
|
|
|
static uint8_t CAN_Vehicle_Speed_Valid; //<(1)valid
|
|
|
|
|
|
static double Steering_Angle;
|
|
|
+static int16_t CAN_Radius_Curvature = 8191;
|
|
|
+/******************************************/
|
|
|
+
|
|
|
+canSend4F0 canData4f0;
|
|
|
+canSend4F1 canData4f1;
|
|
|
+canSend5F2 canData5f2;
|
|
|
+canSend5F4 canData5f4;
|
|
|
|
|
|
/******************************************/
|
|
|
|
|
@@ -61,19 +51,20 @@ QTime gTime;
|
|
|
int gnRadarState = 0;
|
|
|
|
|
|
|
|
|
+
|
|
|
#ifdef fujiankuan
|
|
|
/****==================================================================================***/
|
|
|
static int gnIndex = 0;
|
|
|
|
|
|
-static unsigned char tmp1[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0x00};
|
|
|
+//static unsigned char tmp1[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0x00};
|
|
|
static unsigned char canbyte[8];
|
|
|
|
|
|
-void ExecSend1(uint16_t id)
|
|
|
+void ExecSend1(uint16_t id, unsigned char canData[8],int size)
|
|
|
{
|
|
|
iv::can::canmsg xmsg;
|
|
|
iv::can::canraw xraw;
|
|
|
|
|
|
- memcpy(canbyte,tmp1,sizeof(tmp1));
|
|
|
+ memcpy(canbyte,canData,size);
|
|
|
|
|
|
xraw.set_id(id);
|
|
|
xraw.set_data(canbyte,8);
|
|
@@ -322,15 +313,15 @@ void DecodeRadar(iv::can::canmsg xmsg)
|
|
|
memcpy(cdata,canmsg.data().data(),8);
|
|
|
|
|
|
int16_t valid_range = (cdata[1] << 8) | cdata[2];
|
|
|
- gobj.valid_lr_range(valid_range / 128.0);
|
|
|
+ gobj.set_valid_lr_range(valid_range / 128.0);
|
|
|
|
|
|
int16_t valid_range_rate = (cdata[3] << 8) | cdata[4];
|
|
|
- gobj.valid_lr_range_rate(valid_range_rate / 128.0);
|
|
|
+ gobj.set_valid_lr_range_rate(valid_range_rate / 128.0);
|
|
|
|
|
|
int16_t valid_angle = (cdata[5] << 8) | cdata[6];
|
|
|
- gobj.valid_lr_angle(valid_angle / 16.0);
|
|
|
+ gobj.set_valid_lr_angle(valid_angle / 16.0);
|
|
|
|
|
|
- gobj.valid_lr_power(cdata[7]);
|
|
|
+ gobj.set_valid_lr_power(cdata[7]);
|
|
|
|
|
|
gntemp++;
|
|
|
}
|
|
@@ -343,15 +334,15 @@ void DecodeRadar(iv::can::canmsg xmsg)
|
|
|
memcpy(cdata,canmsg.data().data(),8);
|
|
|
|
|
|
int16_t valid_range = (cdata[1] << 8) | cdata[2];
|
|
|
- gobj.valid_mr_range(valid_range / 128.0);
|
|
|
+ gobj.set_valid_mr_range(valid_range / 128.0);
|
|
|
|
|
|
int16_t valid_range_rate = (cdata[3] << 8) | cdata[4];
|
|
|
- gobj.valid_mr_range_rate(valid_range_rate / 128.0);
|
|
|
+ gobj.set_valid_mr_range_rate(valid_range_rate / 128.0);
|
|
|
|
|
|
int16_t valid_angle = (cdata[5] << 8) | cdata[6];
|
|
|
- gobj.valid_mr_angle(valid_angle / 16.0);
|
|
|
+ gobj.set_valid_mr_angle(valid_angle / 16.0);
|
|
|
|
|
|
- gobj.valid_mr_power(cdata[7]);
|
|
|
+ gobj.set_valid_mr_power(cdata[7]);
|
|
|
|
|
|
gntemp++;
|
|
|
}
|
|
@@ -436,6 +427,24 @@ 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);
|
|
@@ -453,11 +462,21 @@ int main(int argc, char *argv[])
|
|
|
xobj->set_vel(0);
|
|
|
xobj->set_bvalid(false);
|
|
|
}
|
|
|
-
|
|
|
gobj.CopyFrom(x);
|
|
|
|
|
|
gTime.start();
|
|
|
|
|
|
+ memset(canData4f0.byte,0,8);
|
|
|
+ memset(canData4f1.byte,0,8);
|
|
|
+ Vehicle_Yaw_Rate = 0;
|
|
|
+ Vehicle_Speed = 0;
|
|
|
+ canData4f1.bit.canMaximumTracks = 64;
|
|
|
+ canData4f1.bit.canRadarCmdRadiate = 1;
|
|
|
+ canData4f1.bit.canGroupingMode = 3;
|
|
|
+ canData4f1.bit.canVehicleSpeedValid = 1;
|
|
|
+ memset(canData5f2.byte,0,8);
|
|
|
+ memset(canData5f4.byte,0,8);
|
|
|
+
|
|
|
QString strpath = QCoreApplication::applicationDirPath();
|
|
|
if(argc < 2)
|
|
|
strpath = strpath + "/detection_radar_esr.xml";
|
|
@@ -492,10 +511,12 @@ int main(int argc, char *argv[])
|
|
|
void * pc = iv::modulecomm::RegisterRecv(gstrmemcancar.data(),Listencancar);
|
|
|
#endif
|
|
|
|
|
|
- ExecSend1(0x04f1);
|
|
|
-
|
|
|
std::thread threadfault(threadstate);
|
|
|
|
|
|
+ QTimer * timer = new QTimer(); //car数据发送定时器,每隔30ms发送一次
|
|
|
+// connect(timer,SIGNAL(timeout()),this,SLOT(onTimerSend()));
|
|
|
+ timer->setTimerType(Qt::PreciseTimer);
|
|
|
+ timer->start(20);
|
|
|
|
|
|
return a.exec();
|
|
|
}
|