Browse Source

合并郑超更改

LAPTOP-KB7QFH2U\ChenJie-PC 2 years ago
parent
commit
90680c96ab

+ 4 - 3
code/app/AppGlobalVar.c

@@ -39,6 +39,7 @@ volatile uint32 TimerCounter = 0; // ms单位
 uint32 BattTempR[4] = {0};		  // ADC查询的温度R值
 uint16 ErrorArray[10] = {0};
 uint8 Fota_update_flag = 0;
+boolean Fota_Process_Going = false;
 uint8 Fota_error_flag = 0;
 /*GPS*/
 QueueHandle_t GpsDataQueueHandle;
@@ -52,7 +53,7 @@ QueueHandle_t CanRecvQueueHandle0;
 QueueHandle_t CanRecvQueueHandle1;
 QueueHandle_t CanRecvQueueHandle2;
 
-TaskHandle_t Uart_Hal_RecvTask_Handle,Uart_Hal_SendTask_Handle,CanTask_Handle,GpsTask_Handle,Uart_4G_Task_Handle;
+TaskHandle_t Uart_Hal_RecvTask_Handle,Uart_Hal_SendTask_Handle,MainTask_Handle,Uart0Task_Handle,CanTask_Handle,GpsTask_Handle,Uart_4G_Task_Handle;
 SemaphoreHandle_t sleep_mutex = NULL;
 
 bool TcpSysReboot = 1;
@@ -296,8 +297,8 @@ UINT16 BMS_CellVolt[BMS_CELL_MAX_NUM] = {0x00}; //电芯的电压,65535 "Invalid
 UINT16 BMS_BattRateCap = 0x00;					//电池包额定容量,有效值 0~65534,65535 "Signal Invalid" 无效,Re-1,Off-0,Ah
 UINT16 BMS_BattRateVolt = 0x00;					//电池包额定电压,有效值 0~6553.4,65535 "Signal Invalid" 无效,Re-0.1,Off-0,V
 UINT16 BMS_BattRateEngy = 0x00;					//电池包额定能量,有效值 0~6553.4,65535 "Signal Invalid" 无效,Re-0.1,Off-0,kWh
-UINT16 BMS_CellTotal = 0x00;					// PACK中单体电芯的总数目,,Re-1,Off-0,
-UINT16 BMS_TempTotal = 0x00;					// PACK中电芯温度点(探针)的总数目,,Re-1,Off-0,
+UINT16 BMS_CellTotal = BMS_CELL_MAX_NUM;		// PACK中单体电芯的总数目,,Re-1,Off-0,//
+UINT16 BMS_TempTotal = BMS_TEMP_MAX_NUM;		// PACK中电芯温度点(探针)的总数目,,Re-1,Off-0,
 UINT16 BMS_SingleCharEngy = 0x00;				//单次充电kWh 数,,Re-0.1,Off-0,KWh
 UINT16 BMS_SingleCharCapy = 0x00;				//单次充电Ah 数,,Re-0.1,Off-0,Ah
 UINT16 BMS_HVVolt = 0x00;						// BMS当前电压,,Re-1,Off-0,

+ 2 - 1
code/app/AppGlobalVar.h

@@ -43,6 +43,7 @@ extern volatile uint32 TimerCounter;
 extern uint32 BattTempR[4];
 extern uint16 ErrorArray[10];
 extern uint8 Fota_update_flag;
+extern boolean Fota_Process_Going;
 extern uint8 Fota_error_flag;
 typedef struct
 {
@@ -61,7 +62,7 @@ extern QueueHandle_t CanRecvQueueHandle0;
 extern QueueHandle_t CanRecvQueueHandle1;
 extern QueueHandle_t CanRecvQueueHandle2;
 
-extern TaskHandle_t Uart_Hal_RecvTask_Handle,Uart_Hal_SendTask_Handle,CanTask_Handle,GpsTask_Handle,Uart_4G_Task_Handle;
+extern TaskHandle_t Uart_Hal_RecvTask_Handle,Uart_Hal_SendTask_Handle,MainTask_Handle,Uart0Task_Handle,CanTask_Handle,GpsTask_Handle,Uart_4G_Task_Handle;
 extern SemaphoreHandle_t sleep_mutex;
 
 extern uint8 CSQValue;

+ 32 - 31
code/app/AppTaskCan.c

@@ -56,29 +56,30 @@ void CanTask(void *pvParameters)
 				}
 				else
 				{
-					BcuDecodeFunction(CanRxMsg.id, CanRxMsg.data); 
+					BcuDecodeFunction(CanRxMsg.id, CanRxMsg.data); // can协议解析
 				}
 			}
-			if(timerCANIdle >= 60000)
+			if(/*CanRxMsg.id == 0x100 ||*/ timerCANIdle>20000)
 			{
 				timerCANIdle = 0;
 				xSemaphoreGive(sleep_mutex);
 			}
 		} while (ret == pdPASS);
-		SL_SC7A20_Read_XYZ_Data(xyzData);
-		if (BattSendFlg)
-		{
-			BattSendFunc();
-		}
+
+//		if (BattSendFlg)
+//		{
+//			BattSendFunc();
+//		}
 		if((TimerCounter - timerCounterNow)>=100)
 		{
 			BcuRxDiagnose();
 			timerCounterNow = TimerCounter;
-			ADC_ReadValue();
+			SL_SC7A20_Read_XYZ_Data(xyzData);
+//			ADC_ReadValue();
 		}
 	}
 }
-
+//注意解码超限问题
 void BcuDecodeFunction(uint32 ID, uint8 *rawData)
 {
 	switch (ID)
@@ -448,18 +449,18 @@ static void UDSAnsFunc(uint8 *rawData)
 	static uint8 deviceSnRecvFlg = 0;
 	switch (UdsService)
 	{
-	case 0x10: 
+	case 0x10: //模式切换
 	{
 		if (UdsSubService == 0x01)
 		{
-			UdsStates = 0x01; 
+			UdsStates = 0x01; //关闭UDS诊断
 			UdsAns(true, UdsService, UdsSubService, 0x00, NULL, 0);
 		}
 		else if (UdsSubService == 0x02)
 		{
 			if (UdsStates == 0x01 || UdsStates == 0x02)
 			{
-				UdsStates = 0x02; 
+				UdsStates = 0x02; //打开UDS诊断
 				UdsAns(true, UdsService, UdsSubService, 0x00, NULL, 0);
 			}
 			else
@@ -469,13 +470,13 @@ static void UDSAnsFunc(uint8 *rawData)
 		}
 		break;
 	}
-	case 0x11:
+	case 0x11://控制
 	{
 		if(UdsStates==0x02)
 		{
 			switch(UdsSubService)
 			{
-				case 0x01:
+				case 0x01://重启
 				{
 					AnsData[0] = AppSwVersion>>24;
 					AnsData[1] = AppSwVersion>>16;
@@ -500,13 +501,13 @@ static void UDSAnsFunc(uint8 *rawData)
 		}
 		break;
 	}
-	case 0x22: 
+	case 0x22: //查询
 	{
 		if (UdsStates == 0x02)
 		{
 			switch (UdsSubService)
 			{
-			case 0x01: 
+			case 0x01: //版本号查询
 			{
 				AnsData[0] = AppSwVersion>>24;
 				AnsData[1] = AppSwVersion>>16;
@@ -515,7 +516,7 @@ static void UDSAnsFunc(uint8 *rawData)
 				UdsAns(true,UdsService,UdsSubService,0x00,AnsData,4);
 				break;
 			}
-			case 0x02: 
+			case 0x02: // SN号码查询
 			{
 				memcpy(AnsData, AppConfigInfo.deviceSn, 17);
 				for (uint8 i = 0; i < 5; i++)
@@ -524,7 +525,7 @@ static void UDSAnsFunc(uint8 *rawData)
 				}
 				break;
 			}
-			case 0x03: 
+			case 0x03: // ICCID查询
 			{
 				memcpy(AnsData, IccidNum, 20);
 				for (uint8 i = 0; i < 5; i++)
@@ -533,7 +534,7 @@ static void UDSAnsFunc(uint8 *rawData)
 				}
 				break;
 			}
-			case 0x04: 
+			case 0x04: // IMEI查询
 			{
 				memcpy(AnsData, ImeiNum, 15);
 				for (uint8 i = 0; i < 4; i++)
@@ -542,19 +543,19 @@ static void UDSAnsFunc(uint8 *rawData)
 				}
 				break;
 			}
-			case 0x05: 
+			case 0x05: //驻网状态查询
 			{
 				AnsData[0] = RegChkRet;
 				UdsAns(true, UdsService, UdsSubService, 0x00, AnsData, 1);
 				break;
 			}
-			case 0x06: 
+			case 0x06: //联网状态查询
 			{
 				AnsData[0] = SocketId;
 				UdsAns(true, UdsService, UdsSubService, 0x00, AnsData, 1);
 				break;
 			}
-			case 0x07: 
+			case 0x07: //定位信息查询
 			{
 				GPSInfo GpsRecvData;
 				if (xQueuePeek(GpsDataQueueHandle, &GpsRecvData, 0) == pdPASS)
@@ -584,18 +585,18 @@ static void UDSAnsFunc(uint8 *rawData)
 				}
 				break;
 			}
-			case 0x08: 
+			case 0x08: //温度检测查询
 			{
 				UdsAns(true, UdsService, UdsSubService, 0x00, AnsData, 1);
 				break;
 			}
-			case 0x09: 
+			case 0x09: //电池信息查询
 			{
 				UdsAns(true, UdsService, UdsSubService, 0x00, AnsData, 1);
 				BattSendFlg = 1;
 				break;
 			}
-			case 0x0A: 
+			case 0x0A: //三轴数据查询
 			{
 				AnsData[0] = xyzData[0] >> 8;
 				AnsData[1] = xyzData[0] >> 0;
@@ -617,7 +618,7 @@ static void UDSAnsFunc(uint8 *rawData)
 		}
 		break;
 	}
-	case 0x27: //����
+	case 0x27: //控制
 	{
 		if (UdsStates == 0x02)
 		{
@@ -628,7 +629,7 @@ static void UDSAnsFunc(uint8 *rawData)
 		}
 		break;
 	}
-	case 0x2E: //�
+	case 0x2E: //写入
 	{
 		if (UdsStates == 0x02)
 		{
@@ -663,7 +664,7 @@ static void UDSAnsFunc(uint8 *rawData)
 		}
 		break;
 	}
-	case 0x31://����
+	case 0x31://控制
 	{
 		if(UdsStates==0x02)
 		{
@@ -823,7 +824,7 @@ static void BattSendFunc(void)
 //	CanIf_SendMessage(CAN1, CanTxMsg);
 }
 
-void BcuRxDiagnose(void) // 100ms����һ��
+void BcuRxDiagnose(void) // 100ms调用一次
 {
 
 	static UINT32 TimeCounter = 0;	// ms
@@ -1152,8 +1153,8 @@ void BcuRxMsgSetInvalidValue(uint32 ID)
 		break;
 	case 0x18E6D0F3:
 		BMS_CSC_Total = 0xFF;
-		BMS_CellTotal = BMS_CELL_MAX_NUM;
-		BMS_TempTotal = BMS_TEMP_MAX_NUM;
+//		BMS_CellTotal = BMS_CELL_MAX_NUM;
+//		BMS_TempTotal = BMS_TEMP_MAX_NUM;
 		BMS_CellVoltLevel = 0xFF;
 		BMS_CellMinVolt = 0xFF;
 		BMS_CellMaxVolt = 0xFF;

+ 49 - 33
code/app/AppTaskMain.c

@@ -50,57 +50,73 @@ void MainTask(void *pvParameters)
 			SystemSoftwareReset();
 		}
 
-		if(pdTRUE == xSemaphoreTake(sleep_mutex,1))
-		{
-    		vTaskSuspend(Uart_Hal_RecvTask_Handle);
-    		vTaskSuspend(Uart_Hal_SendTask_Handle);
-    		vTaskSuspend(CanTask_Handle);
-    		vTaskSuspend(GpsTask_Handle);
-    		vTaskSuspend(Uart_4G_Task_Handle);
-
-			SystemPeripheralDeinit();
-			SystemPrepareForSleep();
+		MCUEnterSleep();
 
+//		if(pdTRUE == xSemaphoreTake(sleep_mutex,1))
+//		{
+//			extern boolean Uart_4G_Task_Sleep_FLag;
+//			WdgDeInit();
+//			do
+//			{
+//				waitForSleepFlag = true;
+//				vTaskDelay(pdMS_TO_TICKS(10));
+//			}while(Uart_4G_Task_Sleep_FLag == false);
+//
+//			vTaskDelete(Uart_Hal_RecvTask_Handle);
+//			vTaskDelete(Uart_Hal_SendTask_Handle);
+//			vTaskDelete(CanTask_Handle);
+//			vTaskDelete(GpsTask_Handle);
+//			vTaskDelete(Uart_4G_Task_Handle);
+//
+//			SystemPeripheralDeinit();
+//			MCUSleep();
 
-
-			coreInit();
-			SystemModulesInit();
+//			vTaskDelete(MainTask_Handle);
+//for(;;)
+//{
+//	vTaskDelay(pdMS_TO_TICKS(1000));
+//}
+//
+//			coreInit();
+//			SystemModulesInit();
+//			waitForSleepFlag = false;
+//			Uart_4G_Task_Sleep_FLag = false;
 
 			/* Initialize all pins*/
-			#if (PORT_PRECOMPILE_SUPPORT == STD_ON)
-				Port_Init(NULL_PTR);
-			#elif (PORT_PRECOMPILE_SUPPORT == STD_OFF)
-				Port_Init(&Port_Config_VS_0);
-			#endif
-			vTaskDelay(pdMS_TO_TICKS(100));
+//			#if (PORT_PRECOMPILE_SUPPORT == STD_ON)
+//				Port_Init(NULL_PTR);
+//			#elif (PORT_PRECOMPILE_SUPPORT == STD_OFF)
+//				Port_Init(&Port_Config_VS_0);
+//			#endif
+//			vTaskDelay(pdMS_TO_TICKS(100));
 
 //			vTaskDelay(pdMS_TO_TICKS(100));
 		//					currentMode = Mcu_GetPowerModeState();
-			Dio_WriteChannel(DioConf_DioChannel_PTE9_GPIO_OUT_MCU_LED5, STD_OFF);
+//			Dio_WriteChannel(DioConf_DioChannel_PTE9_GPIO_OUT_MCU_LED5, STD_OFF);
 
 //			vTaskDelay(pdMS_TO_TICKS(500));
 //			Icu_DeInit();
 			//4G module power on
 //			vTaskDelay(pdMS_TO_TICKS(1000));
 
-			timerCANIdle = 0;
-			Dio_WriteChannel(DioConf_DioChannel_PTA6_GPIO_OUT_MCU_4G_POW_EN, STD_ON);
-			vTaskDelay(pdMS_TO_TICKS(1000));
-			Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_ON);
-			vTaskDelay(pdMS_TO_TICKS(500));
-			Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_OFF);
+//			timerCANIdle = 0;
+//			Dio_WriteChannel(DioConf_DioChannel_PTA6_GPIO_OUT_MCU_4G_POW_EN, STD_ON);
+//			vTaskDelay(pdMS_TO_TICKS(1000));
+//			Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_ON);
+//			vTaskDelay(pdMS_TO_TICKS(500));
+//			Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_OFF);
 
 			//GPS module power on
-			Dio_WriteChannel(DioConf_DioChannel_PTD1_GPIO_OUT_MCU_GPS_POW_EN, STD_ON);
+//			Dio_WriteChannel(DioConf_DioChannel_PTD1_GPIO_OUT_MCU_GPS_POW_EN, STD_ON);
 //			vTaskDelay(pdMS_TO_TICKS(1000));
 
-			vTaskResume(Uart_Hal_RecvTask_Handle);
-			vTaskResume(Uart_Hal_SendTask_Handle);
-			vTaskResume(CanTask_Handle);
-			vTaskResume(GpsTask_Handle);
-			vTaskResume(Uart_4G_Task_Handle);
+//			vTaskResume(Uart_Hal_RecvTask_Handle);
+//			vTaskResume(Uart_Hal_SendTask_Handle);
+//			vTaskResume(CanTask_Handle);
+//			vTaskResume(GpsTask_Handle);
+//			vTaskResume(Uart_4G_Task_Handle);
 
-		}
+//		}
 	}
 }
 static void vTimerCallback(TimerHandle_t pxTimer)

+ 165 - 114
code/app/AppTaskUart1.c

@@ -33,7 +33,7 @@ const ATCmdFunc Atcmdfunc[] = {
 	{AT_NETCLOSE, "AT+NETCLOSE\r\n", at_callbackFunc},
 	{AT_CGNSSPWR,"AT+CGNSSPWR=1\r\n",at_callbackFunc}};
 
-static process_Tcp gProcess_Tcp_Task = PROCESS_TCP_IDLE;
+static process_Tcp gProcess_Tcp_Task = PROCESS_TCP_INIT;
 #define PROC_TCP_STATE_SWITCH(a) (gProcess_Tcp_Task = a)
 void InitFunc(void);
 sint8 TcpConnectFunc(sint8 *ConnectId);
@@ -49,6 +49,8 @@ void tcpUdsFunc(uint8 *Ptr,uint8 *AnsPtr);
 static void vTimer1000msCallback(TimerHandle_t pxTimer);
 bool SendTimerFlg = false;
 static uint32 TcpSendTimeCounter = 0;
+extern boolean waitForSleepFlag;
+boolean Uart_4G_Task_Sleep_FLag = false;
 void Uart_4G_Task(void *pvParameters)
 {
 	(void)pvParameters;
@@ -58,138 +60,171 @@ void Uart_4G_Task(void *pvParameters)
 	uint16 pReadLen = 0;
 	// 4G开机
 	Dio_LevelType _4G_Status = 0; // 0-关机,1-开机
-	Dio_WriteChannel(DioConf_DioChannel_PTA6_GPIO_OUT_MCU_4G_POW_EN, STD_ON);
-	vTaskDelay(pdMS_TO_TICKS(50));
-	Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_ON);
-	vTaskDelay(pdMS_TO_TICKS(50));
-	AtcmdDelayRecvFunc(UART_LPUART1,(char *)("SMS DONE"),30000);
-	Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_OFF);
-	_4G_Status = Dio_ReadChannel(DioConf_DioChannel_PTB1_GPIO_IN_MCU_4G_STATUS);
-	InitFunc(); // 4G模块初始化,注:AT同步不通过,没有进行次数判定及跳转
+//	Dio_WriteChannel(DioConf_DioChannel_PTA6_GPIO_OUT_MCU_4G_POW_EN, STD_ON);
+//	vTaskDelay(pdMS_TO_TICKS(500));
+//	Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_ON);
+//	vTaskDelay(pdMS_TO_TICKS(50));
+//	AtcmdDelayRecvFunc(UART_LPUART1,(char *)("SMS DONE"),30000);
+//	Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_OFF);
+//	_4G_Status = Dio_ReadChannel(DioConf_DioChannel_PTB1_GPIO_IN_MCU_4G_STATUS);
+//	InitFunc(); // 4G模块初始化,注:AT同步不通过,没有进行次数判定及跳转
 	TimerHandle_t monitorTimer1000ms;
 	monitorTimer1000ms = xTimerCreate("monitor1000ms",1000,pdTRUE,(void *)0,vTimer1000msCallback);
 	xTimerStart(monitorTimer1000ms,0);
 	for (;;)
 	{
-		switch (gProcess_Tcp_Task)
-		{
-		case PROCESS_TCP_IDLE: //空闲状态
+
+		if(waitForSleepFlag == true)
 		{
-			UART_Receive_Data(UART_LPUART1, UartRecvPtr, &pReadLen, 100);//100ms检测
-			if (SocketId < 0)
-			{
-				PROC_TCP_STATE_SWITCH(PROCESS_TCP_REGCHK);
-			}
-			else if (pReadLen>0)
-			{
-				PROC_TCP_STATE_SWITCH(PROCESS_TCP_RECV);
-				RecvTimerDelay = TimerCounter;
-			}
-			else if (AppConfigInfo.eolFlg == 1 && TcpWorkState==0 && SendTimerFlg==true)
-			{
-				SendTimerFlg = false;
-				PROC_TCP_STATE_SWITCH(PROCESS_TCP_SEND);
-			}
-			if((TimerCounter-RecvTimerDelay)>=30000 && TcpWorkState==1)//10s内没有命令下发,进行正常发送任务
-			{
-				TcpWorkState = 0;
-			}
-			break;
+			PROC_TCP_STATE_SWITCH(PROCESS_TCP_SLEEP);
 		}
-		case PROCESS_TCP_ATSYS:
+		switch (gProcess_Tcp_Task)
 		{
-			sint8 ATRet = -1;
-			AtcmdTransmit(AT_CMD_TEST, NULL, 0, &ATRet,100);
-			if (ATRet == 0)
+			case PROCESS_TCP_INIT:
 			{
+				Dio_WriteChannel(DioConf_DioChannel_PTA6_GPIO_OUT_MCU_4G_POW_EN, STD_ON);
+				vTaskDelay(pdMS_TO_TICKS(500));
+
+				Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_ON);
+				vTaskDelay(pdMS_TO_TICKS(50));
+				Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_OFF);
+
+				AtcmdDelayRecvFunc(UART_LPUART1,(char *)("SMS DONE"),30000);
+				_4G_Status = Dio_ReadChannel(DioConf_DioChannel_PTB1_GPIO_IN_MCU_4G_STATUS);
+				InitFunc();
+				TcpSendTimeCounter = 0;
 				PROC_TCP_STATE_SWITCH(PROCESS_TCP_IDLE);
+				break;
 			}
-			else
+			case PROCESS_TCP_IDLE: //空闲状态
 			{
-				PROC_TCP_STATE_SWITCH(PROCESS_TCP_ERROR);
+				UART_Receive_Data(UART_LPUART1, UartRecvPtr, &pReadLen, 100);//100ms检测
+				if (SocketId < 0)
+				{
+					PROC_TCP_STATE_SWITCH(PROCESS_TCP_REGCHK);
+				}
+				else if (pReadLen>0)
+				{
+					PROC_TCP_STATE_SWITCH(PROCESS_TCP_RECV);
+					RecvTimerDelay = TimerCounter;
+				}
+				else if (AppConfigInfo.eolFlg == 1 && TcpWorkState==0 && SendTimerFlg==true)
+				{
+					SendTimerFlg = false;
+					PROC_TCP_STATE_SWITCH(PROCESS_TCP_SEND);
+				}
+				if((TimerCounter-RecvTimerDelay)>=30000 && TcpWorkState==1)//10s内没有命令下发,进行正常发送任务
+				{
+					TcpWorkState = 0;
+				}
+				break;
 			}
-			break;
-		}
-		case PROCESS_TCP_REGCHK: //驻网检查,包括SIM,CPIN检查,ICCID获取
-		{
-			RegChkRet = TcpRegisterChkFunc();
-			if (RegChkRet > 0) //检查通过,SIM卡已就绪,已进行驻网
+			case PROCESS_TCP_ATSYS:
 			{
-				PROC_TCP_STATE_SWITCH(PROCESS_TCP_CONNECT);
+				sint8 ATRet = -1;
+				AtcmdTransmit(AT_CMD_TEST, NULL, 0, &ATRet,100);
+				if (ATRet == 0)
+				{
+					PROC_TCP_STATE_SWITCH(PROCESS_TCP_IDLE);
+				}
+				else
+				{
+					PROC_TCP_STATE_SWITCH(PROCESS_TCP_ERROR);
+				}
+				break;
 			}
-			else
+			case PROCESS_TCP_REGCHK: //驻网检查,包括SIM,CPIN检查,ICCID获取
 			{
-				PROC_TCP_STATE_SWITCH(PROCESS_TCP_ERROR);
+				RegChkRet = TcpRegisterChkFunc();
+				if (RegChkRet > 0) //检查通过,SIM卡已就绪,已进行驻网
+				{
+					PROC_TCP_STATE_SWITCH(PROCESS_TCP_CONNECT);
+				}
+				else
+				{
+					PROC_TCP_STATE_SWITCH(PROCESS_TCP_ERROR);
+				}
+				break;
 			}
-			break;
-		}
-		case PROCESS_TCP_CONNECT: //网络连接,包括域名转换
-		{
-			if (SocketId < 0)
+			case PROCESS_TCP_CONNECT: //网络连接,包括域名转换
+			{
+				if (SocketId < 0)
+				{
+					sint8 ConnectRet = 0;
+					ConnectRet = TcpConnectFunc(&SocketId);
+					if (ConnectRet > 0)
+					{
+						PROC_TCP_STATE_SWITCH(PROCESS_TCP_IDLE);
+					}
+					else
+					{
+						PROC_TCP_STATE_SWITCH(PROCESS_TCP_ERROR);
+					}
+				}
+				break;
+			}
+			case PROCESS_TCP_SEND: //网络数据发送
 			{
-				sint8 ConnectRet = 0;
-				ConnectRet = TcpConnectFunc(&SocketId);
-				if (ConnectRet > 0)
+				sint8 SendRet = -1;
+				SendRet = TcpDataSendFunc(SocketId);
+				if (SendRet == 0)
 				{
 					PROC_TCP_STATE_SWITCH(PROCESS_TCP_IDLE);
+					tcpErrorCounter = 0;
 				}
 				else
 				{
+					SocketId = -1;
 					PROC_TCP_STATE_SWITCH(PROCESS_TCP_ERROR);
 				}
+				break;
 			}
-			break;
-		}
-		case PROCESS_TCP_SEND: //网络数据发送
-		{
-			sint8 SendRet = -1;
-			SendRet = TcpDataSendFunc(SocketId);
-			if (SendRet == 0)
+			case PROCESS_TCP_RECV: //网络数据接收,100ms空闲状态下即可接收
 			{
+	//			Dio_FlipChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1);
+
+				if (pReadLen > 0 && SocketId >= 0)
+				{
+					TcpDataInfoRecvHandle(UartRecvPtr, pReadLen);
+				}
 				PROC_TCP_STATE_SWITCH(PROCESS_TCP_IDLE);
-				tcpErrorCounter = 0;
+				break;
 			}
-			else
+			case PROCESS_TCP_HEART: //心跳包发送
 			{
-				SocketId = -1;
-				PROC_TCP_STATE_SWITCH(PROCESS_TCP_ERROR);
+				break;
 			}
-			break;
-		}
-		case PROCESS_TCP_RECV: //网络数据接收,100ms空闲状态下即可接收
-		{
-//			Dio_FlipChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1);
-
-			if (pReadLen > 0 && SocketId >= 0)
+			case PROCESS_TCP_SLEEP: //网络休眠状态
 			{
-				TcpDataInfoRecvHandle(UartRecvPtr, pReadLen);
+
+				while(waitForSleepFlag == true)
+				{
+					Uart_4G_Task_Sleep_FLag = true;
+					vTaskDelay(pdMS_TO_TICKS(1000));
+				}
+				PROC_TCP_STATE_SWITCH(PROCESS_TCP_INIT);
+				break;
 			}
-			PROC_TCP_STATE_SWITCH(PROCESS_TCP_IDLE);
-			break;
-		}
-		case PROCESS_TCP_HEART: //心跳包发送
-		{
-			break;
-		}
-		case PROCESS_TCP_SLEEP: //网络休眠状态
-		{
-			break;
-		}
-		case PROCESS_TCP_ERROR: //错误状态
-		{
-			vTaskDelay(pdMS_TO_TICKS(1000));
-			tcpErrorCounter++;
-			if(tcpErrorCounter>60&&TcpSysReboot == 1)//无法驻网或者联网
+			case PROCESS_TCP_ERROR: //错误状态
 			{
-				Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_ON);
-				vTaskDelay(pdMS_TO_TICKS(2500));
-				Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_OFF);
-				vTaskDelay(pdMS_TO_TICKS(2500));
-				tcpErrorCounter = 0;
+				vTaskDelay(pdMS_TO_TICKS(1000));
+				tcpErrorCounter++;
+				if(tcpErrorCounter>60&&TcpSysReboot == 1)//无法驻网或者联网
+				{
+					Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_ON);
+					vTaskDelay(pdMS_TO_TICKS(2500));
+					Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_OFF);
+					vTaskDelay(pdMS_TO_TICKS(2500));
+					tcpErrorCounter = 0;
+					PROC_TCP_STATE_SWITCH(PROCESS_TCP_INIT);
+				}
+				else
+				{
+					PROC_TCP_STATE_SWITCH(PROCESS_TCP_IDLE);
+				}
+
+				break;
 			}
-			PROC_TCP_STATE_SWITCH(PROCESS_TCP_IDLE);
-			break;
-		}
 		}
 	}
 }
@@ -259,7 +294,7 @@ sint8 tcpipConnectionSend(uint8 TcpConnectId, uint8 *SendDataPtr, uint16 SendDat
 }
 sint8 TcpConnectFunc(sint8 *ConnectId)
 {
-	uint8 ConnectStep = 0;
+	uint8 ConnectStep = 1;
 	sint8 ChkState = 0;
 	sint8 ATRet = -1;
 	uint8 UartRecvPtr[100];
@@ -267,7 +302,7 @@ sint8 TcpConnectFunc(sint8 *ConnectId)
 	{
 		switch (ConnectStep)
 		{
-		case 0: // AT指令同步
+		case 1: // AT指令同步
 		{
 			char *ATCmdSend = (char *)("ATE0\r\n");
 			uint8 ATCmdSendLen = mstrlen(ATCmdSend);
@@ -294,7 +329,7 @@ sint8 TcpConnectFunc(sint8 *ConnectId)
 			}
 			break;
 		}
-		case 1: // Netopen
+		case 2: // Netopen
 		{
 			AtcmdTransmit(AT_NETOPEN, NULL, 0, &ATRet,100);
 			if (ATRet == 0)
@@ -308,7 +343,7 @@ sint8 TcpConnectFunc(sint8 *ConnectId)
 			}
 			break;
 		}
-		case 2: //连接检查
+		case 3: //连接检查
 		{
 			AtcmdTransmit(AT_CONNECTCHK, NULL, 0, &ATRet,1000); // ATret返回的值是连接id,如果未连接返回-1
 			if (ATRet >= 0)
@@ -322,7 +357,7 @@ sint8 TcpConnectFunc(sint8 *ConnectId)
 			}
 			break;
 		}
-		case 3: //域名转换
+		case 4: //域名转换
 		{
 			char AtCmdSend[30] = {0};
 			uint8 AtCmdSendLen = 0;
@@ -342,7 +377,7 @@ sint8 TcpConnectFunc(sint8 *ConnectId)
 			}
 			break;
 		}
-		case 4: //创建连接
+		case 5: //创建连接
 		{
 			char AtCmdSend[50] = {0};
 			uint8 AtCmdSendTotalLen = 0;
@@ -736,7 +771,7 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 	static UTC8TimeType UTC8TimeTcp;
 	uint8 *SendBuffer = NULL;
 	uint8 DataIdx = 0;
-	if (TcpSendTimeCounter == 5)
+	if ((TcpSendTimeCounter) % (10*60) == 5)
 	{
 		DataIdx = VerMsg; //版本信息发送
 	}
@@ -744,19 +779,18 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 	{
 		DataIdx = TruckBattMsg; //电池信息发送
 	}
-	else if ((TcpSendTimeCounter) % 60 == 2)
+	else if ((TcpSendTimeCounter ) % 60 == 2)
 	{
 		DataIdx = TruckVehiMsg; //车辆信息发送
 	}
-		else if ((TcpSendTimeCounter) % 10 == 3)
+	else if ((TcpSendTimeCounter) % 60 == 3)
 	{
-		DataIdx = GpsMsg; //定位信息发送
+		DataIdx = TruckAcclMsg; //累计信息发送
 	}
-	else if ((TcpSendTimeCounter) % 60 == 4)
+	else if ((TcpSendTimeCounter) % 10 == 4)
 	{
-		DataIdx = TruckAcclMsg; //累计信息发送
+		DataIdx = GpsMsg; //定位信息发送
 	}
-
 	else if ((TcpSendTimeCounter) % (60*60*2) == 6)
 	{
 		DataIdx = 0x01; //时间校准
@@ -985,6 +1019,10 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 		{
 			BMS_Mode = 2;
 		}
+		else if(BMS_Mode == 2)
+		{
+			BMS_Mode = 3;
+		}
 		else
 		{
 			BMS_Mode = 1;
@@ -1238,8 +1276,11 @@ static void TcpDataInfoRecvHandle(uint8 *DataRecv, uint16 DataRecvLen)
                     memcpy(&TcpCmdAnswer[24], (Ptr + 24), 6);
                     TcpCmdAnswer[30] = bcc_chk(TcpCmdAnswer, 30);
 					tcpipConnectionSend(SocketId, TcpCmdAnswer, 31);
+
+					Fota_Process_Going = true;
 					vTaskDelay(pdMS_TO_TICKS(5000));
 					Fota_Ftp(Ptr + 32);
+					Fota_Process_Going = false;
 				}
                 else if (*(Ptr + 30) == 0x80) //远程锁定命令
                 {
@@ -1399,7 +1440,8 @@ void Fota_Ftp(uint8 *dataPtrIn)
 	char *p = NULL;
 	p = strtok((char *)dataPtrIn, ",");
 	uint8 index = 0;
-	uint8 ftp_EndFlg = 0;
+	boolean ftp_EndFlg = false;
+
 	while (p&&index<20)
 	{
 		databuffer[index] = p;
@@ -1557,6 +1599,12 @@ void Fota_Ftp(uint8 *dataPtrIn)
 						sprintf(ATSendDataBuffer, "AT+CFTRANTX=\"c:/%s\",%d,%d\r\n", filenamePtr,currentAddr, readLenAsk);
 						UART_Query_Data(UART_LPUART1, UART_LPUART1, ATSendDataBuffer, mstrlen(ATSendDataBuffer), UartData, &ReadLen, pdMS_TO_TICKS(5000));
 						sprintf(findDataBuffer, "+CFTRANTX: DATA,%d", readLenAsk);
+
+						if(currentAddr % 0x100 == 0)
+						{
+							Dio_FlipChannel(DioConf_DioChannel_PTE9_GPIO_OUT_MCU_LED5);
+						}
+
 						if (ReadLen == (readLenAsk+strlen(findDataBuffer)+26))
 						{
 							retptr = (uint8 *)strstr((char *)UartData, findDataBuffer);
@@ -1605,19 +1653,22 @@ void Fota_Ftp(uint8 *dataPtrIn)
 							break;
 						}
 					}
+
+					Dio_WriteChannel(DioConf_DioChannel_PTE9_GPIO_OUT_MCU_LED5,STD_ON); //switch off the led
+
 	                if(getDataLenErrCount<50&&Hal_FlsCheckIsTransferSucceed()==TRUE)
 	                {
 	                	ftp_process++;
 	                }
 	                else
 	                {
-	                	ftp_EndFlg = 1;
+	                	ftp_process++;
 	                }
 				}
 			}
 			else
 			{
-				ftp_EndFlg = 1;
+				ftp_process++;
 			}
 			break;
 		}

+ 1 - 0
code/hal/Hal_Var.c

@@ -10,3 +10,4 @@
 uint32 hal_1ms_TimerCounter = 0;
 uint32 hal_100ms_TimerCounter = 0;
 boolean IsFeedWdg = TRUE;
+boolean waitForSleepFlag = false;

+ 1 - 0
code/hal/Hal_Var.h

@@ -16,5 +16,6 @@
 extern uint32 hal_1ms_TimerCounter;
 extern uint32 hal_100ms_TimerCounter;
 extern boolean IsFeedWdg;
+extern boolean waitForSleepFlag;
 
 #endif /* HAL_VAR_H_ */

+ 7 - 7
code/hal/Hal_Wdg.c

@@ -16,7 +16,7 @@ void WdgInit(void)
 	Wdg_43_Instance0_SetMode(WDGIF_FAST_MODE);
 
 	/* Set the Wdg Trigger Condition in order to periodically service the Wdg */
-	Wdg_43_Instance0_SetTriggerCondition(5000);
+	Wdg_43_Instance0_SetTriggerCondition(15000);
 }
 
 void WdgDeInit(void)
@@ -108,15 +108,15 @@ void WATCHDOG_HAL_Feed(void)
 	Wdg_43_Instance0_SetTriggerCondition(500);
 }
 
-typedef void (*AppAddr)(void);
-void DoResetECU(void)
+//typedef void (*AppAddr)(void);
+void DoResetECUWithWdg(void)
 {
 	IsFeedWdg = FALSE;
 	Wdg_43_Instance0_SetTriggerCondition(0);
-	while(1)
-	{
+//	while(1)
+//	{
 //		AppAddr resetHandle = (AppAddr)(0x00);
 //		    (resetHandle)();
-		;
-	}
+//		;
+//	}
 }

+ 1 - 1
code/hal/Hal_Wdg.h

@@ -25,7 +25,7 @@ boolean HAL_Is100msTickTimeout(void);
 /* get timer tick cnt for random seed. */
 uint32 HAL_GetTimerTickCnt(void);
 void WATCHDOG_HAL_Feed(void);
-void DoResetECU(void);
+void DoResetECUWithWdg(void);
 void WdgInit(void);
 void WdgDeInit(void);
 #endif /* HAL_WDG_H_ */

+ 185 - 19
code/hal/hal_adapter.c

@@ -979,38 +979,30 @@ void SystemSoftwareReset(void)
     S32_SCB->AIRCR = regValue;
 }
 
-void SystemPrepareForSleep(void)
+void MCUSleep(void)
 {
 
-	for(int pinIndex = 0; pinIndex <PortConfigSet_PortContainer_GPIO_PTB4_GPIO_OUT_MCU_RS485_EN; pinIndex++)
-	{
-		if(pinIndex == PortConfigSet_PortContainer_CAN_PTA12_CAN1_RX_MCU_CAN1_RX /*|| pinIndex == PortConfigSet_PortContainer_INT_PTB0_LPTMR0_ATL3_MCU_CC1_INT || pinIndex == PortConfigSet_PortContainer_INT_PTE11_LPTMR0_ALT1_MCU_3D_INT1 || pinIndex == PortConfigSet_PortContainer_INT_PTD5_LPTMR0_ATL2_MCU_3D_INT2*/)
-		{
-			continue;
-		}
-		else
-		{
-			Port_SetAsUnusedPin(pinIndex);
-		}
-	}
-
-	Port_SetPinMode(PortConfigSet_PortContainer_CAN_PTA12_CAN1_RX_MCU_CAN1_RX,PORT_GPIO_MODE);
-
 #if (ICU_PRECOMPILE_SUPPORT == STD_ON)
 					Icu_Init(NULL_PTR);
 #elif (ICU_PRECOMPILE_SUPPORT == STD_OFF)
 	Icu_Init(&Icu_Config_VS_0);
 #endif
 
-
 	Mcu_SetMode(McuModeSettingConf_VLPS);
 
+
+//	typedef void (*AppAddr)(void);
+//	AppAddr resetHandle = (AppAddr)(0x14601);
+//	OsIf_SuspendAllInterrupts();
+//	(resetHandle)();
+	SystemSoftwareReset();
+//	coreInit();
 }
 
 
-void SystemPeripheralDeinit(void)
+void SystemDeinit(void)
 {
-	WdgDeInit();
+
 	Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_OFF);
 	vTaskDelay(pdMS_TO_TICKS(3000));
 	Dio_WriteChannel(DioConf_DioChannel_PTA6_GPIO_OUT_MCU_4G_POW_EN, STD_OFF);
@@ -1041,9 +1033,62 @@ void SystemPeripheralDeinit(void)
 
 	Mcl_DeInit();
 
+	//port DeInit
+	for(int pinIndex = 0; pinIndex <PortConfigSet_PortContainer_GPIO_PTB4_GPIO_OUT_MCU_RS485_EN; pinIndex++)
+	{
+		if(pinIndex == PortConfigSet_PortContainer_CAN_PTA12_CAN1_RX_MCU_CAN1_RX /*|| pinIndex == PortConfigSet_PortContainer_INT_PTB0_LPTMR0_ATL3_MCU_CC1_INT || pinIndex == PortConfigSet_PortContainer_INT_PTE11_LPTMR0_ALT1_MCU_3D_INT1 || pinIndex == PortConfigSet_PortContainer_INT_PTD5_LPTMR0_ATL2_MCU_3D_INT2*/)
+		{
+			continue;
+		}
+		else
+		{
+			Port_SetAsUnusedPin(pinIndex);
+		}
+	}
+
+	Port_SetPinMode(PortConfigSet_PortContainer_CAN_PTA12_CAN1_RX_MCU_CAN1_RX,PORT_GPIO_MODE);
+
 //	systemInitFlag = false;
 }
 
+void MCUEnterSleep(void)
+{
+	if(pdTRUE == xSemaphoreTake(sleep_mutex,1) && Fota_Process_Going == false)
+	{
+		extern boolean Uart_4G_Task_Sleep_FLag;
+		WdgDeInit();
+		Std_ReturnType Ret = E_NOT_OK;
+		uint8 appConfigWriteTimes = 0;
+		do
+		{
+			waitForSleepFlag = true;
+
+			//save the app configure before power off
+			if(Ret == E_NOT_OK)
+			{
+				AppConfigInfo.appSaveFlg = false;
+				Ret = HAL_EEP_Write(0,(uint8 *)&AppConfigInfo,sizeof(AppConfigInfo));
+				appConfigWriteTimes++;
+			}
+
+			vTaskDelay(pdMS_TO_TICKS(10));
+		}while(Uart_4G_Task_Sleep_FLag == false || (Ret == E_NOT_OK && appConfigWriteTimes<5) );
+
+		vTaskDelete(Uart_Hal_RecvTask_Handle);
+		vTaskDelete(Uart_Hal_SendTask_Handle);
+		vTaskDelete(CanTask_Handle);
+		vTaskDelete(GpsTask_Handle);
+		vTaskDelete(Uart_4G_Task_Handle);
+//		vTaskDelete(MainTask_Handle);
+
+		SystemDeinit();
+
+		MCUSleep();
+//		WdgInit();
+//		DoResetECUWithWdg();
+	}
+}
+
 void coreInit(void)
 {
 	/* Initialize the Mcu driver */
@@ -1065,6 +1110,14 @@ void coreInit(void)
 	OsIf_Init(NULL_PTR);
 
 	Platform_Init(NULL_PTR);
+
+	/* Initialize all pins*/
+#if (PORT_PRECOMPILE_SUPPORT == STD_ON)
+	Port_Init(NULL_PTR);
+#elif (PORT_PRECOMPILE_SUPPORT == STD_OFF)
+	Port_Init(&Port_Config_VS_0);
+#endif
+
 }
 
 void SystemModulesInit(void)
@@ -1085,7 +1138,7 @@ void SystemModulesInit(void)
 	IP_LPUART0->CTRL |= LPUART_CTRL_ILT(1);
 	IP_LPUART1->CTRL |= LPUART_CTRL_ILT(1);
 	IP_LPUART2->CTRL |= LPUART_CTRL_ILT(1);
-	IP_LPUART0->CTRL |= LPUART_CTRL_IDLECFG(5);
+	IP_LPUART0->CTRL |= LPUART_CTRL_IDLECFG(3);
 	IP_LPUART1->CTRL |= LPUART_CTRL_IDLECFG(3);
 	IP_LPUART2->CTRL |= LPUART_CTRL_IDLECFG(3);
 
@@ -1139,3 +1192,116 @@ void SystemModulesInit(void)
 
 	IsFeedWdg = true;
 }
+
+void displayResetReasonWithLED(void)
+{
+	Mcu_ResetType bootreason;
+	bootreason = Mcu_GetResetReason();
+	if(bootreason == MCU_STOP_ACKNOWLEDGE_ERROR_RESET)
+	{
+		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+	}
+	else if(bootreason == MCU_MDM_AP_SYSTEM_RESET)
+	{
+//		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+
+	}
+	else if(bootreason == MCU_SW_RESET)
+	{
+		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+	}
+	else if(bootreason == MCU_CORE_LOCKUP_RESET)
+	{
+//		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+	}
+	else if(bootreason == MCU_JTAG_RESET)
+	{
+		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+	}
+	else if(bootreason == MCU_POWER_ON_RESET)
+	{
+//		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+	}
+	else if(bootreason == MCU_EXTERNAL_PIN_RESET)
+	{
+		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+	}
+	else if(bootreason == MCU_WATCHDOG_RESET)
+	{
+//		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+	}
+
+	else if(bootreason == MCU_CMU_LOSS_OF_CLOCK_RESET)
+	{
+		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+	}
+	else if(bootreason == MCU_LOSS_OF_LOCK_RESET)
+	{
+//		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+	}
+	else if(bootreason == MCU_LOSS_OF_CLOCK_RESET)
+	{
+		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+	}
+	else if(bootreason == MCU_LOW_OR_HIGH_VOLTAGE_DETECT_RESET)
+	{
+//		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+	}
+	else if(bootreason == MCU_NO_RESET_REASON)
+	{
+		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+//		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+	}
+	else if(bootreason == MCU_MULTIPLE_RESET_REASON)
+	{
+//		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+	}
+	else if(bootreason == MCU_RESET_UNDEFINED)
+	{
+		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
+		Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
+	}
+}

+ 4 - 2
code/hal/hal_adapter.h

@@ -253,8 +253,10 @@ uint32_t read_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf);
 void coreInit(void);
 void SystemModulesInit(void);
 void Icu_DeInit(void);
-void SystemPeripheralDeinit(void);
-void SystemPrepareForSleep(void);
+void SystemDeinit(void);
+void MCUSleep(void);
+void MCUEnterSleep(void);
+void displayResetReasonWithLED(void);
 
 
 #endif /* HAL_ADAPTER_H_ */

+ 5 - 138
code/main.c

@@ -71,152 +71,18 @@ int main(void)
 {
  	volatile int exit_code = 0;
 
-
-
-
 	coreInit();
-
-/* Initialize all pins*/
-#if (PORT_PRECOMPILE_SUPPORT == STD_ON)
-	Port_Init(NULL_PTR);
-#elif (PORT_PRECOMPILE_SUPPORT == STD_OFF)
-	Port_Init(&Port_Config_VS_0);
-#endif
-
 	SystemModulesInit();
+	displayResetReasonWithLED();
 
-
-	//4G module power on
-	Dio_WriteChannel(DioConf_DioChannel_PTA6_GPIO_OUT_MCU_4G_POW_EN, STD_ON);
-	Dio_WriteChannel(DioConf_DioChannel_PTA7_GPIO_OUT_MCU_4G_PWRKEY, STD_ON);
-
-	//GPS module power on
-	Dio_WriteChannel(DioConf_DioChannel_PTD1_GPIO_OUT_MCU_GPS_POW_EN, STD_ON);
-
-
-//	// this function should be called in ADC Task at once
-//	Adc_CalibrationStatusType CalibStatus;
-//	Adc_Calibrate(AdcHwUnit_0, &CalibStatus);
-//	if (CalibStatus.Adc_UnitSelfTestStatus == E_NOT_OK)
-//	{
-//		// if so, the adc is failed to Calibrate;
-//	}
-//	ADC_ReadValue();
-//	Boot_CheckDownlaodAPPStatus();
-
-
-
-
-//	Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-//	Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
-//	Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
-//	Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
-//	Dio_WriteChannel(DioConf_DioChannel_PTE9_GPIO_OUT_MCU_LED5, STD_OFF);
-	Mcu_ResetType bootreason;
-	bootreason = Mcu_GetResetReason();
-	if(bootreason == MCU_STOP_ACKNOWLEDGE_ERROR_RESET)
-		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-	else if(bootreason == MCU_MDM_AP_SYSTEM_RESET)
-		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
-	else if(bootreason == MCU_SW_RESET)
-	{
-		Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-		Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
-	}
-
-	else if(bootreason == MCU_CORE_LOCKUP_RESET)
-		Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
-	else if(bootreason == MCU_JTAG_RESET)
-	{
-			Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-//			Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
-		}
-	else if(bootreason == MCU_POWER_ON_RESET)
-	{
-//			Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
-			}
-	else if(bootreason == MCU_EXTERNAL_PIN_RESET)
-	{
-			Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
-	}
-	else if(bootreason == MCU_WATCHDOG_RESET)
-	{
-//			Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-//			Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
-//			Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
-	}
-
-	else if(bootreason == MCU_CMU_LOSS_OF_CLOCK_RESET)
-	{
-			Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-//			Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
-//			Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
-	}
-	else if(bootreason == MCU_LOSS_OF_LOCK_RESET)
-	{
-//			Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
-//			Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
-	}
-	else if(bootreason == MCU_LOSS_OF_CLOCK_RESET)
-	{
-			Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
-//			Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
-	}
-	else if(bootreason == MCU_LOW_OR_HIGH_VOLTAGE_DETECT_RESET)
-	{
-//			Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-//			Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
-	}
-	else if(bootreason == MCU_NO_RESET_REASON)
-	{
-			Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-//			Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
-	}
-	else if(bootreason == MCU_MULTIPLE_RESET_REASON)
-	{
-//			Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
-	}
-	else if(bootreason == MCU_RESET_UNDEFINED)
-	{
-			Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE1_GPIO_OUT_MCU_LED2, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
-			Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
-	}
-#ifdef SEGGER_SYSTEMVIEW
-	SEGGER_SYSVIEW_Conf();
-#endif
-
-#ifdef SEGGER_RTT_PRINTF
-	SEGGER_RTT_Init();
-	cm_backtrace_init(APPNAME,HARDWARE_VERSION,SOFTWARE_VERSION);
-	SEGGER_RTT_printf("[%d] boot\r\n",__LINE__);
-#endif
 	UartInit();
-	xTaskCreate(MainTask, (const char *const)"MainTask", 512, (void *)0, main_TASK_PRIORITY + 6, NULL);
-//	xTaskCreate(Uart0Task, (const char *const)"Uart0_Bms_Task", 512, (void *)0, main_TASK_PRIORITY + 2, NULL);
+	xTaskCreate(MainTask, (const char *const)"MainTask", 512, (void *)0, main_TASK_PRIORITY + 6, MainTask_Handle);
+//	xTaskCreate(Uart0Task, (const char *const)"Uart0_Bms_Task", 512, (void *)0, main_TASK_PRIORITY + 2, Uart0Task_Handle);
 	xTaskCreate(CanTask, (const char *const)"CanTask", 512, (void *)0, main_TASK_PRIORITY + 2, &CanTask_Handle);
 	xTaskCreate(GpsTask, (const char *const)"GpsTask", 512, (void *)0, main_TASK_PRIORITY + 1, &GpsTask_Handle);
 	xTaskCreate(Uart_4G_Task, (const char *const)"Uart_4G_Task", 2048, (void *)0, main_TASK_PRIORITY + 0, &Uart_4G_Task_Handle);
 	vTaskStartScheduler();
+
 	for (;;)
 	{
 		if (exit_code != 0)
@@ -226,4 +92,5 @@ int main(void)
 	}
 	return exit_code;
 }
+
 /** @} */