浏览代码

auto resend events

Signed-off-by: FuangCao <cavan.cao@foxmail.com>
FuangCao 5 年之前
父节点
当前提交
7fc0be5217
共有 14 个文件被更改,包括 84 次插入343 次删除
  1. 1 1
      Project/version.txt
  2. 14 62
      Source/app_bms_1.c
  3. 0 3
      Source/app_bms_1.h
  4. 14 63
      Source/app_bms_2.c
  5. 0 3
      Source/app_bms_2.h
  6. 21 33
      Source/app_can.c
  7. 10 12
      Source/app_can.h
  8. 15 96
      Source/app_end_ctr.c
  9. 0 3
      Source/app_end_ctr.h
  10. 3 3
      Source/common.h
  11. 1 10
      Source/delay.c
  12. 4 5
      Source/drv_io.c
  13. 0 48
      Source/main.c
  14. 1 1
      Source/sw_build_info.h

+ 1 - 1
Project/version.txt

@@ -1 +1 @@
-PS100XX_V11_12251959
+PS100XX_V11_13031439

+ 14 - 62
Source/app_bms_1.c

@@ -8,7 +8,6 @@
 
 BMS_SELF_SEND_STATUS bms_1_self_ss;
 BMS_SELF_CUR_VOL_STATUS bms_1_cur_vol_ss;
-DELAY_COMMON bms_1_self_stimeout;
 
 
 void Can_Bms_1_Cur_Vol_Self_Send_Check(CAN_FRAME*can_bms_1_frame)
@@ -41,9 +40,6 @@ void Can_Bms_1_Cur_Vol_Self_Send_Check(CAN_FRAME*can_bms_1_frame)
 	can_bms_1_frame->len = len;
 	memcpy(buf,&bms_1_cur_vol_ss,len);
 	
-	bms_1_self_stimeout.set = 0;
-	bms_1_self_stimeout.count = 0;
-	g_event &= ~BMS_1_SELF_TIMEOUT_EVENT;
 	//
 	if(!Send_Data_Can(can_bms_1_frame,BMS_1_CUR_VOL_SELF))
 	{
@@ -62,20 +58,16 @@ void Can_Bms_1_Self_Send_Check(CAN_FRAME*can_bms_1_frame)
 	uint16_t len;
 	uint8_t *buf = can_bms_1_frame->data;
 
-	
-	do
-	{
-		if(bms_1_self_ss.m_percent != sub_bms_info_1.packet_common.m_percent)
-			break;
-		if(bms_1_self_ss.charge_flag != sub_bms_info_1.packet_common.charge_flag)
-			break;
-		if(bms_1_self_ss.work_status != sub_bms_info_1.packet_common.work_status)
-			break;
-		//if(bms_1_self_ss.bms_status != sub_bms_info_1.packet_common.bms_status)
-		//	break;
-		//Can_Bms_1_Cur_Vol_Self_Send_Check(can_bms_1_frame);
+	if (bms_1_self_ss.m_percent != sub_bms_info_1.packet_common.m_percent
+		|| bms_1_self_ss.charge_flag != sub_bms_info_1.packet_common.charge_flag
+		|| bms_1_self_ss.work_status != sub_bms_info_1.packet_common.work_status) {
+		shark_can_send_pending |= SHARK_SEND_PENDING_3181;
+		shark_can_send_times = 0;
+	}
+
+	if ((shark_can_send_pending & SHARK_SEND_PENDING_3181) == 0) {
 		return;
-	}while(0);
+	}
 
 	bms_1_self_ss.m_percent = sub_bms_info_1.packet_common.m_percent;
 	bms_1_self_ss.charge_flag = sub_bms_info_1.packet_common.charge_flag;
@@ -91,9 +83,6 @@ void Can_Bms_1_Self_Send_Check(CAN_FRAME*can_bms_1_frame)
 	//
 	can_bms_1_frame->len = len;
 	memcpy(buf,&bms_1_self_ss,len);
-	
-	bms_1_self_stimeout.set = 1;
-	bms_1_self_stimeout.count = 0;
 	//
 	if(!Send_Data_Can(can_bms_1_frame,BMS_1_SELF))
 	{
@@ -130,7 +119,7 @@ int8_t Handle_Can_Bms_1_CMD(CAN_FRAME*can_bms_1_frame)
 			sub_bms_info_1.update_mask |= SHARK_BATT_INFO_TEMP;
 			break;
 		case KEY_BMS_1_SELF_UP:
-			bms_1_self_stimeout.set = 0;
+			shark_can_send_pending &= ~SHARK_SEND_PENDING_3181;
 			return 0;	
 		default:
 			return 0;
@@ -147,13 +136,15 @@ int8_t Rsp_Can_Bms_1_CMD(CAN_FRAME*can_bms_1_frame)
 	uint8_t *buf = can_bms_1_frame->data,*bt;
 	uint16_t temp;
 
+	if (can_bms_1_frame->head.rsp != FRAME_PT_NEED_RSP) {
+		return 1;
+	}
+
 	memcpy(&key,can_bms_1_frame->data,sizeof(key));
 
 	switch(key)
 	{
 		case KEY_BMS_1_COMMON:
-			if((can_bms_1_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_1_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			memcpy(&buf[len],&sub_bms_info_1.packet_common,sizeof(sub_bms_info_1.packet_common) - 1);
@@ -185,24 +176,18 @@ int8_t Rsp_Can_Bms_1_CMD(CAN_FRAME*can_bms_1_frame)
 			len += sizeof(sub_bms_info_1.packet_common) - 1;
 			break;
 		case KEY_BMS_1_READ_INFO:
-			if((can_bms_1_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_1_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			memcpy(&buf[len],sub_bms_info_1.bat_dev_info.sn,sizeof(sub_bms_info_1.bat_dev_info.sn));
 			len += sizeof(sub_bms_info_1.bat_dev_info.sn);
 			break;	
 		case KEY_BMS_1_READ_VER:
-			if((can_bms_1_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_1_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			memcpy(&buf[len],sub_bms_info_1.bat_dev_info.soft_ver,sizeof(sub_bms_info_1.bat_dev_info.soft_ver));
 			len += sizeof(sub_bms_info_1.bat_dev_info.soft_ver);
 			break;
 		case KEY_BMS_1_ALARM_TIMES:
-			if((can_bms_1_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_1_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			//memcpy(&buf[len],&sub_bms_info_1.bat_times,sizeof(sub_bms_info_1.bat_times));
@@ -212,8 +197,6 @@ int8_t Rsp_Can_Bms_1_CMD(CAN_FRAME*can_bms_1_frame)
 			len += 14;
 			break;
 		case KEY_BMS_1_ALARM_TIMES_1:
-			if((can_bms_1_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_1_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			bt = (uint8_t*)(&sub_bms_info_1.bat_times);
@@ -221,8 +204,6 @@ int8_t Rsp_Can_Bms_1_CMD(CAN_FRAME*can_bms_1_frame)
 			len += 16;
 			break;
 		case KEY_BMS_1_ALARM_TIMES_2:
-			if((can_bms_1_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_1_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			bt = (uint8_t*)(&sub_bms_info_1.bat_times);
@@ -230,8 +211,6 @@ int8_t Rsp_Can_Bms_1_CMD(CAN_FRAME*can_bms_1_frame)
 			len += 12;
 			break;
 		case KEY_BMS_1_CELL_VOL:
-			if((can_bms_1_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_1_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			bt = (uint8_t*)(&sub_bms_info_1.cell_vol);
@@ -239,8 +218,6 @@ int8_t Rsp_Can_Bms_1_CMD(CAN_FRAME*can_bms_1_frame)
 			len += 13;
 			break;
 		case KEY_BMS_1_CELL_VOL_1:
-			if((can_bms_1_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_1_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			buf[len++] = 0;
@@ -249,8 +226,6 @@ int8_t Rsp_Can_Bms_1_CMD(CAN_FRAME*can_bms_1_frame)
 			len += 12;
 			break;
 		case KEY_BMS_1_CELL_VOL_2:
-			if((can_bms_1_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_1_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			buf[len++] = 0;
@@ -262,8 +237,6 @@ int8_t Rsp_Can_Bms_1_CMD(CAN_FRAME*can_bms_1_frame)
 			len += 6;
 			break;
 		case KEY_BMS_1_TEMP_OTHER:
-			if((can_bms_1_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_1_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			bt = (uint8_t*)(&sub_bms_info_1.temp_other);
@@ -295,24 +268,3 @@ int8_t Rsp_Can_Bms_1_CMD(CAN_FRAME*can_bms_1_frame)
 	return 1;
 
 }
-
-
-void Bms_1_Self_Send_Timeout(void)
-{
-	if(bms_1_self_stimeout.set)
-	{
-		++bms_1_self_stimeout.count;
-		if(bms_1_self_stimeout.count >= 300)
-		{
-			memset(&bms_1_self_stimeout,0x00,sizeof(bms_1_self_stimeout));
-			g_event |= BMS_1_SELF_TIMEOUT_EVENT;
-		}
-		else if(bms_1_self_stimeout.count == 200)
-			g_event |= BMS_1_SELF_TIMEOUT_EVENT;
-		else if(bms_1_self_stimeout.count == 100)
-			g_event |= BMS_1_SELF_TIMEOUT_EVENT;
-	}
-	else
-		bms_1_self_stimeout.count = 0;
-	
-}

+ 0 - 3
Source/app_bms_1.h

@@ -26,7 +26,6 @@
 
 extern BMS_SELF_SEND_STATUS bms_1_self_ss;
 extern BMS_SELF_CUR_VOL_STATUS bms_1_cur_vol_ss;
-extern DELAY_COMMON bms_1_self_stimeout;
 
 int8_t Handle_Can_Bms_1_CMD(CAN_FRAME*can_bms_1_frame);
 
@@ -34,8 +33,6 @@ int8_t Rsp_Can_Bms_1_CMD(CAN_FRAME*can_bms_1_frame);
 
 void Can_Bms_1_Self_Send_Check(CAN_FRAME*can_bms_1_frame);
 
-void Bms_1_Self_Send_Timeout(void);
-
 
 
 #endif

+ 14 - 63
Source/app_bms_2.c

@@ -8,7 +8,6 @@
 
 BMS_SELF_SEND_STATUS bms_2_self_ss;
 BMS_SELF_CUR_VOL_STATUS bms_2_cur_vol_ss;
-DELAY_COMMON bms_2_self_stimeout;
 
 void Can_Bms_2_Cur_Vol_Self_Send_Check(CAN_FRAME*can_bms_2_frame)
 {
@@ -40,9 +39,6 @@ void Can_Bms_2_Cur_Vol_Self_Send_Check(CAN_FRAME*can_bms_2_frame)
 	can_bms_2_frame->len = len;
 	memcpy(buf,&bms_2_cur_vol_ss,len);
 	
-	bms_2_self_stimeout.set = 0;
-	bms_2_self_stimeout.count = 0;
-	g_event &= ~BMS_2_SELF_TIMEOUT_EVENT;
 	//
 	if(!Send_Data_Can(can_bms_2_frame,BMS_2_CUR_VOL_SELF))
 	{
@@ -61,20 +57,16 @@ void Can_Bms_2_Self_Send_Check(CAN_FRAME*can_bms_2_frame)
 	uint16_t len;
 	uint8_t *buf = can_bms_2_frame->data;
 
-	
-	do
-	{
-		if(bms_2_self_ss.m_percent != sub_bms_info_2.packet_common.m_percent)
-			break;
-		if(bms_2_self_ss.charge_flag != sub_bms_info_2.packet_common.charge_flag)
-			break;
-		if(bms_2_self_ss.work_status != sub_bms_info_2.packet_common.work_status)
-			break;
-		//if(bms_2_self_ss.bms_status != sub_bms_info_2.packet_common.bms_status)
-		//	break;
-		//Can_Bms_2_Cur_Vol_Self_Send_Check(can_bms_2_frame);
+	if (bms_2_self_ss.m_percent != sub_bms_info_2.packet_common.m_percent
+		|| bms_2_self_ss.charge_flag != sub_bms_info_2.packet_common.charge_flag
+		|| bms_2_self_ss.work_status != sub_bms_info_2.packet_common.work_status) {
+		shark_can_send_pending |= SHARK_SEND_PENDING_3281;
+		shark_can_send_times = 0;
+	}
+
+	if ((shark_can_send_pending & SHARK_SEND_PENDING_3281) == 0) {
 		return;
-	}while(0);
+	}
 
 	bms_2_self_ss.m_percent = sub_bms_info_2.packet_common.m_percent;
 	bms_2_self_ss.charge_flag = sub_bms_info_2.packet_common.charge_flag;
@@ -91,8 +83,6 @@ void Can_Bms_2_Self_Send_Check(CAN_FRAME*can_bms_2_frame)
 	can_bms_2_frame->len = len;
 	memcpy(buf,&bms_2_self_ss,len);
 	
-	bms_2_self_stimeout.set = 1;
-	bms_2_self_stimeout.count = 0;
 	//
 	if(!Send_Data_Can(can_bms_2_frame,BMS_2_SELF))
 	{
@@ -129,7 +119,7 @@ int8_t Handle_Can_Bms_2_CMD(CAN_FRAME*can_bms_2_frame)
 			sub_bms_info_2.update_mask |= SHARK_BATT_INFO_TEMP;
 			break;
 		case KEY_BMS_2_SELF_UP:
-			bms_2_self_stimeout.set = 0;
+			shark_can_send_pending &= ~SHARK_SEND_PENDING_3281;
 			return 0;	
 		default:
 			return 0;
@@ -146,13 +136,15 @@ int8_t Rsp_Can_Bms_2_CMD(CAN_FRAME*can_bms_2_frame)
 	uint8_t *buf = can_bms_2_frame->data,*bt;
 	uint16_t temp;
 
+	if (can_bms_2_frame->head.rsp != FRAME_PT_NEED_RSP) {
+		return 1;
+	}
+
 	memcpy(&key,can_bms_2_frame->data,sizeof(key));
 
 	switch(key)
 	{
 		case KEY_BMS_2_COMMON:
-			if((can_bms_2_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_2_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			memcpy(&buf[len],&sub_bms_info_2.packet_common,sizeof(sub_bms_info_2.packet_common) - 1);
@@ -183,24 +175,18 @@ int8_t Rsp_Can_Bms_2_CMD(CAN_FRAME*can_bms_2_frame)
 			len += sizeof(sub_bms_info_2.packet_common) - 1;
 			break;
 		case KEY_BMS_2_READ_INFO:
-			if((can_bms_2_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_2_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			memcpy(&buf[len],sub_bms_info_2.bat_dev_info.sn,sizeof(sub_bms_info_2.bat_dev_info.sn));
 			len += sizeof(sub_bms_info_2.bat_dev_info.sn);
 			break;
 		case KEY_BMS_2_READ_VER:
-			if((can_bms_2_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_2_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			memcpy(&buf[len],sub_bms_info_2.bat_dev_info.soft_ver,sizeof(sub_bms_info_2.bat_dev_info.soft_ver));
 			len += sizeof(sub_bms_info_2.bat_dev_info.soft_ver);
 			break;	
 		case KEY_BMS_2_ALARM_TIMES:
-			if((can_bms_2_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_2_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			//memcpy(&buf[len],&sub_bms_info_2.bat_times,sizeof(sub_bms_info_2.bat_times));
@@ -210,8 +196,6 @@ int8_t Rsp_Can_Bms_2_CMD(CAN_FRAME*can_bms_2_frame)
 			len += 14;
 			break;
 		case KEY_BMS_2_ALARM_TIMES_1:
-			if((can_bms_2_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_2_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			bt = (uint8_t*)(&sub_bms_info_2.bat_times);
@@ -219,8 +203,6 @@ int8_t Rsp_Can_Bms_2_CMD(CAN_FRAME*can_bms_2_frame)
 			len += 16;
 			break;
 		case KEY_BMS_2_ALARM_TIMES_2:
-			if((can_bms_2_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_2_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			bt = (uint8_t*)(&sub_bms_info_2.bat_times);
@@ -228,8 +210,6 @@ int8_t Rsp_Can_Bms_2_CMD(CAN_FRAME*can_bms_2_frame)
 			len += 12;
 			break;
 		case KEY_BMS_2_CELL_VOL:
-			if((can_bms_2_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_2_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			bt = (uint8_t*)(&sub_bms_info_2.cell_vol);
@@ -237,8 +217,6 @@ int8_t Rsp_Can_Bms_2_CMD(CAN_FRAME*can_bms_2_frame)
 			len += 13;
 			break;
 		case KEY_BMS_2_CELL_VOL_1:
-			if((can_bms_2_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_2_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			buf[len++] = 0;
@@ -247,8 +225,6 @@ int8_t Rsp_Can_Bms_2_CMD(CAN_FRAME*can_bms_2_frame)
 			len += 12;
 			break;
 		case KEY_BMS_2_CELL_VOL_2:
-			if((can_bms_2_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_2_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			buf[len++] = 0;
@@ -260,8 +236,6 @@ int8_t Rsp_Can_Bms_2_CMD(CAN_FRAME*can_bms_2_frame)
 			len += 6;
 			break;
 		case KEY_BMS_2_TEMP_OTHER:
-			if((can_bms_2_frame->head.rsp != FRAME_PT_NEED_RSP) || bms_2_self_stimeout.set)
-				return 1;
 			len = 2;
 			buf[len++] = 0;
 			bt = (uint8_t*)(&sub_bms_info_2.temp_other);
@@ -293,26 +267,3 @@ int8_t Rsp_Can_Bms_2_CMD(CAN_FRAME*can_bms_2_frame)
 	return 1;
 
 }
-
-
-void Bms_2_Self_Send_Timeout(void)
-{
-	if(bms_2_self_stimeout.set)
-	{
-		++bms_2_self_stimeout.count;
-		if(bms_2_self_stimeout.count >= 300)
-		{
-			memset(&bms_2_self_stimeout,0x00,sizeof(bms_2_self_stimeout));
-			g_event |= BMS_2_SELF_TIMEOUT_EVENT;
-		}
-		else if(bms_2_self_stimeout.count == 200)
-			g_event |= BMS_2_SELF_TIMEOUT_EVENT;
-		else if(bms_2_self_stimeout.count == 100)
-			g_event |= BMS_2_SELF_TIMEOUT_EVENT;
-	}
-	else
-		bms_2_self_stimeout.count = 0;
-	
-}
-
-

+ 0 - 3
Source/app_bms_2.h

@@ -27,15 +27,12 @@
 
 extern BMS_SELF_SEND_STATUS bms_2_self_ss;
 extern BMS_SELF_CUR_VOL_STATUS bms_2_cur_vol_ss;
-extern DELAY_COMMON bms_2_self_stimeout;
 
 int8_t Handle_Can_Bms_2_CMD(CAN_FRAME*can_bms_2_frame);
 
 int8_t Rsp_Can_Bms_2_CMD(CAN_FRAME*can_bms_2_frame);
 
 void Can_Bms_2_Self_Send_Check(CAN_FRAME*can_bms_2_frame);
-
-void Bms_2_Self_Send_Timeout(void);
 	
 #endif
 

+ 21 - 33
Source/app_can.c

@@ -29,43 +29,16 @@ CAN_FRAME app_can_adas_frame;
 
 uint8_t mode = 0;
 uint8_t adjust_step = 0;
-	
-int8_t Resend_can_bms_1_frame(void)
-{
-	return Send_Data_Can(&app_can_bms_1_frame,BMS_1_RESEND);
-}
-
-int8_t Resend_can_bms_2_frame(void)
-{
-	return Send_Data_Can(&app_can_bms_2_frame,BMS_2_RESEND);
-}
 
-int8_t Resend_can_ctr_frame(void)
-{
-	return Send_Data_Can(&app_can_ctr_frame,CTR_RESEND);
-}
+shark_u32 shark_can_send_pending;
+shark_u64 shark_can_send_time;
+shark_u8 shark_can_send_times;
 
 int8_t Resend_can_adas_frame(void)
 {
 	return Send_Data_Can(&app_can_adas_frame,ADAS_RESEND);
 }
 
-
-int8_t Timeout_Resend_can_bms_1_frame(void)
-{
-	return Send_Data_Can(&app_can_bms_1_frame,TIMEOUT_BMS_1_RESEND);
-}
-
-int8_t Timeout_Resend_can_bms_2_frame(void)
-{
-	return Send_Data_Can(&app_can_bms_2_frame,TIMEOUT_BMS_2_RESEND);
-}
-
-int8_t Timeout_Resend_can_ctr_frame(void)
-{
-	return Send_Data_Can(&app_can_ctr_frame,TIMEOUT_CTR_RESEND);
-}
-
 int8_t Timeout_Resend_can_adas_frame(void)
 {
 	return Send_Data_Can(&app_can_adas_frame,TIMEOUT_ADAS_RESEND);
@@ -78,9 +51,24 @@ void ADAS_Self_Send_Up(void)
 
 void Check_Can_Self_Send_Status(void)
 {
-	Can_End_Ctr_Self_Send_Check(&app_can_ctr_frame);
-	Can_Bms_1_Self_Send_Check(&app_can_bms_1_frame);
-	Can_Bms_2_Self_Send_Check(&app_can_bms_2_frame);
+	shark_u64 time = shark_get_mseconds();
+	shark_u64 delay = time - shark_can_send_time;
+
+	if (delay > 100) {
+		shark_can_send_time = time;
+
+		if (shark_can_send_times < 10) {
+			shark_can_send_times++;
+
+			if (shark_can_send_times == 10) {
+				shark_can_send_pending = 0;
+			}
+		}
+
+		Can_End_Ctr_Self_Send_Check(&app_can_ctr_frame);
+		Can_Bms_1_Self_Send_Check(&app_can_bms_1_frame);
+		Can_Bms_2_Self_Send_Check(&app_can_bms_2_frame);
+	}
 }
 
 static int8_t Handle_Can_CMD(CAN_FRAME*can_frame)

+ 10 - 12
Source/app_can.h

@@ -1,6 +1,12 @@
 #ifndef APP_CAN_H
 #define APP_CAN_H
 
+#define SHARK_SEND_PENDING_4280		(1 << 0)
+#define SHARK_SEND_PENDING_3181		(1 << 1)
+#define SHARK_SEND_PENDING_3182		(1 << 2)
+#define SHARK_SEND_PENDING_3281		(1 << 3)
+#define SHARK_SEND_PENDING_3282		(1 << 4)
+
 enum
 {
 	OPERATE_GND_INPUT = 1,
@@ -63,26 +69,18 @@ typedef struct
 }BMS_SELF_CUR_VOL_STATUS;
 #pragma pack(pop)
 
+extern shark_u32 shark_can_send_pending;
+extern shark_u64 shark_can_send_time;
+extern shark_u8 shark_can_send_times;
+
 void Can_Com_Initial(void);
 
 int8_t Handle_Can_Data(void);
 
 void Can_Test(void);
 
-int8_t Resend_can_bms_1_frame(void);
-
-int8_t Resend_can_bms_2_frame(void);
-
-int8_t Resend_can_ctr_frame(void);
-
 int8_t Resend_can_adas_frame(void);
 
-int8_t Timeout_Resend_can_bms_1_frame(void);
-
-int8_t Timeout_Resend_can_bms_2_frame(void);
-
-int8_t Timeout_Resend_can_ctr_frame(void);
-
 int8_t Timeout_Resend_can_adas_frame(void);
 
 void ADAS_Self_Send_Up(void);

+ 15 - 96
Source/app_end_ctr.c

@@ -17,8 +17,6 @@ END_CTR_SELF_SEND_STATUS end_ctr_self_ss;
 END_CTR_SELF_SEND_STATUS end_ctr_self_ss_new;
 END_CTR_SELF_SEND_STATUS end_ctr_rsp;
 
-DELAY_COMMON end_ctr_self_stimeout;
-
 uint8_t Get_QD_State(void)
 {
 	return end_ctr_self_ss_new.qd_sta;
@@ -34,10 +32,15 @@ void Can_End_Ctr_Self_Send_Check(CAN_FRAME*can_ctr_frame)
 	uint16_t len;
 	uint8_t *buf = can_ctr_frame->data;
 
-	if(!memcmp(&end_ctr_self_ss,&end_ctr_self_ss_new,sizeof(END_CTR_SELF_SEND_STATUS)))
+	if(memcmp(&end_ctr_self_ss,&end_ctr_self_ss_new,sizeof(END_CTR_SELF_SEND_STATUS)) != 0) {
+		memcpy(&end_ctr_self_ss,&end_ctr_self_ss_new,sizeof(END_CTR_SELF_SEND_STATUS));
+		shark_can_send_pending |= SHARK_SEND_PENDING_4280;
+		shark_can_send_times = 0;
+	}
+
+	if ((shark_can_send_pending & SHARK_SEND_PENDING_4280) == 0) {
 		return;
-	
-	memcpy(&end_ctr_self_ss,&end_ctr_self_ss_new,sizeof(END_CTR_SELF_SEND_STATUS));
+	}
 	
 	len = sizeof(end_ctr_self_ss);
 	//
@@ -51,8 +54,6 @@ void Can_End_Ctr_Self_Send_Check(CAN_FRAME*can_ctr_frame)
 	can_ctr_frame->len = len;
 	memcpy(buf,&end_ctr_self_ss,len);
 	
-	end_ctr_self_stimeout.set = 1;
-	end_ctr_self_stimeout.count = 0;
 	//
 	if(!Send_Data_Can(can_ctr_frame,CTR_SELF))
 	{
@@ -344,7 +345,7 @@ int8_t Handle_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 		case KEY_END_CTR_HEART_TICK:
 			break;
 		case KEY_END_CTR_SELF_UP:
-			end_ctr_self_stimeout.set = 0;
+			shark_can_send_pending &= ~SHARK_SEND_PENDING_4280;
 			return 0;
 #ifdef CONFIG_CAN_IAP
 		case 0x42F0:
@@ -372,14 +373,16 @@ int8_t Rsp_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 {
 	uint16_t key,len;
 	uint8_t *buf = can_ctr_frame->data;
-	
+
+	if (can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) {
+		return 1;
+	}
+
 	memcpy(&key,can_ctr_frame->data,sizeof(key));
 
 	switch(key)
 	{
 		case KEY_END_CTR_COMMON:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
 			end_ctr_rsp.key = KEY_END_CTR_COMMON;
 			end_ctr_rsp.op_result = 0;
 			len = sizeof(end_ctr_rsp);
@@ -392,9 +395,6 @@ int8_t Rsp_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 			
 			break;
 		case KEY_END_CTR_SWI_BAT:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			
 			if(is_intelligent)
@@ -422,66 +422,42 @@ int8_t Rsp_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 			
 			break;
 		case KEY_END_CTR_BAT_INT_EN:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			buf[len++] = 0;
 			break;	
 		case KEY_END_CTR_BAT_INT_PRE:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			buf[len++] = 0;
 			break;
 		case KEY_END_CTR_SOFT_WARE:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			buf[len++] = 0;
 			memcpy(&buf[len],soft_version,PS100_SOFTWARE_SIZE);
 			len += PS100_SOFTWARE_SIZE;
 			break;
 		case KEY_END_CTR_SN:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			buf[len++] = 0;
 			memcpy(&buf[len],sn,sizeof(sn));
 			len += sizeof(sn);
 			break;
 		case KEY_END_CTR_WRITER_SN:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			buf[len++] = 0;
 			break;
 		case KEY_END_CTR_BAT_UPDATE_REQ:
-			//if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-			//	return 1;
 			len = 2;
 			buf[len++] = 1;
 			break;
 		case KEY_END_CTR_BAT_UPDATE:
-			//if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-			///	return 1;
 			len = 2;
 			buf[len++] = 1;
 			break;
 		case KEY_END_CTR_BAT_UPDATE_EXIT:
-			//if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-			//	return 1;
 			len = 2;
 			buf[len++] = 0;
 			break;
 		case KEY_END_CTR_DAN_CI_LI_CHENG:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-
 			len = 2;
 			buf[len++] = sheng_yu_li_cheng.sy_yu_ji_ke_xing_shi_li_cheng;
 			break;
@@ -491,8 +467,6 @@ int8_t Rsp_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 			buf[len++] = 0;
 			break;
 		case KEY_END_CTR_TEST_INFO:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
 			len = 2;
 			switch(buf[len++])
 			{
@@ -554,9 +528,6 @@ int8_t Rsp_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 			
 			break;
 		case KEY_END_CTR_QD:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			buf[len++] = 0;
 			if(work_normal == 1)
@@ -569,74 +540,48 @@ int8_t Rsp_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 			
 			break;	
 		case KEY_END_CTR_LOCK:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			buf[len++] = 0;
 			buf[len++] = Lock_Dect();
 			break;
 		case KEY_END_CTR_L_R_LIGHT:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			buf[len++] = 0;
 			break;
 		case KEY_END_CTR_CARPET_LIGHT:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			buf[len++] = 0;
 			break;
 		case KEY_END_CTR_TAIL_LIGHT:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			buf[len++] = 0;
 			break;
 		case KEY_END_CTR_ACC12:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			buf[len++] = 0;
 			if(work_normal == 1)
 			{
-				buf[len++] = ACC2_Dect();
-				acc2_dec_delay.count = ACC2_DEC_TIMEOUT;
+				buf[len++] = end_ctr_self_ss_new.acc12_sta;
 			}
 			else
 				buf[len++] = 0;
 			break;	
 			
 		case KEY_END_CTR_ACC12_TEST:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			buf[len++] = 0;
 			break;	
 		case KEY_END_CTR_ACC12_TEST_1:
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			buf[len++] = 0;
 			if(work_normal == 1)
 			{
 				buf[len++] = ACC2_Dect();
-				acc2_dec_delay.count = ACC2_DEC_TIMEOUT;
 			}
 			else
 				buf[len++] = 0;
 			break;
 		case KEY_END_CTR_HEART_TICK:	
-			if((can_ctr_frame->head.rsp != FRAME_PT_NEED_RSP) || end_ctr_self_stimeout.set)
-				return 1;
-			
 			len = 2;
 			buf[len++] = 0;
 			break;
@@ -719,12 +664,6 @@ void Check_End_Ctr_Status(void)
 		end_ctr_self_ss_new.qd_sta = QD_Dect();
 	}
 
-	if(acc2_dec_delay.set&&acc2_dec_delay.count >= ACC2_DEC_TIMEOUT)
-	{
-		memset(&acc2_dec_delay,0x00,sizeof(acc2_dec_delay));
-		end_ctr_self_ss_new.acc12_sta = ACC2_Dect();
-	}
-
 	//
 	end_ctr_self_ss_new.charger_in = shark_charger_is_normal();
 	end_ctr_self_ss_new.bat1_charge = shark_battery_charge_in1();
@@ -754,23 +693,3 @@ void End_Ctr_Initial(void)
 {
 	 E_CTR_Initial();
 }
-
-void End_Ctr_Self_Send_Timeout(void)
-{
-	if(end_ctr_self_stimeout.set)
-	{
-		++end_ctr_self_stimeout.count;
-		if(end_ctr_self_stimeout.count >= 300)
-		{
-			memset(&end_ctr_self_stimeout,0x00,sizeof(end_ctr_self_stimeout));
-			g_event |= END_CTR_SELF_TIMEOUT_EVENT;
-		}
-		else if(end_ctr_self_stimeout.count == 200)
-			g_event |= END_CTR_SELF_TIMEOUT_EVENT;
-		else if(end_ctr_self_stimeout.count == 100)
-			g_event |= END_CTR_SELF_TIMEOUT_EVENT;
-	}
-	else
-		end_ctr_self_stimeout.count = 0;
-	
-}

+ 0 - 3
Source/app_end_ctr.h

@@ -77,7 +77,6 @@ typedef struct
 extern END_CTR_SELF_SEND_STATUS end_ctr_self_ss;
 extern END_CTR_SELF_SEND_STATUS end_ctr_self_ss_new;
 extern END_CTR_SELF_SEND_STATUS end_ctr_rsp;
-extern DELAY_COMMON end_ctr_self_stimeout;
 
 
 int8_t Handle_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame);
@@ -90,8 +89,6 @@ void End_Ctr_Initial(void);
 
 void Check_End_Ctr_Status(void);
 
-void End_Ctr_Self_Send_Timeout(void);
-
 void ACC12_OVER_Loader_Timeout(void);
 
 void ACC12_OVER_Loader_Interrupt(void);

+ 3 - 3
Source/common.h

@@ -76,9 +76,9 @@ enum
 #define BMS_2_RESEND_CMD_EVENT       0x00000200UL
 #define END_CTR_RESEND_CMD_EVENT     0x00000400UL
 #define ADAS_RESEND_CMD_EVENT        0x00000800UL
-#define BMS_1_SELF_TIMEOUT_EVENT     0x00001000UL
-#define BMS_2_SELF_TIMEOUT_EVENT     0x00002000UL
-#define END_CTR_SELF_TIMEOUT_EVENT   0x00004000UL
+// #define BMS_1_SELF_TIMEOUT_EVENT     0x00001000UL
+// #define BMS_2_SELF_TIMEOUT_EVENT     0x00002000UL
+// #define END_CTR_SELF_TIMEOUT_EVENT   0x00004000UL
 #define ADAS_SELF_TIMEOUT_EVENT      0x00008000UL
 #define ADAS_PWM_1_TIMEOUT_EVENT     0x00010000UL
 #define ADAS_PWM_2_TIMEOUT_EVENT     0x00020000UL

+ 1 - 10
Source/delay.c

@@ -124,10 +124,7 @@ void SysTick_Handler(void)
 	if(repair_dec_delay.set)
 		repair_dec_delay.count++;
 	if(qd_dec_delay.set)
-		qd_dec_delay.count++;
-	if(acc2_dec_delay.set)
-		acc2_dec_delay.count++;
-	
+		qd_dec_delay.count++;	
 	
 	
 	if(left_light_delay.set)
@@ -159,12 +156,6 @@ void SysTick_Handler(void)
 
 
 
-	Bms_1_Self_Send_Timeout();
-
-	Bms_2_Self_Send_Timeout();
-
-	End_Ctr_Self_Send_Timeout();
-
 	ADAS_Timeout();
 
 	Series_Delay_Timeout();

+ 4 - 5
Source/drv_io.c

@@ -10,7 +10,6 @@ DELAY_COMMON side_stay_dec_delay;
 DELAY_COMMON sti_dec_delay;
 DELAY_COMMON repair_dec_delay;
 DELAY_COMMON qd_dec_delay;
-DELAY_COMMON acc2_dec_delay;
 
 DELAY_COMMON left_light_delay;
 DELAY_COMMON right_light_delay;
@@ -71,9 +70,11 @@ void ACC2_PWM(void)
 		if (shark_bms_acc2_enabled == shark_false) {
 			println("acc2 close");
 			shark_bms_acc2_work_times = 0xFFFF;
+			end_ctr_self_ss_new.acc12_sta = 0;
 			QD_Enable_From(0, 9);
 		} else if (ACC2_Over_Loader_Dect()) {
 			gpio_bit_reset(GPIO_PORT_ACC2_EN, GPIO_PIN_ACC2_EN);
+			end_ctr_self_ss_new.acc12_sta = 0;
 			shark_bms_acc2_work_times = 0;
 			shark_bms_acc2_error_times++;
 
@@ -92,6 +93,7 @@ void ACC2_PWM(void)
 
 			if (shark_bms_acc2_work_times == 200) {
 				println("acc2 ready%d %d %d", ACC2_Dect(), shark_bms_acc2_error_times, shark_bms_acc2_oc_times);
+				end_ctr_self_ss_new.acc12_sta = ACC2_Dect();
 				shark_bms_acc2_error_times = 0;
 				shark_bms_acc2_oc_times = 0;
 			}
@@ -219,8 +221,6 @@ void E_CTR_Initial(void)
 	repair_dec_delay.count = REPAIR_DEC_TIMEOUT;
 	qd_dec_delay.set = 1;
 	qd_dec_delay.count = QD_DEC_TIMEOUT;
-	acc2_dec_delay.set = 1;
-	acc2_dec_delay.count = ACC2_DEC_TIMEOUT;
 	
 
 	memset(&left_light_delay,0x00,sizeof(DELAY_COMMON));
@@ -286,8 +286,7 @@ void EXTI0_IRQHandler(void)
 	if (RESET != exti_interrupt_flag_get(EXTI_0))
 	{  
         exti_interrupt_flag_clear(EXTI_0);
-		acc2_dec_delay.set = 1;
-		acc2_dec_delay.count = 0;
+		shark_bms_acc2_work_times = 0;
     }
 }
 

+ 0 - 48
Source/main.c

@@ -215,30 +215,6 @@ int main(void)
 		shark_charge_poll();
 		shark_can_tx_flush();
 
-		if(g_event & BMS_1_RESEND_CMD_EVENT)
-		{
-			if(Resend_can_bms_1_frame())
-			{
-				g_event &= ~BMS_1_RESEND_CMD_EVENT;
-			}
-		}
-
-		if(g_event & BMS_2_RESEND_CMD_EVENT)
-		{
-			if(Resend_can_bms_2_frame())
-			{
-				g_event &= ~BMS_2_RESEND_CMD_EVENT;
-			}
-		}
-
-		if(g_event & END_CTR_RESEND_CMD_EVENT)
-		{
-			if(Resend_can_ctr_frame())
-			{
-				g_event &= ~END_CTR_RESEND_CMD_EVENT;
-			}
-		}
-
 		if(g_event & ADAS_RESEND_CMD_EVENT)
 		{
 			if(Resend_can_adas_frame())
@@ -266,30 +242,6 @@ int main(void)
 			
 			g_event &= ~MEASURE_TEMPERATURE_EVENT;
 		}
-		
-		if(g_event & BMS_1_SELF_TIMEOUT_EVENT)
-		{
-			Timeout_Resend_can_bms_1_frame();
-			
-			g_event &= ~BMS_1_SELF_TIMEOUT_EVENT;
-			
-		}
-
-		if(g_event & BMS_2_SELF_TIMEOUT_EVENT)
-		{
-			Timeout_Resend_can_bms_2_frame();
-		
-			g_event &= ~BMS_2_SELF_TIMEOUT_EVENT;
-			
-		}
-
-		if(g_event & END_CTR_SELF_TIMEOUT_EVENT)
-		{
-			Timeout_Resend_can_ctr_frame();
-			
-			g_event &= ~END_CTR_SELF_TIMEOUT_EVENT;
-			
-		}
 
 		if(g_event & ADAS_SELF_TIMEOUT_EVENT)
 		{

+ 1 - 1
Source/sw_build_info.h

@@ -1,3 +1,3 @@
 #pragma once
 
-#define CONFIG_VERSION "PS100XX_V11_12251959"
+#define CONFIG_VERSION "PS100XX_V11_13031439"