redaiyuyuyu 12 цаг өмнө
parent
commit
a4d3a3752c

+ 1 - 1
.vscode/c_cpp_properties.json

@@ -12,7 +12,7 @@
             "cStandard": "c11",
             "cppStandard": "c++17",
             "intelliSenseMode": "gcc-x64",
-            "compilerPath": "D:/arm-gcc/bin/arm-none-eabi-gcc.exe"
+            "compilerPath": "D:/zhou/vscodestm32/gcc-arm-none-eabi-10.3-2021.10-win32/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gcc.exe"
         }
     ],
     "version": 4

+ 2 - 1
.vscode/launch.json

@@ -5,6 +5,7 @@
     "version": "0.2.0",
     "configurations": [
         
+        
 
         {
             "name": "Cortex Debug",
@@ -15,7 +16,7 @@
             "servertype": "jlink",
             "device": "STM32F302CC",
             "interface": "swd",
-            "serverpath": "E:/j-flash-7.56b/JLinkGDBServerCL.exe" 
+            "serverpath": "D:/JLINKK/JLink_V832/JLinkGDBServerCL.exe" 
         }
     ]
 }

+ 1 - 1
Core/Src/main.c

@@ -25,7 +25,6 @@
 #include "usart.h"
 #include "gpio.h"
 #include "stdbool.h"
-
 /* Private includes ----------------------------------------------------------*/
 /* USER CODE BEGIN Includes */
 #include "soft_can.h"
@@ -55,6 +54,7 @@
 #include "stdio.h"
 #include "soft_update.h"
 #include "can_debug.h"
+
 /* USER CODE END Includes */
 
 /* Private typedef -----------------------------------------------------------*/

+ 3 - 2
MDK-ARM/RTE/_V9_PMU2_302CC/RTE_Components.h

@@ -1,6 +1,7 @@
+
 /*
- * UVISION generated file: DO NOT EDIT!
- * Generated by: uVision version 5.42.0.0
+ * Auto generated Run-Time-Environment Configuration File
+ *      *** Do not modify ! ***
  *
  * Project: 'V9_PMU2_302CC' 
  * Target:  'V9_PMU2_302CC' 

+ 53 - 6
MDK-ARM/V9_PMU2_302CC.uvoptx

@@ -89,7 +89,7 @@
         <sRfunc>1</sRfunc>
         <sRbox>1</sRbox>
         <tLdApp>1</tLdApp>
-        <tGomain>1</tGomain>
+        <tGomain>0</tGomain>
         <tRbreak>1</tRbreak>
         <tRwatch>1</tRwatch>
         <tRmem>1</tRmem>
@@ -103,7 +103,7 @@
         <bEvRecOn>1</bEvRecOn>
         <bSchkAxf>0</bSchkAxf>
         <bTchkAxf>0</bTchkAxf>
-        <nTsel>6</nTsel>
+        <nTsel>4</nTsel>
         <sDll></sDll>
         <sDllPa></sDllPa>
         <sDlgDll></sDlgDll>
@@ -114,9 +114,34 @@
         <tDlgDll></tDlgDll>
         <tDlgPa></tDlgPa>
         <tIfile></tIfile>
-        <pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
+        <pMon>Segger\JL2CM3.dll</pMon>
       </DebugOpt>
       <TargetDriverDllRegistry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>ARMRTXEVENTFLAGS</Key>
+          <Name>-L70 -Z18 -C0 -M0 -T1</Name>
+        </SetRegEntry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>DLGTARM</Key>
+          <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name>
+        </SetRegEntry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>ARMDBGFLAGS</Key>
+          <Name></Name>
+        </SetRegEntry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>DLGUARM</Key>
+          <Name>?</Name>
+        </SetRegEntry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>JL2CM3</Key>
+          <Name>-U69404644 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F3xx_256.FLM -FS08000000 -FL040000 -FP0($$Device:STM32F302CCTx$CMSIS\Flash\STM32F3xx_256.FLM)</Name>
+        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>UL2CM3</Key>
@@ -129,6 +154,28 @@
         </SetRegEntry>
       </TargetDriverDllRegistry>
       <Breakpoint/>
+      <WatchWindow1>
+        <Ww>
+          <count>0</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>DM_T4d.byte7.frame_flag</ItemText>
+        </Ww>
+        <Ww>
+          <count>1</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>D4T_tofmu</ItemText>
+        </Ww>
+        <Ww>
+          <count>2</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>msg_buf</ItemText>
+        </Ww>
+        <Ww>
+          <count>3</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>_MSGID_T4DRADAR</ItemText>
+        </Ww>
+      </WatchWindow1>
       <Tracepoint>
         <THDelay>0</THDelay>
       </Tracepoint>
@@ -331,7 +378,7 @@
 
   <Group>
     <GroupName>Drivers/STM32F3xx_HAL_Driver</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -579,7 +626,7 @@
 
   <Group>
     <GroupName>Drivers/CMSIS</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -599,7 +646,7 @@
 
   <Group>
     <GroupName>Application/user_src</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>

+ 0 - 1
MDK-ARM/V9_PMU2_302CC.uvprojx

@@ -187,7 +187,6 @@
             <RvdsVP>2</RvdsVP>
             <RvdsMve>0</RvdsMve>
             <RvdsCdeCp>0</RvdsCdeCp>
-            <nBranchProt>0</nBranchProt>
             <hadIRAM2>0</hadIRAM2>
             <hadIROM2>0</hadIROM2>
             <StupSel>8</StupSel>

+ 3 - 0
user_inc/soft_can.h

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

+ 33 - 13
user_inc/soft_obstacle.h

@@ -59,19 +59,23 @@ extern short obsbradar_sensitivity;
 #pragma pack(1)
 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;
 #pragma pack()
 
@@ -112,12 +116,26 @@ typedef struct
   //char send_radar_sn_count; 和版本用一个count
   char sn[20];
 }uavr_obs;
+
+typedef struct 
+{
+  char version[11];
+  int soft_verison;
+  char sn[20];
+
+  bool get_radar_ver_flag;
+
+}DM_4D_REDARVER;
+
 #pragma pack()
 extern uavr_obs uavr11_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_b_info;
 extern uavr_obs DM_f_info;
+extern DM_4D_REDARVER DM_4DB_info;
 //extern uavr_obs DM_b_info;
 #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 can_recv_mocib_F_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);
 bool check_radar_update(void);
 void can_recv_mocib_new360_obstacle(uint32_t cellCanID, uint8_t data[], uint8_t len);

+ 8 - 2
user_inc/soft_p_2_c.h

@@ -19,6 +19,8 @@ typedef enum
 } Msg_Rx_Stage;
 
 extern Msg_Rx_Stage recv_step;
+extern int time_heart[3];
+extern int time_count[3];
 enum vklink_msgid
 {
 	_MSGID_VOL = 1,		   // 电压
@@ -44,6 +46,8 @@ enum vklink_msgid
 	_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调试
 };
@@ -64,6 +68,8 @@ enum vklink_MSGID_SET
 {
 	MSGID_SET_F_RADAR = 1,		  // 设置前雷达
 	MSGID_SET_B_RADAR = 2,		  // 设置后雷达
+	MSGID_SET_L_RADAR = 3,        // 设置左雷达
+    MSGID_SET_R_RADAR = 4,        // 设置右雷达
 	MSGID_SET_T_RADAR = 6,		  // 设置防地雷达
 	MSGID_SET_TR_BLIND = 7,       //设置雷达盲区
     MSGID_SET_BR_POWER = 8,       //设置雷达能量
@@ -176,11 +182,11 @@ typedef struct
 	short yaw;		   // 航向角
 	short roll_angle;  // 0.01
 	short pitch_angle; // 0.01
-	short alt;
+	short alt;             //高度
 	short E_vel;	   // 东西速度
 	short N_vel;	   // 南北速度
 	short alt_vel;	   // 垂直速度
-	short lock_status; // 0 上锁 1解锁
+	short lock_status; // 0 上锁 1解锁 4:在空中
 	short UAV_type;
 	short thr_pwm;
 	short Candebug_flag; // can调试 0开 1关

+ 17 - 1
user_inc/soft_seed_device.h

@@ -114,7 +114,9 @@ enum FACID
     FAC_DM_RT_4D = 36,  //DM 4d防地
     FAC_DM_RF_4D = 37,  //DM 4d前避障
     FAC_DM_RB_4D = 38, //DM  4d后避障
-
+    
+    FAC_MOCIB_RL = 39,  //莫之比左避障
+    FAC_MOCIB_RR = 40, //莫之比右避障
 };
 typedef struct
 {
@@ -260,6 +262,20 @@ typedef struct
     uint16_t warn_B;
     uint16_t signal_B_qulity;
     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;
 #pragma pack(0)
 

+ 31 - 0
user_inc/soft_terrain.h

@@ -124,6 +124,35 @@ typedef struct
   uint8_t RawData[256 * 5];
 }DM_4dFRADAR;
 #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()
+extern DM_4dTRADAR DM_T4d;
+extern DM_4dTRADAR DM_BT4d;
+#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()
+extern DM_4dTRADAR_tofmu D4T_tofmu;
+extern DM_4dTRADAR_tofmu D4BT_tofmu;
+extern bool F4DT_send_flag;
+extern bool F4DB_send_flag;
 extern DM_4dFRADAR DM_F4d;
 extern DM_4dFRADAR DM_B4d;
 
@@ -132,6 +161,8 @@ extern Connect_check DM_4dstatus;
 extern DM_RADAR DM_T_info,FMU_DM_info;
 extern uint8_t DM_recv_flag;
 extern uint8_t DM4d_recv_flag;
+extern uint8_t DM4dt_recv_flag;
+extern uint8_t DM4dbt_recv_flag;
 extern uint8_t DM4d_to_fmu_flag;
 extern uint8_t DM4dB_recv_flag; 
 void DM_terrain_recieved_hookfuction(uint32_t cellCanID,uint8_t data[], uint8_t len);

+ 1 - 1
user_inc/soft_timer.h

@@ -25,6 +25,6 @@ typedef struct
 extern Dev_timer devinfo_time;
 
 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);
 #endif 

+ 1 - 1
user_inc/soft_uart.h

@@ -5,7 +5,7 @@
 #include "soft_can.h"
 #include "stdio.h"
 #include "rkfifo.h"
-
+//#define UPDATE_FLAG   ((uint32_t)0x0801E000)
 
 #define USART_2 	2
 #define USART_3 	3

+ 7 - 0
user_src/soft_can.c

@@ -337,6 +337,11 @@ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
       break;
     case CAN_UAVH30_MSG:
       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;
     default:
       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(&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(&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_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));

+ 64 - 5
user_src/soft_obstacle.c

@@ -18,10 +18,13 @@
 
 uavr_obs uavr11_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_b_info = {.signal_qulity = 0};
 
 uavr_obs DM_f_info;
+DM_4D_REDARVER DM_4DB_info;
 /**
   * @file    can_recv_enzhao_obstacle
   * @brief   恩曌多点避障解析
@@ -592,7 +595,47 @@ void can_recv_mocib_B_obstacle(uint8_t *data)
     uavr12_info.Link.connect_status = COMP_NORMAL;
     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_sensi_time = 0;
@@ -610,7 +653,8 @@ uint32_t uavr20_send_time = 0;
 void can_sendmsg_uavr20(void)
 {
     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发送
         if ((HAL_GetTick() - uavr20_send_time > 100) && planep.lock_status == 1)
@@ -1058,7 +1102,8 @@ void can_send_info_to_mimo()
     static int mimo_50HZ = 0;
     static int mimo_49HZ = 0;
     if (mimo_f_info.Link.connect_status == COMP_NORMAL || mimo_b_info.Link.connect_status == COMP_NORMAL /*|| 
-        mimo_360_info.connect_status == COMP_NORMAL*/ || (Dev.Part_Fradar_Link.connect_status == COMP_NORMAL && Dev.Part_radarF.facid == FAC_MIMO_RF))
+        mimo_360_info.connect_status == COMP_NORMAL*/ || (Dev.Part_Fradar_Link.connect_status == COMP_NORMAL && Dev.Part_radarF.facid == FAC_MIMO_RF) || 
+        (uavr12_info.Link.connect_status == COMP_NORMAL || uavr11_info.Link.connect_status == COMP_NORMAL))
     {
         int16_t index = 0;
         short tmpShort = 0;
@@ -1378,10 +1423,17 @@ void get_radar_blindAndPower_function( void )
     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)
+    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);
+        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);
     }
     else if(DM_f_info.Link.connect_status == COMP_NORMAL && DM_f_info.get_radar_power_flag == false)
@@ -1421,7 +1473,7 @@ void get_radar_blindAndPower_function( void )
         put_date_to_can(can_buf,0xB,0,0,0,0,0,0,0X7);
         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))
     {
         can_id = 0xB81300;
@@ -1456,6 +1508,13 @@ void get_radar_blindAndPower_function( void )
         put_date_to_can(can_buf, 0xF, 0, 0, 0, 0, 0, 0, 0X7);
         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];
 

+ 147 - 9
user_src/soft_p_2_c.c

@@ -106,8 +106,14 @@ void pmu_to_con_voltage_data()
     msg_buf[index++] = 0x00;
     msg_buf[index++] = 0x00;
     msg_buf[index++] = _MSGID_VOL;
-
-    pmu.voltage = ADC_gather() / 10.0f + current_pmu_par.cal_vol * 10; // 获取当前板子电压
+    if(Dev.Current_Link.connect_status == COMP_NORMAL)
+    {
+        pmu.voltage = (power_BatteryInfo.voltage * 100) + current_pmu_par.cal_vol * 10;
+    }
+    else
+    {
+        pmu.voltage = ADC_gather() / 10.0f + current_pmu_par.cal_vol * 10; // 获取当前板子电压
+    }
     memcpy(&msg_buf[index], &pmu.voltage, 2);
     index += 2;
 
@@ -196,6 +202,38 @@ short get_radar_info(uint8_t Radar_Type,uint8_t Info_Type)
                 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;
 }
 
@@ -624,6 +662,59 @@ void pmu_to_con_DM4DFradar_data(void)
     DM4d_recv_flag = 0;
     
 }
+//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;
+    crc = Get_Crc16(msg_buf, index);
+    msg_buf[index++] = crc;
+    msg_buf[index++] = (crc >> 8) & 0xff;
+
+    uart2_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;
+    crc = Get_Crc16(msg_buf, index);
+    msg_buf[index++] = crc;
+    msg_buf[index++] = (crc >> 8) & 0xff;
+
+    uart2_send_msg(msg_buf, index);
+    DM4dbt_recv_flag = 0;
+}
 //电目4D后避障雷达
 void pmu_to_con_DM4DBradar_data(void)
 {
@@ -696,8 +787,8 @@ void pmu_to_con_DM4DBradar_msg(void)
     msg_buf[index++] = 'K';
     msg_buf[index++] = 'Z';
     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;
     crc = Get_Crc16(msg_buf, index);
     msg_buf[index++] = crc;
@@ -744,6 +835,7 @@ void pmu_to_con_heart_data()
     crc = Get_Crc16(msg_buf, index);
     memcpy(&msg_buf[index], &crc, 2);
     index += 2;
+
     uart2_send_msg(msg_buf, index);
 }
 
@@ -792,6 +884,7 @@ void pmu_to_con_devtype_data(void)
     }
     else if(devinfo_time.flow == true)
     {
+
         msg_buf[index++] = DEV_FLOW;
         memcpy(&msg_buf[index],&Dev.Flow.facid,sizeof(Flow_info));
         index += sizeof(Flow_info);
@@ -1227,6 +1320,7 @@ void pmu_to_con_ack_data()
  **/
 uint8_t pmu_send = PMU_SEND_YAOCE;
 uint32_t utc_time = 0;
+uint32_t DM4d_to_fmu10s_flag = 0;
 void pmu_to_fcu()
 {
     //串口阻塞 和雷达升级不发送
@@ -1302,20 +1396,33 @@ void pmu_to_fcu()
             break;
         }
         //心跳包单独发
-        if(pmu_heart_flag == true)
+        if (pmu_heart_flag == true)
         {
             pmu_to_con_heart_data();
             pmu_heart_flag = false;
         }
-        if(F4d_send_flag == true)
+        /*if(F4d_send_flag == true)
         {
             pmu_to_con_DM4DFradar_data();
             F4d_send_flag = false;
+        }*/
+        if (F4DT_send_flag == true)
+        {
+            pmu_to_con_DM4DTradar_data();
+            F4DT_send_flag = false;
         }
-        if(DM4Dmsg_send_fmu == true)
+        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.Part_Fradar_Link.connect_status == COMP_NORMAL || Dev.Part_Bradar_Link.connect_status == COMP_NORMAL)))
         {
             pmu_to_con_DM4DBradar_msg();
+            DM4d_to_fmu10s_flag = HAL_GetTick();
             DM4Dmsg_send_fmu = false;
+            pmu_to_DM4Dmsg_flag = false;
         }
     }
 }
@@ -1364,6 +1471,8 @@ void Check_Rst(void)
 /******************void check_fmu_link()************************
  * ****************检查是否收到FMU信息************************************
  * ****************************************************************/
+int time_heart[3] = {0};
+int time_count[3] = {0};//test
 static uint32_t fmu_link_time = 0;
 void check_fmu_link()
 {
@@ -1688,7 +1797,22 @@ void uart_recv_con_msg()
                 }
                 break;
             case MSGID_SET_VOL:
-                flash_pmu_par._cal_vol = (fcu_protocol.payload[7] + 256 * fcu_protocol.payload[8]) - (int)(ADC_gather() /100.0f) ;
+                if(Dev.Current_Link.connect_status == COMP_NORMAL)
+                {
+                    /*static short tem_16t = 0 ;
+                    tem_16t = fcu_protocol.payload[7] + 256 * fcu_protocol.payload[8];
+                    static short tem2_16t = 0 ;
+                    tem2_16t = power_BatteryInfo.voltage * 10;*/
+                    flash_pmu_par._cal_vol = (fcu_protocol.payload[7] + 256 * fcu_protocol.payload[8]) - (power_BatteryInfo.voltage * 10) ;
+                }
+                else
+                {
+									  /*static short tem3_16t = 0 ;
+                    tem3_16t = fcu_protocol.payload[7] + 256 * fcu_protocol.payload[8];
+                    static short tem4_16t = 0 ;
+                    tem4_16t = (int)(ADC_gather() /100.0f);*/
+                    flash_pmu_par._cal_vol = (fcu_protocol.payload[7] + 256 * fcu_protocol.payload[8]) - (int)(ADC_gather() /100.0f) ;
+                }
                 write_flash_flag = true;
                 pmu_set_ack(_MSGID_SET,MSGID_SET_VOL,0,0);
                 break;
@@ -1914,6 +2038,7 @@ void uart_recv_con_msg()
                     can_buf[7] = 7;
                     can_send_msg_normal(can_buf,8,0xB81300);
                     dev_obsb.regist.sn = false;
+                    
                     //DM_b_info.get_radar_ver_flag = false;
                     pmu_set_ack(_MSGID_SET,MSGID_SET_BRADAR_SN,msgidset.content1,msgidset.content2);
                 }
@@ -1959,6 +2084,7 @@ void uart_recv_con_msg()
                     can_buf[7] = 7;
                     can_send_msg_normal(can_buf,8,0xB81300);
                     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);
                 }
@@ -2027,7 +2153,19 @@ void uart_recv_con_msg()
                     memcpy(&can_buf[1],&radar_msg,2);
                     can_buf[7] = 7;
                     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:
                     break;
                 }

+ 12 - 2
user_src/soft_seed_device.c

@@ -13,7 +13,8 @@
 #include "soft_version.h"
 #include "math.h"
 #include "qingxie_bms.h"
-
+#include "soft_adc.h"
+#include "soft_flash.h"
 weight weight_vkinfo;
 seed seed_vkinfo;
 send_seed_device seed_dev;
@@ -1132,6 +1133,15 @@ void  update_device_type_data(void)
             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.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;
             obs_f_is_link = Dev.Radar.distance_F_Y  > -1? true:false;
@@ -1144,7 +1154,7 @@ void  update_device_type_data(void)
            Dev.Current.facid = FAC_VK;
 
             Dev.Current.tempture = power_BatteryInfo.temperature * 10;
-            Dev.Current.voltage = power_BatteryInfo.voltage * 10;
+            Dev.Current.voltage = (power_BatteryInfo.voltage * 10) + current_pmu_par.cal_vol;
             Dev.Current.current = power_BatteryInfo.current * 10;
         }
 

+ 166 - 8
user_src/soft_terrain.c

@@ -103,6 +103,8 @@ uint8_t DM4d_recv_flag = 0;
 Connect_check DM_status;
 Connect_check DM_4dstatus;
 uavr_terrain DM_ter_info;
+uint8_t DM4dt_recv_flag = 0;
+uint8_t DM4dbt_recv_flag = 0;
 void DM_terrain_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t len)
 {
     if (cellCanID == 0x901300) // 多点协议
@@ -222,6 +224,14 @@ int dm_4df_i = 0;
 DM_4DRADAR FMU_4D_info;
 bool F4d_send_flag = false;
 bool DM4Dmsg_send_fmu=false;
+DM_4dTRADAR DM_T4d;
+DM_4dTRADAR DM_BT4d;
+int dm_4dt_i = 0;
+int dm_4dbt_i = 0;
+DM_4dTRADAR_tofmu D4T_tofmu;
+DM_4dTRADAR_tofmu D4BT_tofmu;
+bool F4DT_send_flag = false;
+bool F4DB_send_flag = false;
 void DM_Fobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t len)
 {
     if (cellCanID == 0XA01300) // 多点协议
@@ -279,7 +289,7 @@ void DM_Fobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t le
     }
 
     // 4D前避障雷达协议 点云
-    if (cellCanID == 0XA01310)
+    /*if (cellCanID == 0XA01310)
     {
         DM_4dstatus.connect_status = COMP_NORMAL;
         DM_4dstatus.recv_time = HAL_GetTick();
@@ -326,11 +336,11 @@ void DM_Fobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t le
             memcpy(&DM_F4d.RawData[dm_4df_i], &data[0], 7);
             dm_4df_i += 7;
         }
-        if (dm_4df_i >= 254 * 5)
+        if (dm_4df_i >= 145 * 5)
         {
             dm_4df_i = 0;
         }
-    }
+    }*/
     // 4D前避障雷达协议 单点
     if (cellCanID == 0XA01302)
     {
@@ -354,10 +364,52 @@ void DM_Fobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t le
         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];
 
@@ -409,6 +461,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);
     }
+    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)
@@ -430,10 +506,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;
         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
 DM_4dFRADAR DM_B4d;
@@ -443,7 +526,7 @@ uint8_t DM4dB_recv_flag = 0;
 void DM_Bobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t len)
 {
     // 4D后避障雷达协议 点云
-    if (cellCanID == 0XB01310)
+    /*if (cellCanID == 0XB01310)
     {
         // DM_4dstatus.connect_status = COMP_NORMAL;
         // DM_4dstatus.recv_time = HAL_GetTick();
@@ -495,7 +578,7 @@ void DM_Bobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t le
         {
             dm_4dB_i = 0;
         }
-    }
+    }*/
     // 4D后避障雷达协议 单点
     if (cellCanID == 0XB01302)
     {
@@ -519,6 +602,74 @@ 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][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)
@@ -540,4 +691,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;
         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;
+    }
 }

+ 2 - 1
user_src/soft_timer.c

@@ -18,7 +18,7 @@ extern uint32_t user_timer_cnt;
  **/
 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,
-     pmu_heart_flag = false;
+     pmu_heart_flag = false,pmu_to_DM4Dmsg_flag = false;
 
 Dev_timer devinfo_time;
 void timer_function()
@@ -36,6 +36,7 @@ void timer_function()
     {
         devinfo_time.arm = true;
         devinfo_time.tempSensor = true;
+        pmu_to_DM4Dmsg_flag = true;
     }
     if (  Check_Timer_Ready(&time_2hz,_2_HZ_) )
     {

+ 14 - 8
user_src/soft_update.c

@@ -175,18 +175,24 @@ void Vk_Update_Device_Protocol(void)
         can_send_msg_normal(&can_buf[0],8,0x481400);
 
         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;
-            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;
-            memset(&dev_ter,0,sizeof(dev_version_content));
-        } 
+            memset(&dev_ter, 0, sizeof(dev_version_content));
+        }
         break;
     default:
         break;
@@ -308,7 +314,7 @@ void Update_Dev_Bootversion_Function(uint8_t data[])
             {
                 Dev.Part_Tradar_Link.recv_time = HAL_GetTick();
                 Dev.Part_Tradar_Link.connect_status = COMP_NORMAL;
-                Dev.Part_radarT.facid = FAC_DM_RF_4D;
+                Dev.Part_radarT.facid = FAC_DM_RT_4D;
             }
             else
             {

+ 7 - 1
user_src/soft_version.c

@@ -191,12 +191,18 @@ void get_radar_version_and_sn(void)
         radar_can_buf[7] = 7;
         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)  && DM_f_info.get_radar_ver_flag == false)
     {
         radar_can_buf[0] = 1;
         radar_can_buf[7] = 7;
         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)
     // {
     //     radar_can_buf[0] = 1;

+ 1 - 1
user_src/soft_water_device.c

@@ -6,7 +6,7 @@
 #include "soft_seed_device.h"
 #include "soft_crc.h"
 #include "soft_version.h"
-
+#include "soft_flash.h"
 /**
   * @file    liquid_recieved_hookfuction
   * @brief   液位计解析