Kaynağa Gözat

调试改动,能正确进入睡眠,能发送网络数据,能定位

CHENJIE-PC\QiXiang_CHENJIE 4 yıl önce
ebeveyn
işleme
0ccce1c984
4 değiştirilmiş dosya ile 275 ekleme ve 76 silme
  1. 6 1
      inc/hal_module_adapter.h
  2. 14 8
      src/app.c
  3. 2 0
      src/bsp_custom.c
  4. 253 67
      src/hal_module_adapter.c

+ 6 - 1
inc/hal_module_adapter.h

@@ -21,6 +21,8 @@ extern "C" {
 #define ADC_REQ_BITMAP_CH3								 (0x10)
 #define ADC_REQ_BITMAP_CH4								 (0x20)
 #define ADC_REQ_BITMAP_CH5								 (0x40)
+#define ADC_REQ_BITMAP_VBAT_CALI					 			(0x80)
+#define ADC_REQ_BITMAP_INRES_CALI					 			(0x100)
 #define ADC_GET_RESULT_TIMOUT 								 (2000)
 typedef enum _ntc_channel
 {
@@ -29,6 +31,8 @@ typedef enum _ntc_channel
     NTC_Channel3 ,               
     NTC_Channel4 ,               
     NTC_Channel5 ,           
+    NTC_Channel5_VbatCali ,           
+    NTC_Channel5_InresCali ,           
     NTC_ChannelMax	
 } ntc_channel_t;
 
@@ -54,7 +58,7 @@ typedef enum{
 typedef struct
 {
     UINT32 request;
-    UINT32 param[5];
+    UINT32 param[7];
 }adcReqMsg;
 
 typedef struct
@@ -154,6 +158,7 @@ void CanTiggerEvt(UINT8 cmd);
 INT32 CAN_WriteReg(UINT8 addr, UINT8 value);
 INT32 CAN_ReadReg(UINT8 reg, UINT8 len, UINT8 *buf);
 void HAL_Can_Init(Can_InitType param);
+ void HAL_Can_Sleep(void);
 INT32 HAL_Can_Reset(void);
 INT32 HAL_Can_Transmit(Can_TxMsgType Can_TxMsg);
 UINT8  HAL_Can_Receive(UINT8 *CAN_RX_Buf);

+ 14 - 8
src/app.c

@@ -193,8 +193,8 @@ static void Main_Task(void* arg)
     uint32_t sleep_time_flag;
     int32_t inParam = 0xAABBCCDD;
     uint32_t Chrgend_Work_time = 180000;
-    uint32_t Wakeup_Work_time = 30000;
-    uint32_t Sleep_Time = 300000;
+    uint32_t Wakeup_Work_time = 6000;
+    uint32_t Sleep_Time = 60000;
     //上述参数应写入文件里
     slpManWakeSrc_e Wakeup_source;
     PROC_MAIN_STATE_SWITCH(PROCESS_STATE_IDLE);
@@ -281,7 +281,7 @@ static void Main_Task(void* arg)
                     PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_LINK);
                     Tcp_index = 0;
                 }
-                if((!Can_Enable)&&(Uart_Rece_BattI==0x0000))
+                if((!Can_Enable)&&((Uart_Rece_BattI==0x0000)||(Uart_Rece_BattI==0xffff)))
                 {
                     sleep_index++;
                 }
@@ -445,16 +445,14 @@ uint8_t* Uart_Receive_func(Uart_Receive_Type Uart_Receive_Msg,uint8_t* Uart_Rece
         }
         else //接收数据的校验不过屏蔽
         {
-            osDelay(2000);
             memset(Uart_Rece_buffer,0xff,Data_Len);
             return Uart_Rece_buffer;
         }
     }
-    else if(isRecvTimeout == true)
+    else
     {
         memset(Uart_Rece_buffer,0x00,Data_Len);
         isRecvTimeout = false;
-        osDelay(1000);
         return Uart_Rece_buffer;
     }
 
@@ -879,6 +877,7 @@ static void Can_Task(void* arg)
             case PROCESS_CAN_STATE_SLEEP:
             {
                 posGGAServiceStop();
+                HAL_Can_Sleep();
                 slpManSlpState_t State;
                 uint8_t cnt;
                 if(slpManCheckVoteState(CanSlpHandler, &State, &cnt)==RET_TRUE)
@@ -1129,7 +1128,7 @@ static void Tcp_Task(void* arg)
                     #endif
                     PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_IDLE);
                 }
-                if(true) 
+                else
                 {
                     if(TcpconnectID<0)
                     {
@@ -1143,8 +1142,14 @@ static void Tcp_Task(void* arg)
                             #endif
                         }
                         sockfd = socket(AF_INET, SOCK_STREAM, 0);
+                        if(sockfd<0)
+                        {
+                            #ifdef USING_PRINTF
+                                printf("socket create error\n");
+                            #endif
+                        }
                         TcpconnectID = connect(sockfd, (struct sockaddr *) server_res->ai_addr, server_res->ai_addrlen);
-                        if(TcpconnectID<0)
+                        if(TcpconnectID<0 && errno != EINPROGRESS)
                         {
                             #ifdef USING_PRINTF
                                 printf("Connect failed!%d\n",TcpconnectID);
@@ -1289,6 +1294,7 @@ static void Tcp_Task(void* arg)
             {
                 slpManPlatVoteEnableSleep(TcpSlpHandler, SLP_SLP2_STATE); 
                 closesocket(sockfd);
+                tcp_ready = false;
                 deregisterPSEventCallback(socketRegisterPSUrcCallback);//注销NB网络事件函数
                 #ifdef USING_PRINTF
                     printf("TCP_STATE_SLEEP\n");

+ 2 - 0
src/bsp_custom.c

@@ -152,6 +152,7 @@ void BSP_CustomInit(void)
 	slpManGetPMUSettings();				
 
 	PMU_WakeupPadInit();
+	NVIC_DisableIRQ(PadWakeup0_IRQn);
 	NVIC_DisableIRQ(PadWakeup1_IRQn);
 	NVIC_EnableIRQ(PadWakeup2_IRQn);
 	CheckLockOutState();
@@ -163,6 +164,7 @@ void BSP_CustomInit(void)
 	PowerPinConfig(AON_IO);
 	PowerPinConfig(NORMAL_IO);
 	posGGAReset();
+	GPSUsartHandler(9600);
 	NetSocDisplay(LED_SOC_0,LED_TURN_ON);
 	NetSocDisplay(LED_SOC_1,LED_TURN_ON);
 	NetSocDisplay(LED_SOC_2,LED_TURN_ON);

+ 253 - 67
src/hal_module_adapter.c

@@ -57,15 +57,19 @@ static osMessageQueueId_t i2c_recv_msgqueue;
 */
 #define ADC_TASK_STACK_SIZE   								 (512)
 #define ADC_MSG_MAX_NUM        								 (7)
-#define ADC_AioResDivRatioDefault                                              (ADC_AioResDivRatio1)
-#define REV_AioResDivRatioDefault								 1
-#define ADC_ChannelAioVbat										(1800)
+#define ADC_AioResDivRatioDefault                                              (ADC_AioResDivRatio14Over16)
+#define REV_AioResDivRatioDefault								 16/14
+//#define ADC_ChannelAioVbat										(1200)
+static UINT32 ADC_ChannelAioVbat=1200;
 #define ADC_ChannelAioRes										(15000)
 #define NTC_FullAioValue											(1200)
 #define ADC_AioResDivRatioExtra                                              (ADC_AioResDivRatio8Over16)
 #define REV_AioResDivRatioExtra								 16/8
 #define NTC_REQ_UPDATE_DATA    							       (0x01)
 #define ADC_MSG_TIMEOUT      								 (1000)
+#define ADC_CALIBRATION_VALUE     								 (50900)
+
+static UINT32 ADC_InsideRES=500000;
 
 #define ADC_RECV_CONTROL_FLAG         						 (0x1)
 typedef struct
@@ -74,6 +78,7 @@ typedef struct
     UINT32 request;
     UINT32 NTCvalue[7];
 }NtcResult_t;
+
 NtcResult_t gNtcDev;
 volatile static UINT32 vbatChannelResult = 0;
 volatile static UINT32 thermalChannelResult = 0;
@@ -447,7 +452,7 @@ UINT8 CanTriggerEvtInit(void)
 	queue_attr.mq_mem  = can_recv_queue_buf;
 	queue_attr.mq_size   = sizeof(can_recv_queue_buf);
 	can_recv_msgqueue = osMessageQueueNew(I2C_RECV_QUEUE_BUF_SIZE,1, &queue_attr);
-	printf("CanTriggerEvtInit \r\n");
+	//printf("CanTriggerEvtInit \r\n");
 	return 0;
 }
 /**
@@ -462,7 +467,7 @@ void CanWaitEvt(UINT32 timeout)
 	UINT8 msg = 0;
 	UINT32 mask;
 	status = osMessageQueueGet(can_recv_msgqueue, &msg, 0 , osWaitForever);
-	printf("msg = %#x\r\n",msg);
+	//printf("msg = %#x\r\n",msg);
 }
 /**
   \fn    void CanTiggerEvt(UINT8 cmd)
@@ -616,21 +621,48 @@ void HAL_Can_Init(Can_InitType param)
 	CAN_WriteReg(CANINTE,0x43);
 	CAN_WriteReg(CANINTF,0x00);
 	
-	CAN_WriteReg(CANCTRL,param.mode |CLKOUT_ENABLED);//??MCP2515����???a?y3��?�꨺?,��?3??????�꨺? REQOP_NORMAL|CLKOUT_ENABLED
-    CAN_ReadReg(CANSTAT,1,&temp);//?����?CAN���䨬???��??�¦�??��
-	if(OPMODE_NORMAL !=(temp&0xE0))//?D??MCP2515��?��?��??-??��??y3��?�꨺?
+	CAN_WriteReg(CANCTRL,param.mode |CLKOUT_ENABLED);//??MCP2515¨¦¨¨???a?y3¡ê?¡ê¨º?,¨ª?3??????¡ê¨º? REQOP_NORMAL|CLKOUT_ENABLED
+      CAN_ReadReg(CANSTAT,1,&temp);//?¨¢¨¨?CAN¡Á¡ä¨¬???¡ä??¡Â¦Ì??¦Ì
+	if(param.mode !=(temp&0xE0))//?D??MCP2515¨º?¡¤?¨°??-??¨¨??y3¡ê?¡ê¨º?
 	{
     		CAN_WriteReg(CANCTRL,param.mode|CLKOUT_ENABLED);//?����???MCP2515����???a?y3��?�꨺?,��?3??????�꨺?REQOP_NORMAL
 	}
 }
 
 /*******************************************************************************
-* o����y??  : HAL_Can_Transmit
-* ?����?    : CAN����?��???��3��?����?��y?Y
-* ��?��?    : *CAN_TX_Buf(��y����?����y?Y?o3???????),len(��y����?����y?Y3��?��)
-* ��?3?    : ?T
-* ����???��  : ?T
-* ?��?��    : ?T
+* : HAL_Can_Sleep
+* 
+* 
+* 
+* 
+* 
+*******************************************************************************/
+void HAL_Can_Sleep(void)
+{
+	UINT8 temp=0,t=0;
+	do{
+		CAN_WriteReg(CANCTRL,OPMODE_SLEEP |CLKOUT_DISABLED);
+		CAN_ReadReg(CANSTAT,1,&temp);
+		#ifdef USING_PRINTF
+		//printf("%s[%d] [%#x]\r\n",__FUNCTION__, __LINE__,temp);
+		#endif		
+		if(OPMODE_SLEEP ==(temp&0xE0)){
+			#ifdef USING_PRINTF
+				//printf("SLEEP SUC \r\n");
+			#endif	
+			break;
+		}
+	}while(t++<3);
+}
+
+
+/*******************************************************************************
+* o¡¥¨ºy??  : HAL_Can_Transmit
+* ?¨¨¨º?    : CAN¡¤¡é?¨ª???¡§3¡è?¨¨¦Ì?¨ºy?Y
+* ¨º?¨¨?    : *CAN_TX_Buf(¡äy¡¤¡é?¨ª¨ºy?Y?o3???????),len(¡äy¡¤¡é?¨ª¨ºy?Y3¡è?¨¨)
+* ¨º?3?    : ?T
+* ¡¤¦Ì???¦Ì  : ?T
+* ?¦Ì?¡Â    : ?T
 *******************************************************************************/
 INT32  HAL_Can_Transmit(Can_TxMsgType Can_TxMsg)
 {
@@ -720,7 +752,7 @@ void CanHandleDataCallback(UINT32 event)
    }
 #if 0
 #ifdef USING_PRINTF
-		printf("[%d] CanHandleDataCallback :%d\r\n",__LINE__,event);
+		//printf("[%d] CanHandleDataCallback :%d\r\n",__LINE__,event);
 #else				
     		ECOMM_TRACE(UNILOG_PLA_APP,CAN_CB1, P_INFO, 1, "SPI event [%u] coming!",event);
 #endif
@@ -894,7 +926,7 @@ void GsensorTriggerEvent(UINT32 event ,UINT32 data)
 	 status = osMessageQueuePut(i2c_recv_msgqueue, &msg, 0, 0);
         if(status == osErrorResource)
         {
-            //ECOMM_TRACE(UNILOG_PLA_DRIVER, GsensorTriggerEvent_0, P_WARNING, 0, "I2C recv queue error");
+            ECOMM_TRACE(UNILOG_PLA_DRIVER, GsensorTriggerEvent_0, P_WARNING, 0, "I2C recv queue error");
         }
 
 }
@@ -942,7 +974,7 @@ static void HAL_I2C_RecvTaskEntry(void)
 			//handle data
 			//I2CEvtProcess(msg.event);
 #ifdef USING_PRINTF
-			printf("[%d]i2c recv event\r\n",__LINE__);
+			//printf("[%d]i2c recv event\r\n",__LINE__);
 #else				
     			ECOMM_TRACE(UNILOG_PLA_DRIVER, I2C_GSENSOR_D, P_INFO, 0, "i2c recv event");
 #endif
@@ -1013,7 +1045,7 @@ void GsensorI2CHandler(ARM_I2C_SignalEvent_t cb_event)
      i2cDrvInstance->Control(ARM_I2C_BUS_CLEAR, 0);
      HAL_I2C_CreateRecvTaskAndQueue();	 
 #ifdef USING_PRINTF
-   printf("[%d] i2c config ok\r\n",__LINE__);
+   //printf("[%d] i2c config ok\r\n",__LINE__);
 #else	 
      ECOMM_TRACE(UNILOG_PLA_DRIVER, I2C_GSENSOR_I, P_INFO, 0, "i2c config ok");
 #endif
@@ -1042,7 +1074,7 @@ void GpsDataRecvCallback(UINT32 event, void* dataPtr, UINT32 dataLen)
 {
    if((event == ARM_USART_EVENT_RX_TIMEOUT) || (event == ARM_USART_EVENT_RECEIVE_COMPLETE)){
 	    #ifdef USING_PRINTF	
-	    //	printf("GpsDataRecvCallback [%d] %s\r\n",dataLen,dataPtr);
+	    //	//printf("GpsDataRecvCallback [%d] %s\r\n",dataLen,dataPtr);
 	    #endif 
 		if(dataLen>0){
 			gpsReqMsg gpsInfo;
@@ -1092,14 +1124,91 @@ void GPSUsartHandler(UINT32 baudRate)
 */
 static INT32 AdcGetRes(UINT32 NTCvalue){
 	UINT32 Resvalue;
-	if(NTCvalue>=(ADC_ChannelAioVbat-100))
+	if(NTCvalue>=(ADC_ChannelAioVbat-10))
 		Resvalue=1000000;
 	else{
-		Resvalue=ADC_ChannelAioRes*NTCvalue/(ADC_ChannelAioVbat-NTCvalue);
+		Resvalue=(long long)ADC_ChannelAioRes*(long long)NTCvalue/(ADC_ChannelAioVbat-NTCvalue);
+	}
+	return Resvalue;
+}
+
+/**
+  \fn  INT32 AdcGetRes(UINT32 NTCvalue)
+  \param[in]  req : NTCvalue
+  \brief     
+  \return    Resvalue
+*/
+static INT32 AdcGetResFromInres(UINT32 NTCvalue){
+	UINT32 Resvalue,ResvalueCount;
+	if(NTCvalue>=(ADC_ChannelAioVbat-10))
+		ResvalueCount=1000000;
+	else{
+		ResvalueCount=ADC_ChannelAioRes*NTCvalue/(ADC_ChannelAioVbat-NTCvalue);
+	}
+
+    #ifdef USING_PRINTF	
+    	//printf("%s[%d][%d][%d]\r\n",__FUNCTION__, __LINE__,ADC_InsideRES,ResvalueCount);
+    #endif
+
+	if(ResvalueCount>=ADC_InsideRES)
+		Resvalue=1000000;
+	else
+		Resvalue=(long long)ADC_InsideRES*(long long)ResvalueCount/(ADC_InsideRES-ResvalueCount);
+	
+    #ifdef USING_PRINTF	
+    	//printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,Resvalue);
+    #endif
+	
+	return Resvalue;
+}
+
+
+/**
+  \fn  INT32 AdcVbatCali(UINT32 NTCvalue)
+  \param[in]  req : NTCvalue
+  \brief     
+  \return    Resvalue
+*/
+static INT32 AdcVbatCali(UINT32 NTCvalue){
+	UINT32 Resvalue;
+	if(NTCvalue>=(ADC_ChannelAioVbat-10))
+		Resvalue=1000000;
+	else{
+		Resvalue=(long long)(ADC_ChannelAioRes+ADC_CALIBRATION_VALUE)*(long long)NTCvalue/ADC_CALIBRATION_VALUE;				//ADC_ChannelAioRes*NTCvalue/(ADC_ChannelAioVbat-NTCvalue);
+	}
+	if(Resvalue<1300&&Resvalue>1100)
+		ADC_ChannelAioVbat=Resvalue;
+	return Resvalue;
+}
+
+/**
+  \fn  INT32 AdcInresCali(UINT32 NTCvalue)
+  \param[in]  req : NTCvalue
+  \brief     
+  \return    Resvalue
+*/
+static INT32 AdcInresCali(UINT32 NTCvalue){
+	UINT32 Resvalue,ResvalueCount;
+	if(NTCvalue>=(ADC_ChannelAioVbat-10))
+		ResvalueCount=1000000;
+	else{
+		ResvalueCount=ADC_ChannelAioRes*NTCvalue/(ADC_ChannelAioVbat-NTCvalue);
 	}
+
+    #ifdef USING_PRINTF	
+    	//printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,ResvalueCount);
+    #endif
+
+	if(ResvalueCount>=ADC_CALIBRATION_VALUE)
+		Resvalue=1000000;
+	else
+		Resvalue=(long long)ADC_CALIBRATION_VALUE*(long long)ResvalueCount/(ADC_CALIBRATION_VALUE-ResvalueCount);
+	if(Resvalue>=200000&&Resvalue<1000000)
+		ADC_InsideRES=Resvalue;
 	return Resvalue;
 }
 
+
 /**
   \fn  INT32 AdcSendReq(UINT32 req,UINT32 * param ,UINT32 timeout)
   \param[in]  req : ADC_REQ_BITMAP_VBAT ADC_REQ_BITMAP_TEMP; timeout = 0 at irq ,otherwize equal to ADC_MSG_TIMEOUT
@@ -1112,7 +1221,7 @@ INT32 AdcSendReq(UINT32 req,UINT32 * param , UINT8 len ,UINT32 timeout)
     adcReqMsg ReqMsg;
 	
     ReqMsg.request = req;
-    ReqMsg.param[NTC_Channel1] =   ReqMsg.param[NTC_Channel2] =  ReqMsg.param[NTC_Channel3] =  ReqMsg.param[NTC_Channel4] =  ReqMsg.param[NTC_Channel5] =ADC_AioResDivRatioDefault  ;
+    ReqMsg.param[NTC_Channel1] =   ReqMsg.param[NTC_Channel2] =  ReqMsg.param[NTC_Channel3] =  ReqMsg.param[NTC_Channel4] =  ReqMsg.param[NTC_Channel5] = ReqMsg.param[NTC_Channel5_InresCali] =ADC_AioResDivRatioDefault  ;
     ret = osMessageQueuePut(adcMsgHandle, &ReqMsg, 0, timeout);
 
     if(ret != osOK)
@@ -1132,13 +1241,13 @@ INT32 AdcSendReq(UINT32 req,UINT32 * param , UINT8 len ,UINT32 timeout)
  		param[0] = gNtcDev.NTCvalue[1];
 		break;
 		case ADC_REQ_BITMAP_CH1:
-		param[0] = AdcGetRes(gNtcDev.NTCvalue[2+NTC_Channel1]);	
+		param[0] = AdcGetResFromInres(gNtcDev.NTCvalue[2+NTC_Channel1]);	
 		break;
 		case ADC_REQ_BITMAP_CH2:
-		param[0] =AdcGetRes(gNtcDev.NTCvalue[2+NTC_Channel2]);	
+		param[0] =AdcGetResFromInres(gNtcDev.NTCvalue[2+NTC_Channel2]);	
 		break;
 		case ADC_REQ_BITMAP_CH3:
-		param[0] =AdcGetRes(gNtcDev.NTCvalue[2+NTC_Channel3]);	
+		param[0] =AdcGetResFromInres(gNtcDev.NTCvalue[2+NTC_Channel3]);	
 		break;
 		case ADC_REQ_BITMAP_CH4:
 		param[0] = AdcGetRes(gNtcDev.NTCvalue[2+NTC_Channel4]);	
@@ -1146,6 +1255,12 @@ INT32 AdcSendReq(UINT32 req,UINT32 * param , UINT8 len ,UINT32 timeout)
 		case ADC_REQ_BITMAP_CH5:
 		param[0] = AdcGetRes(gNtcDev.NTCvalue[2+NTC_Channel5]);	
 		break;
+		case ADC_REQ_BITMAP_VBAT_CALI:
+		param[0] = AdcVbatCali(gNtcDev.NTCvalue[2+NTC_Channel5_VbatCali]);	
+		break;
+		case ADC_REQ_BITMAP_INRES_CALI:
+		param[0] = AdcInresCali(gNtcDev.NTCvalue[2+NTC_Channel5_InresCali]);	
+		break;
 	  }
 	  osEventFlagsClear(adcTrigerHandle, ADC_RECV_CONTROL_FLAG);
         return ret;
@@ -1199,6 +1314,18 @@ static void ADC_NTC4OR5ChannelCallback(uint32_t result)
 	    osEventFlagsSet(adcEvtHandle, ADC_REQ_BITMAP_CH5);
     }
 }
+static void ADC_NTCVbatCaliChannelCallback(uint32_t result)
+{
+    NTCChannelResult[NTC_Channel5_VbatCali] = result;
+    osEventFlagsSet(adcEvtHandle, ADC_REQ_BITMAP_VBAT_CALI);
+}
+
+static void ADC_NTCInresCaliChannelCallback(uint32_t result)
+{
+    NTCChannelResult[NTC_Channel5_InresCali] = result;
+    osEventFlagsSet(adcEvtHandle, ADC_REQ_BITMAP_INRES_CALI);
+}
+
 
 /**
   \fn   void AdcProcess(void* arg)
@@ -1244,8 +1371,14 @@ static void AdcProcess(void* arg)
 	if(regMsg.request & ADC_REQ_BITMAP_CH1)
 	{
 		if(regMsg.param[NTC_Channel1]>=ADC_AioResDivRatio1 && regMsg.param[NTC_Channel1]<=ADC_AioResDivRatio1Over16){
+		    #ifdef USING_PRINTF	
+		    	//printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
+		    #endif
 			adcConfig.channelConfig.aioResDiv = regMsg.param[NTC_Channel1];
 		}else{
+		    #ifdef USING_PRINTF	
+		    	//printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
+		    #endif
 			adcConfig.channelConfig.aioResDiv = ADC_AioResDivRatioDefault;
 		}
 	  	ADC_ChannelInit(ADC_ChannelAio1, ADC_UserAPP, &adcConfig, ADC_NTC1ChannelCallback);
@@ -1255,9 +1388,14 @@ static void AdcProcess(void* arg)
 	if(regMsg.request & ADC_REQ_BITMAP_CH2)
 	{
 		if(regMsg.param[NTC_Channel2]>=ADC_AioResDivRatio1 && regMsg.param[NTC_Channel2]<=ADC_AioResDivRatio1Over16){
+		    #ifdef USING_PRINTF	
+		    	//printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
+		    #endif
 			adcConfig.channelConfig.aioResDiv = regMsg.param[NTC_Channel2];
 		}else{
-			adcConfig.channelConfig.aioResDiv = ADC_AioResDivRatioDefault;
+		    #ifdef USING_PRINTF	
+		    	//printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
+		    #endif
 		}
 		ADC_ChannelInit(ADC_ChannelAio2, ADC_UserAPP, &adcConfig, ADC_NTC2ChannelCallback);
 		ADC_StartConversion(ADC_ChannelAio2, ADC_UserAPP);
@@ -1266,8 +1404,14 @@ static void AdcProcess(void* arg)
 	if(regMsg.request & ADC_REQ_BITMAP_CH3)
 	{
 		if(regMsg.param[NTC_Channel3]>=ADC_AioResDivRatio1 && regMsg.param[NTC_Channel3]<=ADC_AioResDivRatio1Over16){
+		    #ifdef USING_PRINTF	
+		    	//printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
+		    #endif
 			adcConfig.channelConfig.aioResDiv = regMsg.param[NTC_Channel3];
 		}else{
+		    #ifdef USING_PRINTF	
+		    	//printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
+		    #endif
 			adcConfig.channelConfig.aioResDiv = ADC_AioResDivRatioDefault;
 		}
 		ADC_ChannelInit(ADC_ChannelAio3, ADC_UserAPP, &adcConfig, ADC_NTC3ChannelCallback);
@@ -1278,28 +1422,48 @@ static void AdcProcess(void* arg)
 		if(regMsg.request & ADC_REQ_BITMAP_CH4){
 			gNtcDev.flagC4 = 1;
 			GPIO_PinWrite(0, 1, 1);
-			
-			if(regMsg.param[NTC_Channel4]>=ADC_AioResDivRatio1 && regMsg.param[NTC_Channel4]<=ADC_AioResDivRatio1Over16){
-				adcConfig.channelConfig.aioResDiv = regMsg.param[NTC_Channel4];
-			}else{
-				adcConfig.channelConfig.aioResDiv = ADC_AioResDivRatioDefault;
-			}
-
-			
 		}else{
 			GPIO_PinWrite(0, 1, 0);
 			gNtcDev.flagC4 = 0;
-			if(regMsg.param[NTC_Channel5]>=ADC_AioResDivRatio1 && regMsg.param[NTC_Channel5]<=ADC_AioResDivRatio1Over16){
-				adcConfig.channelConfig.aioResDiv = regMsg.param[NTC_Channel5];
-			}else{
-				adcConfig.channelConfig.aioResDiv = ADC_AioResDivRatioDefault;
-			}
+		}
+	        ADC_GetDefaultConfig(&adcConfig);
+	        adcConfig.channelConfig.thermalInput = ADC_ThermalInputAio4;
+	        ADC_ChannelInit(ADC_ChannelThermal, ADC_UserAPP, &adcConfig, ADC_NTC4OR5ChannelCallback);
+		ADC_StartConversion(ADC_ChannelThermal, ADC_UserAPP);
+	}
 
+	if(regMsg.request & ADC_REQ_BITMAP_VBAT_CALI)
+	{
+		GPIO_PinWrite(0, 1, 0);
+		gNtcDev.flagC4 = 0;
+	        ADC_GetDefaultConfig(&adcConfig);
+	        adcConfig.channelConfig.thermalInput = ADC_ThermalInputAio4;
+	        ADC_ChannelInit(ADC_ChannelThermal, ADC_UserAPP, &adcConfig, ADC_NTCVbatCaliChannelCallback);
+		ADC_StartConversion(ADC_ChannelThermal, ADC_UserAPP);
+	}
+
+	if(regMsg.request & ADC_REQ_BITMAP_INRES_CALI)
+	{
+		GPIO_PinWrite(0, 1, 0);
+		if(regMsg.param[NTC_Channel5_InresCali]>=ADC_AioResDivRatio1 && regMsg.param[NTC_Channel5_InresCali]<=ADC_AioResDivRatio1Over16){
+		    #ifdef USING_PRINTF	
+		    	//printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
+		    #endif
+			adcConfig.channelConfig.aioResDiv = regMsg.param[NTC_Channel5_InresCali];
+		}else{
+		    #ifdef USING_PRINTF	
+		    	//printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
+		    #endif
+			adcConfig.channelConfig.aioResDiv = ADC_AioResDivRatioDefault;
 		}
-		ADC_ChannelInit(ADC_ChannelAio4, ADC_UserAPP, &adcConfig, ADC_NTC4OR5ChannelCallback);
+		
+		gNtcDev.flagC4 = 0;
+		ADC_ChannelInit(ADC_ChannelAio4, ADC_UserAPP, &adcConfig, ADC_NTCInresCaliChannelCallback);
 		ADC_StartConversion(ADC_ChannelAio4, ADC_UserAPP);
 	}
 	
+
+	
 	ret = osEventFlagsWait(adcEvtHandle, regMsg.request, osFlagsWaitAll, ADC_GET_RESULT_TIMOUT);
 
 	if(regMsg.request & ADC_REQ_BITMAP_VBAT)
@@ -1319,7 +1483,10 @@ static void AdcProcess(void* arg)
 	 	ADC_ChannelDeInit(ADC_ChannelAio1, ADC_UserAPP);
 		if(times==1){
 			gNtcDev.NTCvalue[2+NTC_Channel1]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel1])*REV_AioResDivRatioDefault;
-			if(gNtcDev.NTCvalue[2+NTC_Channel1]>(NTC_FullAioValue-100)){
+		    #ifdef USING_PRINTF	
+		    	//printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,gNtcDev.NTCvalue[2+NTC_Channel1]);
+		    #endif
+			if(gNtcDev.NTCvalue[2+NTC_Channel1]>(NTC_FullAioValue-10)){
 				regMsg.param[NTC_Channel1]=ADC_AioResDivRatioExtra;
 				times++;
 				goto retry;
@@ -1334,7 +1501,10 @@ static void AdcProcess(void* arg)
 		ADC_ChannelDeInit(ADC_ChannelAio2, ADC_UserAPP);
 		if(times==1){
 			gNtcDev.NTCvalue[2+NTC_Channel2]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel2])*REV_AioResDivRatioDefault;
-			if(gNtcDev.NTCvalue[2+NTC_Channel2]>(NTC_FullAioValue-100)){
+		    #ifdef USING_PRINTF	
+		    	//printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,gNtcDev.NTCvalue[2+NTC_Channel2]);
+		    #endif
+			if(gNtcDev.NTCvalue[2+NTC_Channel2]>(NTC_FullAioValue-10)){
 				regMsg.param[NTC_Channel2]=ADC_AioResDivRatioExtra;
 				times++;
 				goto retry;
@@ -1348,7 +1518,10 @@ static void AdcProcess(void* arg)
 		ADC_ChannelDeInit(ADC_ChannelAio3, ADC_UserAPP);
 		if(times==1){
 			gNtcDev.NTCvalue[2+NTC_Channel3]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel3])*REV_AioResDivRatioDefault;
-			if(gNtcDev.NTCvalue[2+NTC_Channel3]>(NTC_FullAioValue-100)){
+		    #ifdef USING_PRINTF	
+		    	//printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,gNtcDev.NTCvalue[2+NTC_Channel3]);
+		    #endif
+			if(gNtcDev.NTCvalue[2+NTC_Channel3]>(NTC_FullAioValue-10)){
 				regMsg.param[NTC_Channel3]=ADC_AioResDivRatioExtra;
 				times++;
 				goto retry;
@@ -1359,30 +1532,45 @@ static void AdcProcess(void* arg)
 	}
 	if(regMsg.request & ADC_REQ_BITMAP_CH4 ||regMsg.request & ADC_REQ_BITMAP_CH5)
 	{
-		ADC_ChannelDeInit(ADC_ChannelAio4, ADC_UserAPP);
+		ADC_ChannelDeInit(ADC_ChannelThermal, ADC_UserAPP);
 		if(gNtcDev.flagC4){
-			if(times==1){
-				gNtcDev.NTCvalue[2+NTC_Channel4]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel4])*REV_AioResDivRatioDefault;
-				if(gNtcDev.NTCvalue[2+NTC_Channel4]>(NTC_FullAioValue-100)){
-					regMsg.param[NTC_Channel4]=ADC_AioResDivRatioExtra;
-					times++;
-					goto retry;
-				}			
-			}else{
-				gNtcDev.NTCvalue[2+NTC_Channel4]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel4])*REV_AioResDivRatioExtra;
+			gNtcDev.NTCvalue[2+NTC_Channel4]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel4]);
+		}else{
+			gNtcDev.NTCvalue[2+NTC_Channel5]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel5]);
+		}
+	}
+	if(regMsg.request & ADC_REQ_BITMAP_VBAT_CALI)
+	{
+		ADC_ChannelDeInit(ADC_ChannelThermal, ADC_UserAPP);
+		if(times==1){
+			gNtcDev.NTCvalue[2+NTC_Channel5_VbatCali]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel5_VbatCali]);
+		    #ifdef USING_PRINTF	
+		    	//printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,gNtcDev.NTCvalue[2+NTC_Channel5_VbatCali]);
+		    #endif
+			if(gNtcDev.NTCvalue[2+NTC_Channel5_VbatCali]>(NTC_FullAioValue-10)){
+				regMsg.param[NTC_Channel5_VbatCali]=ADC_AioResDivRatioExtra;
+				times++;
+				goto retry;
 			}			
 		}else{
-			if(times==1){
-				gNtcDev.NTCvalue[2+NTC_Channel5]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel5])*REV_AioResDivRatioDefault;
-				if(gNtcDev.NTCvalue[2+NTC_Channel5]>(NTC_FullAioValue-100)){
-					regMsg.param[NTC_Channel5]=ADC_AioResDivRatioExtra;
-					times++;
-					goto retry;
-				}			
-			}else{
-				gNtcDev.NTCvalue[2+NTC_Channel5]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel5])*REV_AioResDivRatioExtra;
-			}
-			
+			gNtcDev.NTCvalue[2+NTC_Channel5_VbatCali]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel5_VbatCali]);
+		}
+	}
+	if(regMsg.request & ADC_REQ_BITMAP_INRES_CALI)
+	{
+		ADC_ChannelDeInit(ADC_ChannelAio4, ADC_UserAPP);
+		if(times==1){
+			gNtcDev.NTCvalue[2+NTC_Channel5_InresCali]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel5_InresCali])*REV_AioResDivRatioDefault;
+		    #ifdef USING_PRINTF	
+		    	//printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,gNtcDev.NTCvalue[2+NTC_Channel5_InresCali]);
+		    #endif
+			if(gNtcDev.NTCvalue[2+NTC_Channel5_InresCali]>(NTC_FullAioValue-10)){
+				regMsg.param[NTC_Channel5_InresCali]=ADC_AioResDivRatioExtra;
+				times++;
+				goto retry;
+			}			
+		}else{
+			gNtcDev.NTCvalue[2+NTC_Channel5_InresCali]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel5_InresCali])*REV_AioResDivRatioExtra;
 		}
 	}
 	 osEventFlagsSet(adcTrigerHandle, ADC_RECV_CONTROL_FLAG);
@@ -1472,7 +1660,7 @@ void PowerPinConfig(IOType iotype)
 		
 		PAD_SetPinConfig(31, &padConfig);
 		GPIO_PinConfig(1, AON_GPS_POWER2, &config);
-		GPIO_PinWrite(1, 1 << AON_GPS_POWER2, 1 << AON_RELAY_DRV);
+		GPIO_PinWrite(1, 1 << AON_GPS_POWER2, 1 << AON_GPS_POWER2);
 
 		PAD_SetPinConfig(32, &padConfig);
 		GPIO_PinConfig(1, AON_RELAY_DRV, &config);
@@ -1584,7 +1772,6 @@ INT32 posGGAServiceStart( posGGACallBack callBack)
 		return -1;
 	}else{
 		GPSPowerCtr(true);
-		GPSUsartHandler(9600);
 		gGPSDataCBfunc = callBack;
 		return 0;
 	}
@@ -1597,7 +1784,6 @@ INT32 posGGAServiceStart( posGGACallBack callBack)
 */
 void posGGAServiceStop( void)
 {	
-	HAL_UART_DeInitHandler(PORT_USART_2);
 	GPSPowerCtr(false);
 	gGPSDataCBfunc = NULL;
 }