redaiyuyuyu il y a 2 mois
Parent
commit
372c6fd9a1

+ 7 - 2
user_inc/soft_can.h

@@ -86,6 +86,11 @@
 //离心喷头信息
 #define CAN_MSGID_NOZZLE 0x11
 
+//防地雷达发出给飞控的信息0x901300
+#define CAN_MSGID_RADAR_INFO 0x12
+//飞控发出给防地雷达的信息0x981300
+#define CAN_MSGID_RADAR_VERSION_INFO 0x13
+
 //前避障雷达发出给飞控的信息
 #define CAN_MSGID_FRADAR_INFO 0x14
 //飞控发出给前避障雷达的信息
@@ -106,8 +111,8 @@
 // 消息类型位全置1,目标nodeID的位全置1, 消息ID以及源节点ID处寻找相同位的做过滤
 #define CAN_MC_MASK_ID   ((unsigned int)(FRAME_TYPE_MASK | \
 (MSG_ID_MASK & (((0x7f & (~(0x00 | CAN_MSGID_LEDTOMC_VOLT | CAN_MSGID_LEDTOMC_VER | CAN_MSGID_ENGINE_INFO \
- | CAN_MSGID_FLOWTOMC_INFO | CAN_MSGID_FLOWTOMC_ACK | CAN_MSGID_RADAR_START| CAN_MSGID_FRADAR_INFO | CAN_MSGID_BRADAR_INFO |CAN_MSGID_RADAR_ING | CAN_MSGID_RADAR_END)))|\
- (0x7f & CAN_MSGID_LEDTOMC_VOLT & CAN_MSGID_LEDTOMC_VER & CAN_MSGID_FLOWTOMC_INFO & CAN_MSGID_BRADAR_INFO & CAN_MSGID_FRADAR_INFO & CAN_MSGID_FLOWTOMC_ACK & CAN_MSGID_ENGINE_INFO \
+ | CAN_MSGID_FLOWTOMC_INFO | CAN_MSGID_FLOWTOMC_ACK | CAN_MSGID_RADAR_START| CAN_MSGID_RADAR_INFO |CAN_MSGID_FRADAR_INFO | CAN_MSGID_BRADAR_INFO |CAN_MSGID_RADAR_ING | CAN_MSGID_RADAR_END)))|\
+ (0x7f & CAN_MSGID_LEDTOMC_VOLT & CAN_MSGID_LEDTOMC_VER & CAN_MSGID_FLOWTOMC_INFO & CAN_MSGID_BRADAR_INFO & CAN_MSGID_RADAR_INFO & CAN_MSGID_FRADAR_INFO & CAN_MSGID_FLOWTOMC_ACK & CAN_MSGID_ENGINE_INFO \
   & CAN_MSGID_RADAR_START& CAN_MSGID_RADAR_ING & CAN_MSGID_RADAR_END))<<19)) | \
                             DES_ID_MASK | \
 (SRC_ID_MASK & (((0x7f & (~(0x00 | CAN_NODEID_LED | CAN_NODEID_4G | CAN_NODEID_LIQUED | CAN_NODEID_FLOW | \

+ 26 - 1
user_inc/soft_device.h

@@ -73,6 +73,10 @@ enum FACID
     FAC_MOCIB_RF = 24,  //莫之比前避障
     FAC_MOCIB_RB = 25, //莫之比后避障
 
+    FAC_DM_RT = 26,  //DM防地
+    FAC_DM_RF = 27,  //DM前避障
+    FAC_DM_RB = 28, //DM后避障
+
     FAC_QX_BMS = 30,  //协氢电池
     FAC_DM_CHECKLOW = 31,//电目断料计
 
@@ -226,7 +230,21 @@ typedef struct
     uint16_t Battery_negative_temperature;
 } Temperature_Sensor_info;
 #pragma pack()
-
+#pragma pack(1)
+typedef struct
+{
+    uint8_t facid;
+    int16_t X1;
+    int16_t Y1;
+    int16_t Z1;
+    int16_t X2;
+    int16_t Y2;
+    int16_t Z2;
+    int16_t X3;
+    int16_t Y3;
+    int16_t Z3;
+} Part_Fradar;
+#pragma pack()
 #pragma pack(1)
 typedef struct
 {
@@ -334,6 +352,12 @@ typedef struct
     Part_FBradar Part_radarB;
     Connect_check Part_Bradar_Link;
 
+    Connect_check DM_Part_Bradar_Link;
+    Part_Fradar DM_Part_radarB;	
+    
+    Connect_check DM_Part_Fradar_Link;
+    Part_Fradar DM_Part_radarF;
+
     Connect_check Eft_CanDev_Link[6]; //柔性双水泵 四离心  获取版本信息使用
 
     Temperature_Sensor_info Temperature_Sensor;
@@ -369,4 +393,5 @@ extern uint8_t auto_set_canid_flag;
 extern uint32_t auto_eft_dev_status;
 void update_device_type_data(void);
 void set_eft_dev_canid_func( void );
+void DM_obs_test( void );
 #endif

+ 4 - 1
user_inc/soft_obstacle.h

@@ -95,7 +95,9 @@ typedef struct
 
   bool get_radar_ver_flag; //检测到雷达一直发,上电发几次可能收不到
   bool get_radar_sn_flag;
-
+  bool get_radar_blind_flag;
+  bool get_radar_power_flag;
+  bool get_radar_rawSwitch_flag;
   //SN号
   //char send_radar_sn_count; 和版本用一个count
   char sn[20];
@@ -193,4 +195,5 @@ bool Bobs_handle_function(void);
 bool Fobs_handle_function(void);
 void can_recv_enzhao_obstacle(uint32_t cellCanID, uint8_t data[], uint8_t len);
 void can_recv_mocib_obstacle(uint32_t cellCanID, uint8_t data[], uint8_t len);
+void get_radar_blindAndPower_function( void );
 #endif 

+ 92 - 1
user_inc/soft_terrain.h

@@ -3,6 +3,7 @@
 #include "stdint.h"
 #include "stdbool.h"
 #include "common.h"
+#include "soft_obstacle.h"
 
 #pragma pack(1)
 typedef struct 
@@ -31,11 +32,29 @@ typedef struct
   int soft_verison;
   int hard_version;
 
+  bool get_radar_blind_flag;
+  bool get_radar_power_flag;
+  bool get_radar_rawSwitch_flag;
   //SN号
   char sn[20];
 }uavr_terrain;
 #pragma pack()
 
+#pragma pack(1)
+struct dm_byte1
+{
+  uint8_t tail:1;
+  uint8_t head:1;
+  uint8_t i:6;
+};
+#pragma pack()
+
+union dm_byte
+{
+  uint8_t frame_flag;
+  struct dm_byte1 flag;
+};
+
 #pragma pack(1)
 typedef struct 
 {
@@ -47,14 +66,86 @@ typedef struct
   bool get_radar_sn_flag;
 }moocib_part_radar_msg;
 #pragma pack()
+#pragma pack(1)
+typedef struct 
+{
+  uint8_t target_num;
+  uint16_t power_level;
+  uint16_t crc;
+  uint16_t warn;
+  union dm_byte byte7;
+  uint8_t buf[150];
+}DM_RADAR;
+#pragma pack()
+#pragma pack(1)
+typedef struct 
+{
+  uint8_t target_num;
+  uint16_t time_delay;
+  uint16_t crc;
+  uint16_t err_num;
+  union dm_byte byte7;
+
+  uint8_t RawData[25 * 2];
+}DM_4dTRADAR;
+#pragma pack()
+#pragma pack(1)
+typedef struct 
+{
+  uint8_t target_num;
+  uint16_t time_delay;
+  uint16_t err_num;
+
+  uint8_t RawData[25 * 2];
+}DM_4dTRADAR_tofmu;
+#pragma pack()
+#pragma pack(1)
+typedef struct 
+{
+  uint8_t target_num;
+  uint16_t time_delay;
+  uint16_t crc;
+  uint16_t warn;
+  union dm_byte byte7;
+
+  uint8_t RawData[256 * 5];
+}DM_4dFRADAR;
+#pragma pack()
+typedef struct 
+{
+  char version[11];
+  int soft_verison;
+  char sn[20];
+
+  bool get_radar_ver_flag;
 
+}DM_4D_REDARVER;
+extern DM_4D_REDARVER DM_4DB_info;
+extern bool DM4Dmsg_send_fmu;
+extern DM_4dTRADAR DM_T4d;
+extern DM_4dTRADAR DM_BT4d;
+extern bool F4DB_send_flag;
+extern uint8_t DM4dt_recv_flag;
+extern uint8_t DM4dbt_recv_flag;
 extern uavr_terrain uavr56_info;
 extern uavr_terrain mimo_ter_info; 
 extern moocib_part_radar_msg Mocib_radar_part;
-
+extern DM_RADAR DM_T_info,FMU_DM_info;
+extern Connect_check DM_status;
+extern Connect_check DM_4dstatus;
+extern uint8_t DM_recv_flag;
+extern DM_4dFRADAR DM_B4d;
+extern uavr_obs DM_f_info;
+extern int16_t F_4DRadar[3][3];
+extern int16_t B_4DRadar[3][3];
+extern DM_4dTRADAR_tofmu D4T_tofmu;
+extern DM_4dTRADAR_tofmu D4BT_tofmu;
+extern bool F4DT_send_flag;
+extern uavr_terrain DM_ter_info;
 void can_recv_mocib_terrain(uint8_t *data);
 void can_recv_enzhao_terrain(uint32_t CanID, uint8_t data[], uint8_t len);
 void can_recv_mocib_T_terrain(uint32_t CanID, uint8_t data[], uint8_t len);
 void DM_Fobs_recieved_hookfuction(uint32_t cellCanID,uint8_t data[], uint8_t len);
+void DM_terrain_recieved_hookfuction(uint32_t cellCanID,uint8_t data[], uint8_t len);
 void DM_Bobs_recieved_hookfuction(uint32_t cellCanID,uint8_t data[], uint8_t len);
 #endif 

+ 26 - 0
user_inc/usart_data_handle.h

@@ -71,6 +71,11 @@ enum vklink_msgid
 	_MSGID_DEV_LIST = 26,  // 设备SN,软硬件管理
 	_MSGID_HEART = 27,     // 心跳检测
 	_MSGID_360RADAR = 30,     //360雷达
+	_MSGID_DMRADAR = 31,     //电目雷达测试
+	_MSGID_F4DRADAR = 32,     //电目4d前避障雷达测试
+	_MSGID_B4DRADAR = 33,     //电目4d后避障雷达测试
+	_MSGID_FT4DRADAR = 34,     //电目4d前避障分段高度
+	_MSGID_BT4DRADAR = 35,     // 电目4d后避障分段高度
 	_MSGID_UPDATA = 200,   // 升级信息
 	_MSGID_CANDEBUG = 213, // CAN调试
 
@@ -88,7 +93,12 @@ enum vklink_MSGID_SET
 	MSGID_SET_F_RADAR = 1,		  // 设置前雷达
 	MSGID_SET_B_RADAR = 2,		  // 设置后雷达
 	MSGID_SET_T_RADAR = 6,		  // 设置防地雷达
+	MSGID_SET_TR_BLIND = 7,       //设置雷达盲区
+	MSGID_SET_BR_POWER = 8,       //设置雷达能量
+		MSGID_SET_R_FUNC = 9,         //设置电目雷达功能
 	MSGID_SET_GEELY = 10,		  // 设置轩浮发动机
+	
+		MSGID_SET_RAW_SWITCH = 15,    //设置DM雷达原始数据开关
 	MSGID_SET_VOL = 20,			  // 设置电压
 	MSGID_SET_MIMO_FLOW = 21,	  // 设置恩曌流量计系数
 	MSGID_SET_FLOW_BACKGROUND = 22,//清除流量背景
@@ -104,6 +114,12 @@ enum vklink_MSGID_SET
 	MSGID_SET_RESIWIRE_BLOWN = 60,// 熔断电阻丝
 	MSGID_SET_CHURN_RESET = 61,	  // 绞龙复位
 	MSGID_SET_CHURN_SIZE = 64, //设置绞龙型号
+	MSGID_SET_FRADAR_SN = 98,     // 设置雷达SN号
+	MSGID_SET_BRADAR_SN = 99,     // 设置雷达SN号
+	MSGID_SET_TRADAR_SN = 100,    // 设置雷达SN号
+	MSGID_SET_4DFRADAR_SN = 102,    // 设置4D雷达SN号
+	MSGID_SET_4DBRADAR_SN = 103,    // 设置4D雷达SN号
+	MSGID_SET_4DTRADAR_SN = 104,    // 设置4D雷达SN号
 };
 
 
@@ -165,6 +181,16 @@ typedef struct
 	short UAV_type;
 	short thr_pwm;
 	short Candebug_flag; // can调试 0开 1关
+	int pos_x1;           //经度
+	int pos_y1;			 //纬度
+	float QuaterQ0;
+	float QuaterQ1;
+	float QuaterQ2;
+	float QuaterQ3;
+	float pos_x;
+	float pos_y;
+	float pos_z;
+	float pos_flag;
 } plane_para;
 #pragma pack()
 extern plane_para planep;

+ 106 - 16
user_src/main_task.c

@@ -20,6 +20,7 @@
 #include "soft_update.h"
 #include "soft_obstacle.h"
 #include "soft_water.h"
+#include "soft_terrain.h"
 //#include "can_debug.h"
 
 uint8_t msg_buf[256] = {0};
@@ -283,23 +284,47 @@ void pmu_to_con_devtype_data(void)
         index = 6;
         send_devinfo_time.part_radar = false;
     }
-    if(Dev.Part_Fradar_Link.connect_status == COMP_NORMAL && send_devinfo_time.part_Fradar == true)
+    if ((Dev.Part_Fradar_Link.connect_status == COMP_NORMAL || Dev.DM_Part_Fradar_Link.connect_status == COMP_NORMAL) && send_devinfo_time.part_Fradar == true)
     {
-        msg_buf[index++] = DEV_PART_FRADAR;
-        memcpy(&msg_buf[index],&Dev.Part_radarF.facid,sizeof(Part_FBradar));
-        index += sizeof(Part_FBradar);
-        check_and_put_msg(msg_buf, index);
-        index = 6;
-        send_devinfo_time.part_Fradar = false;
+        if (Dev.Part_Fradar_Link.connect_status == COMP_NORMAL)
+        {
+            msg_buf[index++] = DEV_PART_FRADAR;
+            memcpy(&msg_buf[index], &Dev.Part_radarF.facid, sizeof(Part_FBradar));
+            index += sizeof(Part_FBradar);
+            check_and_put_msg(msg_buf, index);
+            index = 6;
+            send_devinfo_time.part_Fradar = false;
+        }
+        else if (Dev.DM_Part_Fradar_Link.connect_status == COMP_NORMAL)
+        {
+            msg_buf[index++] = DEV_PART_FRADAR;
+            memcpy(&msg_buf[index], &Dev.DM_Part_radarF.facid, sizeof(Part_Fradar));
+            index += sizeof(Part_Fradar);
+            check_and_put_msg(msg_buf, index);
+            index = 6;
+            send_devinfo_time.part_Fradar = false;
+        }
     }
-    if(Dev.Part_Bradar_Link.connect_status == COMP_NORMAL && send_devinfo_time.part_Bradar == true)
+    if((Dev.Part_Bradar_Link.connect_status == COMP_NORMAL || Dev.DM_Part_Bradar_Link.connect_status == COMP_NORMAL) && send_devinfo_time.part_Bradar == true)
     {
-        msg_buf[index++] = DEV_PART_BRADAR;
-        memcpy(&msg_buf[index],&Dev.Part_radarB.facid,sizeof(Part_FBradar));
-        index += sizeof(Part_FBradar);
-        check_and_put_msg(msg_buf, index);
-        index = 6;
-        send_devinfo_time.part_Bradar = false;
+        if (Dev.Part_Bradar_Link.connect_status == COMP_NORMAL)
+        {
+            msg_buf[index++] = DEV_PART_BRADAR;
+            memcpy(&msg_buf[index], &Dev.Part_radarB.facid, sizeof(Part_FBradar));
+            index += sizeof(Part_FBradar);
+            check_and_put_msg(msg_buf, index);
+            index = 6;
+            send_devinfo_time.part_Bradar = false;
+        }
+        else if (Dev.DM_Part_Bradar_Link.connect_status == COMP_NORMAL)
+        {
+            msg_buf[index++] = DEV_PART_BRADAR;
+            memcpy(&msg_buf[index], &Dev.DM_Part_radarB.facid, sizeof(Part_Fradar));
+            index += sizeof(Part_Fradar);
+            check_and_put_msg(msg_buf, index);
+            index = 6;
+            send_devinfo_time.part_Bradar = false;
+        }
     }
     if(Dev.Bms_Link.connect_status == COMP_NORMAL && send_devinfo_time.bms == true)
     {
@@ -645,6 +670,59 @@ void pmu_to_con_DM4DBradar_msg(void)
     msg_buf[index++] = (crc >> 8) & 0xff;
     usart1_send_msg(msg_buf, index);
 }
+//4D仿地雷达分段高度
+void pmu_to_con_DM4DTradar_data(void)
+{
+    uint8_t index = 0;
+    msg_buf[index++] = 0xFE;
+    msg_buf[index++] = 0;
+    msg_buf[index++] = 0;
+    msg_buf[index++] = 0x00;
+    msg_buf[index++] = 0x00;
+    msg_buf[index++] = _MSGID_FT4DRADAR;
+    DM4dt_recv_flag = 1;
+    memcpy(&msg_buf[index], &D4T_tofmu.target_num, 1);
+    index += 1;
+    memcpy(&msg_buf[index], &D4T_tofmu.time_delay, 2);
+    index += 2;
+    memcpy(&msg_buf[index], &D4T_tofmu.err_num, 2);
+    index += 2;
+    memcpy(&msg_buf[index], &D4T_tofmu.RawData, D4T_tofmu.target_num * 2);
+    index += D4T_tofmu.target_num * 2;
+    msg_buf[1] = index - 6;
+    uint16_t crc = Get_Crc16(msg_buf, index);
+    msg_buf[index++] = crc;
+    msg_buf[index++] = (crc >> 8) & 0xff;
+
+    usart1_send_msg(msg_buf, index);
+    DM4dt_recv_flag = 0;
+}
+void pmu_to_con_DM4DBTradar_data(void)
+{
+    uint8_t index = 0;
+    msg_buf[index++] = 0xFE;
+    msg_buf[index++] = 0;
+    msg_buf[index++] = 0;
+    msg_buf[index++] = 0x00;
+    msg_buf[index++] = 0x00;
+    msg_buf[index++] = _MSGID_BT4DRADAR;
+    DM4dbt_recv_flag = 1;
+    memcpy(&msg_buf[index], &D4BT_tofmu.target_num, 1);
+    index += 1;
+    memcpy(&msg_buf[index], &D4BT_tofmu.time_delay, 2);
+    index += 2;
+    memcpy(&msg_buf[index], &D4BT_tofmu.err_num, 2);
+    index += 2;
+    memcpy(&msg_buf[index], &D4BT_tofmu.RawData, D4BT_tofmu.target_num * 2);
+    index += D4BT_tofmu.target_num * 2;
+    msg_buf[1] = index - 6;
+    uint16_t crc = Get_Crc16(msg_buf, index);
+    msg_buf[index++] = crc;
+    msg_buf[index++] = (crc >> 8) & 0xff;
+
+    usart1_send_msg(msg_buf, index);
+    DM4dbt_recv_flag = 0;
+}
 /**
   * @file    Can_send_debug_to_app
   * @brief   can模拟
@@ -792,7 +870,18 @@ void pmu_to_fcu()
             pmu_send = PMU_SEND_YAOCE;
             break;
         }
-        if(DM4Dmsg_send_fmu == true || (pmu_to_DM4Dmsg_flag == true && DM4d_to_fmu10s_flag <= 10000))
+        if (F4DT_send_flag == true)
+        {
+            pmu_to_con_DM4DTradar_data();
+            F4DT_send_flag = false;
+        }
+        if(F4DB_send_flag == true)
+        {   
+            pmu_to_con_DM4DBTradar_data();
+            F4DB_send_flag = false;
+        }
+        if(DM4Dmsg_send_fmu == true || ((pmu_to_DM4Dmsg_flag == true && DM4d_to_fmu10s_flag <= 10000) && 
+           (Dev.DM_Part_Fradar_Link.connect_status == COMP_NORMAL || Dev.DM_Part_Bradar_Link.connect_status == COMP_NORMAL)))
         {
             pmu_to_con_DM4DBradar_msg();
             pmu_to_DM4Dmsg_flag = false;
@@ -899,7 +988,8 @@ void thread_main_task_handle(void *param)
 
         //获取设备版本和SN号
         get_device_version_and_sn();
-
+        //电目雷达
+        DM_obs_test();
         //写flash
         write_flash_function();
 

+ 19 - 0
user_src/soft_can.c

@@ -271,6 +271,25 @@ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
                     break;
                  }*/
             // VK设备升级
+            case CAN_NODEID_LASER:
+                switch (((RxHeader.ExtId) & MSG_ID_MASK) >> 19)
+                {
+                case CAN_MSGID_RADAR_INFO:
+                    DM_terrain_recieved_hookfuction(RxHeader.ExtId, RxData, RxHeader.DLC);
+                    break;
+                case CAN_MSGID_RADAR_VERSION_INFO:
+                    DM_terrain_recieved_hookfuction(RxHeader.ExtId, RxData, RxHeader.DLC);
+                    break;
+                case CAN_MSGID_FRADAR_INFO ... CAN_MSGID_FRADAR_VERSION_INFO:
+                    DM_Fobs_recieved_hookfuction(RxHeader.ExtId, RxData, RxHeader.DLC);
+                    break;
+                case CAN_MSGID_BRADAR_INFO ... CAN_MSGID_BRADAR_VERSION_INFO:
+                    DM_Bobs_recieved_hookfuction(RxHeader.ExtId, RxData, RxHeader.DLC);
+                    break;
+                default:
+                    break;
+                }
+                break;
             case CAN_NODEID_RADAR_UPDATE:
                 switch (((RxHeader.ExtId) & MSG_ID_MASK) >> 19)
                 {

+ 69 - 4
user_src/soft_device.c

@@ -12,7 +12,8 @@
 #include "math.h"
 #include "soft_update.h"
 #include "config.h"
-
+#include "usart_data_handle.h" 
+#include "soft_can.h"
 Device_type Dev = { .Flow.facid = 0xff};
 Weight_cal weight_order;
 uint8_t weight_init_count;
@@ -50,8 +51,8 @@ void update_device_type_data(void)
         Check_dev_link(&Dev.Eft_CanDev_Link[3],5000,(char *)&nozzle2,sizeof(water_dev));
         Check_dev_link(&Dev.Eft_CanDev_Link[4],5000,(char *)&nozzle3,sizeof(water_dev));
         Check_dev_link(&Dev.Eft_CanDev_Link[5],5000,(char *)&nozzle4,sizeof(water_dev));
-        //Check_dev_link(&Dev.Part_Fradar_Link,5000,(char *)&Dev.Part_radarF.facid,sizeof(Part_FBradar));
-        //Check_dev_link(&Dev.Part_Bradar_Link,5000,(char *)&Dev.Part_radarB.facid,sizeof(Part_FBradar));
+        Check_dev_link(&Dev.DM_Part_Fradar_Link,5000,(char *)&Dev.DM_Part_radarF.facid,sizeof(Part_Fradar));
+        Check_dev_link(&Dev.DM_Part_Bradar_Link,5000,(char *)&Dev.DM_Part_radarB.facid,sizeof(Part_Fradar));
         Check_dev_link(&Dev.Temperature_Sensor_Link,5000,(char *)Dev.Temperature_Sensor.facid,sizeof(Temperature_Sensor_info));
         check_radar_link_status();
     }
@@ -531,12 +532,36 @@ void update_device_type_data(void)
                 Dev.Part_radarB.angle_Velpart[i] = B_radar[i].Elevation;
             }
         }
+        if(Dev.DM_Part_Fradar_Link.connect_status == COMP_NORMAL && Dev.DM_Part_radarF.facid == FAC_DM_RF_4D)
+        {
+            Dev.DM_Part_radarF.X1 = F_4DRadar[0][0];
+            Dev.DM_Part_radarF.Y1 = F_4DRadar[0][1];
+            Dev.DM_Part_radarF.Z1 = F_4DRadar[0][2];
+            Dev.DM_Part_radarF.X2 = F_4DRadar[1][0];
+            Dev.DM_Part_radarF.Y2 = F_4DRadar[1][1];
+            Dev.DM_Part_radarF.Z2 = F_4DRadar[1][2];
+            Dev.DM_Part_radarF.X3 = F_4DRadar[2][0];
+            Dev.DM_Part_radarF.Y3 = F_4DRadar[2][1];
+            Dev.DM_Part_radarF.Z3 = F_4DRadar[2][2];
+        }
+        if(Dev.DM_Part_Bradar_Link.connect_status == COMP_NORMAL && Dev.DM_Part_radarB.facid == FAC_DM_RB_4D)
+        {
+             Dev.DM_Part_radarB.X1 = B_4DRadar[0][0];
+            Dev.DM_Part_radarB.Y1 = B_4DRadar[0][1];
+            Dev.DM_Part_radarB.Z1 = B_4DRadar[0][2];
+            Dev.DM_Part_radarB.X2 = B_4DRadar[1][0];
+            Dev.DM_Part_radarB.Y2 = B_4DRadar[1][1];
+            Dev.DM_Part_radarB.Z2 = B_4DRadar[1][2];
+            Dev.DM_Part_radarB.X3 = B_4DRadar[2][0];
+            Dev.DM_Part_radarB.Y3 = B_4DRadar[2][1];
+            Dev.DM_Part_radarB.Z3 = B_4DRadar[2][2];
+        }
         if(Dev.Temperature_Sensor_Link.connect_status == COMP_NORMAL)
         {
             Dev.Temperature_Sensor.Battery_positive_temperature = fplate.bms_plug_tempture;
             Dev.Temperature_Sensor.Battery_negative_temperature = fplate.bms_battery_tempture;
         }
-
+        
     }
 }
 
@@ -591,4 +616,44 @@ void set_eft_dev_canid_func( void )
     //设置5S ID
     if(auto_set_canid_flag == NEED_SET && HAL_GetTick() - set_eftdev_canid_time > 5000)
         auto_set_canid_flag = NO_NEED_SET;
+}
+void DM_obs_test( void )
+{
+    if(((Dev.DM_Part_Fradar_Link.connect_status != COMP_NORMAL) || (Dev.DM_Part_radarF.facid != FAC_DM_RF_4D)) && 
+        ((Dev.DM_Part_Bradar_Link.connect_status != COMP_NORMAL) || (Dev.DM_Part_radarB.facid != FAC_DM_RB_4D)))
+        return;
+
+    static uint32_t time_50hz = 0;
+    static uint32_t time_49hz = 0;
+    static uint32_t time_48hz = 0;
+    static uint32_t time_47hz = 0;
+    uint8_t can_buf[8] = {0};
+    if(Check_Timer_Ready(&time_50hz,20))
+    {
+        memcpy(&can_buf[0],&planep.QuaterQ0,4);
+        memcpy(&can_buf[4],&planep.QuaterQ1,4);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, 0x2345, CAN_ID_EXT);
+        //can_send_msg_normal((unsigned char *)&can_buf, 8, 0x2345);   
+    }
+
+    if(Check_Timer_Ready(&time_49hz,20))
+    {
+        memcpy(&can_buf[0],&planep.QuaterQ2,4);
+        memcpy(&can_buf[4],&planep.QuaterQ3,4);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, 0x2346, CAN_ID_EXT);
+    }
+
+    if(Check_Timer_Ready(&time_48hz,19))
+    {
+        memcpy(&can_buf[0],&planep.pos_x,4);
+        memcpy(&can_buf[4],&planep.pos_y,4);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, 0x2347, CAN_ID_EXT);
+    }
+
+    if(Check_Timer_Ready(&time_47hz,19))
+    {
+        memcpy(&can_buf[0],&planep.pos_z,4);
+        memcpy(&can_buf[4],&planep.pos_flag,4);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, 0x2348, CAN_ID_EXT);
+    }
 }

+ 101 - 2
user_src/soft_obstacle.c

@@ -6,7 +6,7 @@
 #include "soft_can.h"
 #include "math.h"
 #include "stdlib.h"
-
+#include "soft_terrain.h"
 uavr_obs uavr11_info = {.get_radar_sensi = 50};
 uavr_obs uavr12_info= {.get_radar_sensi = 50};
 uavr_obs mimo_f_info = {.signal_qulity = 0};
@@ -28,8 +28,107 @@ void can_recv_mocib_F_obstacle(uint8_t *data)
     uavr11_info.Link.connect_status = COMP_NORMAL;
     uavr11_info.Link.recv_time = HAL_GetTick();
 }
+void get_radar_blindAndPower_function( void )
+{
+    uint8_t can_buf[8] = {0};
+    uint32_t can_id = 0;
+    static uint32_t time_1hz = 0;
+    if(!Check_Timer_Ready(&time_1hz,_1_HZ_))
+        return;
 
-
+    if (DM_f_info.Link.connect_status == COMP_NORMAL && DM_f_info.get_radar_blind_flag == false)
+    {
+        can_id = 0xA81300;
+        put_date_to_can(can_buf, 0x8, 0, 0, 0, 0, 0, 0, 0X7);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
+    }
+    else if ((Dev.DM_Part_Fradar_Link.connect_status == COMP_NORMAL && Dev.DM_Part_radarF.facid == FAC_DM_RF_4D) &&
+             (DM_4DRADARMAG.get_DM4DF_Blind_spot_distance == false && DM4Dmsg_send_fmu == false))
+    {
+        can_id = 0xA81300;
+        put_date_to_can(can_buf, 0x8, 0, 0, 0, 0, 0, 0, 0X7);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
+    }
+    else if(DM_f_info.Link.connect_status == COMP_NORMAL && DM_f_info.get_radar_power_flag == false)
+    {
+        can_id = 0xA81300;
+        put_date_to_can(can_buf,0x9,0,0,0,0,0,0,0X7);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
+    }
+    else if(DM_f_info.Link.connect_status == COMP_NORMAL && DM_f_info.get_radar_rawSwitch_flag == false )
+    {
+        can_id = 0xA81300;
+        put_date_to_can(can_buf,0xB,0,0,0,0,0,0,0X7);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
+    }
+    else if((Dev.DM_Part_Fradar_Link.connect_status == COMP_NORMAL && Dev.DM_Part_radarF.facid == FAC_DM_RF_4D) && 
+            (DM_4DRADARMAG.get_dotcloud_switch_4DF == false && DM4Dmsg_send_fmu == false))
+    {
+        can_id = 0xA81300;
+        put_date_to_can(can_buf,0xB,0,0,0,0,0,0,0X7);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
+    }
+    if(DM_ter_info.Link.connect_status == COMP_NORMAL && DM_ter_info.get_radar_blind_flag == false)
+    {
+        can_id = 0x981300;
+        put_date_to_can(can_buf,0x8,0,0,0,0,0,0,0X7);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
+    }
+    else if(DM_ter_info.Link.connect_status == COMP_NORMAL && DM_ter_info.get_radar_power_flag == false)
+    {
+        can_id = 0x981300;
+        put_date_to_can(can_buf,0x9,0,0,0,0,0,0,0X7);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
+    }
+    else if(DM_ter_info.Link.connect_status == COMP_NORMAL && DM_ter_info.get_radar_rawSwitch_flag == false)
+    {
+        can_id = 0x981300;
+        put_date_to_can(can_buf,0xB,0,0,0,0,0,0,0X7);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
+    }
+    else if((Dev.DM_Part_Bradar_Link.connect_status == COMP_NORMAL && Dev.DM_Part_radarB.facid == FAC_DM_RB_4D) && 
+            (DM_4DRADARMAG.get_dotcloud_switch_4DB == false && DM4Dmsg_send_fmu == false))
+    {
+        can_id = 0xB81300;
+        put_date_to_can(can_buf,0xB,0,0,0,0,0,0,0X7);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
+    }
+    if ((Dev.DM_Part_Fradar_Link.connect_status == COMP_NORMAL && Dev.DM_Part_radarF.facid == FAC_DM_RF_4D) &&
+        (DM_4DRADARMAG.get_angel_4DF == false && DM4Dmsg_send_fmu == false))
+    {
+        can_id = 0xA81300;
+        put_date_to_can(can_buf, 0xD, 0, 0, 0, 0, 0, 0, 0X7);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
+    }
+    else if ((Dev.DM_Part_Fradar_Link.connect_status == COMP_NORMAL && Dev.DM_Part_radarF.facid == FAC_DM_RF_4D) &&
+             (DM_4DRADARMAG.get_ground_filter_4DF == false && DM4Dmsg_send_fmu == false))
+    {
+        can_id = 0xA81300;
+        put_date_to_can(can_buf, 0xF, 0, 0, 0, 0, 0, 0, 0X7);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
+    }
+    if ((Dev.DM_Part_Bradar_Link.connect_status == COMP_NORMAL && Dev.DM_Part_radarB.facid == FAC_DM_RB_4D) &&
+        (DM_4DRADARMAG.get_angel_4DB == false && DM4Dmsg_send_fmu == false))
+    {
+        can_id = 0xB81300;
+        put_date_to_can(can_buf, 0xD, 0, 0, 0, 0, 0, 0, 0X7);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
+    }
+    else if ((Dev.DM_Part_Bradar_Link.connect_status == COMP_NORMAL && Dev.DM_Part_radarB.facid == FAC_DM_RB_4D) &&
+             (DM_4DRADARMAG.get_ground_filter_4DB == false && DM4Dmsg_send_fmu == false))
+    {
+        can_id = 0xB81300;
+        put_date_to_can(can_buf, 0xF, 0, 0, 0, 0, 0, 0, 0X7);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
+    }
+    else if ((Dev.DM_Part_Bradar_Link.connect_status == COMP_NORMAL && Dev.DM_Part_radarB.facid == FAC_DM_RB_4D) &&
+             (DM_4DRADARMAG.get_DM4DB_Blind_spot_distance == false && DM4Dmsg_send_fmu == false))
+    {
+        can_id = 0xB81300;
+        put_date_to_can(can_buf, 0x8, 0, 0, 0, 0, 0, 0, 0X7);
+        Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
+    }
+}
 /**
   * @file    can_recv_mocib_B_obstacle
   * @brief   莫之比后避障障解析

+ 10 - 0
user_src/soft_radar_handle.c

@@ -28,6 +28,8 @@ short get_radar_info(uint8_t Radar_Type,uint8_t Info_Type)
             Ptr_T = &mimo_ter_info;
         else if(uavr56_info.Link.connect_status != COMP_NOEXIST)
             Ptr_T = &uavr56_info;
+        else if(DM_ter_info.Link.connect_status != COMP_NOEXIST)
+            Ptr_T = &DM_ter_info;
 
         if(Ptr_T->Link.connect_status == COMP_LOST) {return -2;}
         else if(Ptr_T == NULL) {return -1;}
@@ -148,6 +150,10 @@ void radar_version_check(void)
         }
         memcpy(&radar_version[2][0],&mimo_ter_info.version[0],10);
     }
+    else if(DM_ter_info.Link.connect_status == COMP_NORMAL)
+    {
+        memcpy(&radar_version[2][0],&DM_ter_info.version[0],10);
+    }
 }
 
 /**
@@ -166,6 +172,7 @@ void check_radar_link_status(void)
   Check_dev_link(&mimo_f_info.Link,3000,(char *)&mimo_f_info,sizeof(uavr_obs));
   Check_dev_link(&mimo_b_info.Link,3000,(char *)&mimo_b_info,sizeof(uavr_obs));
   Check_dev_link(&mimo_360_info,3000,NULL,0);
+  Check_dev_link(&DM_ter_info.Link,3000,(char *)&DM_ter_info,sizeof(uavr_terrain));
 }
 
 
@@ -741,6 +748,9 @@ void lidar_function(void)
     //给恩曌雷达发送姿态信息数据
     can_send_info_to_mimo();
 
+    //获取电目雷达盲区、能量、原始数据开关
+    get_radar_blindAndPower_function();
+    
     //设置360雷达分区数
     lidar360_set_TotalSect();
 

+ 600 - 3
user_src/soft_terrain.c

@@ -1,10 +1,11 @@
 #include "soft_terrain.h"
 #include "soft_device.h"
-#include "soft_obstacle.h"
+
 #include "soft_can.h"
 #include "string.h"
-
-
+#include "soft_version.h"
+#include "main_task.h"
+#include "usart_data_handle.h"
 uavr_terrain uavr56_info = {.get_radar_sensi = 50};
 uavr_terrain mimo_ter_info; 
 moocib_part_radar_msg Mocib_radar_part;
@@ -95,5 +96,601 @@ void can_recv_mocib_T_terrain(uint32_t CanID, uint8_t data[], uint8_t len)
     default:
         break;
     }
+}\
+DM_RADAR DM_T_info,FMU_DM_info; //原始数据
+Connect_check DM_status;
+Connect_check DM_4dstatus;
+uint8_t dm_i = 0;
+uint8_t DM_recv_flag = 0;
+uavr_obs DM_f_info;
+int16_t F_4DRadar[3][3] = {0}; // X Y Z
+DM_4dTRADAR DM_T4d;
+DM_4dTRADAR DM_BT4d;
+int dm_4dt_i = 0;
+uint8_t DM4dt_recv_flag = 0;
+uint8_t DM4dbt_recv_flag = 0;
+DM_4dTRADAR_tofmu D4T_tofmu;
+DM_4dTRADAR_tofmu D4BT_tofmu;
+bool F4DT_send_flag = false;
+DM_4dFRADAR DM_F4d;
+bool DM4Dmsg_send_fmu=false;
+uavr_terrain DM_ter_info;
+void DM_Fobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t len)
+{
+    if (cellCanID == 0XA01300) // 多点协议
+    {
+        DM_T_info.byte7.frame_flag = data[7];
+
+        DM_status.connect_status = COMP_NORMAL;
+        DM_status.recv_time = HAL_GetTick();
+
+        if (DM_T_info.byte7.flag.head != 0) // 头
+        {
+            memcpy(&DM_T_info.target_num, &data[0], 7);
+            if( DM_T_info.target_num > 30 )
+                    DM_T_info.target_num = 30;
+            dm_i = 0;
+            if (DM_T_info.target_num == 0 && DM_recv_flag == 0)
+            {
+                FMU_DM_info.target_num = 0;
+            }
+        }
+        else if (DM_T_info.byte7.flag.tail != 0) // 尾
+        {
+            if (DM_T_info.target_num != 1)
+            {
+                memcpy(&DM_T_info.buf[dm_i], &data[0], DM_T_info.target_num * 4 % 7);
+            }
+            else
+            {
+                memcpy(&DM_T_info.buf[dm_i], &data[0], 4);
+            }
+
+            if (DM_T_info.crc == Get_Crc16(&DM_T_info.buf[0], DM_T_info.target_num * 4) && DM_recv_flag == 0)
+            {
+                memcpy(&FMU_DM_info.target_num, &DM_T_info.target_num, DM_T_info.target_num * 4 + 8);
+                // memcpy(&FMU_DM_info.buf[0], &DM_T_info.buf[0], DM_T_info.target_num * 4);
+            }
+        }
+        else
+        {
+            memcpy(&DM_T_info.buf[dm_i], &data[0], 7);
+            dm_i += 7;
+        }
+        if (dm_i >= 255 - 7)
+        {
+            dm_i = 0;
+        }
+    }
+    else if (cellCanID == 0XA01301) // 单点协议
+    {
+        DM_f_info.Link.connect_status = COMP_NORMAL;
+        DM_f_info.Link.recv_time = HAL_GetTick();
+        Dev.Radar.facid_F = FAC_DM_RF;
+
+        DM_f_info.distance_y = data[3] + data[4] * 256;
+    }
+
+    // 4D前避障雷达协议 点云
+    /*if (cellCanID == 0XA01310)
+    {
+        DM_4dstatus.connect_status = COMP_NORMAL;
+        DM_4dstatus.recv_time = HAL_GetTick();
+        Dev.Part_radarF.facid = FAC_DM_RF_4D;
+
+        DM_F4d.byte7.frame_flag = data[7];
+
+        if (DM_F4d.byte7.flag.head != 0) // 头
+        {
+            memcpy(&DM_F4d.target_num, &data[0], 7);
+            if(DM_F4d.target_num > 130)
+                DM_F4d.target_num = 130;
+            dm_4df_i = 0;
+        }
+        else if (DM_F4d.byte7.flag.tail != 0) // 尾
+        {
+            if (DM_F4d.target_num != 1)
+            {
+                if ((DM_F4d.target_num * 5) % 7 != 0)
+                {
+                    memcpy(&DM_F4d.RawData[dm_4df_i], &data[0], (DM_F4d.target_num * 5) % 7);
+                    dm_4df_i += (DM_F4d.target_num * 5) % 7;
+                }
+                else
+                {
+                    memcpy(&DM_F4d.RawData[dm_4df_i], &data[0], 7);
+                    dm_4df_i += 7;
+                }
+            }
+            else
+            {
+                memcpy(&DM_F4d.RawData[dm_4df_i], &data[0], 5);
+                dm_4df_i += 5;
+            }
+            if (DM_F4d.crc == Get_Crc16(&DM_F4d.RawData[0], DM_F4d.target_num * 5) && DM4d_recv_flag == 0)
+            {
+                FMU_4D_info.target_num = DM_F4d.target_num;
+                memcpy(&FMU_4D_info.buf, &DM_F4d.RawData, DM_F4d.target_num * 5);
+                F4d_send_flag = true;
+            }
+        }
+        else
+        {
+            memcpy(&DM_F4d.RawData[dm_4df_i], &data[0], 7);
+            dm_4df_i += 7;
+        }
+        if (dm_4df_i >= 145 * 5)
+        {
+            dm_4df_i = 0;
+        }
+    }*/
+    // 4D前避障雷达协议 单点
+    if (cellCanID == 0XA01302)
+    {
+        F_4DRadar[0][0] = data[1] + data[2] * 256;
+        F_4DRadar[0][1] = data[3] + data[4] * 256;
+        F_4DRadar[0][2] = data[5] + data[6] * 256;
+
+        Dev.DM_Part_Fradar_Link.recv_time = HAL_GetTick();
+        Dev.DM_Part_Fradar_Link.connect_status = COMP_NORMAL;
+        Dev.DM_Part_radarF.facid = FAC_DM_RF_4D;
+    }
+    else if (cellCanID == 0XA01303)
+    {
+        F_4DRadar[1][0] = data[1] + data[2] * 256;
+        F_4DRadar[1][1] = data[3] + data[4] * 256;
+        F_4DRadar[1][2] = data[5] + data[6] * 256;
+    }
+    else if (cellCanID == 0XA01304)
+    {
+        F_4DRadar[2][0] = data[1] + data[2] * 256;
+        F_4DRadar[2][1] = data[3] + data[4] * 256;
+        F_4DRadar[2][2] = data[5] + data[6] * 256;
+    }
+    else if(cellCanID == 0XA01305)
+    {
+        DM_T4d.byte7.frame_flag = data[7];
+        if(DM_T4d.byte7.flag.head != 0 && data[0] == 25)
+            {
+                memcpy(&DM_T4d.target_num, &data[0], 7);
+                dm_4dt_i = 0;
+            }
+        else if(DM_T4d.byte7.flag.tail != 0)
+        {
+             if(data[0] == 0xFE)
+             {
+                memcpy(&DM_T4d.RawData[dm_4dt_i], &data[1], 2);
+                dm_4dt_i += 2;
+             }
+             if(DM_T4d.crc == Get_Crc16(&DM_T4d.RawData[0], DM_T4d.target_num * 2) && DM4dt_recv_flag == 0)
+             {
+                   D4T_tofmu.target_num = DM_T4d.target_num;
+                   D4T_tofmu.time_delay = DM_T4d.time_delay;
+                   D4T_tofmu.err_num = DM_T4d.err_num;
+                   memcpy(&D4T_tofmu.RawData, &DM_T4d.RawData, DM_T4d.target_num * 2);
+                   F4DT_send_flag = true;
+             }
+             else
+             {
+                static uint32_t tmpnum = 0;
+                tmpnum++;
+             }
+        }
+        else
+        {
+            if(data[0] == 0xFE)
+            {
+                memcpy(&DM_T4d.RawData[dm_4dt_i], &data[1], 6);
+                dm_4dt_i += 6;
+            }
+        }
+        if (dm_4dt_i >= 25 * 2)
+        {
+            dm_4dt_i = 0;
+        }
+    }
+    // 版本信息
+    if (cellCanID == 0XA81301 && data[0] == 0x1)
+    {
+        
+        uint32_t version_temp = 0;
+        DM_T_info.byte7.frame_flag = data[7];
+
+        if (DM_T_info.byte7.flag.head != 0) // 头
+        {
+            memcpy(&version_temp, &data[1], 4);
+            Int2String(version_temp, DM_f_info.sn, 9);
+            // 通过SN序号判断新旧boot
+            if ((version_temp % 10000000) < 2502999)
+                DM_f_info.version[3] = 'O';
+            else
+                DM_f_info.version[3] = 'N';
+
+            regist_dev_info(&dev_obsf, DEVICE_OBSF, false, DM_f_info.sn, 9, NULL, 0, NULL, 0, "dmter", 6);
+        }
+        else if (DM_T_info.byte7.flag.tail != 0) // 尾
+        {
+            memcpy(&version_temp, &data[1], 4);
+            Int2String(version_temp, &DM_f_info.version[4], 6);
+            DM_f_info.version[0] = 'D';
+            DM_f_info.version[1] = 'W';
+            DM_f_info.version[2] = '1';
+
+            regist_dev_info(&dev_obsf, DEVICE_OBSF, false, NULL, 0, DM_f_info.version, 10, NULL, 0, "dmter", 6);
+
+            DM_f_info.get_radar_ver_flag = true;
+            pmu_send = PMU_SEND_VERSION; // 旧版APP
+        }
+    }
+    else if (cellCanID == 0xA81301 && (data[0] == 0x8 || data[0] == 0x5))
+    {
+        if (data[0] == 0x8)
+            DM_f_info.get_radar_blind_flag = true;
+        pmu_set_ack(_MSGID_SET, MSGID_SET_TR_BLIND, 0x11, data[1] + data[2] * 256);
+    }
+    else if (cellCanID == 0xA81301 && (data[0] == 0x9 || data[0] == 0x7))
+    {
+        if (data[0] == 0x9)
+            DM_f_info.get_radar_power_flag = true;
+        pmu_set_ack(_MSGID_SET, MSGID_SET_BR_POWER, 0x11, data[1] + data[2] * 256);
+    }
+    else if (cellCanID == 0xA81301 && (data[0] == 0xA || data[0] == 0xB))
+    {
+        if (data[0] == 0xB)
+            DM_f_info.get_radar_rawSwitch_flag = true;
+        pmu_set_ack(_MSGID_SET, MSGID_SET_RAW_SWITCH, 0x11, data[1] + data[2] * 256);
+    }
+    else if (cellCanID == 0xA81301 && data[0] == 0x4)
+    {
+        pmu_set_ack(_MSGID_SET, MSGID_SET_R_FUNC, 0, data[1] + data[2] * 256);
+    }
+    else if (cellCanID == 0XA81302 && data[0] == 0x1)
+    {
+        uint32_t version_temp = 0;
+        DM_F4d.byte7.frame_flag = data[7];
+        if (DM_F4d.byte7.flag.head != 0) // 头
+        {
+            memcpy(&version_temp, &data[1], 4);
+            Int2String(version_temp, DM_f_info.sn, 9);
+            // 通过SN序号判断新旧boot
+            DM_f_info.version[3] = 'N';
+            regist_dev_info(&dev_obsf, DEVICE_OBSF, false, DM_f_info.sn, 9, NULL, 0, NULL, 0, "dmter", 6);
+        }
+        else if (DM_F4d.byte7.flag.tail != 0) // 尾
+        {
+            memcpy(&version_temp, &data[1], 4);
+            Int2String(version_temp, &DM_f_info.version[4], 6);
+            DM_f_info.version[0] = 'D';
+            DM_f_info.version[1] = '4';
+            DM_f_info.version[2] = 'F';
+            regist_dev_info(&dev_obsf, DEVICE_OBSF, false, NULL, 0, DM_f_info.version, 10, NULL, 0, "dmter", 6);
+            DM_f_info.get_radar_ver_flag = true;
+            pmu_send = PMU_SEND_VERSION; // 旧版APP
+        }
+    }
+    else if (cellCanID == 0xA81302 && (data[0] == 0xD || data[0] == 0xC))
+    {
+        if (data[0] == 0xD)
+            DM_4DRADARMAG.get_angel_4DF = true;
+        DM_4DRADARMAG.angel_4DF = data[1] + data[2] * 256;
+        DM4Dmsg_send_fmu = true;
+    }
+    else if (cellCanID == 0xA81302 && (data[0] == 0xF || data[0] == 0xE))
+    {
+        if (data[0] == 0xF)
+            DM_4DRADARMAG.get_ground_filter_4DF = true;
+        DM_4DRADARMAG.ground_filter_4DF = data[1] + data[2] * 256;
+        DM4Dmsg_send_fmu = true;
+    }
+    else if (cellCanID == 0xA81302 && (data[0] == 0xA || data[0] == 0xB))
+    {
+        if (data[0] == 0xB)
+            DM_4DRADARMAG.get_dotcloud_switch_4DF = true;
+        DM_4DRADARMAG.dotcloud_switch_4DF = data[1] + data[2] * 256;
+        DM4Dmsg_send_fmu = true;
+    }
+    else if (cellCanID == 0xA81302 && (data[0] == 0x8 || data[0] == 0x5))
+    {
+        if (data[0] == 0x8)
+            DM_4DRADARMAG.get_DM4DF_Blind_spot_distance = true;
+        DM_4DRADARMAG.DM4DF_Blind_spot_distance = data[1] + data[2] * 256;
+        DM4Dmsg_send_fmu = true;
+    }
+    /*else if(cellCanID == 0xA81302 && (data[0] == 0x1))
+    {
+
+    }*/
 }
+int16_t B_4DRadar[3][3];
+int dm_4dbt_i = 0;
+bool F4DB_send_flag = false;
+DM_4dFRADAR DM_B4d;
+DM_4D_REDARVER DM_4DB_info;
+void DM_Bobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t len)
+{
+    // 4D后避障雷达协议 点云
+    /*if (cellCanID == 0XB01310)
+    {
+        // DM_4dstatus.connect_status = COMP_NORMAL;
+        // DM_4dstatus.recv_time = HAL_GetTick();
+        Dev.Part_radarB.facid = FAC_DM_RB_4D;
+
+        DM_B4d.byte7.frame_flag = data[7];
+
+        if (DM_B4d.byte7.flag.head != 0) // 头
+        {
+            memcpy(&DM_B4d.target_num, &data[0], 7);
+            dm_4dB_i = 0;
+        }
+        else if (DM_B4d.byte7.flag.tail != 0) // 尾
+        {
+            if (DM_B4d.target_num != 1)
+            {
+                if ((DM_B4d.target_num * 5) % 7 != 0)
+                {
+                    memcpy(&DM_B4d.RawData[dm_4dB_i], &data[0], (DM_B4d.target_num * 5) % 7);
+                    dm_4dB_i += (DM_B4d.target_num * 5) % 7;
+                }
+                else
+                {
+                    memcpy(&DM_B4d.RawData[dm_4dB_i], &data[0], 7);
+                    dm_4dB_i += 7;
+                }
+            }
+            else
+            {
+                memcpy(&DM_B4d.RawData[dm_4dB_i], &data[0], 5);
+                dm_4dB_i += 5;
+            }
+            if (DM_4dstatus.connect_status != COMP_NORMAL)
+            {
+                if (DM_B4d.crc == Get_Crc16(&DM_B4d.RawData[0], DM_B4d.target_num * 5) && DM4dB_recv_flag == 0)
+                {
+                    FMU_4D_info.target_num = DM_B4d.target_num;
+                    memcpy(&FMU_4D_info.buf, &DM_B4d.RawData, DM_B4d.target_num * 5);
+                    F4d_send_flag = true;
+                }
+            }
+        }
+        else
+        {
+            memcpy(&DM_B4d.RawData[dm_4dB_i], &data[0], 7);
+            dm_4dB_i += 7;
+        }
+        if (dm_4dB_i >= 254 * 5)
+        {
+            dm_4dB_i = 0;
+        }
+    }*/
+    // 4D后避障雷达协议 单点
+    if (cellCanID == 0XB01302)
+    {
+        B_4DRadar[0][0] = data[1] + data[2] * 256;
+        B_4DRadar[0][1] = data[3] + data[4] * 256;
+        B_4DRadar[0][2] = data[5] + data[6] * 256;
+
+        Dev.DM_Part_Bradar_Link.recv_time = HAL_GetTick();
+        Dev.DM_Part_Bradar_Link.connect_status = COMP_NORMAL;
+        Dev.DM_Part_radarB.facid = FAC_DM_RB_4D;
+    }
+    else if (cellCanID == 0XB01303)
+    {
+        B_4DRadar[1][0] = data[1] + data[2] * 256;
+        B_4DRadar[1][1] = data[3] + data[4] * 256;
+        B_4DRadar[1][2] = data[5] + data[6] * 256;
+    }
+    else if (cellCanID == 0XB01304)
+    {
+        B_4DRadar[2][0] = data[1] + data[2] * 256;
+        B_4DRadar[2][1] = data[3] + data[4] * 256;
+        B_4DRadar[2][2] = data[5] + data[6] * 256;
+    }
+    else if(cellCanID == 0XB01305)
+    {
+        DM_BT4d.byte7.frame_flag = data[7];
+        if(DM_BT4d.byte7.flag.head != 0 && data[0] == 25)
+            {
+                memcpy(&DM_BT4d.target_num, &data[0], 7);
+                dm_4dbt_i = 0;
+            }
+        else if(DM_BT4d.byte7.flag.tail != 0)
+        {
+             if(data[0] == 0xFE)
+             {
+                memcpy(&DM_BT4d.RawData[dm_4dbt_i], &data[1], 2);
+                dm_4dbt_i += 2;
+             }
+             if(DM_BT4d.crc == Get_Crc16(&DM_BT4d.RawData[0], DM_BT4d.target_num * 2) && DM4dbt_recv_flag == 0)
+             {
+                   D4BT_tofmu.target_num = DM_BT4d.target_num;
+                   D4BT_tofmu.time_delay = DM_BT4d.time_delay;
+                   D4BT_tofmu.err_num = DM_BT4d.err_num;
+                   memcpy(&D4BT_tofmu.RawData, &DM_BT4d.RawData, DM_BT4d.target_num * 2);
+                   F4DB_send_flag = true;
+             }
+             else
+             {
+                static uint32_t tmpnum = 0;
+                tmpnum++;
+             }
+        }
+        else
+        {
+            if(data[0] == 0xFE)
+            {
+                memcpy(&DM_BT4d.RawData[dm_4dbt_i], &data[1], 6);
+                dm_4dbt_i += 6;
+            }
+        }
+        if (dm_4dbt_i >= 25 * 2)
+        {
+            dm_4dbt_i = 0;
+        }
+    }
+    else if (cellCanID == 0xB81302 && (data[0] == 0x1 || data[0] == 0x2))
+    {
+        uint32_t version_temp = 0;
+        DM_B4d.byte7.frame_flag = data[7];
+
+        if (DM_B4d.byte7.flag.head != 0) // 头
+        {
+            memcpy(&version_temp, &data[1], 4);
+            Int2String(version_temp, DM_4DB_info.sn, 9);
+            DM_4DB_info.version[3] = 'N';
+            regist_dev_info(&dev_obsb, DEVICE_OBSB, false, DM_4DB_info.sn, 9, NULL, 0, NULL, 0, "dmter", 6);
+        }
+        else if (DM_B4d.byte7.flag.tail != 0) // 尾
+        {
+            memcpy(&version_temp, &data[1], 4);
+            Int2String(version_temp, &DM_4DB_info.version[4], 6);
+            DM_4DB_info.version[0] = 'D';
+            DM_4DB_info.version[1] = '4';
+            DM_4DB_info.version[2] = 'B';
+
+            regist_dev_info(&dev_obsb, DEVICE_OBSB, false, NULL, 0, DM_4DB_info.version, 10, NULL, 0, "dmter", 6);
+
+            DM_4DB_info.get_radar_ver_flag = true;
+            pmu_send = PMU_SEND_VERSION; // 旧版APP
+        }
+    }
+    else if (cellCanID == 0xB81302 && (data[0] == 0xA || data[0] == 0xB))
+    {
+        if (data[0] == 0xB)
+            DM_4DRADARMAG.get_dotcloud_switch_4DB = true;
+        DM_4DRADARMAG.dotcloud_switch_4DB = data[1] + data[2] * 256;
+        DM4Dmsg_send_fmu = true;
+    }
+    else if (cellCanID == 0xB81302 && (data[0] == 0xD || data[0] == 0xC))
+    {
+        if (data[0] == 0xD)
+            DM_4DRADARMAG.get_angel_4DB = true;
+        DM_4DRADARMAG.angel_4DB = data[1] + data[2] * 256;
+        DM4Dmsg_send_fmu = true;
+    }
+    else if (cellCanID == 0xB81302 && (data[0] == 0xF || data[0] == 0xE))
+    {
+        if (data[0] == 0xF)
+            DM_4DRADARMAG.get_ground_filter_4DB = true;
+        DM_4DRADARMAG.ground_filter_4DB = data[1] + data[2] * 256;
+        DM4Dmsg_send_fmu = true;
+    }
+    else if (cellCanID == 0xB81302 && (data[0] == 0x8 || data[0] == 0x5))
+    {
+        if (data[0] == 0x8)
+            DM_4DRADARMAG.get_DM4DB_Blind_spot_distance = true;
+        DM_4DRADARMAG.DM4DB_Blind_spot_distance = data[1] + data[2] * 256;
+        DM4Dmsg_send_fmu = true;
+    }
+}
+void DM_terrain_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t len)
+{
+    if (cellCanID == 0x901300) // 多点协议
+    {
+        DM_T_info.byte7.frame_flag = data[7];
+
+        DM_status.connect_status = COMP_NORMAL;
+        DM_status.recv_time = HAL_GetTick();
+
+        if (DM_T_info.byte7.flag.head != 0) // 头
+        {
+            memcpy(&DM_T_info.target_num, &data[0], 7);
+            if( DM_T_info.target_num > 30 )
+                    DM_T_info.target_num = 30;
+            dm_i = 0;
+            if (DM_T_info.target_num == 0 && DM_recv_flag == 0)
+            {
+                FMU_DM_info.target_num = 0;
+            }
+        }
+        else if (DM_T_info.byte7.flag.tail != 0) // 尾
+        {
+            if (DM_T_info.target_num != 1)
+            {
+                memcpy(&DM_T_info.buf[dm_i], &data[0], DM_T_info.target_num * 4 % 7);
+            }
+            else
+            {
+                memcpy(&DM_T_info.buf[dm_i], &data[0], 4);
+            }
+
+            if (DM_T_info.crc == Get_Crc16(&DM_T_info.buf[0], DM_T_info.target_num * 4) && DM_recv_flag == 0)
+            {
+                memcpy(&FMU_DM_info.target_num, &DM_T_info.target_num, DM_T_info.target_num * 4 + 8);
+                // memcpy(&FMU_DM_info.buf[0], &DM_T_info.buf[0], DM_T_info.target_num * 4);
+            }
+        }
+        else
+        {
+            memcpy(&DM_T_info.buf[dm_i], &data[0], 7);
+            dm_i += 7;
+        }
+        if (dm_i >= 255 - 7)
+        {
+            dm_i = 0;
+        }
+    }
+    else if (cellCanID == 0x901301) // 单点协议
+    {
+        DM_ter_info.Link.connect_status = COMP_NORMAL;
+        DM_ter_info.Link.recv_time = HAL_GetTick();
+        Dev.Radar.facid_T = FAC_DM_RT;
 
+        DM_ter_info.height = data[3] + data[4] * 256;
+    }
+
+    // 版本信息
+    if (cellCanID == 0x981301 && data[0] == 0x1)
+    {
+        uint32_t version_temp = 0;
+        DM_T_info.byte7.frame_flag = data[7];
+
+        if (DM_T_info.byte7.flag.head != 0) // 头
+        {
+            memcpy(&version_temp, &data[1], 4);
+            Int2String(version_temp, DM_ter_info.sn, 9);
+            // 通过SN序号判断新旧boot
+            if ((version_temp % 10000000) < 2502999)
+                DM_ter_info.version[3] = 'O';
+            else
+                DM_ter_info.version[3] = 'N';
+
+            regist_dev_info(&dev_ter, DEVICE_TERRA, false, DM_ter_info.sn, 9, NULL, 0, NULL, 0, "dmter", 6);
+        }
+        else if (DM_T_info.byte7.flag.tail != 0) // 尾
+        {
+            memcpy(&version_temp, &data[1], 4);
+            Int2String(version_temp, &DM_ter_info.version[4], 6);
+            DM_ter_info.version[0] = 'D';
+            DM_ter_info.version[1] = 'S';
+            DM_ter_info.version[2] = '1';
+
+            regist_dev_info(&dev_ter, DEVICE_TERRA, false, NULL, 0, DM_ter_info.version, 10, NULL, 0, "dmter", 6);
+
+            DM_ter_info.get_radar_ver_flag = true;
+            pmu_send = PMU_SEND_VERSION; // 旧版APP
+        }
+    }
+    else if (cellCanID == 0x981301 && (data[0] == 0x8 || data[0] == 0x5))
+    {
+        if (data[0] == 0x8)
+            DM_ter_info.get_radar_blind_flag = true;
+        pmu_set_ack(_MSGID_SET, MSGID_SET_TR_BLIND, 0x56, data[1] + data[2] * 256);
+    }
+    else if (cellCanID == 0x981301 && (data[0] == 0x9 || data[0] == 0x7))
+    {
+        if (data[0] == 0x9)
+            DM_ter_info.get_radar_power_flag = true;
+        pmu_set_ack(_MSGID_SET, MSGID_SET_BR_POWER, 0x56, data[1] + data[2] * 256);
+    }
+    else if (cellCanID == 0x981301 && (data[0] == 0xA || data[0] == 0xB))
+    {
+        if (data[0] == 0xB)
+            DM_ter_info.get_radar_rawSwitch_flag = true;
+        pmu_set_ack(_MSGID_SET, MSGID_SET_RAW_SWITCH, 0x56, data[1] + data[2] * 256);
+    }
+    else if (cellCanID == 0x981301 && data[0] == 0x4)
+    {
+        pmu_set_ack(_MSGID_SET, MSGID_SET_R_FUNC, 0, data[1] + data[2] * 256);
+    }
+   
+}

+ 66 - 3
user_src/soft_update.c

@@ -9,7 +9,7 @@
 #include "soft_crc.h"
 #include "usart_data_handle.h"
 #include "config.h"
-
+#include "soft_version.h"
 bool radar_update_flag = false;
 Radar Rupdate;
 /**
@@ -171,6 +171,10 @@ void Vk_Update_Device_Protocol(void)
             {
                 memcpy(&can_buf[5],"MZB",3);
             }
+            else if(Dev.DM_Part_radarF.facid == FAC_DM_RF_4D)
+            {
+                memcpy(&can_buf[5],"D4F",3);
+            }
             break;
         case UPDATE_OBS_B:
             if(Dev.Radar.facid_B == FAC_MIMO_RB || Dev.Part_radarB.facid == FAC_MIMO_RB)
@@ -181,6 +185,10 @@ void Vk_Update_Device_Protocol(void)
             {
                 memcpy(&can_buf[5],"MZB",3);
             }
+            else if(Dev.DM_Part_radarB.facid == FAC_DM_RB_4D)
+            {
+                memcpy(&can_buf[5],"D4B",3);
+            }
             break;
         case UPDATE_TERAIN:
             if(Dev.Radar.facid_T == FAC_MIMO_RT || Dev.Part_radarT.facid == FAC_MIMO_RT)
@@ -191,6 +199,13 @@ void Vk_Update_Device_Protocol(void)
             {
                 memcpy(&can_buf[5],"MZB",3);
             }
+            else if(Dev.Radar.facid_T == FAC_DM_RT)
+            {
+                /*if(Dev.Part_Tradar_Link.connect_status == COMP_NORMAL)
+                    memcpy(&can_buf[5],"D4T",3);
+                else*/
+                    memcpy(&can_buf[5],"DS1",3);
+            }
             break;
         case UPDATE_OBS360:
             break;
@@ -246,8 +261,24 @@ void Vk_Update_Device_Protocol(void)
         Can_Send_Msg_Func(CANID1, can_buf, 8, 0x481400, CAN_ID_EXT);   
 
         update_info.vk_dev_update_flag = false;
-
-        break;
+        if (dev_id == UPDATE_OBS_F)
+        {
+            if (Dev.DM_Part_radarF.facid == FAC_DM_RF_4D)
+                DM_f_info.get_radar_ver_flag = false;
+            memset(&dev_obsf, 0, sizeof(dev_version_content));
+        }
+        else if (dev_id == UPDATE_OBS_B)
+        {
+            if (Dev.DM_Part_radarB.facid == FAC_DM_RB_4D)
+                DM_4DB_info.get_radar_ver_flag = false;
+            memset(&dev_obsb, 0, sizeof(dev_version_content));
+        }
+        else if (dev_id == UPDATE_TERAIN)
+        {
+            if (Dev.Radar.facid_F == FAC_DM_RT)
+                DM_ter_info.get_radar_ver_flag = false;
+            memset(&dev_ter, 0, sizeof(dev_version_content));
+        }
     default:
         break;
     }
@@ -275,6 +306,12 @@ void Update_Dev_Bootversion_Function(uint8_t data[])
                 Dev.Part_Fradar_Link.recv_time = HAL_GetTick();
                 Dev.Part_radarF.facid = FAC_MOCIB_RF;
             }
+            else if(memcmp((char *)&data[1],"D4F",3) == 0)
+            {
+                Dev.DM_Part_Fradar_Link.recv_time = HAL_GetTick();
+                Dev.DM_Part_Fradar_Link.connect_status = COMP_NORMAL;
+                Dev.DM_Part_radarF.facid = FAC_DM_RF_4D;
+            }
             break;
         case UPDATE_OBS_B:
             if(memcmp((char *)&data[1],"TR0",3) == 0)
@@ -290,6 +327,16 @@ void Update_Dev_Bootversion_Function(uint8_t data[])
                 Dev.Part_Bradar_Link.recv_time = HAL_GetTick();
                 Dev.Part_radarB.facid = FAC_MOCIB_RB;
             }
+            else if(memcmp((char *)&data[1],"D4B",3) == 0)
+            {
+                Dev.DM_Part_Bradar_Link.recv_time = HAL_GetTick();
+                Dev.DM_Part_Bradar_Link.connect_status = COMP_NORMAL;
+                Dev.DM_Part_radarB.facid = FAC_DM_RB_4D;
+                // Dev.Part_Tradar_Link.recv_time = HAL_GetTick();
+                // Dev.Part_Tradar_Link.connect_status = COMP_NORMAL;
+                // Dev.Part_radarT.facid = FAC_DM_RF;
+            }
+            break;
             break;
         case UPDATE_TERAIN:
             if(memcmp((char *)&data[1],"TR0",3) == 0)
@@ -305,6 +352,22 @@ void Update_Dev_Bootversion_Function(uint8_t data[])
                 Dev.Part_Tradar_Link.connect_status = COMP_NORMAL;
                 Dev.Part_radarT.facid = FAC_MOCIB_RT;
             }
+            else if(memcmp((char *)&data[1],"DS1",3) == 0)
+            {
+                DM_ter_info.Link.connect_status = COMP_NORMAL;
+                DM_ter_info.Link.recv_time = HAL_GetTick();
+                DM_ter_info.Link.boot_flag = true;
+                Dev.Radar.facid_T = FAC_DM_RT;
+                DM_ter_info.version[0] = 'D';
+                DM_ter_info.version[1] = 'S';
+                DM_ter_info.version[2] = '1';
+                DM_ter_info.version[3] = 'N';
+                for(uint8_t i = 4;i < 10; i++)
+                {
+                    DM_ter_info.version[i] = '0';
+                }
+                regist_dev_info(&dev_ter,DEVICE_TERRA,false,NULL,0,DM_ter_info.version,10,NULL,0,"dmter",6);
+            }
             break; 
         case UPDATE_OBS360:
             break;

+ 20 - 0
user_src/soft_version.c

@@ -609,6 +609,26 @@ void get_radar_version_and_sn(void)
         radar_can_buf[6] = 0x75;
         Can_Send_Msg_Func(CANID1, radar_can_buf, 7, 0xFA, CAN_ID_STD);
     }
+    if(DM_ter_info.Link.connect_status == COMP_NORMAL && DM_ter_info.get_radar_ver_flag == false)
+    {
+        radar_can_buf[0] = 1;
+        radar_can_buf[7] = 7;
+        Can_Send_Msg_Func(CANID1, radar_can_buf, 8, 0x981300, CAN_ID_EXT);
+    }
+    else if((DM_f_info.Link.connect_status == COMP_NORMAL || Dev.DM_Part_Fradar_Link.connect_status ==  COMP_NORMAL) && DM_f_info.get_radar_ver_flag == false)
+    {
+        radar_can_buf[0] = 1;
+        radar_can_buf[7] = 7;
+        Can_Send_Msg_Func(CANID1, radar_can_buf, 8, 0xA81300, CAN_ID_EXT);
+        //can_send_msg_normal(radar_can_buf, 8, 0XA81300);
+    }
+    else if( Dev.DM_Part_Bradar_Link.connect_status == COMP_NORMAL &&  DM_4DB_info.get_radar_ver_flag == false)
+    {
+        radar_can_buf[0] = 1;
+        radar_can_buf[7] = 7;
+        Can_Send_Msg_Func(CANID1, radar_can_buf, 8, 0XB81300, CAN_ID_EXT);
+        //can_send_msg_normal(radar_can_buf, 8, 0XB81300);
+    }
 }
 
 

+ 1 - 1
user_src/soft_water.c

@@ -26,7 +26,7 @@ bool liquid_opening = false; //初始化
 int  liquid_aver_time = 0;
 uint8_t spary_type;
 uint8_t nozzle_type;
-bool DM4Dmsg_send_fmu=false;
+//bool DM4Dmsg_send_fmu=false;
 void liquid_recieved_hookfuction(uint32_t cellCanID,uint8_t data[], uint8_t len)
 {   
     Dev.Checklow_Link.connect_status = COMP_NORMAL;

+ 94 - 0
user_src/usart_data_handle.c

@@ -600,6 +600,52 @@ void thread_usart_task_entry(void *param)
                         Can_Send_Msg_Func(CANID2, can_buf, 8, 0x7011, CAN_ID_EXT);
                     }
                     break;*/
+                case MSGID_SET_4DFRADAR_SN:
+                {
+                    int radar_Sn = 0;
+                    uint8_t can_buf[8] = {0};
+
+                    radar_Sn = msgidset.content1 + (msgidset.content2 << 16);
+                    can_buf[0] = 2;
+                    memcpy(&can_buf[1],&radar_Sn,4);
+                    can_buf[7] = 7;
+                    Can_Send_Msg_Func(CANID1, can_buf, 8, 0XA81300, CAN_ID_EXT);
+                    DM_f_info.get_radar_ver_flag = false;
+                    dev_obsf.regist.sn = false;
+                    pmu_set_ack(_MSGID_SET,MSGID_SET_4DFRADAR_SN,msgidset.content1,msgidset.content2);
+                }
+                break;
+            case MSGID_SET_4DBRADAR_SN:
+                {
+                    int radar_Sn = 0;
+                    uint8_t can_buf[8] = {0};
+
+                    radar_Sn = msgidset.content1 + (msgidset.content2 << 16);
+                    can_buf[0] = 2;
+                    memcpy(&can_buf[1],&radar_Sn,4);
+                    can_buf[7] = 7;
+                    Can_Send_Msg_Func(CANID1, can_buf, 8, 0XB81300, CAN_ID_EXT);
+                    dev_obsb.regist.sn = false;
+                    DM_4DB_info.get_radar_ver_flag = false;
+                    //DM_b_info.get_radar_ver_flag = false;
+                    pmu_set_ack(_MSGID_SET,MSGID_SET_4DBRADAR_SN,msgidset.content1,msgidset.content2);
+                }
+                break;
+            case MSGID_SET_4DTRADAR_SN:
+                {
+                    int radar_Sn = 0;
+                    uint8_t can_buf[8] = {0};
+
+                    radar_Sn = msgidset.content1 + (msgidset.content2 << 16);
+                    can_buf[0] = 2;
+                    memcpy(&can_buf[1],&radar_Sn,4);
+                    can_buf[7] = 7;
+                    Can_Send_Msg_Func(CANID1, can_buf, 8, 0X981300, CAN_ID_EXT);
+                    DM_ter_info.get_radar_ver_flag = false;
+                    dev_ter.regist.sn = false; //重新获取sn
+                    pmu_set_ack(_MSGID_SET,MSGID_SET_4DTRADAR_SN,msgidset.content1,msgidset.content2);
+                }
+                break;
                 default:
                     break;
                 }
@@ -640,6 +686,54 @@ void thread_usart_task_entry(void *param)
                 memcpy(&radar_msg, &fcu_protocol.payload[8], 4);
                 switch (radar_id)
                 {
+                    case 1:
+                    can_buf[0] = 0XC;
+                    memcpy(&can_buf[1],&radar_msg,2);
+                    can_buf[7] = 7;
+                    Can_Send_Msg_Func(CANID1, can_buf, 8, 0XA81300, CAN_ID_EXT);
+                    break;
+                case 2:
+                    can_buf[0] = 0XE;
+                    memcpy(&can_buf[1],&radar_msg,2);
+                    can_buf[7] = 7;
+                    Can_Send_Msg_Func(CANID1, can_buf, 8, 0XA81300, CAN_ID_EXT);
+                    break;
+                case 3:
+                    can_buf[0] = 0XA;
+                    memcpy(&can_buf[1],&radar_msg,2);
+                    can_buf[7] = 7;
+                    Can_Send_Msg_Func(CANID1, can_buf, 8, 0XA81300, CAN_ID_EXT);
+                    break;
+                case 4:
+                    can_buf[0] = 0XC;
+                    memcpy(&can_buf[1],&radar_msg,2);
+                    can_buf[7] = 7;
+                    Can_Send_Msg_Func(CANID1, can_buf, 8, 0XB81300, CAN_ID_EXT);
+                    break;
+                case 5:
+                    can_buf[0] = 0XE;
+                    memcpy(&can_buf[1],&radar_msg,2);
+                    can_buf[7] = 7;
+                    Can_Send_Msg_Func(CANID1, can_buf, 8, 0XB81300, CAN_ID_EXT);
+                    break;
+                case 6:
+                    can_buf[0] = 0XA;
+                    memcpy(&can_buf[1],&radar_msg,2);
+                    can_buf[7] = 7;
+                    Can_Send_Msg_Func(CANID1, can_buf, 8, 0XB81300, CAN_ID_EXT);
+                    break;
+                case 7:
+                    can_buf[0] = 0X5;
+                    memcpy(&can_buf[1],&radar_msg,2);
+                    can_buf[7] = 7;
+                    Can_Send_Msg_Func(CANID1, can_buf, 8, 0XA81300, CAN_ID_EXT);
+                    break;
+                case 8:
+                    can_buf[0] = 0X5;
+                    memcpy(&can_buf[1],&radar_msg,2);
+                    can_buf[7] = 7;
+                    Can_Send_Msg_Func(CANID1, can_buf, 8, 0XB81300, CAN_ID_EXT);
+                    break;
                 case 9:
                 {
                     size = (uint8_t)radar_msg;