|
@@ -103,6 +103,8 @@ uint8_t DM4d_recv_flag = 0;
|
|
|
Connect_check DM_status;
|
|
Connect_check DM_status;
|
|
|
Connect_check DM_4dstatus;
|
|
Connect_check DM_4dstatus;
|
|
|
uavr_terrain DM_ter_info;
|
|
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)
|
|
void DM_terrain_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t len)
|
|
|
{
|
|
{
|
|
|
if (cellCanID == 0x901300) // 多点协议
|
|
if (cellCanID == 0x901300) // 多点协议
|
|
@@ -222,6 +224,14 @@ int dm_4df_i = 0;
|
|
|
DM_4DRADAR FMU_4D_info;
|
|
DM_4DRADAR FMU_4D_info;
|
|
|
bool F4d_send_flag = false;
|
|
bool F4d_send_flag = false;
|
|
|
bool DM4Dmsg_send_fmu=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)
|
|
void DM_Fobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t len)
|
|
|
{
|
|
{
|
|
|
if (cellCanID == 0XA01300) // 多点协议
|
|
if (cellCanID == 0XA01300) // 多点协议
|
|
@@ -279,7 +289,7 @@ void DM_Fobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t le
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 4D前避障雷达协议 点云
|
|
// 4D前避障雷达协议 点云
|
|
|
- if (cellCanID == 0XA01310)
|
|
|
|
|
|
|
+ /*if (cellCanID == 0XA01310)
|
|
|
{
|
|
{
|
|
|
DM_4dstatus.connect_status = COMP_NORMAL;
|
|
DM_4dstatus.connect_status = COMP_NORMAL;
|
|
|
DM_4dstatus.recv_time = HAL_GetTick();
|
|
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);
|
|
memcpy(&DM_F4d.RawData[dm_4df_i], &data[0], 7);
|
|
|
dm_4df_i += 7;
|
|
dm_4df_i += 7;
|
|
|
}
|
|
}
|
|
|
- if (dm_4df_i >= 254 * 5)
|
|
|
|
|
|
|
+ if (dm_4df_i >= 145 * 5)
|
|
|
{
|
|
{
|
|
|
dm_4df_i = 0;
|
|
dm_4df_i = 0;
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ }*/
|
|
|
// 4D前避障雷达协议 单点
|
|
// 4D前避障雷达协议 单点
|
|
|
if (cellCanID == 0XA01302)
|
|
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][1] = data[3] + data[4] * 256;
|
|
|
F_4DRadar[2][2] = data[5] + data[6] * 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)
|
|
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 +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);
|
|
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 +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;
|
|
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;
|
|
@@ -443,7 +526,7 @@ uint8_t DM4dB_recv_flag = 0;
|
|
|
void DM_Bobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t len)
|
|
void DM_Bobs_recieved_hookfuction(uint32_t cellCanID, uint8_t data[], uint8_t len)
|
|
|
{
|
|
{
|
|
|
// 4D后避障雷达协议 点云
|
|
// 4D后避障雷达协议 点云
|
|
|
- if (cellCanID == 0XB01310)
|
|
|
|
|
|
|
+ /*if (cellCanID == 0XB01310)
|
|
|
{
|
|
{
|
|
|
// DM_4dstatus.connect_status = COMP_NORMAL;
|
|
// DM_4dstatus.connect_status = COMP_NORMAL;
|
|
|
// DM_4dstatus.recv_time = HAL_GetTick();
|
|
// 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;
|
|
dm_4dB_i = 0;
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ }*/
|
|
|
// 4D后避障雷达协议 单点
|
|
// 4D后避障雷达协议 单点
|
|
|
if (cellCanID == 0XB01302)
|
|
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][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 == 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))
|
|
else if (cellCanID == 0xB81302 && (data[0] == 0xA || data[0] == 0xB))
|
|
|
{
|
|
{
|
|
|
if (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;
|
|
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;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|