Prechádzať zdrojové kódy

1、增加remoteid
2、增加eftZ80转接板及其设备
3、增加V9探照灯支持
4、增加4D仿地和升级

z8359531l 13 hodín pred
rodič
commit
e0ab5eb5fe

+ 5 - 0
Core/Src/main.c

@@ -55,6 +55,8 @@
 #include "soft_update.h"
 #include "can_debug.h"
 #include "dronecan.h"
+#include "user_rid.h"
+
 
 
 /* USER CODE END Includes */
@@ -201,6 +203,7 @@ int main(void)
     
     //串口发送
     send_uartfifo_msg();
+    send_msg_to_remoteid();
     //dronecan发送
     //dronecan_tx_processing(); //test
     //CAN DEBUG
@@ -209,6 +212,8 @@ int main(void)
       seek_can_debug_buf_adr();
     }
 
+
+
     /* USER CODE BEGIN 3 */
   }
   /* USER CODE END 3 */

+ 9 - 5
Makefile

@@ -173,7 +173,6 @@ LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BU
 # default action: build all
 all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
 
-
 #######################################
 # build the application
 #######################################
@@ -187,15 +186,20 @@ OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASMM_SOURCES:.S=.o)))
 vpath %.S $(sort $(dir $(ASMM_SOURCES)))
 
 $(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) 
-	$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
+	@$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
+	@echo $(notdir $(<:.c=.o))
 
 $(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
-	$(AS) -c $(CFLAGS) $< -o $@
+	@$(AS) -c $(CFLAGS) $< -o $@
+	@echo $(notdir $(<:.s=.o))
+
 $(BUILD_DIR)/%.o: %.S Makefile | $(BUILD_DIR)
-	$(AS) -c $(CFLAGS) $< -o $@
+	@$(AS) -c $(CFLAGS) $< -o $@
+	@echo $(notdir $(<:.S=.o))
 
 $(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
-	$(CC) $(OBJECTS) $(LDFLAGS) -o $@
+	@$(CC) $(OBJECTS) $(LDFLAGS) -o $@
+	@echo linking...
 	$(SZ) $@
 
 $(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)

+ 1 - 1
uav_can/user_inc/dronecan.h

@@ -74,7 +74,7 @@ void dronecan_tx_processing(void);
  * @param tx_transfer
  * @return int
  */
-int dronecan_broadcast(struct dronecan *dcan, CanardTxTransfer *tx_transfer);
+int dronecan_broadcast(CanardTxTransfer *tx_transfer);
 
 /**
  * @brief dronecan 发送请求或应答消息

+ 1 - 1
uav_can/user_src/dronecan.c

@@ -237,7 +237,7 @@ void dronecan_init(void) {
  * @param tx_transfer 发送消息对象
  * @return int 发送到 canard 发送队列的消息计数
  */
-int dronecan_broadcast(struct dronecan *dcan, CanardTxTransfer *tx_transfer) {
+int dronecan_broadcast(CanardTxTransfer *tx_transfer) {
   int ret = 0;
 
   if (dronecan_lock_status == UNLOCK) {

+ 24 - 24
uav_can/user_src/drv_vkweigher_vls300.c

@@ -82,30 +82,30 @@ struct vk_weigher_vls300 _vk_vls300;
 //   return size;
 // }
 
-// uint8_t vklift_weight_calibrate(uint32_t weight) 
-// {
-//   static uint8_t transfer_id = 0;
-
-//   struct vkweigher_WeigherCalibRequest msg = {0};
-//   msg.weight = weight;
-
-//   uint8_t buffer[VKWEIGHER_WEIGHERCALIB_REQUEST_MAX_SIZE] = {0};
-//   memcpy(buffer,&msg.weight,sizeof(msg.weight));
-//   uint8_t len = vkweigher_WeigherCalibRequest_encode(&msg, buffer);
-//   CanardTxTransfer tranxfer = {
-//       .inout_transfer_id = &transfer_id,
-//       .transfer_type = CanardTransferTypeRequest,
-//       .data_type_id = VKWEIGHER_WEIGHERCALIB_REQUEST_ID,
-//       .data_type_signature = VKWEIGHER_WEIGHERCALIB_REQUEST_SIGNATURE,
-//       .priority = CANARD_TRANSFER_PRIORITY_LOW,
-//       .payload = buffer,
-//       .payload_len = len,
-//   };
-
-//    dronecan_request_or_respond(DRONECAN_WEIGHER_NODE_ID, &tranxfer);
-
-//   return 1;
-// }
+uint8_t vklift_weight_calibrate(uint32_t weight) 
+{
+  // static uint8_t transfer_id = 0;
+
+  // struct vkweigher_WeigherCalibRequest msg = {0};
+  // msg.weight = weight;
+
+  // uint8_t buffer[VKWEIGHER_WEIGHERCALIB_REQUEST_MAX_SIZE] = {0};
+  // memcpy(buffer,&msg.weight,sizeof(msg.weight));
+  // uint8_t len = vkweigher_WeigherCalibRequest_encode(&msg, buffer);
+  // CanardTxTransfer tranxfer = {
+  //     .inout_transfer_id = &transfer_id,
+  //     .transfer_type = CanardTransferTypeRequest,
+  //     .data_type_id = VKWEIGHER_WEIGHERCALIB_REQUEST_ID,
+  //     .data_type_signature = VKWEIGHER_WEIGHERCALIB_REQUEST_SIGNATURE,
+  //     .priority = CANARD_TRANSFER_PRIORITY_LOW,
+  //     .payload = buffer,
+  //     .payload_len = len,
+  // };
+
+   //dronecan_request_or_respond(DRONECAN_WEIGHER_NODE_ID, &tranxfer);
+
+  return 1;
+}
 
 // static rt_err_t fuse_prot(rt_device_t dev, void *args) {
 

+ 3 - 3
user_inc/soft_can.h

@@ -112,9 +112,9 @@ extern Radar Rupdate;
 #define EFT_FILTER_ID      0x00008851U
 #define EFT_MASK_ID        0xFFFFFF00U
 
-//绞龙
-#define CAN_JIEXING1_ID (0x7010)
-#define CAN_JIEXING2_ID (0x7011)
+//EFT转接板 集成离心水泵称重断药播撒
+#define EFT_Z80_DEV (0x7010)
+#define EFT_Z80_DEV_ACK (0x7011)
 
 // 第2~0位,发送端ID,默认3
 #define CAN_FULLY_SENDNODE_ID_MASK  0x00000007       // 0 0000 0000 0000 0000 0000 0000 0111(29位扩展ID)

+ 4 - 0
user_inc/soft_eft.h

@@ -121,6 +121,10 @@ typedef struct
 #pragma pack()
 extern water_dev Lpump1;
 extern water_dev Lpump2;
+extern water_dev nozzle1;
+extern water_dev nozzle2;
+extern water_dev nozzle3;
+extern water_dev nozzle4;
 extern water_dev churn;
 extern water_dev turntable;
 

+ 2 - 0
user_inc/soft_flash.h

@@ -36,6 +36,7 @@ typedef struct
     uint16_t _SN_H;
     short _hardVersion_L;
     short _hardVersion_H;
+    short mapping_type;
 }_F_PMU_PAR;
 extern _F_PMU_PAR flash_pmu_par;
 
@@ -47,6 +48,7 @@ typedef struct
     short reset_reason;         // 重启原因
     int SN;
     int hardVersion;
+    short mapping_type;         //遥控器映射类型
 }_C_PMU_PAR;
 extern _C_PMU_PAR current_pmu_par;
 extern bool write_flash_flag;

+ 4 - 1
user_inc/soft_flow.h

@@ -11,6 +11,9 @@
 #define EXTI_FALL 1
 #define EXTI_UP   2
 
+#define FUNC_INPUT 1
+#define FUNC_OUTPUT 2
+
 float flow_dete2(void);
 float flow_dete3(void);
 float flow_dete4(void);
@@ -21,7 +24,7 @@ void can_recv_mimor_flow_function(uint32_t CanID, uint8_t data[], uint8_t len);
 
 
 
-
+extern uint8_t L3L4_Reusetype;
 //extern bool L1_status;
 //extern bool L2_status;
 

+ 1 - 1
user_inc/soft_obstacle.h

@@ -80,7 +80,7 @@ typedef struct
 }_dev_par;
 #pragma pack()
 
-extern _dev_par DM_4DRADARMAG;
+extern _dev_par Dev_parameter;
 //避障雷达
 #pragma pack(1)
 typedef struct 

+ 2 - 0
user_inc/soft_p_2_c.h

@@ -46,6 +46,7 @@ enum vklink_msgid
 	_MSGID_B4DRADAR = 33,     //电目4d后避障雷达测试
 	_MSGID_FT4DRADAR = 34,     //电目4d前避障分段高度
 	_MSGID_BT4DRADAR = 35,     // 电目4d后避障分段高度
+	_MSG_REMOTE_ID = 45,    	//REMOTE_ID
 	_MSGID_UPDATA = 200,   // 升级信息
 	_MSGID_CANDEBUG = 213, // CAN调试
 };
@@ -201,6 +202,7 @@ typedef struct
 	float pos_y;
 	float pos_z;
 	float pos_flag;
+	uint16_t mapping_type;
 } plane_para;
 #pragma pack()
 extern plane_para planep;

+ 1 - 0
user_inc/soft_seed_device.h

@@ -121,6 +121,7 @@ enum FACID
     FAC_CHURN_SEED = 40,//绞龙播撒
     FAC_MOCIB_RL = 41,  //莫之比左避障
     FAC_MOCIB_RR = 42, //莫之比右避障
+    FAC_RT_4D = 43, //4D避障
 };
 typedef struct
 {

+ 1 - 1
user_inc/soft_terrain.h

@@ -58,7 +58,7 @@ typedef struct
 #pragma pack()
 extern uavr_terrain uavr56_info;
 extern uavr_terrain mimo_ter_info; 
-extern uavr_terrain DM_ter_info; 
+extern uavr_terrain DM_ter_info,FourD_ter_info; 
 extern int16_t F_4DRadar[3][3];
 extern int16_t B_4DRadar[3][3];
 // //木牛仿地

+ 2 - 1
user_inc/soft_timer.h

@@ -26,6 +26,7 @@ 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,pmu_to_DM4Dmsg_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,remoteid_flag;
 uint32_t Get_Systimer_Us(void);
 #endif 

+ 30 - 2
user_inc/soft_water_device.h

@@ -2,8 +2,6 @@
 #define  _SOFT_WATER_DEVICE_H_
 #include "common.h"
 
-
-
 #pragma pack(1)
 typedef struct{ 
     short liquid_percent;
@@ -27,6 +25,29 @@ typedef struct
 }Z70_tranfer;
 #pragma pack()
 extern Z70_tranfer z70_info;
+typedef enum{ //eft
+    SPARY_DEFAULT = 0,
+    SPARY_GEMO = 1, //隔膜泵 需要带流量计
+    SPARY_ROUXING = 2, //柔性泵 
+    SPARY_TRANSFER = 3, //转接板集成喷洒 
+}SPARY;
+extern uint8_t spary_type;
+typedef enum{
+    NOZZLE_DEFAULT = 0,
+    NOZZLE_NORMAL = 1,
+    NOZZLE_TRANSFER = 2, //转接板集成喷
+}NOZZLE;
+extern uint8_t nozzle_type;
+
+typedef enum{
+    WEIGHT_DEFAULT = 0,
+    WEIGHT_NORMAL = 1, //普通称重
+    WEIGHT_LIFT = 2, //吊运称重
+    WEIGHT_FPLATE = 3, //前板
+    WEIGHT_TRANFER = 4, //转接板
+}WEIGHT;
+extern uint8_t weight_type;
+
 #pragma pack(1)
 typedef struct 
 {
@@ -216,6 +237,13 @@ Ready_Control
 #define HW_MAJORCONF_OPT0            0x00  //获取配置信息
 
 #define HW_GETESCID_OPT0             0x00  //获取ESCID及通道信息
+
+#define Z70_Pump1 (uint8_t)1
+#define Z70_Pump2 (uint8_t)2
+#define Z70_Nozzle1 (uint8_t)3
+#define Z70_Nozzle2 (uint8_t)4
+#define Z70_Nozzle3 (uint8_t)5
+#define Z70_Nozzle4 (uint8_t)6
 #define Z70_Public (uint8_t)0
 #define Z70_Churn     (uint8_t)7
 #define Z70_Turntable   (uint8_t)8

+ 6 - 2
user_src/soft_can.c

@@ -122,8 +122,8 @@ void Can_decode_data_function(CAN_RxHeaderTypeDef Rxhead)
       //   can_recv_muniu_terrain(RxData);
       //   break;
 
-      //格式电池
-      case CAN_JIEXING1_ID ... CAN_JIEXING2_ID:
+      //EFT Z80 喷洒绞龙
+      case EFT_Z80_DEV ... EFT_Z80_DEV_ACK:
         Get_auger_sowing_mag(RxHeader.ExtId, RxData, RxHeader.DLC);
         break;
       case CAN_NEWTATTU_MSG ... CAN_NEWTATTU_MSG2:
@@ -150,6 +150,10 @@ void Can_decode_data_function(CAN_RxHeaderTypeDef Rxhead)
       case CAN_MSGID_DM_LACKLOSS:
          DMlacklossCanRecvFunction(Rxhead.ExtId, RxData, RxHeader.DLC);
          break;
+      case 0x184E4364: //remoteid armStatus
+        dronecan_rx_callback(RxHeader,RxData);
+        // RIDCanRecvFunction(Rxhead.ExtId, RxData, RxHeader.DLC);
+        break;
       default:
         //好盈ID基本没有固定位,全检测
         HobbywingCanRecvHookFunction(Rxhead.ExtId, RxData, RxHeader.DLC);

+ 4 - 3
user_src/soft_eft.c

@@ -4,6 +4,7 @@
 #include "string.h"
 #include "soft_seed_device.h"
 #include "soft_version.h"
+#include "soft_water_device.h"
 
 
 uint8_t seed_output_mode = 1;
@@ -24,10 +25,10 @@ _mimo_lackloss mimo_lackloss;
 _mimo_lackloss DM_lackloss;
 water_dev Lpump1;
 water_dev Lpump2;
+water_dev nozzle1,nozzle2,nozzle3,nozzle4;
 weight70_dev z70weight;
 bool weight_runing_time = false;
 bool eft_sparyDev_priority = false;//EFT飞机存在两种水泵、称重ID一起发送
-bool eft_weightDev_priority = false;
 uint16_t LiftingWeight_warning = 0;
 void EftCanRecvHookFunction(uint32_t cellCanID, uint8_t data[], uint8_t len)
 {
@@ -47,7 +48,7 @@ void EftCanRecvHookFunction(uint32_t cellCanID, uint8_t data[], uint8_t len)
     case REVE_EFT_INFO:
         eft_info.enginearm_lock = data[0];
         
-        if(eft_weightDev_priority != true)
+        if(weight_type == WEIGHT_NORMAL)
         {
             eft_info.weight = data[1] * 256 + data[2];
             Dev.Weight_Link.connect_status = COMP_NORMAL;
@@ -157,7 +158,7 @@ void EftCanRecvHookFunction(uint32_t cellCanID, uint8_t data[], uint8_t len)
         Dev.Flow.facid = FAC_LPUMP;
         break;
     case CAN_EFT70_WEIGHT:
-        eft_weightDev_priority = true;
+        weight_type = WEIGHT_LIFT;
         eft_info.weight = (data[0] + data[1] * 256);
         LiftingWeight_warning = data[2];
 

+ 16 - 3
user_src/soft_flash.c

@@ -130,6 +130,9 @@ void flash_read_funcktion( void )
     
     parameter_copy();
 
+    
+
+
     if(current_pmu_par.uavtype == VK_ALL_IN_ONE)
     {
         init_pwmout(VK_ALL_IN_ONE); 
@@ -137,16 +140,24 @@ void flash_read_funcktion( void )
     }
     else
     {
+        if((current_pmu_par.mapping_type & 0x1) == 1)
+            L3L4_Reusetype = FUNC_OUTPUT;
+        
         //先执行上电离心喷头会转
-  
         GPIO_InitStruct.Pin = EXIT_1T_Pin|EXIT_2T_Pin;
         GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;//GPIO_MODE_IT_RISING;
         GPIO_InitStruct.Pull = GPIO_PULLUP;
         HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
         
-        GPIO_InitStruct.Pin = EXIT_3T_Pin|EXIT_4T_Pin;
-        GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+        
+        GPIO_InitStruct.Pin = EXIT_3T_Pin|EXIT_4T_Pin; 
         GPIO_InitStruct.Pull = GPIO_PULLUP;
+
+        if(L3L4_Reusetype == FUNC_INPUT)
+            GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+        else if(L3L4_Reusetype == FUNC_OUTPUT)
+            GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+
         HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
 
@@ -176,6 +187,7 @@ void parameter_assignment_default(void)
     flash_pmu_par._SN_H = (PMU_SERIAL >> 16) & 0xffff;
     flash_pmu_par._hardVersion_L = PMU_HARDVERSION & 0xffff;
     flash_pmu_par._hardVersion_H = (PMU_HARDVERSION >> 16) & 0xffff;
+    flash_pmu_par.mapping_type = 0;
 
     WriteFlashNBtye(FLASH_PAR_INFO,(uint8_t *)&flash_pmu_par,sizeof(_F_PMU_PAR));
 }
@@ -195,6 +207,7 @@ void parameter_copy(void)
     current_pmu_par.reset_reason = flash_pmu_par._reset_reason;
     current_pmu_par.SN = flash_pmu_par._SN_L + (flash_pmu_par._SN_H << 16);
     current_pmu_par.hardVersion = flash_pmu_par._hardVersion_L + (flash_pmu_par._hardVersion_H << 16);
+    current_pmu_par.mapping_type = flash_pmu_par.mapping_type;
 }
 
 /**

+ 4 - 2
user_src/soft_flow.c

@@ -105,15 +105,17 @@ void flow_count_add(uint8_t flow_num,uint8_t exti_status)
   * @details 
   * @author  Zhang Sir 
  **/
+uint8_t L3L4_Reusetype = FUNC_INPUT;
 GPIO_PinState L3_status = GPIO_PIN_SET;
 GPIO_PinState L4_status = GPIO_PIN_SET;
 void L1L2_GPIO_check()
 {
     static int l1l2_time = 0;
     if ( HAL_GetTick() - l1l2_time < 100 )
-    {
         return;
-    }
+    if(L3L4_Reusetype != FUNC_INPUT)
+        return;
+
     l1l2_time = HAL_GetTick();
 
     // 抛球信号 接PMUA1

+ 8 - 8
user_src/soft_obstacle.c

@@ -1430,7 +1430,7 @@ void get_radar_blindAndPower_function( void )
         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))
+             (Dev_parameter.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);
@@ -1449,7 +1449,7 @@ void get_radar_blindAndPower_function( void )
         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_dotcloud_switch_4DF == false && DM4Dmsg_send_fmu == false))
+            (Dev_parameter.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);
@@ -1474,42 +1474,42 @@ void get_radar_blindAndPower_function( void )
         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_dotcloud_switch_4DB == false && DM4Dmsg_send_fmu == false))
+            (Dev_parameter.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_normal(&can_buf[0], 8, can_id);
     }
     if ((Dev.Part_Fradar_Link.connect_status == COMP_NORMAL && Dev.Part_radarF.facid == FAC_DM_RF_4D) &&
-        (DM_4DRADARMAG.get_angel_4DF == false && DM4Dmsg_send_fmu == false))
+        (Dev_parameter.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_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_ground_filter_4DF == false && DM4Dmsg_send_fmu == false))
+             (Dev_parameter.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_normal(&can_buf[0], 8, can_id);
     }
     if ((Dev.Part_Bradar_Link.connect_status == COMP_NORMAL && Dev.Part_radarB.facid == FAC_DM_RB_4D) &&
-        (DM_4DRADARMAG.get_angel_4DB == false && DM4Dmsg_send_fmu == false))
+        (Dev_parameter.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_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_ground_filter_4DB == false && DM4Dmsg_send_fmu == false))
+             (Dev_parameter.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_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))
+             (Dev_parameter.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);

+ 91 - 1
user_src/soft_p_2_c.c

@@ -34,6 +34,7 @@
 #include "soft_update.h"
 #include "qingxie_bms.h"
 #include "soft_flash.h"
+#include "user_rid.h"
 
 
 uint8_t msg_buf[256] = {0};
@@ -158,6 +159,8 @@ short get_radar_info(uint8_t Radar_Type,uint8_t Info_Type)
             Ptr_T = &mimo_ter_info;
         else if(DM_ter_info.Link.connect_status != COMP_NOEXIST)
             Ptr_T = &DM_ter_info;
+        else if (FourD_ter_info.Link.connect_status != COMP_NOEXIST)
+            Ptr_T = &FourD_ter_info;
         else if(uavr56_info.Link.connect_status != COMP_NOEXIST)
             Ptr_T = &uavr56_info;
         
@@ -787,7 +790,7 @@ 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,18);
+    memcpy(&msg_buf[index],&Dev_parameter.angel_4DF,18);
     index += 18;
     msg_buf[1] = index - 6;
     crc = Get_Crc16(msg_buf, index);
@@ -1314,6 +1317,40 @@ void pmu_to_con_ack_data()
     uart2_send_msg(msg_buf, index);
 }
 
+/**
+  * @file    pmu_to_con_ridStatus_data
+  * @brief   PMU发送发动机信息
+  * @param   none
+  * @details 
+  * @author  Zhang Sir 
+ **/
+void pmu_to_con_ridStatus_data(void)
+{
+    uint8_t index = 0;
+    if(remoteid_link.connect_status == COMP_NORMAL)
+    {
+        msg_buf[index++] = 0xFE;
+        msg_buf[index++] = 0;
+        msg_buf[index++] = 0; //组件计数
+        msg_buf[index++] = 0x00;
+        msg_buf[index++] = 0x00;
+        msg_buf[index++] = _MSG_REMOTE_ID;
+
+        msg_buf[index++] = ARMSTATUS_TYPE;
+        
+        memcpy(&msg_buf[index],&StatusId.status,sizeof(_armStatusID_msg));
+        index += (sizeof(_armStatusID_msg));
+
+        msg_buf[1] = index - 6;
+
+        uint16_t crc = Get_Crc16(msg_buf, index);
+        msg_buf[index++] = crc;
+        msg_buf[index++] = (crc >> 8) & 0xff;
+
+        uart2_send_msg(msg_buf, index);
+    }
+}
+
 
 /******************void pmu_to_fcu()******************************
  * ****************PMU发送信息给主控********************************
@@ -1378,6 +1415,11 @@ void pmu_to_fcu()
                 pmu_to_con_devtype_data();
                 devtype_flag = false;
             }
+            else if(remoteid_flag == true)
+            {
+                pmu_to_con_ridStatus_data();
+                remoteid_flag = false;
+            }
             break;
         case PMU_SEND_REQINFO:
             pmu_to_con_request_data();
@@ -1576,6 +1618,22 @@ void uart_recv_con_msg()
                 //摄像头舵机
                 __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_1, pmu_pin.aux_steer);
             }
+            else
+            {
+                if( L3L4_Reusetype == FUNC_OUTPUT )
+                {
+                    //前后灯
+                    if((pmu_pin.aux_light & 0x1) > 0)
+                        HAL_GPIO_WritePin(GPIOB,EXIT_3T_Pin,GPIO_PIN_SET);
+                    else
+                        HAL_GPIO_WritePin(GPIOB,EXIT_3T_Pin,GPIO_PIN_RESET);
+
+                    if((pmu_pin.aux_light & 0x2) > 0)
+                        HAL_GPIO_WritePin(GPIOB,EXIT_4T_Pin,GPIO_PIN_SET);
+                    else
+                        HAL_GPIO_WritePin(GPIOB,EXIT_4T_Pin,GPIO_PIN_RESET); 
+                }
+            }
             
             break;
         case _MSGID_LED:
@@ -1596,6 +1654,11 @@ void uart_recv_con_msg()
                 flash_pmu_par._uavtype = planep.UAV_type;
                 write_flash_flag = true;
             }
+            if(current_pmu_par.mapping_type != planep.mapping_type)
+            {
+                flash_pmu_par.mapping_type = planep.mapping_type;
+                write_flash_flag = true;
+            }
             break;
         case _MSGID_TIME:
             //tem_32t = 1684136124;
@@ -2217,6 +2280,33 @@ void uart_recv_con_msg()
                 }
             }
             break;
+        case _MSG_REMOTE_ID:
+            {
+                uint8_t rid_type = 0;
+                rid_type = fcu_protocol.payload[6];
+                
+                switch (rid_type)
+                {
+                case LOCATION_TYPE:
+                    memcpy(&locationId.latitude, &fcu_protocol.payload[7], sizeof(_location_msg));
+                    break;
+                case SYS_OPERATOR_TYPE:
+                    memcpy(&systemId.operator_latitude, &fcu_protocol.payload[7], sizeof(_sys_operator_msg));
+                    break;
+                case BASICID_TYPE:
+                    memcpy(&basicId.target_system, &fcu_protocol.payload[7], sizeof(_basicId_msg));
+                    break;
+                case SELFID_TYPE:
+                    memcpy(&selfId.target_system, &fcu_protocol.payload[7], sizeof(_selfId_msg));
+                    break;
+                case OPERATOR_TYPE:
+                    memcpy(&operatorId.target_system, &fcu_protocol.payload[7], sizeof(_operatorId_msg));
+                    break;
+                default:
+                    break;
+                }
+            }
+            break;
         //升级固件标志
         case _MSGID_UPDATA:
         {

+ 71 - 44
user_src/soft_seed_device.c

@@ -283,15 +283,28 @@ void seed_init_send_info(uint8_t device_type,char *factory)
         switch (device_type)
         {
         case WEIGHT_DEVICE:
-            if(weight_init_eft.status != 0 && eft_weightDev_priority == false)
+            if(weight_init_eft.status != 0)
             {
                 if(weight_init_eft.step.read_k_flag != 0)
                 {
-                    vk_canbuf[0] = 0xFD;
-                    vk_canbuf[5] = 0xf1;
-                    vk_canbuf[6] = 0xf3;
+                    if(weight_type == WEIGHT_FPLATE)
+                    {
+                        vk_can_id = 0x8877;
+                        vk_canbuf[0] = 0xFD;
+                        vk_canbuf[5] = 0xf1;
+                        vk_canbuf[6] = 0xf3;
+                        can_send_msg_normal((unsigned char *)&vk_canbuf, 8, vk_can_id); 
+                    }
+                    else if(weight_type == WEIGHT_TRANFER)
+                    {
+                        vk_can_id = 0x7011;
+                        vk_canbuf[0] = 0xE4;
+                        vk_canbuf[5] = 0xf1;
+                        vk_canbuf[6] = 0xf3;
+                        can_send_msg_normal((unsigned char *)&vk_canbuf, 8, vk_can_id);
+                    }
                 }
-                can_send_msg_normal((unsigned char *)&vk_canbuf, 8, vk_can_id);
+                
             }
             break;
         case SEED_DEVICE:
@@ -327,6 +340,7 @@ void seed_init_send_info(uint8_t device_type,char *factory)
 void Set_Seed_Weight_Par(uint8_t device_type,char *factory)
 {   
     uint8_t can_buf[8] = {0};
+    uint32_t can_id = 0;
     if(strcmp(factory,"VK") == 0)
     {
         switch (device_type)
@@ -437,8 +451,13 @@ void Set_Seed_Weight_Par(uint8_t device_type,char *factory)
             }        
             break;
         case WEIGHT_DEVICE:
-            if(eft_weightDev_priority == true)
-            {                    
+            if((weight_type == WEIGHT_LIFT || weight_type == WEIGHT_TRANFER) && weight_order.type != 0 )
+            {            
+                if(weight_type == WEIGHT_LIFT)
+                    can_id = 0x88BB;
+                else
+                    can_id = 0x7011;
+
                 can_buf[1] = 0x00;  //D1 - D4
                 can_buf[2] = 0x00;
                 can_buf[3] = 0x00;
@@ -481,14 +500,13 @@ void Set_Seed_Weight_Par(uint8_t device_type,char *factory)
                 default:
                     break;
                 }
-                can_send_msg_normal((unsigned char *)&can_buf, 8, 0x88BB);
+                can_send_msg_normal((unsigned char *)&can_buf, 8, can_id);
                 weight_order.type = 0;
             }
             else
             {
                 if(weight_order.type != 0)   
                 {
-
                     can_buf[1] = 0x00;
                     can_buf[2] = 0x00;
                     can_buf[3] = 0x00;
@@ -785,7 +803,7 @@ void  update_device_type_data(void)
                 //Dev.Seed.warn = eft_info.warn_status >> 1;
                 Dev.Seed.speed = turntable.rpm;
                 Dev.Seed.churn_rpm = churn.rpm;
-                Dev.Seed.warn = churn.error_status ;
+                Dev.Seed.warn = churn.error_status;
                 Dev.Seed.churn_warn = churn.reserve;
                 break;
             default:
@@ -821,6 +839,14 @@ void  update_device_type_data(void)
                 Dev.Weight.k3 = eft_info.seed_k[2];
                 Dev.Weight.k4 = 0;
                 Dev.Weight.warn = eft_info.watering_warn_status >> 4 & 0xff;
+                if(weight_type == WEIGHT_TRANFER)
+                {
+                    Dev.Weight.kg = eft_info.weight;//20单位g  70单位10g
+                    Dev.Weight.k1 = z70weight.info.k1;
+                    Dev.Weight.k2 = z70weight.info.k2;
+                    Dev.Weight.k3 = z70weight.info.k3;
+                    Dev.Weight.k4 = z70weight.info.k4;
+                }
                 break;
             case FAC_LIFTWEIGHT:
                 Dev.Weight.mode = 0;
@@ -925,20 +951,33 @@ void  update_device_type_data(void)
                 
                 break;
             case FAC_EFT:
-                Dev.Nozzle.rpm1 = eft_info.cent1_rpm * 60;
-                Dev.Nozzle.rpm2 = eft_info.cent2_rpm * 60;
-                Dev.Nozzle.rpm3 = 0;
-                Dev.Nozzle.rpm4 = 0;
-
-                if( (eft_info.watering_warn_status & 0xc) != 0)
-                {
-                    Dev.Nozzle.warn = ((eft_info.watering_warn_status >> 2) & 0x3) + (eft_info.watering_warn_status & 0xf0);
-                }
-                else if((eft_info.watering_warn_status & 0xc) == 0)
+                if(nozzle_type == NOZZLE_TRANSFER)
                 {
+                    Dev.Nozzle.rpm1 = nozzle1.rpm;
+                    Dev.Nozzle.rpm2 = nozzle2.rpm;
+                    Dev.Nozzle.rpm3 = nozzle3.rpm;
+                    Dev.Nozzle.rpm4 = nozzle4.rpm;
                     Dev.Nozzle.warn = 0;
                 }
-                Dev.Nozzle.warn = 0; //屏蔽报警
+                else
+                {
+                    Dev.Nozzle.rpm1 = eft_info.cent1_rpm * 60;
+                    Dev.Nozzle.rpm2 = eft_info.cent2_rpm * 60;
+                    Dev.Nozzle.rpm3 = 0;
+                    Dev.Nozzle.rpm4 = 0;
+
+                    if( (eft_info.watering_warn_status & 0xc) != 0)
+                    {
+                        Dev.Nozzle.warn = ((eft_info.watering_warn_status >> 2) & 0x3) + (eft_info.watering_warn_status & 0xf0);
+                    }
+                    else if((eft_info.watering_warn_status & 0xc) == 0)
+                    {
+                        Dev.Nozzle.warn = 0;
+                    }
+                    Dev.Nozzle.warn = 0; //屏蔽报警
+                }    
+
+                
                 break;
             case FAC_HD_NOZZLE:
                 // Dev.Nozzle.rpm1 = NozzleMsg[1].speed;
@@ -1011,24 +1050,6 @@ void  update_device_type_data(void)
             }    
         }
 
-        
-
-        // if(Dev.L_pump2_Link.connect_status == COMP_NORMAL)
-        // {
-        //     switch (Dev.L_pump2.facid)
-        //     {
-        //     case FAC_VK:
-        //         break;
-        //     case FAC_HW_ESC:
-        //         Dev.L_pump2.warn = EscMsg[1].warn_flag;
-        //         Dev.L_pump2.rpm =  EscMsg[1].motorRPM;        
-        //         break;
-        //     default:
-        //         break;
-        //     }    
-
-        // }
-
         //智能电池
         if(Dev.Bms_Link.connect_status == COMP_NORMAL)
         {
@@ -1303,13 +1324,19 @@ void can_sendmsg_eft_water(void)
 {
     uint8_t can_buf[8] = {0};
 
-    if(Dev.Seed_Link.connect_status != COMP_NOEXIST && Dev.Seed.facid == FAC_CHURN_SEED)
+    if(spary_type == SPARY_TRANSFER || Dev.Seed.facid == FAC_CHURN_SEED)
     {
         water70_info.dev_water70.flag = planep.lock_status == STA_LOCK ? 0x5 : 0xA;
-
-        water70_info.dev_water70.pump1 = math_cons_i16(tppwm_value,1000,2000) - 1000;
-        water70_info.dev_water70.pump2 = math_cons_i16(sow_rotate_value,1000,2000) - 1000;
-
+        if(Dev.Seed_Link.connect_status != COMP_NOEXIST)
+        {
+            water70_info.dev_water70.pump1 = math_cons_i16(tppwm_value,1000,2000) - 1000;
+            water70_info.dev_water70.pump2 = math_cons_i16(sow_rotate_value,1000,2000) - 1000;
+        }
+        else
+        {
+            water70_info.dev_water70.pump1 = math_cons_i16(pmu_pin.pump1,1000,2000) - 1000;
+            water70_info.dev_water70.pump2 = math_cons_i16(pmu_pin.pump2,1000,2000) - 1000;
+        }
         water70_info.dev_water70.nozzle1 = pmu_pin.nozz1_fm - 1000;
         water70_info.dev_water70.nozzle2 = pmu_pin.nozz2_zp - 1000;
         water70_info.dev_water70.nozzle3 = pmu_pin.nozz3 - 1000;

+ 57 - 19
user_src/soft_terrain.c

@@ -18,7 +18,7 @@ UAVH30 uavh30_dist;
 uavr_terrain uavr56_info = {.get_radar_sensi = 50};
 uavr_terrain mimo_ter_info;
 
-_dev_par DM_4DRADARMAG;
+_dev_par Dev_parameter;
 // muniu muniu_ter_info;
 
 bool terrain_is_link = false;
@@ -102,7 +102,7 @@ uint8_t DM_recv_flag = 0;
 uint8_t DM4d_recv_flag = 0;
 Connect_check DM_status;
 Connect_check DM_4dstatus;
-uavr_terrain DM_ter_info;
+uavr_terrain DM_ter_info,FourD_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)
@@ -160,6 +160,14 @@ void DM_terrain_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t
 
         DM_ter_info.height = data[3] + data[4] * 256;
     }
+    else if (cellCanID == 0x901302) // 单点协议
+    {
+        FourD_ter_info.Link.connect_status = COMP_NORMAL;
+        FourD_ter_info.Link.recv_time = HAL_GetTick();
+        Dev.Radar.facid_T = FAC_DM_RT_4D;
+
+        FourD_ter_info.height = data[3] + data[4] * 256;
+    }
 
     // 版本信息
     if (cellCanID == 0x981301 && data[0] == 0x1)
@@ -215,6 +223,37 @@ void DM_terrain_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t
     {
         pmu_set_ack(_MSGID_SET, MSGID_SET_R_FUNC, 0, data[1] + data[2] * 256);
     }
+
+    // 版本信息
+    if (cellCanID == 0x981302 && 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, FourD_ter_info.sn, 9);
+
+            FourD_ter_info.version[3] = 'N';
+
+            regist_dev_info(&dev_ter, DEVICE_TERRA, false, FourD_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, &FourD_ter_info.version[4], 6);
+            FourD_ter_info.version[0] = 'D';
+            FourD_ter_info.version[1] = '4';
+            FourD_ter_info.version[2] = 'T';
+
+            regist_dev_info(&dev_ter, DEVICE_TERRA, false, NULL, 0, FourD_ter_info.version, 10, NULL, 0, "dmter", 6);
+
+            FourD_ter_info.get_radar_ver_flag = true;
+            pmu_send = PMU_SEND_VERSION; // 旧版APP
+        }
+    }
+
    
 }
 
@@ -469,7 +508,6 @@ void DM_Fobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t le
         {
             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);
         }
@@ -488,29 +526,29 @@ void DM_Fobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t le
     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;
+            Dev_parameter.get_angel_4DF = true;
+        Dev_parameter.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;
+            Dev_parameter.get_ground_filter_4DF = true;
+        Dev_parameter.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;
+            Dev_parameter.get_dotcloud_switch_4DF = true;
+        Dev_parameter.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;
+            Dev_parameter.get_DM4DF_Blind_spot_distance = true;
+        Dev_parameter.DM4DF_Blind_spot_distance = data[1] + data[2] * 256;
         DM4Dmsg_send_fmu = true;
     }
     /*else if(cellCanID == 0xA81302 && (data[0] == 0x1))
@@ -673,29 +711,29 @@ void DM_Bobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t le
     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;
+            Dev_parameter.get_dotcloud_switch_4DB = true;
+        Dev_parameter.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;
+            Dev_parameter.get_angel_4DB = true;
+        Dev_parameter.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;
+            Dev_parameter.get_ground_filter_4DB = true;
+        Dev_parameter.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;
+            Dev_parameter.get_DM4DB_Blind_spot_distance = true;
+        Dev_parameter.DM4DB_Blind_spot_distance = data[1] + data[2] * 256;
         DM4Dmsg_send_fmu = true;
     }
 }

+ 1 - 1
user_src/soft_test.c

@@ -197,7 +197,7 @@ void user_init(void)
 
   //PVD_Config();
 
-  //dronecan_init(); //test
+  dronecan_init();
 
   //上电读内存参数
   flash_read_funcktion();

+ 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_to_DM4Dmsg_flag = false;
+     pmu_heart_flag = false,pmu_to_DM4Dmsg_flag = false,remoteid_flag = false;
 
 Dev_timer devinfo_time;
 void timer_function()
@@ -37,6 +37,7 @@ void timer_function()
         devinfo_time.arm = true;
         devinfo_time.tempSensor = true;
         pmu_to_DM4Dmsg_flag = true;
+        remoteid_flag = true;
     }
     if (  Check_Timer_Ready(&time_2hz,_2_HZ_) )
     {

+ 0 - 1
user_src/soft_uart.c

@@ -335,7 +335,6 @@ void check_uart_data(rkfifo_t *fifo)
 				recv_step = RX_HEAD;
 			}
 			else
-
 			{
 				recv_step = RX_SEQ;
 			}

+ 35 - 3
user_src/soft_update.c

@@ -121,6 +121,10 @@ void Vk_Update_Device_Protocol(void)
                 else
                     memcpy(&can_buf[5],"DS1",3);
             }
+            else if ( Dev.Radar.facid_T == FAC_DM_RT_4D)
+            {
+                memcpy(&can_buf[5],"D4T",3);
+            }
             break;
         case UPDATE_OBS360:
             break;
@@ -242,6 +246,16 @@ void Update_Dev_Bootversion_Function(uint8_t data[])
                 Dev.Part_Fradar_Link.recv_time = HAL_GetTick();
                 Dev.Part_Fradar_Link.connect_status = COMP_NORMAL;
                 Dev.Part_radarF.facid = FAC_DM_RF_4D;
+
+                DM_f_info.version[0] = 'D';
+                DM_f_info.version[1] = '4';
+                DM_f_info.version[2] = 'F';
+                DM_f_info.version[3] = 'N';
+                for(uint8_t i = 4;i < 10; i++)
+                {
+                    DM_f_info.version[i] = '0';
+                }
+               regist_dev_info(&dev_obsf,DEVICE_OBSF,false,NULL,0,DM_f_info.version,10,NULL,0,"dmf",6);
             }
             else
             {
@@ -281,10 +295,18 @@ void Update_Dev_Bootversion_Function(uint8_t data[])
                 Dev.Part_Bradar_Link.recv_time = HAL_GetTick();
                 Dev.Part_Bradar_Link.connect_status = COMP_NORMAL;
                 Dev.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;
+                
+                DM_4DB_info.version[0] = 'D';
+                DM_4DB_info.version[1] = '4';
+                DM_4DB_info.version[2] = 'B';
+                DM_4DB_info.version[3] = 'N';
+                for(uint8_t i = 4;i < 10; i++)
+                {
+                    DM_4DB_info.version[i] = '0';
+                }
+                regist_dev_info(&dev_obsb, DEVICE_OBSB, false, NULL, 0, DM_4DB_info.version, 10, NULL, 0, "dmter", 6);
             }
+            
             break;
         case UPDATE_TERAIN:
             if(memcmp((char *)&data[1],"TR0",3) == 0)
@@ -315,6 +337,16 @@ 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_RT_4D;
+
+                DM_ter_info.version[0] = 'D';
+                DM_ter_info.version[1] = '4';
+                DM_ter_info.version[2] = 'T';
+                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);
             }
             else
             {

+ 3 - 3
user_src/soft_version.c

@@ -192,7 +192,8 @@ void get_radar_version_and_sn(void)
         can_send_msg_normalstd(radar_can_buf, 7, 0xFA);
     }
 
-    if(DM_ter_info.Link.connect_status == COMP_NORMAL && DM_ter_info.get_radar_ver_flag == false)
+    if((DM_ter_info.Link.connect_status == COMP_NORMAL && DM_ter_info.get_radar_ver_flag == false) ||
+     (FourD_ter_info.Link.connect_status == COMP_NORMAL && FourD_ter_info.get_radar_ver_flag == false))
     {
         radar_can_buf[0] = 1;
         radar_can_buf[7] = 7;
@@ -204,7 +205,7 @@ void get_radar_version_and_sn(void)
         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)
+    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;
@@ -519,7 +520,6 @@ void get_device_version_and_sn(void)
 
     if(Check_Timer_Ready(&circu_time,_2_HZ_))
     {  
-
         //获取雷达版本和SN号
         get_radar_version_and_sn();
 

+ 94 - 4
user_src/soft_water_device.c

@@ -11,6 +11,7 @@
 #include "soft_terrain.h"
 #include "soft_obstacle.h"
 #include "canard.h"
+#include "soft_eft.h"
 /**
   * @file    liquid_recieved_hookfuction
   * @brief   液位计解析
@@ -1024,13 +1025,94 @@ void Hobbywing_esc_func(void)
 }
 Z70_tranfer z70_info;
 water_dev churn,turntable;
+water_dev pump1,pump2;
+uint8_t spary_type = 0;
+uint8_t nozzle_type = 0;
+uint8_t weight_type = 0;
 void Get_auger_sowing_mag(uint32_t CanID, uint8_t data[], uint8_t len)
 {
-    if(CanID == CAN_JIEXING1_ID)
+    if(CanID == EFT_Z80_DEV)
     {
         memcpy(&z70_info, &data[0], len);
         switch (z70_info.dev_type)
         {
+        case Z70_Public:
+            if(weight_type == WEIGHT_DEFAULT)
+                weight_type = WEIGHT_TRANFER;
+            
+            mimo_lackloss.status = data[6];
+            memcpy(&eft_info.weight,&data[4],2);
+
+            Dev.Weight_Link.connect_status = COMP_NORMAL;
+            Dev.Weight.facid = FAC_EFT;
+            Dev.Weight_Link.recv_time = HAL_GetTick();
+            break;
+        case Z70_Pump1:
+            if( spary_type == SPARY_DEFAULT )
+                spary_type = SPARY_TRANSFER;
+            spary_type = SPARY_TRANSFER;
+            Lpump1.rpm = z70_info.rpm;
+            Lpump1.error_status = z70_info.warning;
+
+            Dev.L_pump1_Link.connect_status = COMP_NORMAL;
+            Dev.L_pump1.facid = FAC_EFT;
+            Dev.L_pump1_Link.recv_time = HAL_GetTick();
+            break;
+        case Z70_Pump2:
+            if( spary_type == SPARY_DEFAULT )
+                spary_type = SPARY_TRANSFER;
+            Lpump2.rpm = z70_info.rpm;
+            Lpump2.error_status = z70_info.warning;
+
+            Dev.L_pump2_Link.connect_status = COMP_NORMAL;
+            Dev.L_pump2.facid = FAC_EFT;
+            Dev.L_pump2_Link.recv_time = HAL_GetTick();
+
+            break;
+        case Z70_Nozzle1:
+            if(nozzle_type == NOZZLE_DEFAULT)
+                nozzle_type = NOZZLE_TRANSFER;
+
+            nozzle1.rpm = z70_info.rpm;
+            nozzle1.error_status = z70_info.warning;
+
+            Dev.Nozzle_Link.connect_status = COMP_NORMAL;
+            Dev.Nozzle.facid = FAC_EFT;
+            Dev.Nozzle_Link.recv_time = HAL_GetTick();
+            break;
+        case Z70_Nozzle2:
+            if(nozzle_type == NOZZLE_DEFAULT)
+                nozzle_type = NOZZLE_TRANSFER;
+
+            nozzle2.rpm = z70_info.rpm;
+            nozzle2.error_status = z70_info.warning;
+
+            Dev.Nozzle_Link.connect_status = COMP_NORMAL;
+            Dev.Nozzle.facid = FAC_EFT;
+            Dev.Nozzle_Link.recv_time = HAL_GetTick();
+            break;
+        case Z70_Nozzle3:
+            if(nozzle_type == NOZZLE_DEFAULT)
+                nozzle_type = NOZZLE_TRANSFER;
+
+            nozzle3.rpm = z70_info.rpm;
+            nozzle3.error_status = z70_info.warning;
+
+            Dev.Nozzle_Link.connect_status = COMP_NORMAL;
+            Dev.Nozzle.facid = FAC_EFT;
+            Dev.Nozzle_Link.recv_time = HAL_GetTick();
+            break;
+        case Z70_Nozzle4:
+            if(nozzle_type == NOZZLE_DEFAULT)
+                nozzle_type = NOZZLE_TRANSFER;
+
+            nozzle4.rpm = z70_info.rpm;
+            nozzle4.error_status = z70_info.warning;
+
+            Dev.Nozzle_Link.connect_status = COMP_NORMAL;
+            Dev.Nozzle.facid = FAC_EFT;
+            Dev.Nozzle_Link.recv_time = HAL_GetTick();
+            break;
          case Z70_Churn:
             churn.rpm = z70_info.rpm;
             churn.error_status = z70_info.warning;
@@ -1041,7 +1123,7 @@ void Get_auger_sowing_mag(uint32_t CanID, uint8_t data[], uint8_t len)
             if(churn_size != (z70_info.reserve3 & 0x07))
             {
                churn_size = z70_info.reserve3 & 0x07;
-               DM_4DRADARMAG.Packing_auger_size = churn_size;
+               Dev_parameter.Packing_auger_size = churn_size;
                DM4Dmsg_send_fmu = true;
             }
              
@@ -1061,7 +1143,7 @@ void Get_auger_sowing_mag(uint32_t CanID, uint8_t data[], uint8_t len)
             break;
         }
     }
-    else if(CanID == CAN_JIEXING2_ID)
+    else if(CanID == EFT_Z80_DEV_ACK)
     {
         if(data[0] == 0xe6)
         {
@@ -1069,9 +1151,17 @@ void Get_auger_sowing_mag(uint32_t CanID, uint8_t data[], uint8_t len)
         }
         else if(data[0] == 0xe7)
         {
-            DM_4DRADARMAG.Packing_auger_size = data[1];
+            Dev_parameter.Packing_auger_size = data[1];
             DM4Dmsg_send_fmu = true;
         }
+        else if(data[0] == 0xe4)
+        {
+            z70weight.info.k1 = data[1] + ((data[2] & 0x3f) << 8);
+            z70weight.info.k2 = (data[2] >> 6) + (data[3] << 2) + ((data[4] & 0xf) << 10);
+            z70weight.info.k3 = (data[4] >> 4) + (data[5] << 4)  + ((data[6] & 0x3) << 12);
+            z70weight.info.k4 = (data[6] >> 2) + (data[7] << 6);
+            weight_init_eft.step.read_k_flag = 0;
+        }
     }
 
 }