Browse Source

4D和左右

redaiyuyuyu 1 month ago
parent
commit
5d26a4851e

+ 3 - 0
Inc/soft_can.h

@@ -28,6 +28,9 @@ extern Radar Rupdate;
 //莫之比避障前后
 //莫之比避障前后
 #define CAN_OBSTACLE_1 (0x000EFF11)
 #define CAN_OBSTACLE_1 (0x000EFF11)
 #define CAN_OBSTACLE_2 (0x000EFF12)
 #define CAN_OBSTACLE_2 (0x000EFF12)
+//莫之比避障左右
+#define CAN_OBSTACLE_3 (0X000EFF13)
+#define CAN_OBSTACLE_4 (0x000EFF14)
 //莫之比仿地
 //莫之比仿地
 #define CAN_UAVH30_MSG (0x000EFF0B)
 #define CAN_UAVH30_MSG (0x000EFF0B)
 
 

+ 33 - 13
Inc/soft_obstacle.h

@@ -59,19 +59,23 @@ extern short obsbradar_sensitivity;
 #pragma pack(1)
 #pragma pack(1)
 typedef struct
 typedef struct
 {
 {
-    short angel_4DF;
-    short ground_filter_4DF;
-    short dotcloud_switch_4DF;
-    short angel_4DB;
-    short ground_filter_4DB;
-    short dotcloud_switch_4DB;
-
-    bool get_angel_4DF;
-    bool get_ground_filter_4DF;
-    bool get_angel_4DB;
-    bool get_ground_filter_4DB;
-    bool get_dotcloud_switch_4DF;
-    bool get_dotcloud_switch_4DB;
+    short angel_4DF; //角度
+    short ground_filter_4DF;//距离滤波
+    short dotcloud_switch_4DF;//点云
+    short angel_4DB;//角度
+    short ground_filter_4DB;//距离滤波
+    short dotcloud_switch_4DB;//点云
+    short DM4DF_Blind_spot_distance;//4D前雷达盲区距离
+    short DM4DB_Blind_spot_distance;//4D后雷达盲区距离
+
+    bool get_angel_4DF;//获取角度成功
+    bool get_ground_filter_4DF;//距离滤波成功
+    bool get_angel_4DB;//获取角度成功
+    bool get_ground_filter_4DB;//距离滤波成功
+    bool get_dotcloud_switch_4DF;//点云成功
+    bool get_dotcloud_switch_4DB;//点云成功
+    bool get_DM4DF_Blind_spot_distance;//4D前避障盲区距离
+    bool get_DM4DB_Blind_spot_distance;//4D后雷达盲区距离
 }_dev_par;
 }_dev_par;
 #pragma pack()
 #pragma pack()
 
 
@@ -112,12 +116,26 @@ typedef struct
   //char send_radar_sn_count; 和版本用一个count
   //char send_radar_sn_count; 和版本用一个count
   char sn[20];
   char sn[20];
 }uavr_obs;
 }uavr_obs;
+
+typedef struct 
+{
+  char version[11];
+  int soft_verison;
+  char sn[20];
+
+  bool get_radar_ver_flag;
+
+}DM_4D_REDARVER;
+
 #pragma pack()
 #pragma pack()
 extern uavr_obs uavr11_info;  
 extern uavr_obs uavr11_info;  
 extern uavr_obs uavr12_info;
 extern uavr_obs uavr12_info;
+extern uavr_obs uavr13_info;
+extern uavr_obs uavr14_info;
 extern uavr_obs mimo_f_info; 
 extern uavr_obs mimo_f_info; 
 extern uavr_obs mimo_b_info;
 extern uavr_obs mimo_b_info;
 extern uavr_obs DM_f_info;
 extern uavr_obs DM_f_info;
+extern DM_4D_REDARVER DM_4DB_info;
 //extern uavr_obs DM_b_info;
 //extern uavr_obs DM_b_info;
 #pragma pack(1)
 #pragma pack(1)
 
 
@@ -181,6 +199,8 @@ void can_recv_enzhao_obstacle(uint32_t cellCanID, uint8_t data[], uint8_t len);
 void send_mocib_radar_sensi(void);
 void send_mocib_radar_sensi(void);
 void can_recv_mocib_F_obstacle(uint8_t *data);
 void can_recv_mocib_F_obstacle(uint8_t *data);
 void can_recv_mocib_B_obstacle(uint8_t *data);
 void can_recv_mocib_B_obstacle(uint8_t *data);
+void can_recv_mocib_L_obstacle(uint8_t *data);
+void can_recv_mocib_R_obstacle(uint8_t *data);
 void can_sendmsg_uavr20(void);
 void can_sendmsg_uavr20(void);
 bool check_radar_update(void);
 bool check_radar_update(void);
 void can_recv_mocib_new360_obstacle(uint32_t cellCanID, uint8_t data[], uint8_t len);
 void can_recv_mocib_new360_obstacle(uint32_t cellCanID, uint8_t data[], uint8_t len);

+ 4 - 2
Inc/soft_p_2_c.h

@@ -66,6 +66,8 @@ enum vklink_MSGID_SET
 {
 {
 	MSGID_SET_F_RADAR = 1,		  // 设置前雷达
 	MSGID_SET_F_RADAR = 1,		  // 设置前雷达
 	MSGID_SET_B_RADAR = 2,		  // 设置后雷达
 	MSGID_SET_B_RADAR = 2,		  // 设置后雷达
+	MSGID_SET_L_RADAR = 3,        // 设置左雷达
+    MSGID_SET_R_RADAR = 4,        // 设置右雷达
 	MSGID_SET_T_RADAR = 6,		  // 设置防地雷达
 	MSGID_SET_T_RADAR = 6,		  // 设置防地雷达
 	MSGID_SET_TR_BLIND = 7,       //设置雷达盲区
 	MSGID_SET_TR_BLIND = 7,       //设置雷达盲区
     MSGID_SET_BR_POWER = 8,       //设置雷达能量
     MSGID_SET_BR_POWER = 8,       //设置雷达能量
@@ -178,11 +180,11 @@ typedef struct
 	short yaw;		   // 航向角
 	short yaw;		   // 航向角
 	short roll_angle;  // 0.01
 	short roll_angle;  // 0.01
 	short pitch_angle; // 0.01
 	short pitch_angle; // 0.01
-	short alt;
+	short alt;             //高度
 	short E_vel;	   // 东西速度
 	short E_vel;	   // 东西速度
 	short N_vel;	   // 南北速度
 	short N_vel;	   // 南北速度
 	short alt_vel;	   // 垂直速度
 	short alt_vel;	   // 垂直速度
-	short lock_status; // 0 上锁 1解锁
+	short lock_status; // 0 上锁 1解锁 4:在空中
 	short UAV_type;
 	short UAV_type;
 	short thr_pwm;
 	short thr_pwm;
 	short Candebug_flag; // can调试 0开 1关
 	short Candebug_flag; // can调试 0开 1关

+ 17 - 1
Inc/soft_seed_device.h

@@ -114,7 +114,9 @@ enum FACID
     FAC_DM_RT_4D = 36,  //DM 4d防地
     FAC_DM_RT_4D = 36,  //DM 4d防地
     FAC_DM_RF_4D = 37,  //DM 4d前避障
     FAC_DM_RF_4D = 37,  //DM 4d前避障
     FAC_DM_RB_4D = 38, //DM  4d后避障
     FAC_DM_RB_4D = 38, //DM  4d后避障
-
+    
+    FAC_MOCIB_RL = 39,  //莫之比左避障
+    FAC_MOCIB_RR = 40, //莫之比右避障
 };
 };
 typedef struct
 typedef struct
 {
 {
@@ -260,6 +262,20 @@ typedef struct
     uint16_t warn_B;
     uint16_t warn_B;
     uint16_t signal_B_qulity;
     uint16_t signal_B_qulity;
     short distance_B_Y_ori;
     short distance_B_Y_ori;
+
+    uint8_t facid_L;
+    short distance_L_Y;
+    short distance_L_X;
+    uint16_t warn_L;
+    uint16_t signal_L_qulity;
+    short distance_L_Y_ori;
+     
+    uint8_t facid_R;
+    short distance_R_Y;
+    short distance_R_X;
+    uint16_t warn_R;
+    uint16_t signal_R_qulity;
+    short distance_R_Y_ori;
 } Radar_info;
 } Radar_info;
 #pragma pack(0)
 #pragma pack(0)
 
 

+ 1 - 1
Inc/soft_timer.h

@@ -25,6 +25,6 @@ typedef struct
 extern Dev_timer devinfo_time;
 extern Dev_timer devinfo_time;
 
 
 void timer_function(void);
 void timer_function(void);
-extern bool vol_flag,engine_flag,devtype_flag,can_debug_flag,dev_version_flag,mimo360_radar_flag,DM_radar_flag,pmu_heart_flag;
+extern bool vol_flag,engine_flag,devtype_flag,can_debug_flag,dev_version_flag,mimo360_radar_flag,DM_radar_flag,pmu_heart_flag,pmu_to_DM4Dmsg_flag;
 uint32_t Get_Systimer_Us(void);
 uint32_t Get_Systimer_Us(void);
 #endif 
 #endif 

+ 7 - 0
Src/soft_can.c

@@ -337,6 +337,11 @@ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
       break;
       break;
     case CAN_UAVH30_MSG:
     case CAN_UAVH30_MSG:
       can_recv_mocib_terrain(RxData);
       can_recv_mocib_terrain(RxData);
+    case CAN_OBSTACLE_3:
+      can_recv_mocib_L_obstacle(RxData);
+      break;
+    case CAN_OBSTACLE_4:
+      can_recv_mocib_R_obstacle(RxData);
       break;
       break;
     default:
     default:
       can_recv_mocib_version_info(RxHeader.ExtId, RxData, RxHeader.DLC);
       can_recv_mocib_version_info(RxHeader.ExtId, RxData, RxHeader.DLC);
@@ -803,6 +808,8 @@ void check_radar_link_status()
   Check_dev_link(&uavr56_info.Link,3000,(char *)&uavr56_info,sizeof(uavr_terrain));
   Check_dev_link(&uavr56_info.Link,3000,(char *)&uavr56_info,sizeof(uavr_terrain));
   Check_dev_link(&uavr11_info.Link,3000,(char *)&uavr11_info,sizeof(uavr_obs));
   Check_dev_link(&uavr11_info.Link,3000,(char *)&uavr11_info,sizeof(uavr_obs));
   Check_dev_link(&uavr12_info.Link,3000,(char *)&uavr12_info,sizeof(uavr_obs));
   Check_dev_link(&uavr12_info.Link,3000,(char *)&uavr12_info,sizeof(uavr_obs));
+  Check_dev_link(&uavr13_info.Link,3000,(char *)&uavr13_info,sizeof(uavr_obs));
+  Check_dev_link(&uavr14_info.Link,3000,(char *)&uavr14_info,sizeof(uavr_obs));
   Check_dev_link(&mimo_f_info.Link,3000,(char *)&mimo_f_info,sizeof(uavr_obs));
   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_b_info.Link,3000,(char *)&mimo_b_info,sizeof(uavr_obs));
   Check_dev_link(&DM_ter_info.Link,3000,(char *)&DM_ter_info,sizeof(uavr_terrain));
   Check_dev_link(&DM_ter_info.Link,3000,(char *)&DM_ter_info,sizeof(uavr_terrain));

+ 62 - 4
Src/soft_obstacle.c

@@ -18,10 +18,13 @@
 
 
 uavr_obs uavr11_info = {.get_radar_sensi = 50};
 uavr_obs uavr11_info = {.get_radar_sensi = 50};
 uavr_obs uavr12_info= {.get_radar_sensi = 50};
 uavr_obs uavr12_info= {.get_radar_sensi = 50};
+uavr_obs uavr13_info= {.get_radar_sensi = 50};
+uavr_obs uavr14_info= {.get_radar_sensi = 50};
 uavr_obs mimo_f_info = {.signal_qulity = 0};
 uavr_obs mimo_f_info = {.signal_qulity = 0};
 uavr_obs mimo_b_info = {.signal_qulity = 0};
 uavr_obs mimo_b_info = {.signal_qulity = 0};
 
 
 uavr_obs DM_f_info;
 uavr_obs DM_f_info;
+DM_4D_REDARVER DM_4DB_info;
 /**
 /**
   * @file    can_recv_enzhao_obstacle
   * @file    can_recv_enzhao_obstacle
   * @brief   恩曌多点避障解析
   * @brief   恩曌多点避障解析
@@ -592,7 +595,47 @@ void can_recv_mocib_B_obstacle(uint8_t *data)
     uavr12_info.Link.connect_status = COMP_NORMAL;
     uavr12_info.Link.connect_status = COMP_NORMAL;
     uavr12_info.Link.recv_time = HAL_GetTick();
     uavr12_info.Link.recv_time = HAL_GetTick();
 }
 }
+/**
+  * @file    can_recv_mocib_L_obstacle
+  * @brief   莫之比左避障障解析
+  * @param   none
+  * @details 
+  * @author  ZHOU 
+ **/
+void can_recv_mocib_L_obstacle(uint8_t *data)
+{
+    uavr13_info.distance_x = (data[0] << 8) + data[1] - 32768;
+    uavr13_info.distance_y = (data[2] << 8) + data[3];
+
+    // if(abs(uavr12_info.distance_x) > 400)
+    // {
+    //     uavr12_info.distance_x = 0;
+    //     uavr12_info.distance_y = 0;
+    // }
+    uavr13_info.Link.connect_status = COMP_NORMAL;
+    uavr13_info.Link.recv_time = HAL_GetTick();
+}
+
+/**
+  * @file    can_recv_mocib_R_obstacle
+  * @brief   莫之比右避障障解析
+  * @param   none
+  * @details 
+  * @author  ZHOU 
+ **/
+void can_recv_mocib_R_obstacle(uint8_t *data)
+{
+    uavr14_info.distance_x = (data[0] << 8) + data[1] - 32768;
+    uavr14_info.distance_y = (data[2] << 8) + data[3];
 
 
+    // if(abs(uavr12_info.distance_x) > 400)
+    // {
+    //     uavr12_info.distance_x = 0;
+    //     uavr12_info.distance_y = 0;
+    // }
+    uavr14_info.Link.connect_status = COMP_NORMAL;
+    uavr14_info.Link.recv_time = HAL_GetTick();
+}
 uint32_t uavr20_ver_time = 0;
 uint32_t uavr20_ver_time = 0;
 
 
 uint32_t uavr20_sensi_time = 0;
 uint32_t uavr20_sensi_time = 0;
@@ -610,7 +653,8 @@ uint32_t uavr20_send_time = 0;
 void can_sendmsg_uavr20(void)
 void can_sendmsg_uavr20(void)
 {
 {
     if (uavr12_info.Link.connect_status == COMP_NORMAL || uavr11_info.Link.connect_status == COMP_NORMAL || 
     if (uavr12_info.Link.connect_status == COMP_NORMAL || uavr11_info.Link.connect_status == COMP_NORMAL || 
-        uavr56_info.Link.connect_status == COMP_NORMAL)
+        uavr56_info.Link.connect_status == COMP_NORMAL || uavr13_info.Link.connect_status == COMP_NORMAL ||
+        uavr14_info.Link.connect_status == COMP_NORMAL)
     {
     {
         //10hz发送
         //10hz发送
         if ((HAL_GetTick() - uavr20_send_time > 100) && planep.lock_status == 1)
         if ((HAL_GetTick() - uavr20_send_time > 100) && planep.lock_status == 1)
@@ -1378,10 +1422,17 @@ void get_radar_blindAndPower_function( void )
     if(!Check_Timer_Ready(&time_1hz,_1_HZ_))
     if(!Check_Timer_Ready(&time_1hz,_1_HZ_))
         return;
         return;
 
 
-    if(DM_f_info.Link.connect_status == COMP_NORMAL && DM_f_info.get_radar_blind_flag == false)
+    if (DM_f_info.Link.connect_status == COMP_NORMAL && DM_f_info.get_radar_blind_flag == false)
     {
     {
         can_id = 0xA81300;
         can_id = 0xA81300;
-        put_date_to_can(can_buf,0x8,0,0,0,0,0,0,0X7);
+        put_date_to_can(can_buf, 0x8, 0, 0, 0, 0, 0, 0, 0X7);
+        can_send_msg_normal(&can_buf[0], 8, can_id);
+    }
+    else if ((Dev.Part_Fradar_Link.connect_status == COMP_NORMAL && Dev.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_normal(&can_buf[0], 8, can_id);
         can_send_msg_normal(&can_buf[0], 8, can_id);
     }
     }
     else if(DM_f_info.Link.connect_status == COMP_NORMAL && DM_f_info.get_radar_power_flag == false)
     else if(DM_f_info.Link.connect_status == COMP_NORMAL && DM_f_info.get_radar_power_flag == false)
@@ -1421,7 +1472,7 @@ void get_radar_blindAndPower_function( void )
         put_date_to_can(can_buf,0xB,0,0,0,0,0,0,0X7);
         put_date_to_can(can_buf,0xB,0,0,0,0,0,0,0X7);
         can_send_msg_normal(&can_buf[0], 8, can_id);
         can_send_msg_normal(&can_buf[0], 8, can_id);
     }
     }
-    if((Dev.Part_Bradar_Link.connect_status == COMP_NORMAL && Dev.Part_radarB.facid == FAC_DM_RB_4D) && 
+    else if((Dev.Part_Bradar_Link.connect_status == COMP_NORMAL && Dev.Part_radarB.facid == FAC_DM_RB_4D) && 
             (DM_4DRADARMAG.get_dotcloud_switch_4DB == false && DM4Dmsg_send_fmu == false))
             (DM_4DRADARMAG.get_dotcloud_switch_4DB == false && DM4Dmsg_send_fmu == false))
     {
     {
         can_id = 0xB81300;
         can_id = 0xB81300;
@@ -1456,6 +1507,13 @@ void get_radar_blindAndPower_function( void )
         put_date_to_can(can_buf, 0xF, 0, 0, 0, 0, 0, 0, 0X7);
         put_date_to_can(can_buf, 0xF, 0, 0, 0, 0, 0, 0, 0X7);
         can_send_msg_normal(&can_buf[0], 8, can_id);
         can_send_msg_normal(&can_buf[0], 8, can_id);
     }
     }
+    else if ((Dev.Part_Bradar_Link.connect_status == COMP_NORMAL && Dev.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_normal(&can_buf[0], 8, can_id);
+    }
 }
 }
 // mimo_360info mimo360_info[MIMO_360_TotalSect];
 // mimo_360info mimo360_info[MIMO_360_TotalSect];
 
 

+ 55 - 5
Src/soft_p_2_c.c

@@ -196,6 +196,38 @@ short get_radar_info(uint8_t Radar_Type,uint8_t Info_Type)
                 return Ptr_O->distance_y;
                 return Ptr_O->distance_y;
         }
         }
     }
     }
+    else if(Radar_Type == MSGID_SET_L_RADAR)
+    {
+        if(uavr13_info.Link.connect_status != COMP_NOEXIST)
+        {
+            Ptr_O = &uavr13_info;
+        }
+        if(Ptr_O->Link.connect_status == COMP_LOST) {return -2;}
+        else if(Ptr_O == NULL) {return -1;}
+        else
+        {
+            if(Info_Type == OBS_X)
+                return Ptr_O->distance_x;
+            else if((Info_Type == OBS_Y))
+                return Ptr_O->distance_y;
+        }
+    }
+    else if(Radar_Type == MSGID_SET_R_RADAR)
+    {
+        if(uavr14_info.Link.connect_status != COMP_NOEXIST)
+        {
+            Ptr_O = &uavr14_info;
+        }
+        if(Ptr_O->Link.connect_status == COMP_LOST) {return -2;}
+        else if(Ptr_O == NULL) {return -1;}
+        else
+        {
+            if(Info_Type == OBS_X)
+                return Ptr_O->distance_x;
+            else if((Info_Type == OBS_Y))
+                return Ptr_O->distance_y;
+        }
+    }
     return 0;
     return 0;
 }
 }
 
 
@@ -696,8 +728,8 @@ void pmu_to_con_DM4DBradar_msg(void)
     msg_buf[index++] = 'K';
     msg_buf[index++] = 'K';
     msg_buf[index++] = 'Z';
     msg_buf[index++] = 'Z';
     msg_buf[index++] = '1';
     msg_buf[index++] = '1';
-    memcpy(&msg_buf[index],&DM_4DRADARMAG.angel_4DF,12);
-    index += 12;
+    memcpy(&msg_buf[index],&DM_4DRADARMAG.angel_4DF,16);
+    index += 16;
     msg_buf[1] = index - 6;
     msg_buf[1] = index - 6;
     crc = Get_Crc16(msg_buf, index);
     crc = Get_Crc16(msg_buf, index);
     msg_buf[index++] = crc;
     msg_buf[index++] = crc;
@@ -792,6 +824,7 @@ void pmu_to_con_devtype_data(void)
     }
     }
     else if(devinfo_time.flow == true)
     else if(devinfo_time.flow == true)
     {
     {
+        //Dev.Flow.facid = FAC_QIFEI_DOU;
         msg_buf[index++] = DEV_FLOW;
         msg_buf[index++] = DEV_FLOW;
         memcpy(&msg_buf[index],&Dev.Flow.facid,sizeof(Flow_info));
         memcpy(&msg_buf[index],&Dev.Flow.facid,sizeof(Flow_info));
         index += sizeof(Flow_info);
         index += sizeof(Flow_info);
@@ -825,7 +858,7 @@ void pmu_to_con_devtype_data(void)
         index += sizeof(Part_Fradar);
         index += sizeof(Part_Fradar);
         devinfo_time.part_Fradar = false;
         devinfo_time.part_Fradar = false;
     }
     }
-    else if((Dev.Part_Bradar_Link.connect_status == COMP_NORMAL && Dev.Part_radarF.facid == FAC_DM_RB_4D) && devinfo_time.part_Bradar == true)
+    else if((Dev.Part_Bradar_Link.connect_status == COMP_NORMAL && Dev.Part_radarB.facid == FAC_DM_RB_4D) && devinfo_time.part_Bradar == true)
     {
     {
         msg_buf[index++] = DEV_PART_BRADAR;
         msg_buf[index++] = DEV_PART_BRADAR;
         memcpy(&msg_buf[index],&Dev.Part_radarB.facid,sizeof(Part_Fradar));
         memcpy(&msg_buf[index],&Dev.Part_radarB.facid,sizeof(Part_Fradar));
@@ -1227,6 +1260,7 @@ void pmu_to_con_ack_data()
  **/
  **/
 uint8_t pmu_send = PMU_SEND_YAOCE;
 uint8_t pmu_send = PMU_SEND_YAOCE;
 uint32_t utc_time = 0;
 uint32_t utc_time = 0;
+uint32_t DM4d_to_fmu10s_flag = 0;
 void pmu_to_fcu()
 void pmu_to_fcu()
 {
 {
     //串口阻塞 和雷达升级不发送
     //串口阻塞 和雷达升级不发送
@@ -1312,10 +1346,12 @@ void pmu_to_fcu()
             pmu_to_con_DM4DFradar_data();
             pmu_to_con_DM4DFradar_data();
             F4d_send_flag = false;
             F4d_send_flag = false;
         }
         }
-        if(DM4Dmsg_send_fmu == true)
+        if(DM4Dmsg_send_fmu == true || (pmu_to_DM4Dmsg_flag == true && DM4d_to_fmu10s_flag <= 10000))
         {
         {
             pmu_to_con_DM4DBradar_msg();
             pmu_to_con_DM4DBradar_msg();
+            DM4d_to_fmu10s_flag = HAL_GetTick();
             DM4Dmsg_send_fmu = false;
             DM4Dmsg_send_fmu = false;
+            pmu_to_DM4Dmsg_flag = false;
         }
         }
     }
     }
 }
 }
@@ -1906,6 +1942,7 @@ void uart_recv_con_msg()
                     can_buf[7] = 7;
                     can_buf[7] = 7;
                     can_send_msg_normal(can_buf,8,0xB81300);
                     can_send_msg_normal(can_buf,8,0xB81300);
                     dev_obsb.regist.sn = false;
                     dev_obsb.regist.sn = false;
+                    
                     //DM_b_info.get_radar_ver_flag = false;
                     //DM_b_info.get_radar_ver_flag = false;
                     pmu_set_ack(_MSGID_SET,MSGID_SET_BRADAR_SN,msgidset.content1,msgidset.content2);
                     pmu_set_ack(_MSGID_SET,MSGID_SET_BRADAR_SN,msgidset.content1,msgidset.content2);
                 }
                 }
@@ -1951,6 +1988,7 @@ void uart_recv_con_msg()
                     can_buf[7] = 7;
                     can_buf[7] = 7;
                     can_send_msg_normal(can_buf,8,0xB81300);
                     can_send_msg_normal(can_buf,8,0xB81300);
                     dev_obsb.regist.sn = false;
                     dev_obsb.regist.sn = false;
+                    DM_4DB_info.get_radar_ver_flag = false;
                     //DM_b_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);
                     pmu_set_ack(_MSGID_SET,MSGID_SET_4DBRADAR_SN,msgidset.content1,msgidset.content2);
                 }
                 }
@@ -2019,7 +2057,19 @@ void uart_recv_con_msg()
                     memcpy(&can_buf[1],&radar_msg,2);
                     memcpy(&can_buf[1],&radar_msg,2);
                     can_buf[7] = 7;
                     can_buf[7] = 7;
                     can_send_msg_normal(can_buf,8,0XB81300);
                     can_send_msg_normal(can_buf,8,0XB81300);
-                    break;   
+                    break;
+                case 7:
+                    can_buf[0] = 0X5;
+                    memcpy(&can_buf[1],&radar_msg,2);
+                    can_buf[7] = 7;
+                    can_send_msg_normal(can_buf,8,0XA81300);
+                    break;
+                case 8:
+                    can_buf[0] = 0X5;
+                    memcpy(&can_buf[1],&radar_msg,2);
+                    can_buf[7] = 7;
+                    can_send_msg_normal(can_buf,8,0XB81300);
+                    break;
                 default:
                 default:
                     break;
                     break;
                 }
                 }

+ 20 - 1
Src/soft_seed_device.c

@@ -681,7 +681,17 @@ void DM_obs_test( void )
     if(Check_Timer_Ready(&time_47hz,19))
     if(Check_Timer_Ready(&time_47hz,19))
     {
     {
         memcpy(&can_buf[0],&planep.pos_z,4);
         memcpy(&can_buf[0],&planep.pos_z,4);
-        memcpy(&can_buf[4],&planep.pos_flag,4);
+        memcpy(&can_buf[4],&planep.alt,2);
+        static uint16_t fmu_lock_status = 0;
+        if(planep.lock_status == 4)
+        {
+            fmu_lock_status = 1;
+        }
+        else
+        {
+            fmu_lock_status = 0;
+        }
+        memcpy(&can_buf[6],&fmu_lock_status,2);
         can_send_msg_normal((unsigned char *)&can_buf, 8, 0x2348);
         can_send_msg_normal((unsigned char *)&can_buf, 8, 0x2348);
     }
     }
 }
 }
@@ -1131,6 +1141,15 @@ void  update_device_type_data(void)
             Dev.Radar.distance_B_X  = get_radar_info(MSGID_SET_B_RADAR,OBS_X);
             Dev.Radar.distance_B_X  = get_radar_info(MSGID_SET_B_RADAR,OBS_X);
             Dev.Radar.signal_B_qulity = mimo_b_info.signal_qulity;
             Dev.Radar.signal_B_qulity = mimo_b_info.signal_qulity;
             
             
+            Dev.Radar.distance_L_Y = get_radar_info(MSGID_SET_L_RADAR,OBS_Y);
+            Dev.Radar.distance_L_Y_ori = Dev.Radar.distance_L_Y;
+            Dev.Radar.distance_L_X = get_radar_info(MSGID_SET_L_RADAR,OBS_X);
+            Dev.Radar.signal_L_qulity = 0;
+
+            Dev.Radar.distance_R_Y = get_radar_info(MSGID_SET_R_RADAR,OBS_Y);
+            Dev.Radar.distance_R_Y_ori = Dev.Radar.distance_R_Y;
+            Dev.Radar.distance_R_X = get_radar_info(MSGID_SET_R_RADAR,OBS_X);
+            Dev.Radar.signal_R_qulity = 0;
 
 
             terrain_is_link = Dev.Radar.height_T  > -1? true:false;
             terrain_is_link = Dev.Radar.height_T  > -1? true:false;
             obs_f_is_link = Dev.Radar.distance_F_Y  > -1? true:false;
             obs_f_is_link = Dev.Radar.distance_F_Y  > -1? true:false;

+ 67 - 2
Src/soft_terrain.c

@@ -358,6 +358,7 @@ void DM_Fobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t le
     // 版本信息
     // 版本信息
     if (cellCanID == 0XA81301 && data[0] == 0x1)
     if (cellCanID == 0XA81301 && data[0] == 0x1)
     {
     {
+
         uint32_t version_temp = 0;
         uint32_t version_temp = 0;
         DM_T_info.byte7.frame_flag = data[7];
         DM_T_info.byte7.frame_flag = data[7];
 
 
@@ -409,6 +410,30 @@ void DM_Fobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t le
     {
     {
         pmu_set_ack(_MSGID_SET, MSGID_SET_R_FUNC, 0, data[1] + data[2] * 256);
         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))
     else if (cellCanID == 0xA81302 && (data[0] == 0xD || data[0] == 0xC))
     {
     {
         if (data[0] == 0xD)
         if (data[0] == 0xD)
@@ -430,10 +455,17 @@ void DM_Fobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t le
         DM_4DRADARMAG.dotcloud_switch_4DF = data[1] + data[2] * 256;
         DM_4DRADARMAG.dotcloud_switch_4DF = data[1] + data[2] * 256;
         DM4Dmsg_send_fmu = true;
         DM4Dmsg_send_fmu = true;
     }
     }
-    else if(cellCanID == 0xA81302 && (data[0] == 0x1))
+    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] = {0}; // X Y Z
 int16_t B_4DRadar[3][3] = {0}; // X Y Z
 DM_4dFRADAR DM_B4d;
 DM_4dFRADAR DM_B4d;
@@ -519,6 +551,32 @@ void DM_Bobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t le
         B_4DRadar[2][1] = data[3] + data[4] * 256;
         B_4DRadar[2][1] = data[3] + data[4] * 256;
         B_4DRadar[2][2] = data[5] + data[6] * 256;
         B_4DRadar[2][2] = data[5] + data[6] * 256;
     }
     }
+    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))
     else if (cellCanID == 0xB81302 && (data[0] == 0xA || data[0] == 0xB))
     {
     {
         if (data[0] == 0xB)
         if (data[0] == 0xB)
@@ -540,4 +598,11 @@ void DM_Bobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t le
         DM_4DRADARMAG.ground_filter_4DB = data[1] + data[2] * 256;
         DM_4DRADARMAG.ground_filter_4DB = data[1] + data[2] * 256;
         DM4Dmsg_send_fmu = true;
         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;
+    }
 }
 }

+ 3 - 2
Src/soft_timer.c

@@ -18,7 +18,7 @@ extern uint32_t user_timer_cnt;
  **/
  **/
 bool vol_flag = false, devtype_flag = false, engine_flag = false,
 bool vol_flag = false, devtype_flag = false, engine_flag = false,
      can_debug_flag = false, dev_version_flag = false, mimo360_radar_flag = false,DM_radar_flag = false,
      can_debug_flag = false, dev_version_flag = false, mimo360_radar_flag = false,DM_radar_flag = false,
-     pmu_heart_flag = false;
+     pmu_heart_flag = false,pmu_to_DM4Dmsg_flag = false;
 
 
 Dev_timer devinfo_time;
 Dev_timer devinfo_time;
 void timer_function()
 void timer_function()
@@ -31,11 +31,12 @@ void timer_function()
     static uint32_t time_50hz = 0;
     static uint32_t time_50hz = 0;
     static uint32_t time_100hz = 0;
     static uint32_t time_100hz = 0;
     static uint32_t time_200hz = 0;
     static uint32_t time_200hz = 0;
-
+    
     if (  Check_Timer_Ready(&time_1hz,_1_HZ_) )
     if (  Check_Timer_Ready(&time_1hz,_1_HZ_) )
     {
     {
         devinfo_time.arm = true;
         devinfo_time.arm = true;
         devinfo_time.tempSensor = true;
         devinfo_time.tempSensor = true;
+        pmu_to_DM4Dmsg_flag = true;
     }
     }
     if (  Check_Timer_Ready(&time_2hz,_2_HZ_) )
     if (  Check_Timer_Ready(&time_2hz,_2_HZ_) )
     {
     {

+ 13 - 7
Src/soft_update.c

@@ -175,18 +175,24 @@ void Vk_Update_Device_Protocol(void)
         can_send_msg_normal(&can_buf[0],8,0x481400);
         can_send_msg_normal(&can_buf[0],8,0x481400);
 
 
         uart_info.vk_dev_update_flag = false;
         uart_info.vk_dev_update_flag = false;
-        if(dev_id == UPDATE_OBS_F)
+        if (dev_id == UPDATE_OBS_F)
         {
         {
-            if(Dev.Radar.facid_F == FAC_DM_RF || Dev.Part_radarF.facid == FAC_DM_RF_4D)
+            if (Dev.Radar.facid_F == FAC_DM_RF || Dev.Part_radarF.facid == FAC_DM_RF_4D)
                 DM_f_info.get_radar_ver_flag = false;
                 DM_f_info.get_radar_ver_flag = false;
-            memset(&dev_obsf,0,sizeof(dev_version_content));
+            memset(&dev_obsf, 0, sizeof(dev_version_content));
         }
         }
-        else if(dev_id == UPDATE_TERAIN)
+        else if (dev_id == UPDATE_OBS_B)
         {
         {
-            if(Dev.Radar.facid_F == FAC_DM_RT)
+            if (Dev.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;
                 DM_ter_info.get_radar_ver_flag = false;
-            memset(&dev_ter,0,sizeof(dev_version_content));
-        } 
+            memset(&dev_ter, 0, sizeof(dev_version_content));
+        }
         break;
         break;
     default:
     default:
         break;
         break;

+ 7 - 1
Src/soft_version.c

@@ -191,12 +191,18 @@ void get_radar_version_and_sn(void)
         radar_can_buf[7] = 7;
         radar_can_buf[7] = 7;
         can_send_msg_normal(radar_can_buf, 8, 0x981300);
         can_send_msg_normal(radar_can_buf, 8, 0x981300);
     }
     }
-    else if(DM_f_info.Link.connect_status == COMP_NORMAL && DM_f_info.get_radar_ver_flag == false)
+    else if((DM_f_info.Link.connect_status == COMP_NORMAL || Dev.Part_Fradar_Link.connect_status ==  COMP_NORMAL) && DM_f_info.get_radar_ver_flag == false)
     {
     {
         radar_can_buf[0] = 1;
         radar_can_buf[0] = 1;
         radar_can_buf[7] = 7;
         radar_can_buf[7] = 7;
         can_send_msg_normal(radar_can_buf, 8, 0XA81300);
         can_send_msg_normal(radar_can_buf, 8, 0XA81300);
     }
     }
+    else if( Dev.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_normal(radar_can_buf, 8, 0XB81300);
+    }
     // else if(DM_B_info.Link.connect_status == COMP_NORMAL && DM_B_info.get_radar_ver_flag == false)
     // else if(DM_B_info.Link.connect_status == COMP_NORMAL && DM_B_info.get_radar_ver_flag == false)
     // {
     // {
     //     radar_can_buf[0] = 1;
     //     radar_can_buf[0] = 1;