Browse Source

新增gps和adc采样,gps加入重启机制

CHENJIE-PC\QiXiang_CHENJIE 3 years ago
parent
commit
6805cacb4e
11 changed files with 398 additions and 188 deletions
  1. 12 1
      inc/AppConfig.h
  2. 1 1
      inc/AppFunc.h
  3. 2 2
      inc/AppSignal.h
  4. 7 0
      inc/AppTaskGps.h
  5. 78 1
      src/AppFunc.c
  6. 2 1
      src/AppSignal.c
  7. 55 9
      src/AppTaskControl.c
  8. 177 5
      src/AppTaskGps.c
  9. 1 0
      src/AppTaskMain.c
  10. 61 167
      src/AppTaskTcp.c
  11. 2 1
      src/app.c

+ 12 - 1
inc/AppConfig.h

@@ -108,5 +108,16 @@ typedef struct _UartWriteDataType
     UINT8 Data[2];
 }UartWriteData_S;
 
-
+typedef struct _GPSInfo
+{
+	UINT8	locateMark;
+	UINT8	satelliteNum;
+	UINT8	direction[2];
+	UINT8	speed[2];
+	UINT8	altitude[2];
+	UINT8	latitude[4];
+	UINT8	longitude[4];
+	UINT8   AccMileage[4];
+	//若此处新增gps信息,需要同步修改tcp线程的定义
+}GPSInfo;
 #endif

+ 1 - 1
inc/AppFunc.h

@@ -34,7 +34,7 @@ BOOL uartBattInfoDecode(UINT8* dataPtr);
 static UINT8 BmsErrorDecode(UINT32 battWarningState);
 UINT16 GetErrorNum(UINT16 *ErrorArray,UINT8 Errorlen);
 UINT8 PutErrorNum(UINT16 *ErrorArray,UINT8 Errorlen,UINT16 ErrorNum);
-
+UINT8 LookUpRTtable(UINT32 R_value);
 
 void SaveAppData(void);
 void LoadAppData(void);

+ 2 - 2
inc/AppSignal.h

@@ -53,7 +53,7 @@ extern UINT8 	UDSSwitch ;
 extern UINT8 	PosFlag ;     
 extern UINT8    UartRecvFlag ;
 extern UINT8    BuzzerControl;
-
+extern UINT8    BattWorkStateDelay;
 //declear the UINT16 vars
 extern UINT16	battCellU[28];
 extern UINT16	minCellVol;
@@ -75,7 +75,7 @@ extern volatile UINT32  TimeCounter;
 
 //declear other vars
 extern osMutexId_t Error_Mutex;
-extern osMutexId_t GpsMutex;
+extern QueueHandle_t GpsRecvHandle;
 extern QueueHandle_t UartWriteCmdHandle;
 extern AppConfigDataType AppNVMData;
 extern AppDataBody AppDataInfo;

+ 7 - 0
inc/AppTaskGps.h

@@ -30,5 +30,12 @@
 #include "hal_module_adapter.h"
 
 #define GPS_TASK_STACK_SIZE   								 (512)
+typedef enum
+{
+    PROCESS_GPS_STATE_IDLE = 0,
+    PROCESS_GPS_STATE_WORK,
+    PROCESS_GPS_STATE_SLEEP
+}process_gps;
+
 void AppTaskGpsInit(void *arg);
 void AppTaskGpsDeInit(void *arg);

+ 78 - 1
src/AppFunc.c

@@ -9,7 +9,84 @@
 #include "AppFunc.h"
 #include "numeric.h"
 #include "hal_module_adapter.h"
-
+UINT8 LookUpRTtable(UINT32 R_value)
+{
+	UINT8 Temp_Table1[23] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22};
+	UINT8 Temp_Table2[217] = {23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
+	49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,
+	84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,
+	115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,
+	142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,
+	169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,
+	196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,
+	223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239};
+	UINT32 R_Table1[23] = {202269,191063,180554,170694,161438,152746,144580,136905,129687,122898,116508,
+						110493,104827,99488,94455,89710,85233,81008,77019,73252,69693,66329,63148};
+	UINT16 R_Table2[217] = {
+	60140,57293,54599,52049,49633,47343,45174,43117,41166,39315,37558,35891,34307,32802,31373,
+	30014,28722,27493,26324,25211,24152,23144,22183,21268,20395,19564,18771,18015,17293,16604,
+	15947,15319,14720,14147,13600,13077,12577,12098,11641,11203,10784,10383,10000,9632,9280,8942,
+	8619,8309,8012,7727,7454,7191,6940,6698,6466,6244,6030,5825,5627,5438,5255,5080,4911,4749,4593,
+	4443,4299,4160,4026,3898,3773,3654,3539,3428,3321,3218,3119,3023,2931,2841,2755,2672,2592,2515,
+	2441,2369,2299,2232,2167,2104,2044,1985,1928,1874,1821,1769,1720,1672,1626,1581,1537,1495,1455,
+	1415,1377,1340,1305,1270,1236,1204,1172,1142,1112,1083,1056,1029,1002,977,952,928,905,883,861,
+	839,819,799,779,760,742,724,707,690,674,658,642,627,613,599,585,571,558,546,533,521,509,498,487,
+	476,466,455,445,436,426,417,408,399,391,382,374,366,359,351,344,337,330,323,316,310,304,298,292,
+	286,280,274,269,264,259,254,249,244,239,234,230,226,221,217,213,209,205,201,198,194,190,187,183,
+	180,177,174,171,168,165,162,159,156,153,151,148,145,143,141,138,136,133,131,129,127,125};
+	if(R_value>R_Table2[0])
+	{
+		if(R_value<=R_Table1[22])//判断是否超出表尾
+		{
+			return Temp_Table1[22];
+		}
+		else if(R_value>=R_Table1[0])//判断是否超出表头
+		{
+			return Temp_Table1[0];
+		}
+		else 
+		{
+			for(int i=0;i<23-1;i++)
+			{
+				if ((R_value<=R_Table1[i])&&(R_value>R_Table1[i+1]))//中间判断
+				{
+					return Temp_Table1[i];
+				}
+				else
+				{
+					continue;
+				} 
+				
+			}
+		}
+	}//R-1
+	else
+	{
+		if(R_value<=R_Table2[216])//判断是否超出表尾
+		{
+			return Temp_Table2[216];
+		}
+		else if(R_value>=R_Table2[0])//判断是否超出表头
+		{
+			return Temp_Table2[0];
+		}
+		else 
+		{
+			for(int i=0;i<217-1;i++)
+			{
+				if ((R_value<R_Table2[i])&&(R_value>=R_Table2[i+1]))//中间判断
+				{
+					return Temp_Table2[i+1];
+				}
+				else
+				{
+					continue;
+				} 
+				
+			}
+		}
+	}//R-2
+}
 UINT8 bcc_chk(UINT8* data, UINT8 length)
 {
     UINT8 bcc_chk_return = 0x00;

+ 2 - 1
src/AppSignal.c

@@ -50,6 +50,7 @@ UINT8 	UDSSwitch = 0;              //下线检测标志位
 UINT8 	PosFlag = 0;                //定位信息是否有效标志位
 UINT8   UartRecvFlag = 0;           //Uart收到消息标志位0表示未收到,1表示收到
 UINT8   BuzzerControl = 0;          //蜂鸣器控制状态
+UINT8   BattWorkStateDelay = 0;     //电池工作状态(延时处理后的)
 /**declear the uint16 vars**/
 UINT16	battCellU[28] = {0xFFFF};    //电池包单体电压
 UINT16	minCellVol = 0xFFFF;    //最小单体电压
@@ -71,7 +72,7 @@ volatile UINT32  TimeCounter = 0x00;             //主任务定时器计数
 
 /**declear the Handle vars**/
 osMutexId_t Error_Mutex = NULL;         //故障互锁句柄
-osMutexId_t GpsMutex = NULL;           //GPS互锁句柄
+QueueHandle_t GpsRecvHandle = NULL;     //定位信息队列句柄
 QueueHandle_t UartWriteCmdHandle = NULL;//Uart写命令队列句柄
 
 /**declear other vars**/   

+ 55 - 9
src/AppTaskControl.c

@@ -13,16 +13,13 @@ static UINT8                        gProcess_Control_TaskStack[PROC_CONTROL_TASK
 static osThreadId_t                 ControlTaskId = NULL;
 static process_control 		        gProcess_Control_Task = PROCESS_CONTROL_STATE_IDLE;
 #define PROC_CONTROL_STATE_SWITCH(a)    (gProcess_Control_Task = a)
-
-extern void GsensorInit(void);
-extern void GsensorI2CHandler(ARM_I2C_SignalEvent_t cb_event);
-extern void GsensorI2CCallback(UINT32 event);
-
+void GetAdcValue(UINT8 num);
 static void ControlTask(void* arg)
 {
-    GsensorI2CHandler(GsensorI2CCallback);
-    GsensorInit();
-
+    /*AD采样初始化*/
+    UINT32  param;
+	AdcSendReq(ADC_REQ_BITMAP_VBAT_CALI,&param,1,ADC_GET_RESULT_TIMOUT);						
+	AdcSendReq(ADC_REQ_BITMAP_INRES_CALI,&param,1,ADC_GET_RESULT_TIMOUT);
     NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
 	NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
 	NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
@@ -30,6 +27,7 @@ static void ControlTask(void* arg)
 	FaultDisplay(LED_TURN_OFF);
     PROC_CONTROL_STATE_SWITCH(PROCESS_CONTROL_STATE_IDLE);
     UINT32 CurrentTime = 0;
+    UINT8 AdcOrder = 1;
     while (true)
     {
         switch(gProcess_Control_Task)
@@ -48,7 +46,15 @@ static void ControlTask(void* arg)
                     LEDDisplay();
                     CurrentTime = TimeCounter;
                 }
-                 
+                if(TimeCounter%10==0)
+                {
+                    GetAdcValue(AdcOrder);
+                    AdcOrder++;
+                    if(AdcOrder>5)
+                    {
+                        AdcOrder = 1;
+                    }
+                }
                 if(gProcess_app!=WORK)
                 {
                     NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
@@ -64,6 +70,15 @@ static void ControlTask(void* arg)
             case PROCESS_CONTROL_STATE_SLEEP:
             {
                 osDelay(100);
+                if(TimeCounter%(10*60)==0)
+                {
+                    GetAdcValue(AdcOrder);
+                    AdcOrder++;
+                    if(AdcOrder>5)
+                    {
+                        AdcOrder = 1;
+                    }
+                }
                 if(gProcess_app==WORK)
                 {
                     PROC_CONTROL_STATE_SWITCH(PROCESS_CONTROL_STATE_WORK);
@@ -90,4 +105,35 @@ void AppTaskControlDeInit(void *arg)
 {
     osThreadTerminate(ControlTaskId);
     ControlTaskId = NULL;
+}
+void GetAdcValue(UINT8 num)
+{
+    UINT32 adcValue = 0;
+    switch (num)
+    {
+        case FAST_CHARGE_TEMP:
+            NB_ADC_Get(&adcValue,FAST_CHARGE_TEMP);
+            fastChargeTemp = LookUpRTtable(adcValue);
+            break;
+        case NORMAL_CHARGE_TEMP:
+            NB_ADC_Get(&adcValue,NORMAL_CHARGE_TEMP);
+            normalChargeTemp = LookUpRTtable(adcValue);
+            break;
+        case OTHER_TEMP_1:
+            NB_ADC_Get(&adcValue,OTHER_TEMP_1);
+            heatTemp1 = LookUpRTtable(adcValue);                      
+            break;
+        case OTHER_TEMP_2:
+            NB_ADC_Get(&adcValue,OTHER_TEMP_2);
+            heatTemp2 = LookUpRTtable(adcValue);                       
+            break;
+        case  VBAT:
+            NB_ADC_Get(&adcValue,VBAT);    
+            #ifdef USING_PRINTF1
+                printf("VBAT:%d\n",adcValue);
+            #endif	                    
+            break;
+        default:
+            break;
+    }
 }

+ 177 - 5
src/AppTaskGps.c

@@ -11,16 +11,164 @@ static QueueHandle_t norGpsHandle = NULL;
 static osThreadId_t gpsTaskHandle = NULL;
 static StaticTask_t gpsTask = NULL;
 static UINT8 gpsTaskStack[GPS_TASK_STACK_SIZE];
+extern void GsensorInit(void);
+extern void GsensorI2CHandler(ARM_I2C_SignalEvent_t cb_event);
+extern void GsensorI2CCallback(UINT32 event);
 
+static process_gps             gProcess_Gps_Task = PROCESS_GPS_STATE_IDLE;
+#define PROC_GPS_STATE_SWITCH(a)  (gProcess_Gps_Task = a)
+UINT32 location_handle(char *in1);
+void strdel(char * str,char c);
 static void GpsTask(void* arg)
 {
-    if(GpsMutex == NULL)
-    {
-        GpsMutex = osMutexNew(NULL);
-    }    
+	/*三轴加速度初始化*/
+	GsensorI2CHandler(GsensorI2CCallback);
+    GsensorInit();
+
+	/*定位芯片启动初始化*/
+    posGGAReset();
+	PROC_GPS_STATE_SWITCH(PROCESS_GPS_STATE_IDLE);
+	if(GpsRecvHandle == NULL)
+	{
+		GpsRecvHandle = osMessageQueueNew(2,sizeof(GPSInfo*), NULL);
+	}
+	gpsReqMsg msg;
+	GPSInfo *GpsInfoData; 
+	char *p=NULL;
+	const char *delim = "\n";
+	char *databuffer[14];
+	UINT32 speedtemp;
+    UINT32 latitude;
+	UINT32 longitude;
+    UINT16 direction;
+	UINT8  	GpsNoDataCounter = 0;
+	UINT8	GpsResetCount = 0;
     while(1)
     {
-        osDelay(1000);
+        switch(gProcess_Gps_Task)
+		{
+			case PROCESS_GPS_STATE_IDLE:
+			{
+				osDelay(100);
+				posGGAServiceStart(norGpsHandle);
+				PROC_GPS_STATE_SWITCH(PROCESS_GPS_STATE_WORK);
+				break;
+			}
+			case PROCESS_GPS_STATE_WORK:
+			{
+				osDelay(100);
+				if(gProcess_app!=WORK)
+				{
+					posGGAServiceStop();
+					PROC_GPS_STATE_SWITCH(PROCESS_GPS_STATE_SLEEP);
+				}
+				if(GpsNoDataCounter>=10 && GpsResetCount<=3)
+				{
+					posGGAReset();
+					GpsResetCount++;
+					GpsNoDataCounter = 0;
+				}
+				osStatus_t ret = osMessageQueueGet(norGpsHandle, &msg, 0, 1000);
+				if(ret==0)
+				{
+					if (msg.dataPtr)
+            		{
+						//char temp[] = "$GNRMC,082626.000,A,2939.91801,N,10637.09500,E,0.543,30.254,261120,,,A,V*17";
+						GpsInfoData = malloc(sizeof(GPSInfo));
+						memset(GpsInfoData,0x00,sizeof(GPSInfo));
+						p = strtok(msg.dataPtr,delim);//将信息进行分割
+						#ifdef USING_PRINTF1
+							printf("\nP msgptr data:%s\r\n",p);
+						#endif
+						p = strtok(p,",");//只取第1行的信息RMC
+						//p = strtok(temp,",");//模拟测试
+						if (strcmp(p,"$GNRMC")==0)
+						{
+							UINT8 i=0;			
+							while (p)
+							{	
+								databuffer[i]=p;
+								p = strtok(NULL,",");
+								i++;;
+							}
+							if (strcmp(databuffer[1],"V")==0|strcmp(databuffer[2],"V")==0)
+							{
+								memset(GpsInfoData,0x00,sizeof(GPSInfo));
+								GpsNoDataCounter++;
+							}
+							else if (strcmp(databuffer[2],"A")==0)
+							{
+								GpsResetCount = 0;
+								GpsInfoData->locateMark = 0x01;//有效,东经,北纬写定
+								GpsInfoData->satelliteNum = 03;//卫星数目写入1
+								strdel(databuffer[3],'.');
+								strdel(databuffer[5],'.');
+								strdel(databuffer[7],'.');
+								speedtemp = atol(databuffer[7])*1852/1e5;//节换算单位,1节=1.852km每小时
+								GpsInfoData->speed[0] = (speedtemp>>8)&0xFF;
+								GpsInfoData->speed[1]= speedtemp&0xFF; 
+								latitude =location_handle(databuffer[3]);
+								GpsInfoData->latitude[0] = latitude>> 24;
+								GpsInfoData->latitude[1] = latitude>> 16;
+								GpsInfoData->latitude[2] = latitude>> 8;
+								GpsInfoData->latitude[3] = latitude;
+								longitude = location_handle(databuffer[5]);
+								GpsInfoData->longitude[0] = longitude>>24;
+								GpsInfoData->longitude[1] = longitude>>16;
+								GpsInfoData->longitude[2] = longitude>>8;
+								GpsInfoData->longitude[3] = longitude;
+
+								GpsInfoData->altitude[0]  = 0x03;//海拔目前无输出
+								GpsInfoData->altitude[1]  = 0xE8;
+								if(speedtemp>=50)//大于5km/h才输出方位
+								{
+									direction = atol(databuffer[8]);
+									GpsInfoData->direction[0] = direction>>8;
+									GpsInfoData->direction[1] = direction;
+								}
+								else
+								{
+									GpsInfoData->direction[0] = 0xff;
+									GpsInfoData->direction[1] = 0xff;
+								}
+								if(speedtemp>=30 && speedtemp<=1500 && BattWorkStateDelay==0x01)
+								{
+									AppDataInfo.appDataModify = true;
+									AppDataInfo.AccMileage = speedtemp/36 + AppDataInfo.AccMileage;
+									if(AppDataInfo.AccMileage>=0xfffffffe)
+									{
+										AppDataInfo.AccMileage = 0;
+									}
+
+								}
+								GpsInfoData->AccMileage[0] = AppDataInfo.AccMileage>>24;
+								GpsInfoData->AccMileage[1] = AppDataInfo.AccMileage>>16;
+								GpsInfoData->AccMileage[2] = AppDataInfo.AccMileage>>8;
+								GpsInfoData->AccMileage[3] = AppDataInfo.AccMileage;
+							}
+						}
+						osMessageQueuePut(GpsRecvHandle,&GpsInfoData,0,1000);
+					}
+					if(msg.dataPtr)
+						free(msg.dataPtr);
+					msg.dataPtr=NULL;
+				}
+				else
+				{
+					break;
+				}
+				break;
+			}
+			case PROCESS_GPS_STATE_SLEEP:
+			{
+				osDelay(100);
+				if(gProcess_app==WORK)
+				{
+					PROC_GPS_STATE_SWITCH(PROCESS_GPS_STATE_IDLE);
+				}
+				break;
+			}
+		}
     }
 }
 void AppTaskGpsInit(void *arg)
@@ -52,4 +200,28 @@ void AppTaskGpsDeInit(void *arg)
 {
     osThreadTerminate(gpsTaskHandle);
     gpsTaskHandle = NULL;
+}
+UINT32 location_handle(char *in1)
+{
+	UINT32 location_temp;
+	UINT32 location_degree;
+	UINT32 location_min;
+	location_temp = atol(in1);
+	location_degree = location_temp/(1e7);
+	location_degree = location_degree*(1e6);
+	location_min = location_temp-location_degree*10;
+	location_min = location_min/6;
+	location_temp = location_degree+location_min;
+	return location_temp;
+}
+void strdel(char * str,char c)
+{
+	char *p = str;
+	while(*str)
+	{
+		if(*str!=c)
+			*p++ = *str;
+		str++;
+	}
+	*p = '\0';
 }

+ 1 - 0
src/AppTaskMain.c

@@ -72,6 +72,7 @@ static void MainTask(void* arg)
             {
                 osDelay(100);
                 PROC_APP_STATE_SWITCH(WORK);
+                BattWorkStateDelay = battWorkState;//暂时未做延时处理
                 if(WorkTimerEnd)
                 {
                     PROC_MAIN_STATE_SWITCH(PROCESS_STATE_LISTEN);

+ 61 - 167
src/AppTaskTcp.c

@@ -332,174 +332,68 @@ static void TcpDataInfoAssembleSend()
         }
         SendBuffer=NULL;
     }
-    // if(send_counter%BattSendFreq==0)
-    // {
-    //     BattMsgtoTcpType BattToTcpInfo;
-    //     appGetSystemTimeUtcSync(&TimeStracture);
-    //     year=(TimeStracture.UTCtimer1&0xffff0000)>>16;
-    //     month=(TimeStracture.UTCtimer1&0xff00)>>8;
-    //     day=TimeStracture.UTCtimer1&0xff;
-    //     hour=(TimeStracture.UTCtimer2&0xff000000)>>24;
-    //     minute=(TimeStracture.UTCtimer2&0xff0000)>>16;
-    //     sec=(TimeStracture.UTCtimer2&0xff00)>>8;
-    //     UTCToBeijing((UTC8TimeType *)&UTC8TimeTcp,year,month,day,hour,minute,sec);
-    //     appGetSignalInfoSync(&csq,&snr,&rsnr);
-
-    //     SendBuffer = malloc(sizeof(BattMsgtoTcpType)+AppNVMData.BattCellCount*2+AppNVMData.BattTempCount);
-    //     memset(SendBuffer,0x00,(sizeof(BattMsgtoTcpType)+AppNVMData.BattCellCount*2+AppNVMData.BattTempCount));
-    //     DataLen= (UINT16)sizeof(BattToTcpInfo.battInfo);//数据长度
-    //     BattToTcpInfo.startSymbol[0] = TCP_START_SYM1;
-	//     BattToTcpInfo.startSymbol[1] = TCP_START_SYM2;
-	//     BattToTcpInfo.cmdSymbol = TCP_CMD_SYM;
-	//     BattToTcpInfo.ansSymbol = TCP_ANS_SYM;
-    //     memcpy(BattToTcpInfo.SN, AppNVMData.battSN,BATT_SN_LEN);
-    //     BattToTcpInfo.encryptMethod = TCP_ENCPT_DISABLE; //not encrypt
-	//     BattToTcpInfo.dataLength[0] = (DataLen>>8) & 0xFF;
-	//     BattToTcpInfo.dataLength[1] = DataLen & 0xFF;
-    //     BattToTcpInfo.battInfo.sendTimeUTC[0] = (UTC8TimeTcp.year - 0x07D0) & 0xFF; 	//year
-    //     BattToTcpInfo.battInfo.sendTimeUTC[1] = UTC8TimeTcp.month & 0xFF;							//month
-    //     BattToTcpInfo.battInfo.sendTimeUTC[2] = UTC8TimeTcp.day & 0xFF;									//day
-    //     BattToTcpInfo.battInfo.sendTimeUTC[3] = UTC8TimeTcp.hour & 0xFF; 						    //hour
-    //     BattToTcpInfo.battInfo.sendTimeUTC[4] = UTC8TimeTcp.minute & 0xFF;						    //mins
-    //     BattToTcpInfo.battInfo.sendTimeUTC[5] = UTC8TimeTcp.second & 0xFF;							//sec
-    //     BattToTcpInfo.battInfo.msgMark = BATTMSG;
-    //     BattToTcpInfo.battInfo.msgCollectionTimeUTC[0] = (UTC8TimeTcp.year - 0x07D0) & 0xFF; 	//year
-    //     BattToTcpInfo.battInfo.msgCollectionTimeUTC[1] = UTC8TimeTcp.month & 0xFF;							//month
-    //     BattToTcpInfo.battInfo.msgCollectionTimeUTC[2] = UTC8TimeTcp.day & 0xFF;									//day
-    //     BattToTcpInfo.battInfo.msgCollectionTimeUTC[3] = UTC8TimeTcp.hour & 0xFF; 						    //hour
-    //     BattToTcpInfo.battInfo.msgCollectionTimeUTC[4] = UTC8TimeTcp.minute & 0xFF;					    //mins
-    //     BattToTcpInfo.battInfo.msgCollectionTimeUTC[5] = UTC8TimeTcp.second & 0xFF;							//sec
-    //     BattToTcpInfo.battInfo.signalStrength = csq ;
-    //     //故障等级故障代码上传
-    //     if(osOK==osMutexAcquire(Error_Mutex, 100))
-    //     {   
-    //         UINT16 ErrorTemp=0x00;
-    //         ErrorTemp = GetErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum));
-    //         BattToTcpInfo.battInfo.errClass = 0x00;
-    //         BattToTcpInfo.battInfo.errCode[0] = ErrorTemp>>8;
-    //         BattToTcpInfo.battInfo.errCode[1] = ErrorTemp;
-    //     }
-    //     else
-    //     {
-    //         BattToTcpInfo.battInfo.errClass = 0x00;
-    //         BattToTcpInfo.battInfo.errCode[0] = 0x00;
-    //         BattToTcpInfo.battInfo.errCode[1] = 0x00;
-    //     }
-    //     osMutexRelease(Error_Mutex);
-	// 	BattToTcpInfo.battInfo.battI[0] = battI>>8;
-	// 	BattToTcpInfo.battInfo.battI[1] = battI & 0xFF;
-		
-	// 	//电池内外电压保持一致
-	// 	BattToTcpInfo.battInfo.battLinkVol[0] = battPackVol >> 8;
-	// 	BattToTcpInfo.battInfo.battLinkVol[1] = battPackVol & 0xFF;
-	// 	BattToTcpInfo.battInfo.battPackVol[0] = battPackVol >> 8;
-	// 	BattToTcpInfo.battInfo.battPackVol[1] = battPackVol & 0xFF;
-		
-	// 	BattToTcpInfo.battInfo.switchState = battMOSSwitchState;
-		
-	// 	BattToTcpInfo.battInfo.battSOC = battSOC;
-	// 	BattToTcpInfo.battInfo.battSOH = battSOH;
-    //     memcpy(SendBuffer,BattToTcpInfo,sizeof(BattToTcpInfo));
-	// 	memcpy(BattToTcpInfo.battInfo.batCellBalenceState,&battBalanceoInfo,4);
-	// 	BattToTcpInfo.battInfo.battCellNum= BATT_CELL_VOL_NUM ;
-    //     BattToTcpInfo.battInfo.battCellU = malloc(AppNVMData.BattCellCount*2);
-	// 	for(i=0;i<AppNVMData.BattCellCount;i++)
-	// 	{
-	// 		*(BattToTcpInfo.battInfo.battCellU+i*2) = (battCellU[i]>>8) & 0xFF;
-	// 		*(BattToTcpInfo.battInfo.battCellU+i*2+1) = battCellU[i] & 0xFF;
-	// 	}
-
-	// 	BattToTcpInfo.battInfo.battTempNum = AppNVMData.BattTempCount;
-
-    //     BattToTcpInfo.battInfo.battCellTemp = malloc(AppNVMData.BattTempCount);
-	// 	for(i=0; i<AppNVMData.BattTempCount; i++)
-	// 	{
-	// 		*(BattToTcpInfo.battInfo.battCellTemp+i) = battCellTemp[i];
-	// 	}
-
-	// 	BattToTcpInfo.battInfo.battWorkState = battWorkState;//电池状态,0表示静置,1表示放电,2表示充电
-	// 	BattToTcpInfo.battInfo.battHeatEnableState = battHeatEnableState;
-	// 	BattToTcpInfo.battInfo.battotherTempNum = BMS_OTHER_TEMP+NB_OTHER_TEMP_NUM;//其他温度编号(包含环境温度mos温度以及接插件温度)2021-03-24其他温度修改
-	// 	BattToTcpInfo.battInfo.battotherTemp[0] = MOSTemp;
-	// 	BattToTcpInfo.battInfo.battotherTemp[1] = packTemp;       
-    //     BattToTcpInfo.battInfo.battotherTemp[2] = fastChargeTemp;
-    //     BattToTcpInfo.battInfo.battotherTemp[3] = normalChargeTemp;
-    //     BattToTcpInfo.battInfo.battotherTemp[4] = heatTemp1;
-    //     BattToTcpInfo.battInfo.battotherTemp[5] = heatTemp2;
+    if(send_counter%GpsSendFreq==0)
+    {
+        GPSInfo *GpsRecvData=NULL;
+        osMessageQueueGet(GpsRecvHandle,&GpsRecvData,0,0);
+        GPSMsgtoTcpType GpsToTcpInfo;
 
-    //     BattToTcpInfo.CRC = bcc_chk((UINT8 *)&BattToTcpInfo, sizeof(BattMsgtoTcpType)-1 );
-    //     if(UartRecvFlag)
-    //     {
-    //         len = tcpipConnectionSend(socContext.id, (UINT8 *)&BattToTcpInfo, sizeof(BattToTcpInfo), 0, 0, 0);
-    //         if(len>0)
-    //         {
-    //             TcpSendLen = 0x02 | TcpSendLen;
-    //         }
-    //         else
-    //         {
-    //             TcpSendLen = 0xFD & TcpSendLen;
-    //             sendQueueMsg(QMSG_ID_NW_IP_SUSPEND, 0);
-    //         }
-    //     }
-    // }
-    // if(send_counter%GpsSendFreq==0)
-    // {
-    //     GPSMsgtoTcpType GpsToTcpInfo;
-    //     osStatus_t result = osMutexAcquire(GpsMutex, osWaitForever);
-    //     appGetSystemTimeUtcSync(&TimeStracture);
-    //     year=(TimeStracture.UTCtimer1&0xffff0000)>>16;
-    //     month=(TimeStracture.UTCtimer1&0xff00)>>8;
-    //     day=TimeStracture.UTCtimer1&0xff;
-    //     hour=(TimeStracture.UTCtimer2&0xff000000)>>24;
-    //     minute=(TimeStracture.UTCtimer2&0xff0000)>>16;
-    //     sec=(TimeStracture.UTCtimer2&0xff00)>>8;
-    //     UTCToBeijing((UTC8TimeType *)&UTC8TimeTcp,year,month,day,hour,minute,sec);
-    //     DataLen= (UINT16)sizeof(GpsToTcpInfo.gpsInfo);
-    //     GpsToTcpInfo.startSymbol[0] = TCP_START_SYM1;
-	//     GpsToTcpInfo.startSymbol[1] = TCP_START_SYM2;
-	//     GpsToTcpInfo.cmdSymbol = TCP_CMD_SYM;
-	//     GpsToTcpInfo.ansSymbol = TCP_ANS_SYM;
-    //     memcpy(GpsToTcpInfo.SN, AppNVMData.battSN,BATT_SN_LEN);
-    //     GpsToTcpInfo.encryptMethod = TCP_ENCPT_DISABLE; //not encrypt
-	//     GpsToTcpInfo.dataLength[0] = (DataLen>>8) & 0xFF;
-	//     GpsToTcpInfo.dataLength[1] = DataLen & 0xFF;
-    //     GpsToTcpInfo.gpsInfo.sendTimeUTC[0] = (UTC8TimeTcp.year - 0x07D0) & 0xFF; 	//year
-    //     GpsToTcpInfo.gpsInfo.sendTimeUTC[1] = UTC8TimeTcp.month & 0xFF;						//month
-    //     GpsToTcpInfo.gpsInfo.sendTimeUTC[2] = UTC8TimeTcp.day & 0xFF;										//day
-    //     GpsToTcpInfo.gpsInfo.sendTimeUTC[3] = UTC8TimeTcp.hour & 0xFF; 						    //hour
-    //     GpsToTcpInfo.gpsInfo.sendTimeUTC[4] = UTC8TimeTcp.minute & 0xFF;						    //mins
-    //     GpsToTcpInfo.gpsInfo.sendTimeUTC[5] = UTC8TimeTcp.second & 0xFF;							//sec
-    //     GpsToTcpInfo.gpsInfo.msgMark = GPSMSG;
-    //     GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[0] = (UTC8TimeTcp.year - 0x07D0) & 0xFF; 	//year
-    //     GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[1] = UTC8TimeTcp.month & 0xFF;								//month
-    //     GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[2] = UTC8TimeTcp.day & 0xFF;									//day
-    //     GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[3] = UTC8TimeTcp.hour & 0xFF; 						    //hour
-    //     GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[4] = UTC8TimeTcp.minute & 0xFF;						    //mins
-    //     GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[5] = UTC8TimeTcp.second & 0xFF;
-    //     memcpy((UINT8 *)&GpsToTcpInfo.gpsInfo.locateMark, GpsData,sizeof(GpsData));
-    //     GpsToTcpInfo.CRC = bcc_chk((UINT8 *)&GpsToTcpInfo, sizeof(GPSMsgtoTcpType)-1 );
-    //     osMutexRelease(GpsMutex);
-    //     //if(GpsToTcpInfo.gpsInfo.locateMark==0x01)
-    //     if(1)
-    //     {
-    //         len = tcpipConnectionSend(socContext.id, (UINT8 *)&GpsToTcpInfo, sizeof(GpsToTcpInfo), 0, 0, 0);
-    //         if(len>0)
-    //         {
-    //             TcpSendLen = 0x04 | TcpSendLen;
-    //         }
-    //         else
-    //         {
-    //             TcpSendLen = 0xFB & TcpSendLen;
-    //             sendQueueMsg(QMSG_ID_NW_IP_SUSPEND, 0);
-    //         }
-    //     }
-    //     #ifdef USING_PRINTF1
-    //         printf("GpsMsg:\n");
-    //         UINT8* p = (UINT8 *)&GpsToTcpInfo;  
-    //         for(int i =0 ;i<sizeof(GpsToTcpInfo);i++)
-    //             printf("%x ",*(p+i));
-    //     #endif
-    // }
+        appGetSystemTimeUtcSync(&TimeStracture);
+        year=(TimeStracture.UTCtimer1&0xffff0000)>>16;
+        month=(TimeStracture.UTCtimer1&0xff00)>>8;
+        day=TimeStracture.UTCtimer1&0xff;
+        hour=(TimeStracture.UTCtimer2&0xff000000)>>24;
+        minute=(TimeStracture.UTCtimer2&0xff0000)>>16;
+        sec=(TimeStracture.UTCtimer2&0xff00)>>8;
+        UTCToBeijing((UTC8TimeType *)&UTC8TimeTcp,year,month,day,hour,minute,sec);
+        DataLen= (UINT16)sizeof(GpsToTcpInfo.gpsInfo);
+        GpsToTcpInfo.startSymbol[0] = TCP_START_SYM1;
+	    GpsToTcpInfo.startSymbol[1] = TCP_START_SYM2;
+	    GpsToTcpInfo.cmdSymbol = TCP_CMD_SYM;
+	    GpsToTcpInfo.ansSymbol = TCP_ANS_SYM;
+        memcpy(GpsToTcpInfo.SN, AppNVMData.battSN,BATT_SN_LEN);
+        GpsToTcpInfo.encryptMethod = TCP_ENCPT_DISABLE; //not encrypt
+	    GpsToTcpInfo.dataLength[0] = (DataLen>>8) & 0xFF;
+	    GpsToTcpInfo.dataLength[1] = DataLen & 0xFF;
+        GpsToTcpInfo.gpsInfo.sendTimeUTC[0] = (UTC8TimeTcp.year - 0x07D0) & 0xFF; 	//year
+        GpsToTcpInfo.gpsInfo.sendTimeUTC[1] = UTC8TimeTcp.month & 0xFF;						//month
+        GpsToTcpInfo.gpsInfo.sendTimeUTC[2] = UTC8TimeTcp.day & 0xFF;										//day
+        GpsToTcpInfo.gpsInfo.sendTimeUTC[3] = UTC8TimeTcp.hour & 0xFF; 						    //hour
+        GpsToTcpInfo.gpsInfo.sendTimeUTC[4] = UTC8TimeTcp.minute & 0xFF;						    //mins
+        GpsToTcpInfo.gpsInfo.sendTimeUTC[5] = UTC8TimeTcp.second & 0xFF;							//sec
+        GpsToTcpInfo.gpsInfo.msgMark = GPSMSG;
+        GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[0] = (UTC8TimeTcp.year - 0x07D0) & 0xFF; 	//year
+        GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[1] = UTC8TimeTcp.month & 0xFF;								//month
+        GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[2] = UTC8TimeTcp.day & 0xFF;									//day
+        GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[3] = UTC8TimeTcp.hour & 0xFF; 						    //hour
+        GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[4] = UTC8TimeTcp.minute & 0xFF;						    //mins
+        GpsToTcpInfo.gpsInfo.msgCollectionTimeUTC[5] = UTC8TimeTcp.second & 0xFF;
+        memcpy((UINT8 *)&GpsToTcpInfo.gpsInfo.locateMark, GpsRecvData,sizeof(GPSInfo));
+        GpsToTcpInfo.CRC = bcc_chk((UINT8 *)&GpsToTcpInfo, sizeof(GPSMsgtoTcpType)-1 );
+        if(GpsRecvData!=NULL)
+            free(GpsRecvData);
+        GpsRecvData=NULL;
+        //if(GpsToTcpInfo.gpsInfo.locateMark==0x01)
+        if(1)
+        {
+            len = tcpipConnectionSend(socContext.id, (UINT8 *)&GpsToTcpInfo, sizeof(GpsToTcpInfo), 0, 0, 0);
+            if(len>0)
+            {
+                TcpSendLen = 0x04 | TcpSendLen;
+            }
+            else
+            {
+                TcpSendLen = 0xFB & TcpSendLen;
+                sendQueueMsg(QMSG_ID_NW_IP_SUSPEND, 0);
+            }
+        }
+        #ifdef USING_PRINTF
+            printf("GpsMsg:\n");
+            UINT8* p = (UINT8 *)&GpsToTcpInfo;  
+            for(int i =0 ;i<sizeof(GpsToTcpInfo);i++)
+                printf("%x ",*(p+i));
+        #endif
+    }
     if(send_counter==1)//版本信息上报 上报频率为每次重启后上报或者每次更新后上报或者每天上报一次均可
     {
         VersionMsgtoTcpType VerMsgToTcpInfo;

+ 2 - 1
src/app.c

@@ -12,7 +12,8 @@ void appInit(void *arg)
     AppTaskMainInit(arg);
     AppTaskTcpInit(arg);
     AppTaskControlInit(arg);
-    //AppTaskGpsInit(arg);
+    AdcTaskInit();
+    AppTaskGpsInit(arg);
     AppTaskUartInit(arg);
     //AppTaskCanInit(arg);
 }