Browse Source

金茂科易测试

CHENJIE-PC\QiXiang_CHENJIE 3 years ago
parent
commit
5a21f37079
10 changed files with 3797 additions and 1651 deletions
  1. 2 25
      ARMCC/Makefile
  2. 4 15
      inc/AppFunc.h
  3. 139 56
      inc/AppSignal.h
  4. 3321 1426
      src/AppFunc.c
  5. 285 60
      src/AppSignal.c
  6. 19 45
      src/AppTaskCan.c
  7. 1 1
      src/AppTaskGps.c
  8. 19 16
      src/AppTaskUart.c
  9. 3 3
      src/app.c
  10. 4 4
      src/hal_module_adapter.c

+ 2 - 25
ARMCC/Makefile

@@ -25,31 +25,8 @@ PLAT/project/$(TARGET)/apps/qx_app/src/AppTaskTcp.o \
 PLAT/project/$(TARGET)/apps/qx_app/src/AppTaskControl.o \
 PLAT/project/$(TARGET)/apps/qx_app/src/AppTaskUart.o \
 PLAT/project/$(TARGET)/apps/qx_app/src/AppTaskCan.o \
-PLAT/project/$(TARGET)/apps/qx_app/src/AppTaskGps.o \
-PLAT/project/$(TARGET)/apps/qx_app/src/BCU.o \
-PLAT/project/$(TARGET)/apps/qx_app/src/SOH.o \
-PLAT/project/$(TARGET)/apps/qx_app/src/SOC.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/BLC.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/div_nde_s32_floor.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/look1_is16lu16n16tu16_binlcase.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/look1_iu16lu16n16tu16_binlcase.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/LookUp_U16_U16.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/mul_s32_loSR_sat.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/mul_s32_sat.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/mul_ssu32_sat.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/mul_us32_sat.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/mul_wide_s32.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/mul_wide_u32.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/mul_wide_su32.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/look1_binlxpw.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/INTERPOLATE_U16_U16.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/mul_u32_hiSR.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/div_repeat_s16s32_floor.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/BINARYSEARCH_U16.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/div_nzp_repeat_u32.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/div_nzp_repeat_u32_ceiling.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/const_params.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/mul_u32_hiSR_near.o
+PLAT/project/$(TARGET)/apps/qx_app/src/AppTaskGps.o
+
 include $(TOP)/PLAT/tools/scripts/Makefile.rules 
 #enable wdt
 CFLAGS += -DWDT_FEATURE_ENABLE=1

+ 4 - 15
inc/AppFunc.h

@@ -25,32 +25,21 @@ typedef struct _Fota_Type
     UINT8   Fota_CRC ;
 
 }Fota_Type;
-void BattWorkDelayFunc(UINT8 battWorkCurrentState);
 UINT8 bcc_chk(UINT8* data, UINT16 length);
 void LEDDisplay(void);
-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);
-BOOL BattHeaterSwitch(UINT8* heaterSwitch,UINT8 DeltaTempRange,UINT8 OpenHeaterTemp,UINT8 CloseHeaterTemp);
 void SaveAppData(void);
 void LoadAppData(void);
 void SaveAppConfig(void);
 void LoadAppConfig(void);
 static void setDefaultAppConfigData(void);
 static void setDefaultAppDataInfo(void);
-void CanMsgTx1000ms(void);
-void UDS_Service(CAN_Msg_Type* CanRxMsg);
-void CANEncodeFunction(UINT32 ID,UINT8* msgData);
-void relayControlFunc(UINT8 RingTimes,float DutyRatio);
-BOOL UDSClearFotaDownloadRegion();
-BOOL UDSAskforDownLoadData();
-UINT8 UDSNegtiveAnswer(UINT8 answerLen,UINT8 messageIndex, UINT32 negCode);
-UINT8 UDSPositiveAnswer(UINT8 answerLen,UINT8 messageIndex,UINT32 posCode);
-
-UINT16  encryptionAlgorithm (UINT16 plainText);
 
 void Fota_Func(UINT8 *DataPtr,INT32 connectId);
 static UINT8 bcc_chk_fota(UINT8* data, UINT8 length);
 static UINT8 Fota_crc_chk(UINT8* data,UINT8 length);
+void DecodeFunction(UINT32 ID,UINT8* rawData);
+UINT8 canCOMInTableIndexFind(UINT32 canID);
+
+

+ 139 - 56
inc/AppSignal.h

@@ -14,75 +14,23 @@
 #include "bsp_custom.h"
 //declear the bool vars
 extern volatile BOOL NB_Fota_update_flag;
-extern volatile BOOL BMS_Fota_update_flag;
-
-extern BOOL downloadReady;
 
 //extern declear the UINT8 vars
-extern UINT8	battCellTemp[8];
-extern UINT8	MOSTemp;
-extern UINT8	packTemp;
-extern UINT8	fastChargeTemp;
-extern UINT8	normalChargeTemp;
-extern UINT8	heatTemp1;
-extern UINT8	heatTemp2;
-extern UINT8	nbReservedTemp1;
-extern UINT8	nbReservedTemp2;
-extern UINT8	maxCellTemp;
-extern UINT8	minCellTemp;
-extern UINT8	battSOC;
-extern UINT8	battSOH;
-extern UINT8	battWorkState;
-extern UINT8	bmsSwVersion;
-extern UINT8	bmsHwVersion;
-extern UINT8	battMOSSwitchState;
-extern UINT8	battHeatEnableState;
-extern UINT8	reservedSignal1;
-extern UINT8	reservedSignal2;
-extern UINT8	reservedSignal3;
-extern UINT8	reservedSignal4;
-extern UINT8	reservedSignal5;
-extern UINT8	reservedSignal6;
-extern UINT8	reservedSignal7;
-extern UINT8	reservedSignal8;
-
-extern UINT8    Lockstatus;
+
 extern UINT8    TcpErrorcount;
 extern UINT8    TCPWorkState;
-extern UINT8    TcpSendLen;
-extern UINT8    CanMsgEnble;
-extern UINT8 	UDSSwitch;
-extern UINT8 	UDSSwitch ;
-extern UINT8 	PosFlag ;     
-extern UINT8    UartRecvFlag ;
-extern UINT8    UartCmdRecvFlag;
-extern UINT8	UDSService[2];           //uds 服务
-extern UINT8	UDSSubService[2];       // uds 子服务
-extern UINT8	UDSSubServiceActionCode[2];  // uds 子服务状态
+extern UINT8    TcpSendLen; 
 extern UINT8    GpsFlag;
-extern UINT8    BuzzerControl;
-extern UINT8    BattWorkStateDelay;
-
 extern UINT8   PadInterrupt ;
+extern UINT8 	Lockstatus;
+
 
 //declear the UINT16 vars
-extern UINT16	battCellU[28];
-extern UINT16	minCellVol;
-extern UINT16	maxCellVol;
-extern UINT16   avrgCellVol;
-extern UINT16	battPackVol;
-extern UINT16	battI;
 extern UINT16	nbHwVersion;
 extern UINT16   ErrorNum[5];
-extern UINT16  updateDifferDataPackageCounter;
-
 
 //declear the UINT32 vars
-extern UINT32	battWarningState;
-extern UINT32	battProtectState;
 extern UINT32	nbSwVersion ;
-extern UINT32	battBalanceoInfo;
-extern UINT32   Battdesigncap;
 extern volatile UINT32  TimeCounter;
 
 
@@ -95,4 +43,139 @@ extern AppDataBody AppDataInfo;
 extern AppSocketConnectionContext socContext;  //网络连接状态
 extern process_app 		    gProcess_app;
 
+extern	UINT32	COMInTable[133];
+extern UINT8 canRxShortError[133];
+extern UINT8 canRxLongError[133];
+extern UINT8 canRxErrorCounter[133];
+extern UINT8 canRxFlag[133];
+
+//declear the UINT8 vars
+extern	UINT8	bmsStatus;
+extern	UINT8	bmsErrClass;
+extern	UINT8	chrgConctStatus;
+extern	UINT8	highVolPwrDwnReq;
+extern	UINT8	chrgStatus;
+extern	UINT8	bmsErrNum;
+extern	UINT8	bmsLife;
+extern	UINT8	battSoc;
+extern	UINT8	maxCellTemp;
+extern	UINT8	minCellTemp;
+extern	UINT8	avgCellTemp;
+extern	UINT8	maxVolSubsysCode;
+extern	UINT8	minVolSubsysCode;
+extern	UINT8	maxTempSubsysCode;
+extern	UINT8	maxTempCellCode;
+extern	UINT8	minTempSubsysCode;
+extern	UINT8	minTempCellCode;
+extern	UINT8	numOfChrgableSubsys;
+extern	UINT8	lengthOfChrgableSysCode;
+extern	UINT8	chrgableSysCode;
+extern	UINT8	chrgableSubsysCode;
+extern	UINT8	numOfCellTemp;
+extern	UINT8	numOfBattErr;
+extern	UINT8	battCellTemp[64];
+extern	UINT8	mainPosRlyStatus;
+extern	UINT8	preRlyStatus;
+extern	UINT8	mainNegRlyStatus;
+extern	UINT8	thrRlyStatus;
+extern	UINT8	ptc1RlyStatus;
+extern	UINT8	airCondRlyStatus;
+extern	UINT8	dcChrg1PosRlyStatus;
+extern	UINT8	dcChrg1NegRlyStatus;
+extern	UINT8	dcChrg2PosRlyStatus;
+extern	UINT8	dcChrg2NegRlyStatus;
+extern	UINT8	heatPosRlyStatus;
+extern	UINT8	heatNegRlyStatus;
+extern	UINT8	coolRlyStatus;
+extern	UINT8	ptc2RlyStatus;
+extern	UINT8	mainPosRlyErrStatus;
+extern	UINT8	preRlyErrStatus;
+extern	UINT8	mainNegRlyErrStatus;
+extern	UINT8	thrRlyErrStatus;
+extern	UINT8	ptc1RlyErrStatus;
+extern	UINT8	airCondRlyErrStatus;
+extern	UINT8	dcChrg1PosRlyErrStatus;
+extern	UINT8	dcChrg1NegRlyErrStatus;
+extern	UINT8	dcChrg2PosRlyErrStatus;
+extern	UINT8	dcChrg2NegRlyErrStatus;
+extern	UINT8	heatPosRlyErrStatus;
+extern	UINT8	heatNegRlyErrStatus;
+extern	UINT8	coolRlyErrStatus;
+extern	UINT8	ptc2RlyErrStatus;
+extern	UINT8	battSOH;
+extern	UINT8	SN[24];
+extern	UINT8	bmsHVOn;
+extern	UINT8	acRelayStatus;
+extern	UINT8	ptcRelayStatus;
+extern	UINT8	mainRelayStatus;
+extern	UINT8	preRelayStatus;
+extern	UINT8	ptc2RelayStatus;
+extern	UINT8	acRelayErrorStatus;
+extern	UINT8	ptcRelayErrorStatus;
+extern	UINT8	mainRelayErrorStatus;
+extern	UINT8	preRelayErrorStatus;
+extern	UINT8	hvLockErrorStatus;
+extern	UINT8	ptc2RelayErrorStatus;
+extern	UINT8	ebcStatus;
+extern	UINT8	ebcAskHVOn;
+extern	UINT8	ebcAskHVOff;
+extern	UINT8	retainLockSignal;
+extern	UINT8	dischargeLockSignal;
+extern	UINT8	chargeLockSignal;
+extern	UINT8	errorClass;
+extern	UINT8	errorCode1;
+extern	UINT8	errorCode2;
+extern	UINT8	chargeFlag;
+extern	UINT8	exchangeBattAirPressure;
+extern	UINT8	lifeSignal;
+extern	UINT8	vehicleStatus;
+extern	UINT8	currentGearPosition;
+extern	UINT8	parkingBreakStatus;
+extern	UINT8	breakingStatus;
+extern	UINT8	VIN[17];
+extern	UINT8	frontBreakingPressure;
+extern	UINT8	backBreakingPressure;
+extern	UINT8	frontBreakingPressureErrorStatus;
+extern	UINT8	backBreakingPressureErrorStatus;
+extern	UINT8	dcdcErrorClass;
+extern	UINT8	dcdcWorkStatus;
+extern	UINT8	mainElectricityErrorClass;
+extern	UINT8	pumpWorkStatus;
+extern	UINT8	elecAirCompressorErrorStatus;
+extern	UINT8	elecAirCompressorWrokStatus;
+
+
+
+//declear the UINT16 vars
+extern	UINT16	maxChrgCurrAllowed;
+extern	UINT16	maxDischrgCurrAllowed;
+extern	UINT16	packTotalVol;
+extern	UINT16	packTotalCurr;
+extern	UINT16	insulationR;
+extern	UINT16	maxCellVol;
+extern	UINT16	minCellVol;
+extern	UINT16	maxVolCellCode;
+extern	UINT16	minVoCelllCode;
+extern	UINT16	numOfCells;
+extern	UINT16	battCellU[384];
+extern	UINT16	vcuDCVol;
+
+
+
+//declear the UINT32 vars
+extern	UINT32	accChrgAh;
+extern	UINT32	accDischrgAh;
+extern	UINT32	accChrgkWh;
+extern	UINT32	accDischrgkWh;
+extern	UINT32	accRecvryChrgAh;
+extern	UINT32	accRecvryChrgkWh;
+extern	UINT32	accStationChrgAh;
+extern	UINT32	accStationChrgkWh;
+extern	UINT32	accGunChrgAh;
+extern	UINT32	accGunChrgkWh;
+extern	UINT32	sglChrgAh;
+extern	UINT32	sglChrgkWh;
+extern	UINT32	ODB;
+
+
 

+ 3321 - 1426
src/AppFunc.c

@@ -9,135 +9,12 @@
 #include "AppFunc.h"
 #include "numeric.h"
 #include "hal_module_adapter.h"
-void BattWorkDelayFunc(UINT8 battWorkCurrentState)
-{
-	static UINT16 workDelayCounter = 0;
-	if(battWorkCurrentState==BATT_IDLE_SYM&&BattWorkStateDelay==BATT_DISCHARGE_SYM)//从放电转静置 10s延时
-	{
-		workDelayCounter++;
-		if(workDelayCounter>=10)
-		{
-			workDelayCounter==0;
-			BattWorkStateDelay = battWorkCurrentState;
-		}
-	}
-	else if(battWorkCurrentState==BATT_IDLE_SYM&&BattWorkStateDelay==BATT_CHARGE_SYM)//从充电转静置1min延时
-	{
-		workDelayCounter++;
-		if(workDelayCounter>=60)
-		{
-			workDelayCounter==0;
-			BattWorkStateDelay = battWorkCurrentState;
-		}
-	}
-	else if(battWorkCurrentState==BATT_DISCHARGE_SYM)//从 充电或者静置 转放电 3s延时
-	{
-		workDelayCounter++;
-		if(workDelayCounter>=3)
-		{
-			workDelayCounter==0;
-			BattWorkStateDelay = battWorkCurrentState;
-		}
-	}
-	else if(battWorkCurrentState==BATT_CHARGE_SYM)//从 放电或者静置 转充电 1min延时
-	{
-		workDelayCounter++;
-		if(workDelayCounter>=60)
-		{
-			workDelayCounter==0;
-			BattWorkStateDelay = battWorkCurrentState;
-		}
-	}
-	else
-	{
-		BattWorkStateDelay = battWorkCurrentState;
-		workDelayCounter = 0;
-	}
-	return;
-}
 
-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, UINT16 length)
+
+UINT8 bcc_chk(UINT8* data, UINT8 length)
 {
     UINT8 bcc_chk_return = 0x00;
-    UINT16 count = 0;
+    UINT8 count = 0;
     while (count<length)
     {
         bcc_chk_return^=data[count];
@@ -145,68 +22,6 @@ UINT8 bcc_chk(UINT8* data, UINT16 length)
     }
     return  bcc_chk_return;
 }
-/***********************************************************************************************************************
- * 加热判断函数
- * 输入:标定参数值
- * 输出:加热状态
- * 处理:根据标定参数值以及当前状态,判断是否进行加热,加热策略的更改在此函数
-***********************************************************************************************************************/
-BOOL BattHeaterSwitch(UINT8* heaterSwitch,UINT8 DeltaTempRange,UINT8 OpenHeaterTemp,UINT8 CloseHeaterTemp)
-{
-	BOOL isNeedtoSwitch = FALSE;
-	
-	UINT8 currentSwitchState = 0;
-	//get the current switch state and the cell temp
-	currentSwitchState = battHeatEnableState&0x01;
-
-	if(currentSwitchState==0)  //当前状态为关闭,判断是否应该开启
-	{
-		if(minCellTemp<OpenHeaterTemp+40 && minCellTemp>=-29+40 && maxCellTemp<OpenHeaterTemp+DeltaTempRange+40)//温度偏移为40 
-		{
-			*heaterSwitch = 1;
-			isNeedtoSwitch = true;
-		}
-	}
-	else        //当前状态为开启,判断是否应该关闭
-	{
-		if(minCellTemp>=CloseHeaterTemp+40 || maxCellTemp>=CloseHeaterTemp+DeltaTempRange+40)
-		{
-			*heaterSwitch = 0;
-			isNeedtoSwitch = true;
-		}
-	}
-	return isNeedtoSwitch;
-}
-/***********************************************************************************************************************
- * 蜂鸣器控制函数
- * 输入:鸣响时长和鸣响占比
- * 输出:LED控制
- * 处理:根据不同状态进行LED显示
-***********************************************************************************************************************/
-void relayControlFunc(UINT8 RingTimes,float DutyRatio)
-{
-	static UINT8  BuzzerTimer = 0;
-	UINT8  BuzzerPeriod = 10;//1000ms
-	UINT8 timerCount=0;
-	BuzzerTimer++;
-	while(timerCount<RingTimes)
-	{
-		if(BuzzerTimer<(UINT8)(BuzzerPeriod*DutyRatio))
-		{
-			relayControl(TRUE);
-		}
-		else if(BuzzerTimer>=(UINT8)(BuzzerPeriod*DutyRatio) && BuzzerTimer<BuzzerPeriod)
-		{
-			relayControl(FALSE);
-		}
-		else
-		{
-			relayControl(FALSE);
-			BuzzerTimer = 0;
-		}
-		timerCount++;
-	}
-}
 /***********************************************************************************************************************
  * LED控制函数
  * 输入:运行状态
@@ -224,7 +39,7 @@ void LEDDisplay(void)
 	LightTimer++;
 	ErrorLightTimer++;
 	#ifdef USING_PRINTF1
-		printf("[%d]-%d-%d-%d\n",__LINE__,LightTimer,ErrorLightTimer,battSOC);
+		printf("[%d]-%d-%d-%d\n",__LINE__,LightTimer,ErrorLightTimer,battSoc);
 	#endif	
 	if(AppDataInfo.BattLock==TRUE)//电池整处于锁定状态
 	{
@@ -263,360 +78,69 @@ void LEDDisplay(void)
 			currentState = AppDataInfo.BattLock;
 			LightTimer = 0;
 		}
-		else if(UartRecvFlag==0)	//电池未收到UART信息
+		
+
+			
+		if(battSoc<=10)
 		{
-			if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio)) 
-			{			
+			if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio))
+			{
 				NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-				FaultDisplay(LED_TURN_ON);
+				NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
 			}
 			else if(LightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && LightTimer<LEDFlashPeriod)
 			{
 				NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
-				FaultDisplay(LED_TURN_OFF);
-				
+				NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
 			}
 			else
 			{
 				NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
-				FaultDisplay(LED_TURN_OFF);
-				LightTimer = 0;			
-			}
-			return;
-		}
-		else if(UartRecvFlag==1)				//电池接收到UART信息,且正确运行
+				NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+				LightTimer = 0;
+			}				
+		}	
+		else if(battSoc>10&&battSoc<=25)
 		{
-			if(battWorkState  == 0x02)  //充电模式下,如果只有“SOC低故障”,那么就不显示故障灯   zhengchao20210713 add
-			{
-				if((((battWarningState >> 10) & 0x01) == 0x01) &&  ((battWarningState & 0xFFFFFBFF) == 0x00))
-					return;
-			}
-			if(battWarningState != 0)			//电池存在故障
-			{
-				if(ErrorLightTimer<(UINT8)(LEDFlashPeriod*DutyRatio)) 
-				{	
-					
-					FaultDisplay(LED_TURN_ON);
-					
-				}
-				else if(ErrorLightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && ErrorLightTimer<LEDFlashPeriod)
-				{
-					
-					FaultDisplay(LED_TURN_OFF);
-					
-				}
-				else
-				{
-					
-					FaultDisplay(LED_TURN_OFF);
-					ErrorLightTimer = 0;			
-				}
-			}
-			else
-			{
-				FaultDisplay(LED_TURN_OFF);
-				ErrorLightTimer = 0;
-			}
-
-			if(battWorkState == 0||battWorkState == 1)  //静置或放电状态
-			{
-				if(battSOC<=10)
-				{
-					if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio))
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-					}
-					else if(LightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && LightTimer<LEDFlashPeriod)
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-					}
-					else
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-						LightTimer = 0;
-					}				
-				}	
-				else if(battSOC>10&&battSOC<=25)
-				{
-					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-					NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
-					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
-					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-					LightTimer = 0;
-				}
-				else if(battSOC>25&&battSOC<=50)
-				{
-					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
-					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
-					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-					LightTimer = 0;
-				}
-				else if(battSOC>50&&battSOC<=75)
-				{
-					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
-					NetSocDisplay(LED_SOC_2,LED_TURN_ON);
-					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-					LightTimer = 0;
-				}
-				else if(battSOC>75&&battSOC<=100)
-				{
-					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
-					NetSocDisplay(LED_SOC_2,LED_TURN_ON);
-					NetSocDisplay(LED_SOC_3,LED_TURN_ON);
-					LightTimer = 0;
-				}
-			}
-			else if(battWorkState == 2)
-			{
-				if(battSOC<=25)
-				{
-					if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio))
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-					}
-					else if(LightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && LightTimer<LEDFlashPeriod)
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-					}
-					else
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-						LightTimer = 0;
-					}			
-				}	
-				else if(battSOC>25&&battSOC<=50)
-				{
-					if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio))
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_1,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-					}
-					else if(LightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && LightTimer<LEDFlashPeriod)
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-					}
-					else
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);
-						LightTimer = 0;
-					}
-				}
-				else if(battSOC>50&&battSOC<=75)
-				{
-					if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio))
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_1,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_2,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-					}
-					else if(LightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && LightTimer<LEDFlashPeriod)
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_1,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-					}
-					else
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_1,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
-						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);
-						LightTimer = 0;
-					}
-
-				}
-				else if(battSOC>75&&battSOC<=97)
-				{
-					if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio))
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_1,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_2,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_3,LED_TURN_ON);	
-					}
-					else if(LightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && LightTimer<LEDFlashPeriod)
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_1,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_2,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-					}
-					else
-					{
-						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_1,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_2,LED_TURN_ON);
-						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
-						LightTimer = 0;
-					}
-				}
-				else if(battSOC>97&&battSOC<=100)
-				{
-					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
-					NetSocDisplay(LED_SOC_2,LED_TURN_ON);
-					NetSocDisplay(LED_SOC_3,LED_TURN_ON);	
-				}		
-			}
-		}
-	}
-}
-/***********************************************************************************************************************
- * Uart数据解码函数
- * 输入:数据指针
- * 输出:状态
- * 处理:将uart数据进行解码,按照协议进行解码
-***********************************************************************************************************************/
-BOOL uartBattInfoDecode(UINT8* dataPtr)
-{
-	UINT8 	i = 0,temp=0;
-	INT8 	BattCurrentNegFlag = 1;
-    UINT8 	TEMP_NUM = 0;
-    UINT16 	Batt_current;
-	UINT8 	BATT_CELL_VOL_NUM = 0,BATT_TEMP_NUM = 0;
-	UINT32  Battsumvoltage = 0;
-	BATT_CELL_VOL_NUM =  (dataPtr[(0x00)*2] << 8) | (dataPtr[(0x00)*2 + 1]);
-	if(BATT_CELL_VOL_NUM==0)
-	{
-		return FALSE;
-	}
-	BATT_TEMP_NUM = ((dataPtr[(0x01)*2] << 8) | (dataPtr[(0x01)*2 + 1]))-BMS_OTHER_TEMP;
-	if(AppNVMData.BattCellCount!=BATT_CELL_VOL_NUM || AppNVMData.BattTempCount!=BATT_TEMP_NUM )
-	{
-		AppNVMData.appDataModify = TRUE;
-		AppNVMData.BattCellCount = BATT_CELL_VOL_NUM;
-		AppNVMData.BattTempCount = BATT_TEMP_NUM;
-	}
-    for(i=0;i<BATT_CELL_VOL_NUM;i++)
-    {
-		battCellU[i] = (dataPtr[(0x02+i)*2] << 8) | dataPtr[(0x02+i)*2 + 1];
-		Battsumvoltage = Battsumvoltage + battCellU[i];
-    }
-    battWorkState = (dataPtr[(0x03+BATT_CELL_VOL_NUM)*2+1])&0x03;//电池状态(原始数据),0表示静置,1表示放电,2表示充电
-    TEMP_NUM = BATT_TEMP_NUM + BMS_OTHER_TEMP;
-    for(i=0; i<BATT_TEMP_NUM; i++)
-    {
-	    battCellTemp[i] = dataPtr[(0x06+BATT_CELL_VOL_NUM+i)*2+1];
-    }
-	avrgCellVol = Battsumvoltage/BATT_CELL_VOL_NUM;
-    MOSTemp = dataPtr[(0x06+BATT_CELL_VOL_NUM+BATT_TEMP_NUM)*2+1];
-   	packTemp = dataPtr[(0x06+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+1)*2+1];
-    
-    Batt_current = (dataPtr[(0x02+BATT_CELL_VOL_NUM)*2]<<8)|(dataPtr[(0x02+BATT_CELL_VOL_NUM)*2+1]);
-    //原始数据:充电为负,放电为正
-	if(battWorkState == 0x02) //充电过程
-	{
-		if(Batt_current >0x8000)// 数据为负
-		{			
-			//求补码,结果为负
-			Batt_current = (UINT16)((UINT16)(~(Batt_current))+1);
-        	Batt_current = Batt_current/10;
-			BattCurrentNegFlag = -1;
+			NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+			NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+			NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+			NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+			LightTimer = 0;
 		}
-		else
+		else if(battSoc>25&&battSoc<=50)
 		{
-			//源码,结果为负
-			Batt_current = Batt_current/10;
-			BattCurrentNegFlag = -1;
+			NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+			NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+			NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+			NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+			LightTimer = 0;
 		}
-	}
-	else //放电过程
-	{
-		if(Batt_current >0x8000)// 数据为负
+		else if(battSoc>50&&battSoc<=75)
 		{
-			//求补码,结果为正
-			Batt_current = (UINT16)((UINT16)(~(Batt_current))+1);
-        	Batt_current = Batt_current/10;
-			BattCurrentNegFlag = 1;
+			NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+			NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+			NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+			NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+			LightTimer = 0;
 		}
-		else
+		else if(battSoc>75&&battSoc<=100)
 		{
-			//源码,结果为正
-			Batt_current = Batt_current/10;
-			BattCurrentNegFlag = 1;
-		}
-	}
-
-	battI = Batt_current*BattCurrentNegFlag + 0x2710;
-    //bit0 ~ bit31 represent cell0 ~ cell31
-    battBalanceoInfo  = dataPtr[(0x06+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1] | (dataPtr[(0x06+BATT_CELL_VOL_NUM+TEMP_NUM)*2] <<8) + (dataPtr[(0x07+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]<<16) | (dataPtr[(0x07+BATT_CELL_VOL_NUM+TEMP_NUM)*2] <<24);
-
-    bmsHwVersion = dataPtr[(0x08+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]; 
-    bmsSwVersion = dataPtr[(0x08+BATT_CELL_VOL_NUM+TEMP_NUM)*2];    
-
-	if(AppNVMData.BmsHwVersion!=bmsHwVersion || AppNVMData.BmsSwVersion!=bmsSwVersion )
-	{
-		AppNVMData.appDataModify = TRUE;
-		AppNVMData.BmsHwVersion = bmsHwVersion;
-		AppNVMData.BmsSwVersion = bmsSwVersion;
-	}
-	#ifdef USING_PRINTF1
-		printf("[%d]-%x\n",__LINE__,(dataPtr[(0x09+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]));
-		printf("[%d]-%x\n",__LINE__,(dataPtr[(0x1B+BATT_CELL_VOL_NUM+TEMP_NUM)*2]));
-	#endif
-    temp = ((dataPtr[(0x09+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1])>>1)&0x03;    
-    battMOSSwitchState = ((temp&0x01)<<1)|((temp&0x02)>>1);	
-    if(AppDataInfo.BattLock==TRUE)
-    {
-        battMOSSwitchState = battMOSSwitchState |(0x01<<2);
-    }
-    else
-    {
-        battMOSSwitchState = battMOSSwitchState |(0x00<<2);
-    }
-	battWarningState = (dataPtr[(0x09+BATT_CELL_VOL_NUM+TEMP_NUM)*2+0]<<16) | (dataPtr[(0x0A+BATT_CELL_VOL_NUM+TEMP_NUM)*2+0] << 8) |(dataPtr[(0x0A+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]);
-	battProtectState = (dataPtr[(0x03+BATT_CELL_VOL_NUM)*2+0]<<24) | (dataPtr[(0x04+BATT_CELL_VOL_NUM)*2+0] << 16) |(dataPtr[(0x04+BATT_CELL_VOL_NUM)*2+1]<<8) | (dataPtr[(0x05+BATT_CELL_VOL_NUM)*2+1]);
-    battSOC = dataPtr[(0x0B+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1];
-    battSOH = dataPtr[(0x0C+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1];
-	Battdesigncap = (dataPtr[(0x0E+BATT_CELL_VOL_NUM+TEMP_NUM)*2])<<24|(dataPtr[(0x0E+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1])<<16|(dataPtr[(0x0F+BATT_CELL_VOL_NUM+TEMP_NUM)*2])<<8|(dataPtr[(0x0F+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]);
-	battPackVol =((dataPtr[(0x18+BATT_CELL_VOL_NUM+TEMP_NUM)*2])<<8|(dataPtr[(0x18+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]))/10;  //uint 100mV
-	maxCellVol = (dataPtr[(0x19+BATT_CELL_VOL_NUM+TEMP_NUM)*2] << 8) | dataPtr[(0x19+BATT_CELL_VOL_NUM+TEMP_NUM)*2 + 1];
-	minCellVol = (dataPtr[(0x1A+BATT_CELL_VOL_NUM+TEMP_NUM)*2] << 8) | dataPtr[(0x1A+BATT_CELL_VOL_NUM+TEMP_NUM)*2 + 1];
-    battHeatEnableState = dataPtr[(0x1C+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]&0x01;
-
-	maxCellTemp = 0x00;
-	minCellTemp = 0xFF;
-	for(i=0;i<BATT_TEMP_NUM;i++)
-	{
-		maxCellTemp = max(maxCellTemp,battCellTemp[i]);
-		minCellTemp = min(minCellTemp,battCellTemp[i]);		
+			NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+			NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+			NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+			NetSocDisplay(LED_SOC_3,LED_TURN_ON);
+			LightTimer = 0;
+		}			
 	}
-	nbSwVersion = APPSWVERSION;
-	nbHwVersion = HWVERSION;
-	BmsErrorDecode(battWarningState);
-    return true;
 }
+
 /***********************************************************************************************************************
  * BMS故障解码函数
  * 输入:BMS故障编码
@@ -716,7 +240,7 @@ static UINT8 BmsErrorDecode(UINT32 battWarningState)
 			{
 				ErrorNumTemp = 27;
 				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
-				//str += "ERROR:存在battSOC低告警故障!!\n";
+				//str += "ERROR:存在battSoc低告警故障!!\n";
 			}
 
 			ret = ((battWarningState >> 11) & 0x01) == 1 ;
@@ -1164,52 +688,7 @@ static void setDefaultAppDataInfo(void)
 	memset(&AppDataInfo.sohv_Q_packCapArrE, 300, 10);   
     return;
 }
-/***********************************************************************************************************************
- * 认证加密函数
- * 输入:明文
- * 输出:密文
- * 处理:将明文加密为译文
-***********************************************************************************************************************/
-UINT16  encryptionAlgorithm (UINT16 plainText)
-{
-	UINT16 cipherText = 1; 
-	UINT16 privateKeyE = 37507;
-	UINT16 privateKeyN = 10961;
-	plainText = plainText % privateKeyN;
-	while(privateKeyE >0)
-	{
-	if(privateKeyE % 2 ==1)
-	{   
-	cipherText =  ( cipherText * plainText) % privateKeyN;
-	}
-	privateKeyE = privateKeyE/2;  
-	plainText = (plainText * plainText) % privateKeyN;
-	}
-	return cipherText;
-}
-/***********************************************************************************************************************
- * 认证解密函数
- * 输入:密文
- * 输出:明文
- * 处理:将明文解密为译文
-***********************************************************************************************************************/
-// UINT8  decryptionAlgorithm (UINT16 cipherText)
-// {
-// 	UINT16 plainText = 1;	
-// 	UINT16 publicKeyD = 43;
-// 	UINT16 publicKeyN = 10961;
-// 	cipherText = cipherText % publicKeyN;
-// 	while(publicKeyD >0)
-// 	{
-// 		if(publicKeyD % 2 ==1)
-// 		{			
-// 			plainText = plainText * cipherText % publicKeyN;
-// 		}
-// 		publicKeyD = publicKeyD/2;		
-// 		cipherText = (cipherText * cipherText) % publicKeyN;
-// 	}
-// 	return (UINT8)plainText;
-// }
+
 /***********************************************************************************************************************
  * Fota升级处理函数
  * 输入:网络接收的数据,网络链接ID
@@ -1447,11 +926,11 @@ void Fota_Func(UINT8 *DataPtr,INT32 connectId)
                 tcpipConnectionSend(connectId,Fota_Answer,43,0,0,0);
                 if(Fota_S.Fota_All_Data_Len==Fota_S.Fota_Current_Addres)
                 {
-                    BMS_Fota_update_flag = TRUE;
+                    //BMS_Fota_update_flag = TRUE;
                 }
                 else
                 {
-                    BMS_Fota_update_flag = FALSE;
+                    //BMS_Fota_update_flag = FALSE;
                 }
                 break;
             }
@@ -1490,910 +969,3326 @@ static UINT8 Fota_crc_chk(UINT8* data,UINT8 length)
     }
     return reg_crc;
 }
-/***********************************************************************************************************************
- * 1000ms 周期姓发送报文
- * 输入:--
- * 输出:--
- * 处理:根据调用周期及计时器,每100ms发送2帧报文,报文周期为1000ms
-***********************************************************************************************************************/
-void CanMsgTx1000ms()
-{	
-	static UINT32 timerRecord = 0;
-	UINT8 count = 0;
-	CAN_Msg_Type canMsg;
-	UINT16  COMOutTable[28]={
-								0x6A0,0x6A1,0x6A2,0x6A3,0x6A4,0x6A5,0x6A6,
-								0x6B0,0x6BA,
-								0x6C0,0x6C1,0x6C2,0x6C3,0x6C4,
-								0x7C0,0x7C1,0x7C2,0x7C3,0x7C4,0x7C5,0x7C6,0x7C7,0x7C8,0x7C9,0x7CA,0x7CB,0x7CC,0x7CD
-							};
-							
-	if(TimeCounter - timerRecord > 0)
-	{
-		timerRecord = TimeCounter;
-		count = TimeCounter%10;
-		switch (count)
-		{
-			case 0:  //send cell batt info 0x6A0、0x6A1	
-				canMsg.DLC = 8;
-				canMsg.Id = COMOutTable[count*2];
-				CANEncodeFunction( COMOutTable[count*2],  canMsg.Data);
-				HAL_Can_Transmit(canMsg);
-
-				canMsg.DLC = 8;
-				canMsg.Id = COMOutTable[count*2+1];
-				CANEncodeFunction( COMOutTable[count*2+1], canMsg.Data);
-				HAL_Can_Transmit(canMsg);
-				
-				break;
-
-			case 1:  //send cell batt info 0x6A2、0x6A3
-				canMsg.DLC = 8;
-				canMsg.Id = COMOutTable[count*2];
-				CANEncodeFunction( COMOutTable[count*2], canMsg.Data);
-				HAL_Can_Transmit(canMsg);
-
-				canMsg.DLC = 8;
-				canMsg.Id = COMOutTable[count*2+1];
-				CANEncodeFunction( COMOutTable[count*2+1], canMsg.Data);
-				HAL_Can_Transmit(canMsg);
-				break;
-
-			case 2: //send cell batt info 0x6A4、 0x6A5
-				canMsg.DLC = 8;
-				canMsg.Id = COMOutTable[count*2];
-				CANEncodeFunction( COMOutTable[count*2], canMsg.Data);
-				HAL_Can_Transmit(canMsg);
-
-				canMsg.DLC = 8;
-				canMsg.Id = COMOutTable[count*2+1];
-				CANEncodeFunction( COMOutTable[count*2+1], canMsg.Data);
-				HAL_Can_Transmit(canMsg);
-				break;
-			
-			case 3:	//send cell batt info 0x6A6、0x6B0
-				canMsg.DLC = 8;
-				canMsg.Id = COMOutTable[count*2];
-				CANEncodeFunction( COMOutTable[count*2], canMsg.Data);
-				HAL_Can_Transmit(canMsg);
-
-				canMsg.DLC = 8;
-				canMsg.Id = COMOutTable[count*2+1];
-				CANEncodeFunction( COMOutTable[count*2+1], canMsg.Data);
-				HAL_Can_Transmit(canMsg);
-				
-				break;
-			
-			case 4: //send batt temp info 0x6BA、0x6C0
-				canMsg.DLC = 8;
-				canMsg.Id = COMOutTable[count*2];
-				CANEncodeFunction( COMOutTable[count*2], canMsg.Data);
-				HAL_Can_Transmit(canMsg);
-
-				canMsg.DLC = 8;
-				canMsg.Id = COMOutTable[count*2+1];
-				CANEncodeFunction( COMOutTable[count*2+1], canMsg.Data);
-				HAL_Can_Transmit(canMsg);
-			break;
-			
-			case 5: //send batt other info 0x6C1、0x6C2
-				canMsg.DLC = 8;
-				canMsg.Id = COMOutTable[count*2];
-				CANEncodeFunction( COMOutTable[count*2],  canMsg.Data);
-				HAL_Can_Transmit(canMsg);
-
-				canMsg.DLC = 8;
-				canMsg.Id = COMOutTable[count*2+1];
-				CANEncodeFunction( COMOutTable[count*2+1], canMsg.Data);
-				HAL_Can_Transmit(canMsg);
-			break;
 
-			case 6:	//send batt other info 0x6C3、0x6C4
-				canMsg.DLC = 8;
-				canMsg.Id = COMOutTable[count*2];
-				CANEncodeFunction( COMOutTable[count*2],  canMsg.Data);
-				HAL_Can_Transmit(canMsg);
-
-				canMsg.DLC = 8;
-				canMsg.Id = COMOutTable[count*2+1];
-				CANEncodeFunction( COMOutTable[count*2+1], canMsg.Data);
-				HAL_Can_Transmit(canMsg);
-			break;
-			
-			default:
-			break;
-			
-		}
-	}
-}
 
 /***********************************************************************************************************************
- * 周期性报文
+ * 周期性报文拆包
  * 输入:报文ID、can报文数据(指针)
  * 输出:--
- * 处理:根据不同的ID,进行组包,并放入指针
+ * 处理:根据不同的ID,将数据进行拆包,并放置到相应的变量中
 ***********************************************************************************************************************/
-
-void CANEncodeFunction(UINT32 ID,UINT8* msgData)
+void DecodeFunction(UINT32 ID,UINT8* rawData)
 {
-	memset(msgData, 0xFF, 8);	
+	static int msgCounter = 0;
+	msgCounter++;
+	printf("id = %x\tmsgCounter = %d\n",ID,msgCounter);
+	//printf("can extern id: %x\n",ID);
+	printf("can data:");
+	for(int i=0;i<8;i++)
+	{
+		printf("%x ",*(UINT8*)(rawData +i));
+	}
+	printf("\n");
+		
 	switch (ID)
 	{
-		case	0x6A0:
-			*(UINT16*)(msgData +0) = ((battCellU[0]>>8) & 0xFF) | (((battCellU[0]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((battCellU[1]>>8) & 0xFF) | (((battCellU[1]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battCellU[2]>>8) & 0xFF) | (((battCellU[2]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +6) = ((battCellU[3]>>8) & 0xFF) | (((battCellU[3]&0xFF)<<8)&0xFF00);
-			break;
-		case	0x6A1:
-			*(UINT16*)(msgData +0) = ((battCellU[4]>>8) & 0xFF) | (((battCellU[4]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((battCellU[5]>>8) & 0xFF) | (((battCellU[5]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battCellU[6]>>8) & 0xFF) | (((battCellU[6]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +6) = ((battCellU[7]>>8) & 0xFF) | (((battCellU[7]&0xFF)<<8)&0xFF00);
-			break;
-		case	0x6A2:
-			*(UINT16*)(msgData +0) = ((battCellU[8]>>8) & 0xFF) | (((battCellU[8]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((battCellU[9]>>8) & 0xFF) | (((battCellU[9]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battCellU[10]>>8) & 0xFF) | (((battCellU[10]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +6) = ((battCellU[11]>>8) & 0xFF) | (((battCellU[11]&0xFF)<<8)&0xFF00);
-			break;
-		case	0x6A3:
-			*(UINT16*)(msgData +0) = ((battCellU[12]>>8) & 0xFF) | (((battCellU[12]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((battCellU[13]>>8) & 0xFF) | (((battCellU[13]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battCellU[14]>>8) & 0xFF) | (((battCellU[14]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +6) = ((battCellU[15]>>8) & 0xFF) | (((battCellU[15]&0xFF)<<8)&0xFF00);
-			break;
-		case	0x6A4:
-			*(UINT16*)(msgData +0) = ((battCellU[16]>>8) & 0xFF) | (((battCellU[16]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((battCellU[17]>>8) & 0xFF) | (((battCellU[17]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battCellU[18]>>8) & 0xFF) | (((battCellU[18]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +6) = ((battCellU[19]>>8) & 0xFF) | (((battCellU[19]&0xFF)<<8)&0xFF00);
-			break;
-		case	0x6A5:
-			*(UINT16*)(msgData +0) = ((battCellU[20]>>8) & 0xFF) | (((battCellU[20]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((battCellU[21]>>8) & 0xFF) | (((battCellU[21]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battCellU[22]>>8) & 0xFF) | (((battCellU[22]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +6) = ((battCellU[23]>>8) & 0xFF) | (((battCellU[23]&0xFF)<<8)&0xFF00);
-			break;
-		case	0x6A6:
-			*(UINT16*)(msgData +0) = ((battCellU[24]>>8) & 0xFF) | (((battCellU[24]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((battCellU[25]>>8) & 0xFF) | (((battCellU[25]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battCellU[26]>>8) & 0xFF) | (((battCellU[26]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +6) = ((battCellU[27]>>8) & 0xFF) | (((battCellU[27]&0xFF)<<8)&0xFF00);
-			break;
-		case	0x6B0:
-			*(UINT8*)(msgData +0) =battCellTemp[0]&0xFF;
-			*(UINT8*)(msgData +1) =battCellTemp[1]&0xFF;
-			*(UINT8*)(msgData +2) =battCellTemp[2]&0xFF;
-			*(UINT8*)(msgData +3) =battCellTemp[3]&0xFF;
-			*(UINT8*)(msgData +4) =battCellTemp[4]&0xFF;
-			*(UINT8*)(msgData +5) =battCellTemp[5]&0xFF;
-			*(UINT8*)(msgData +6) =battCellTemp[6]&0xFF;
-			*(UINT8*)(msgData +7) =battCellTemp[7]&0xFF;
-			break;
-		case	0x6BA:
-			*(UINT8*)(msgData +0) =MOSTemp&0xFF;
-			*(UINT8*)(msgData +1) =packTemp&0xFF;
-			*(UINT8*)(msgData +2) =fastChargeTemp&0xFF;
-			*(UINT8*)(msgData +3) =normalChargeTemp&0xFF;
-			*(UINT8*)(msgData +4) =heatTemp1&0xFF;
-			*(UINT8*)(msgData +5) =heatTemp2&0xFF;
-			*(UINT8*)(msgData +6) =nbReservedTemp1&0xFF;
-			*(UINT8*)(msgData +7) =nbReservedTemp2&0xFF;
-			break;
-		case	0x6C0:
-			*(UINT16*)(msgData +0) = ((minCellVol>>8) & 0xFF) | (((minCellVol&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((maxCellVol>>8) & 0xFF) | (((maxCellVol&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battPackVol>>8) & 0xFF) | (((battPackVol&0xFF)<<8)&0xFF00);
-			*(UINT8*)(msgData +6) =maxCellTemp&0xFF;
-			*(UINT8*)(msgData +7) =minCellTemp&0xFF;
-			break;
-		case	0x6C1:
-			*(UINT8*)(msgData +0) =battSOC&0xFF;
-			*(UINT8*)(msgData +1) =battSOH&0xFF;
-			*(UINT16*)(msgData +2) = ((battI>>8) & 0xFF) | (((battI&0xFF)<<8)&0xFF00);
-			*(UINT8*)(msgData +4) =battWorkState&0xFF;
-			*(UINT32*)(msgData +5) = ((battWarningState>>16) & 0xFF)|((battWarningState)&0xFF00)|(((battWarningState&0xFF)<<16)&0xFF0000);
-			break;
-		case	0x6C2:
-			*(UINT32*)(msgData +0) = ((nbSwVersion>>24) & 0xFF)|((nbSwVersion>>8)&0xFF00)|((nbSwVersion<<8)&0xFF0000)|(((nbSwVersion&0xFF)<<24)&0xFF000000);
-			*(UINT16*)(msgData +4) = ((nbHwVersion>>8) & 0xFF) | (((nbHwVersion&0xFF)<<8)&0xFF00);
-			*(UINT8*)(msgData +6) =bmsSwVersion&0xFF;
-			*(UINT8*)(msgData +7) =bmsHwVersion&0xFF;
-			break;
-		case	0x6C3:
-			*(UINT32*)(msgData +0) = ((battBalanceoInfo>>24) & 0xFF)|((battBalanceoInfo>>8)&0xFF00)|((battBalanceoInfo<<8)&0xFF0000)|(((battBalanceoInfo&0xFF)<<24)&0xFF000000);
-			*(UINT8*)(msgData +4) =battMOSSwitchState&0xFF;
-			*(UINT8*)(msgData +5) =battHeatEnableState&0xFF;
-			break;
-		case	0x6C4:
-			reservedSignal1 = battProtectState&0xFF;
-			reservedSignal2 = (battProtectState>>8)&0xFF;
-			reservedSignal3 = (battProtectState>>16)&0xFF;
-			reservedSignal4 = (battProtectState>>24)&0xFF;
-			*(UINT8*)(msgData +0) =reservedSignal1&0xFF;
-			*(UINT8*)(msgData +1) =reservedSignal2&0xFF;
-			*(UINT8*)(msgData +2) =reservedSignal3&0xFF;
-			*(UINT8*)(msgData +3) =reservedSignal4&0xFF;
-			*(UINT8*)(msgData +4) =reservedSignal5&0xFF;
-			*(UINT8*)(msgData +5) =reservedSignal6&0xFF;
-			*(UINT8*)(msgData +6) =reservedSignal7&0xFF;
-			*(UINT8*)(msgData +7) =reservedSignal8&0xFF;
-			break;
-		case	0x7C0:
-			*(UINT16*)(msgData +0) = ((battCellU[0]>>8) & 0xFF) | (((battCellU[0]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((battCellU[1]>>8) & 0xFF) | (((battCellU[1]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battCellU[2]>>8) & 0xFF) | (((battCellU[2]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +6) = ((battCellU[3]>>8) & 0xFF) | (((battCellU[3]&0xFF)<<8)&0xFF00);
-			break;
-		case	0x7C1:
-			*(UINT16*)(msgData +0) = ((battCellU[4]>>8) & 0xFF) | (((battCellU[4]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((battCellU[5]>>8) & 0xFF) | (((battCellU[5]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battCellU[6]>>8) & 0xFF) | (((battCellU[6]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +6) = ((battCellU[7]>>8) & 0xFF) | (((battCellU[7]&0xFF)<<8)&0xFF00);
-			break;
-		case	0x7C2:
-			*(UINT16*)(msgData +0) = ((battCellU[8]>>8) & 0xFF) | (((battCellU[8]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((battCellU[9]>>8) & 0xFF) | (((battCellU[9]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battCellU[10]>>8) & 0xFF) | (((battCellU[10]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +6) = ((battCellU[11]>>8) & 0xFF) | (((battCellU[11]&0xFF)<<8)&0xFF00);
-			break;
-		case	0x7C3:
-			*(UINT16*)(msgData +0) = ((battCellU[12]>>8) & 0xFF) | (((battCellU[12]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((battCellU[13]>>8) & 0xFF) | (((battCellU[13]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battCellU[14]>>8) & 0xFF) | (((battCellU[14]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +6) = ((battCellU[15]>>8) & 0xFF) | (((battCellU[15]&0xFF)<<8)&0xFF00);
-			break;
-		case	0x7C4:
-			*(UINT16*)(msgData +0) = ((battCellU[16]>>8) & 0xFF) | (((battCellU[16]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((battCellU[17]>>8) & 0xFF) | (((battCellU[17]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battCellU[18]>>8) & 0xFF) | (((battCellU[18]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +6) = ((battCellU[19]>>8) & 0xFF) | (((battCellU[19]&0xFF)<<8)&0xFF00);
-			break;
-		case	0x7C5:
-			*(UINT16*)(msgData +0) = ((battCellU[20]>>8) & 0xFF) | (((battCellU[20]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((battCellU[21]>>8) & 0xFF) | (((battCellU[21]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battCellU[22]>>8) & 0xFF) | (((battCellU[22]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +6) = ((battCellU[23]>>8) & 0xFF) | (((battCellU[23]&0xFF)<<8)&0xFF00);
-			break;
-		case	0x7C6:
-			*(UINT16*)(msgData +0) = ((battCellU[24]>>8) & 0xFF) | (((battCellU[24]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((battCellU[25]>>8) & 0xFF) | (((battCellU[25]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battCellU[26]>>8) & 0xFF) | (((battCellU[26]&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +6) = ((battCellU[27]>>8) & 0xFF) | (((battCellU[27]&0xFF)<<8)&0xFF00);
-			break;
-		case	0x7C7:
-			*(UINT8*)(msgData +0) =battCellTemp[0]&0xFF;
-			*(UINT8*)(msgData +1) =battCellTemp[1]&0xFF;
-			*(UINT8*)(msgData +2) =battCellTemp[2]&0xFF;
-			*(UINT8*)(msgData +3) =battCellTemp[3]&0xFF;
-			*(UINT8*)(msgData +4) =battCellTemp[4]&0xFF;
-			*(UINT8*)(msgData +5) =battCellTemp[5]&0xFF;
-			*(UINT8*)(msgData +6) =battCellTemp[6]&0xFF;
-			*(UINT8*)(msgData +7) =battCellTemp[7]&0xFF;
-			break;
-		case	0x7C8:
-			*(UINT8*)(msgData +0) =MOSTemp&0xFF;
-			*(UINT8*)(msgData +1) =packTemp&0xFF;
-			*(UINT8*)(msgData +2) =fastChargeTemp&0xFF;
-			*(UINT8*)(msgData +3) =normalChargeTemp&0xFF;
-			*(UINT8*)(msgData +4) =heatTemp1&0xFF;
-			*(UINT8*)(msgData +5) =heatTemp2&0xFF;
-			*(UINT8*)(msgData +6) =nbReservedTemp1&0xFF;
-			*(UINT8*)(msgData +7) =nbReservedTemp2&0xFF;
-			break;
-		case	0x7C9:
-			*(UINT16*)(msgData +0) = ((minCellVol>>8) & 0xFF) | (((minCellVol&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +2) = ((maxCellVol>>8) & 0xFF) | (((maxCellVol&0xFF)<<8)&0xFF00);
-			*(UINT16*)(msgData +4) = ((battPackVol>>8) & 0xFF) | (((battPackVol&0xFF)<<8)&0xFF00);
-			*(UINT8*)(msgData +6) =maxCellTemp&0xFF;
-			*(UINT8*)(msgData +7) =minCellTemp&0xFF;
-			break;
-		case	0x7CA:
-			*(UINT8*)(msgData +0) =battSOC&0xFF;
-			*(UINT8*)(msgData +1) =battSOH&0xFF;
-			*(UINT16*)(msgData +2) = ((battI>>8) & 0xFF) | (((battI&0xFF)<<8)&0xFF00);
-			*(UINT8*)(msgData +4) =battWorkState&0xFF;
-			*(UINT32*)(msgData +5) = ((battWarningState>>16) & 0xFF)|((battWarningState)&0xFF00)|(((battWarningState&0xFF)<<16)&0xFF0000);
-			break;
-		case	0x7CB:
-			*(UINT32*)(msgData +0) = ((nbSwVersion>>24) & 0xFF)|((nbSwVersion>>8)&0xFF00)|((nbSwVersion<<8)&0xFF0000)|(((nbSwVersion&0xFF)<<24)&0xFF000000);
-			*(UINT16*)(msgData +4) = ((nbHwVersion>>8) & 0xFF) | (((nbHwVersion&0xFF)<<8)&0xFF00);
-			*(UINT8*)(msgData +6) =bmsSwVersion&0xFF;
-			*(UINT8*)(msgData +7) =bmsHwVersion&0xFF;
-			break;
-		case	0x7CC:
-			*(UINT32*)(msgData +0) = ((battBalanceoInfo>>24) & 0xFF)|((battBalanceoInfo>>8)&0xFF00)|((battBalanceoInfo<<8)&0xFF0000)|(((battBalanceoInfo&0xFF)<<24)&0xFF000000);
-			*(UINT8*)(msgData +4) =battMOSSwitchState&0xFF;
-			*(UINT8*)(msgData +5) =battHeatEnableState&0xFF;
-			break;
-		case	0x7CD:
-			*(UINT8*)(msgData +0) =reservedSignal1&0xFF;
-			*(UINT8*)(msgData +1) =reservedSignal2&0xFF;
-			*(UINT8*)(msgData +2) =reservedSignal3&0xFF;
-			*(UINT8*)(msgData +3) =reservedSignal4&0xFF;
-			*(UINT8*)(msgData +4) =reservedSignal5&0xFF;
-			*(UINT8*)(msgData +5) =reservedSignal6&0xFF;
-			*(UINT8*)(msgData +6) =reservedSignal7&0xFF;
-			*(UINT8*)(msgData +7) =reservedSignal8&0xFF;
-			break;
-		case	0x7B0:
-			*(UINT8*)(msgData +0) = (AppNVMData.battSN[0])&0xFF;
-			*(UINT8*)(msgData +1) = (AppNVMData.battSN[1])&0xFF;
-			*(UINT8*)(msgData +2) = (AppNVMData.battSN[2])&0xFF;
-			*(UINT8*)(msgData +3) = (AppNVMData.battSN[3])&0xFF;
-			*(UINT8*)(msgData +4) = (AppNVMData.battSN[4])&0xFF;
-			*(UINT8*)(msgData +5) = (AppNVMData.battSN[5])&0xFF;
-			*(UINT8*)(msgData +6) = (AppNVMData.battSN[6])&0xFF;
-			*(UINT8*)(msgData +7) = (AppNVMData.battSN[7])&0xFF;
-			break;
-		case	0x7B1:
-			*(UINT8*)(msgData +0) = (AppNVMData.battSN[8])&0xFF;
-			*(UINT8*)(msgData +1) = (AppNVMData.battSN[9])&0xFF;
-			*(UINT8*)(msgData +2) = (AppNVMData.battSN[10])&0xFF;
-			*(UINT8*)(msgData +3) = (AppNVMData.battSN[11])&0xFF;
-			*(UINT8*)(msgData +4) = (AppNVMData.battSN[12])&0xFF;
-			*(UINT8*)(msgData +5) = (AppNVMData.battSN[13])&0xFF;
-			*(UINT8*)(msgData +6) = (AppNVMData.battSN[14])&0xFF;
-			*(UINT8*)(msgData +7) = (AppNVMData.battSN[15])&0xFF;
-			break;
-		case	0x7B2:
-			*(UINT8*)(msgData +0) = (AppNVMData.battSN[16])&0xFF;
-			
+	/*
+		case	0x18FF06F3:
+			bmsStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0x0F);
+			bmsErrClass = (UINT8)(((*(UINT8*)(rawData +0))>>4)&0xF);
+			chrgConctStatus = (UINT8)(((*(UINT8*)(rawData +1)))&0x3);
+			highVolPwrDwnReq = (UINT8)(((*(UINT8*)(rawData +1))>>2)&0x3);
+			chrgStatus = (UINT8)(((*(UINT8*)(rawData +1))>>4)&0x7);
+			bmsErrNum = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			bmsLife = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
 			break;
-		
-		default:
+		case	0x18FF07F3:
+			maxChrgCurrAllowed = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			maxDischrgCurrAllowed = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
 			break;
-	}
-}
-
-
-/***********************************************************************************************************************
- * UDS函数
- * 输入:报文内容(含ID)
- * 输出:--
- * 处理:根据报文内容,进行包括读取版本号、读写SN、查询状态,用于完成下线检测和通过CAN接收升级包等操作
-***********************************************************************************************************************/
-void UDS_Service(CAN_Msg_Type* CanRxMsg)
-{
-	UINT8 i,j= 0;
-	INT8 ret,errorCount = 0;
-	BOOL boolRet = false;
-	static UINT8 snFlag = 0;
-	static UINT32 sliceCounterFlag = 0;
-	UINT32 tempSliceCounter=0;	
-	static UINT8 counter=0;  
-	CAN_Msg_Type UDSAnswer ={0};	
-	UINT32 posCode,negCode;
-	UINT32  updateDifferDataByteLen = 0;
-	UINT8 updateDataBuffer[100];
-	
-	
-	
-	static UINT32 updateDifferDataSliceCounter = 0;	
-	static UINT8	UDSSwitch = 0;
-	static UINT8   UDSDialogMode = 01;
-	static UINT8   UDSBattSN[BATT_SN_LEN];
-
-	for(i=0; i<2; i++)
-	{
-		UDSAnswer.DLC = 8;
-		memset(UDSAnswer.Data, 0, UDSAnswer.DLC);
-		UDSService[i] =  CanRxMsg[i].Data[0];
-		UDSSubService[i] = CanRxMsg[i].Data[1];
-		UDSSubServiceActionCode[i] = CanRxMsg[i].Data[2];
-		if(CanRxMsg[i].Id == 0x7A0)
-			{
-			switch (UDSService[i])
+		case	0x18FF30F3:
+			battSoc = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			packTotalVol = (UINT16)(((*(UINT16*)(rawData +1)))&0xFFFF);
+			packTotalCurr = (UINT16)(((*(UINT16*)(rawData +3)))&0xFFFF);
+			insulationR = (UINT16)(((*(UINT16*)(rawData +5)))&0xFFFF);
+			break;
+		case	0x18FF51F3:
+			maxCellVol = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			minCellVol = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			maxCellTemp = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			minCellTemp = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			avgCellTemp = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			break;
+		case	0x18FF52F3:
+			maxVolSubsysCode = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			maxVolCellCode = (UINT16)(((*(UINT16*)(rawData +1)))&0xFFFF);
+			minVolSubsysCode = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			minVoCelllCode = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			break;
+		case	0x18FF53F3:
+			maxTempSubsysCode = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			maxTempCellCode = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			minTempSubsysCode = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			minTempCellCode = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			break;
+		case	0x18FF54F3:
+			numOfChrgableSubsys = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			lengthOfChrgableSysCode = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			chrgableSysCode = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			chrgableSubsysCode = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			numOfCells = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			numOfCellTemp = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			numOfBattErr = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x1801FBF3:
+			battCellU[0] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[1] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[2] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[3] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1802FBF3:
+			battCellU[4] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[5] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[6] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[7] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1803FBF3:
+			battCellU[8] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[9] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[10] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[11] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1804FBF3:
+			battCellU[12] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[13] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[14] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[15] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1805FBF3:
+			battCellU[16] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[17] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[18] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[19] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1806FBF3:
+			battCellU[20] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[21] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[22] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[23] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1807FBF3:
+			battCellU[24] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[25] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[26] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[27] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1808FBF3:
+			battCellU[28] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[29] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[30] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[31] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1809FBF3:
+			battCellU[32] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[33] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[34] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[35] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x180AFBF3:
+			battCellU[36] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[37] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[38] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[39] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x180BFBF3:
+			battCellU[40] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[41] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[42] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[43] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x180CFBF3:
+			battCellU[44] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[45] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[46] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[47] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x180DFBF3:
+			battCellU[48] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[49] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[50] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[51] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x180EFBF3:
+			battCellU[52] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[53] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[54] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[55] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x180FFBF3:
+			battCellU[56] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[57] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[58] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[59] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1810FBF3:
+			battCellU[60] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[61] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[62] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[63] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1811FBF3:
+			battCellU[64] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[65] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[66] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[67] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1812FBF3:
+			battCellU[68] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[69] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[70] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[71] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1813FBF3:
+			battCellU[72] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[73] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[74] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[75] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1814FBF3:
+			battCellU[76] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[77] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[78] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[79] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1815FBF3:
+			battCellU[80] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[81] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[82] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[83] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1816FBF3:
+			battCellU[84] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[85] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[86] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[87] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1817FBF3:
+			battCellU[88] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[89] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[90] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[91] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1818FBF3:
+			battCellU[92] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[93] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[94] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[95] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1819FBF3:
+			battCellU[96] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[97] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[98] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[99] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x181AFBF3:
+			battCellU[100] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[101] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[102] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[103] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x181BFBF3:
+			battCellU[104] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[105] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[106] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[107] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x181CFBF3:
+			battCellU[108] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[109] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[110] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[111] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x181DFBF3:
+			battCellU[112] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[113] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[114] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[115] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x181EFBF3:
+			battCellU[116] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[117] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[118] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[119] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x181FFBF3:
+			battCellU[120] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[121] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[122] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[123] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1820FBF3:
+			battCellU[124] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[125] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[126] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[127] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1821FBF3:
+			battCellU[128] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[129] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[130] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[131] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1822FBF3:
+			battCellU[132] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[133] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[134] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[135] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1823FBF3:
+			battCellU[136] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[137] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[138] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[139] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1824FBF3:
+			battCellU[140] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[141] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[142] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[143] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1825FBF3:
+			battCellU[144] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[145] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[146] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[147] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1826FBF3:
+			battCellU[148] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[149] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[150] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[151] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1827FBF3:
+			battCellU[152] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[153] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[154] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[155] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1828FBF3:
+			battCellU[156] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[157] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[158] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[159] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1829FBF3:
+			battCellU[160] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[161] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[162] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[163] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x182AFBF3:
+			battCellU[164] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[165] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[166] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[167] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x182BFBF3:
+			battCellU[168] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[169] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[170] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[171] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x182CFBF3:
+			battCellU[172] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[173] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[174] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[175] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x182DFBF3:
+			battCellU[176] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[177] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[178] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[179] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x182EFBF3:
+			battCellU[180] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[181] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[182] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[183] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x182FFBF3:
+			battCellU[184] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[185] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[186] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[187] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1830FBF3:
+			battCellU[188] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[189] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[190] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[191] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1831FBF3:
+			battCellU[192] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[193] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[194] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[195] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1832FBF3:
+			battCellU[196] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[197] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[198] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[199] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1833FBF3:
+			battCellU[200] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[201] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[202] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[203] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1834FBF3:
+			battCellU[204] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[205] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[206] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[207] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1835FBF3:
+			battCellU[208] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[209] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[210] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[211] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1836FBF3:
+			battCellU[212] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[213] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[214] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[215] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1837FBF3:
+			battCellU[216] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[217] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[218] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[219] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1838FBF3:
+			battCellU[220] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[221] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[222] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[223] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1839FBF3:
+			battCellU[224] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[225] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[226] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[227] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x183AFBF3:
+			battCellU[228] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[229] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[230] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[231] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x183BFBF3:
+			battCellU[232] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[233] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[234] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[235] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x183CFBF3:
+			battCellU[236] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[237] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[238] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[239] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x183DFBF3:
+			battCellU[240] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[241] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[242] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[243] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x183EFBF3:
+			battCellU[244] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[245] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[246] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[247] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x183FFBF3:
+			battCellU[248] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[249] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[250] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[251] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1840FBF3:
+			battCellU[252] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[253] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[254] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[255] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1841FBF3:
+			battCellU[256] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[257] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[258] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[259] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1842FBF3:
+			battCellU[260] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[261] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[262] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[263] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1843FBF3:
+			battCellU[264] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[265] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[266] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[267] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1844FBF3:
+			battCellU[268] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[269] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[270] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[271] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1845FBF3:
+			battCellU[272] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[273] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[274] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[275] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1846FBF3:
+			battCellU[276] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[277] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[278] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[279] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1847FBF3:
+			battCellU[280] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[281] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[282] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[283] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1848FBF3:
+			battCellU[284] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[285] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[286] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[287] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1849FBF3:
+			battCellU[288] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[289] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[290] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[291] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x184AFBF3:
+			battCellU[292] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[293] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[294] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[295] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x184BFBF3:
+			battCellU[296] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[297] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[298] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[299] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x184CFBF3:
+			battCellU[300] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[301] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[302] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[303] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x184DFBF3:
+			battCellU[304] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[305] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[306] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[307] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x184EFBF3:
+			battCellU[308] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[309] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[310] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[311] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x184FFBF3:
+			battCellU[312] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[313] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[314] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[315] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1850FBF3:
+			battCellU[316] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[317] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[318] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[319] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1851FBF3:
+			battCellU[320] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[321] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[322] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[323] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1852FBF3:
+			battCellU[324] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[325] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[326] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[327] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1853FBF3:
+			battCellU[328] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[329] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[330] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[331] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1854FBF3:
+			battCellU[332] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[333] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[334] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[335] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1855FBF3:
+			battCellU[336] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[337] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[338] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[339] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1856FBF3:
+			battCellU[340] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[341] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[342] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[343] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1857FBF3:
+			battCellU[344] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[345] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[346] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[347] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1858FBF3:
+			battCellU[348] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[349] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[350] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[351] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1859FBF3:
+			battCellU[352] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[353] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[354] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[355] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x185AFBF3:
+			battCellU[356] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[357] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[358] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[359] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x185BFBF3:
+			battCellU[360] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[361] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[362] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[363] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x185CFBF3:
+			battCellU[364] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[365] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[366] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[367] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x185DFBF3:
+			battCellU[368] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[369] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[370] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[371] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x185EFBF3:
+			battCellU[372] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[373] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[374] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[375] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x185FFBF3:
+			battCellU[376] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[377] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[378] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[379] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1860FBF3:
+			battCellU[380] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[381] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[382] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[383] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x18A0FBF3:
+			battCellTemp[0] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[1] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[2] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[3] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[4] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[5] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[6] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[7] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18A1FBF3:
+			battCellTemp[8] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[9] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[10] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[11] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[12] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[13] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[14] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[15] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18A2FBF3:
+			battCellTemp[16] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[17] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[18] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[19] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[20] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[21] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[22] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[23] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			battCellTemp[24] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[25] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[26] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[27] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[28] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[29] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[30] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[31] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18A3FBF3:
+			battCellTemp[32] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[33] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[34] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[35] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[36] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[37] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[38] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[39] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18A4FBF3:
+			battCellTemp[40] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[41] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[42] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[43] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[44] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[45] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[46] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[47] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18A5FBF3:
+			battCellTemp[48] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[49] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[50] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[51] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[52] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[53] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[54] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[55] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18A6FBF3:
+			battCellTemp[56] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[57] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[58] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[59] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[60] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[61] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[62] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[63] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18FF08F3:
+			mainPosRlyStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0x3);
+			preRlyStatus = (UINT8)(((*(UINT8*)(rawData +0))>>2)&0x3);
+			mainNegRlyStatus = (UINT8)(((*(UINT8*)(rawData +0))>>4)&0x3);
+			thrRlyStatus = (UINT8)(((*(UINT8*)(rawData +0))>>6)&0x3);
+			ptc1RlyStatus = (UINT8)(((*(UINT8*)(rawData +1)))&0x3);
+			airCondRlyStatus = (UINT8)(((*(UINT8*)(rawData +1))>>2)&0x3);
+			dcChrg1PosRlyStatus = (UINT8)(((*(UINT8*)(rawData +1))>>4)&0x3);
+			dcChrg1NegRlyStatus = (UINT8)(((*(UINT8*)(rawData +1))>>6)&0x3);
+			dcChrg2PosRlyStatus = (UINT8)(((*(UINT8*)(rawData +2)))&0x3);
+			dcChrg2NegRlyStatus = (UINT8)(((*(UINT8*)(rawData +2))>>2)&0x3);
+			heatPosRlyStatus = (UINT8)(((*(UINT8*)(rawData +2))>>4)&0x3);
+			heatNegRlyStatus = (UINT8)(((*(UINT8*)(rawData +2))>>6)&0x3);
+			coolRlyStatus = (UINT8)(((*(UINT8*)(rawData +3)))&0x3);
+			ptc2RlyStatus = (UINT8)(((*(UINT8*)(rawData +3))>>2)&0x3);
+			mainPosRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +4)))&0x3);
+			preRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +4))>>2)&0x3);
+			mainNegRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +4))>>4)&0x3);
+			thrRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +4))>>6)&0x3);
+			ptc1RlyErrStatus = (UINT8)(((*(UINT8*)(rawData +5)))&0x3);
+			airCondRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +5))>>2)&0x3);
+			dcChrg1PosRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +5))>>4)&0x3);
+			dcChrg1NegRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +5))>>6)&0x3);
+			dcChrg2PosRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +6)))&0x3);
+			dcChrg2NegRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +6))>>2)&0x3);
+			heatPosRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +6))>>4)&0x3);
+			heatNegRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +6))>>6)&0x3);
+			coolRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +7)))&0x3);
+			ptc2RlyErrStatus = (UINT8)(((*(UINT8*)(rawData +7))>>2)&0x3);
+			break;
+		case	0x18FF60F3:
+			accChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			accDischrgAh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			break;
+		case	0x18FF61F3:
+			accChrgkWh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			accDischrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			break;
+		case	0x18FF62F3:
+			battSOH = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			break;
+		case	0x18FF63F3:
+			SN[0] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			SN[1] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			SN[2] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			SN[3] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			SN[4] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			SN[5] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			SN[6] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			SN[7] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18FF64F3:
+			SN[8] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			SN[9] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			SN[10] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			SN[11] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			SN[12] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			SN[13] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			SN[14] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			SN[15] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18FF65F3:
+			SN[16] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			SN[17] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			SN[18] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			SN[19] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			SN[20] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			SN[21] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			SN[22] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			SN[23] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18FF66F3:
+			accRecvryChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			accRecvryChrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			break;
+		case	0x18FF67F3:
+			accStationChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			accStationChrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			break;
+		case	0x18FF68F3:
+			accGunChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			accGunChrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			break;
+		case	0x18FF69F3:
+			sglChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			sglChrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			break;
+		case	0x18FF10D0:
+			bmsHVOn = (UINT8)(((*(UINT8*)(rawData +0)))&0x3);
+			break;
+		case	0x18FF20EF:
+			vcuDCVol = (UINT16)(((*(UINT16*)(rawData +1)))&0xFFFF);
+			break;
+		case	0x18FF13A3:
+			acRelayStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0x3);
+			ptcRelayStatus = (UINT8)(((*(UINT8*)(rawData +0))>>2)&0x3);
+			mainRelayStatus = (UINT8)(((*(UINT8*)(rawData +0))>>3)&0x3);
+			preRelayStatus = (UINT8)(((*(UINT8*)(rawData +0))>>4)&0x3);
+			ptc2RelayStatus = (UINT8)(((*(UINT8*)(rawData +1)))&0x3);
+			acRelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +4)))&0x3);
+			ptcRelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +4))>>2)&0x3);
+			mainRelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +4))>>4)&0x3);
+			preRelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +4))>>6)&0x3);
+			hvLockErrorStatus = (UINT8)(((*(UINT8*)(rawData +5)))&0x3);
+			ptc2RelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +5))>>2)&0x3);
+			break;
+		case	0x18FF1154:
+			ebcStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			ebcAskHVOn = (UINT8)(((*(UINT8*)(rawData +1)))&0x1);
+			ebcAskHVOff = (UINT8)(((*(UINT8*)(rawData +1))>>1)&0x1);
+			retainLockSignal = (UINT8)(((*(UINT8*)(rawData +1))>>3)&0x1);
+			dischargeLockSignal = (UINT8)(((*(UINT8*)(rawData +1))>>5)&0x1);
+			chargeLockSignal = (UINT8)(((*(UINT8*)(rawData +1))>>6)&0x1);
+			errorClass = (UINT8)(((*(UINT16*)(rawData +2))>>2)&0xFF);
+			errorCode1 = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			errorCode2 = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			chargeFlag = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			exchangeBattAirPressure = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			lifeSignal = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18FF09D0:
+			vehicleStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0x3);
+			currentGearPosition = (UINT8)(((*(UINT8*)(rawData +1)))&0x1F);
+			break;
+		case	0x18FEF1D0:
+			parkingBreakStatus = (UINT8)(((*(UINT8*)(rawData +0))>>2)&0x3);
+			breakingStatus = (UINT8)(((*(UINT8*)(rawData +3))>>4)&0x3);
+			break;
+		case	0x18FF55D0:
+			if(*rawData >= 0x1 && *rawData <= 3)
 			{
-				case 0x10:
-					if(UDSSubService[i] == 0x01)
-					{
-						if((UDSDialogMode == 0x01 || UDSDialogMode==0x02)||UDSSwitch == 0)
-						{									
-							UDSPositiveAnswer(0x04,i,0x00);
-							UDSSwitch = 0;
-							UDSDialogMode = 1;
-						}
-						else
-						{
-							UDSNegtiveAnswer(0x05,i,0xFF);
-						}
-					}
-					else if(UDSSubService[i] == 0x02)
-					{
-						UDSPositiveAnswer(0x04,i,0x00);
-						UDSSwitch = 1;
-						UDSDialogMode = 2;									
-					}
-					else if(UDSSubService[i] == 0x03)
-					{
-						if(UDSSwitch == 1)
-						{
-							UDSPositiveAnswer(0x04,i,0x00);
-							UDSSwitch = 1;
-							UDSDialogMode = 3;
-                		}
-                		else
-                		{
-							UDSNegtiveAnswer(0x05,i,0xFF);
-                		}
-
-					}
-					else if(UDSSubService[i] == 0x11)   //make NB software reset
-					{
-						if(UDSDialogMode == 2)
-						{
-							UDSPositiveAnswer(0x04,i,0x00);										
-							osDelay(100);
-							SaveAppConfig();
-							appSetCFUN(0);
-							osDelay(1000);
-                			EC_SystemReset();
-                		}
-                		else
-                		{
-							UDSNegtiveAnswer(0x05,i,0xFF);  
-                		}
-					}								
-					else
-					{
-						UDSNegtiveAnswer(0x05,i,0xEE);
-					}
-					break;
-				case 0x22:
-					if(UDSDialogMode == 2)
-					{
-						if(UDSSubService[i] == 0x01)		//check the sw of NB
-						{
-							UDSPositiveAnswer(0x08,i,APPSWVERSION);
-						}
-						else if(UDSSubService[i] == 0x02)  //check the hw of NB
-						{
-							UDSPositiveAnswer(0x06,i,HWVERSION);										
-						}
-						else if(UDSSubService[i] == 0x03)  //check the SN number
-						{											
-							switch(UDSSubServiceActionCode[i])
-							{
-								case 00:
-									UDSAnswer.Id = 0x7B0;
-									
-									CANEncodeFunction(UDSAnswer.Id, UDSAnswer.Data);
-									ret = HAL_Can_Transmit(UDSAnswer);
-									
-									break;
-									
-								case 01:
-									UDSAnswer.Id = 0x7B1;
-									CANEncodeFunction(UDSAnswer.Id, UDSAnswer.Data);
-									ret = HAL_Can_Transmit(UDSAnswer);
-
-									break;
-
-								case 02:
-									UDSAnswer.Id = 0x7B2;
-									CANEncodeFunction(UDSAnswer.Id, UDSAnswer.Data);
-									ret = HAL_Can_Transmit(UDSAnswer);
-									
-									break;
-								default:
-								break;											
-							}									
-						}
-						else if(UDSSubService[i] == 0x04)  //check the batt message
-						{
-							UDSAnswer.Id = 0x7C0+UDSSubServiceActionCode[i];
-							CANEncodeFunction(UDSAnswer.Id, UDSAnswer.Data);										
-							ret = HAL_Can_Transmit(UDSAnswer);										
-						}
-						else if(UDSSubService[i] == 0x05)  //check the enviroment temp of NB
-						{				
-							UINT32 temp = ((fastChargeTemp<<24)&0xFF000000) | ((normalChargeTemp<<16)&0xFF0000) | ((heatTemp1<<8)&0xFF00) | (heatTemp2&0xFF);				
-							UDSPositiveAnswer(0x08,i,temp);  //ntcvalue										
-						}									
-						else if(UDSSubService[i] == 0x06)	//check the tcp link of NB
-						{
-							UDSPositiveAnswer(0x06,i,TcpSendLen);  //TcpconnectStatus
-						}
-						else if(UDSSubService[i] == 0x07)  //check the GPS link of NB
-						{
-							posCode = GpsFlag;
-							UDSPositiveAnswer(0x05,i,posCode);  //gps satellite num(uint8), should be modified
-						}	
-						else
-						{
-							UDSNegtiveAnswer(0x05,i,0xEE);
-						}
-					}
-					else	//the service is not surpported in current dialog mode
-					{
-						UDSNegtiveAnswer(0x05,i,0xFF);
-					}
-					break;
-				case 0x2E:   //write service
-					if(UDSDialogMode == 2)
-					{
-						if(UDSSubService[i] == 0x03)  // write the battSN
-						{
-							if(UDSSubServiceActionCode[i] == 0x00 && snFlag == 0x00)
-							{
-								for(j=0; j<5; j++)
-								{
-									UDSBattSN[j+5*0] = CanRxMsg[i].Data[j+3];
-								}	
-								snFlag = snFlag|0x01;
-							}
-							else if(UDSSubServiceActionCode[i] == 0x01 && snFlag == 0x01)
-							{
-								for(j=0; j<5; j++)
-								{
-									UDSBattSN[j+5*1] = CanRxMsg[i].Data[j+3];
-								}
-								snFlag = snFlag|0x02;
-							}
-							else if(UDSSubServiceActionCode[i] == 0x02 && snFlag == 0x03)
-							{
-								for(j=0; j<5; j++)
-								{
-									UDSBattSN[j+5*2] = CanRxMsg[i].Data[j+3];
-								}
-								snFlag = snFlag|0x04;
-							}
-							else if(UDSSubServiceActionCode[i] == 0x03 && snFlag == 0x07)
-							{
-								for(j=0; j<2; j++)
-								{
-									UDSBattSN[j+5*3] = CanRxMsg[i].Data[j+3];
-								}
-								snFlag = snFlag|0x08;
-							}
-
-							if(snFlag == 0x0F)
-							{
-								snFlag = 0;
-								UDSPositiveAnswer(0x04,i,00);
-								MEMCPY(AppNVMData.battSN, UDSBattSN, BATT_SN_LEN);
-								AppNVMData.EOLState = 1; //SN号写入完成,表明已经进行过下线配置
-								SaveAppConfig();
-							}
-							else
-							{
-								UDSAnswer.Id = 0x7A8;											
-								UDSAnswer.Data[0] = 0x05;
-								UDSAnswer.Data[1] = 0x3E;
-								UDSAnswer.Data[2] = UDSService[i];
-								UDSAnswer.Data[3] = UDSSubService[i];
-								UDSAnswer.Data[4] = snFlag;	
-								
-								ret = HAL_Can_Transmit(UDSAnswer);
-							}										
-						}
-						else if(UDSSubService[i] == 0x0F) //write the update config:updateDifferDataByteLen
-						{										
-							updateDifferDataByteLen = (CanRxMsg[i].Data[2]<<16)|(CanRxMsg[i].Data[3]<<8)|CanRxMsg[i].Data[4];										
-							UDSPositiveAnswer(0x04,i,00);
-						}
-						else
-						{
-							UDSNegtiveAnswer(0x05,i,0xEE);
-							
-						}
-						break;
-					}								
-					else
-					{
-						UDSNegtiveAnswer(0x05,i,0xFF);
-					}
-					break;
-				case 0x31:  //clear the flash service
-					if(UDSDialogMode == 3)  
-					{
-						if(UDSSubService[i] == 0x0F)  //clear the fota flash
-						{
-							if(UDSSubServiceActionCode[i] == 0x01)
-							{
-								//Clear the Flash
-								boolRet = UDSClearFotaDownloadRegion();
-								//if ok											
-								UDSPositiveAnswer(0x05,i,(UINT32)boolRet);
-							}
-							else
-							{
-								UDSNegtiveAnswer(0x06,i,UDSSubServiceActionCode[i]<<8|0xFF);  //重点测试
-							}										
-						}
-						else
-						{
-							UDSNegtiveAnswer(0x05,i,0xEE);  //the subservice is not surpported
-						}
-					}
-					else
-					{
-						UDSNegtiveAnswer(0x05,i,0xFF);  //the survie is not surpported in current dialog mode
-					}
-					break;
-				case 0x34:  //prepare for some one process
-					if(UDSDialogMode == 3)
-					{
-						if(UDSSubService[i] == 0x0F)  //ask for download update data
-						{									
-							boolRet = UDSAskforDownLoadData();
-							//if ok											
-							UDSPositiveAnswer(0x05,i,(UINT32)boolRet);
-						}
-						else
-						{
-							UDSNegtiveAnswer(0x05,i,0xEE);
-						}
-					}
-					else
-					{
-						UDSNegtiveAnswer(0x05,i,0xFF);
-					}
-					break;
-				case 0x36:  //download the update data
-					if(UDSDialogMode == 3)
-					{
-						if(downloadReady == TRUE)
-						{
-							counter++;  //记录报文数量									
-							tempSliceCounter =  (CanRxMsg[i].Data[1]<<16)|(CanRxMsg[i].Data[2]<<8)|(CanRxMsg[i].Data[3]);
-						/*
-						#ifdef USING_PRINTF
-							printf("tempSliceCounter = %x\n",tempSliceCounter);
-						#endif
-						*/										
-							if(tempSliceCounter < (updateDifferDataPackageCounter+1)*25 && tempSliceCounter>=updateDifferDataPackageCounter*25)
-							{
-								updateDifferDataSliceCounter = tempSliceCounter % 25;
-								for(j=0;j<4;j++)
-								{
-									updateDataBuffer[updateDifferDataSliceCounter*4+j] = CanRxMsg[i].Data[4+j];
-								}								
-								
-								if(updateDifferDataSliceCounter>0)
-								{
-									sliceCounterFlag = sliceCounterFlag |(0x01<<updateDifferDataSliceCounter);
-								}
-								else
-								{
-									sliceCounterFlag = sliceCounterFlag |0x01;
-								}
-								/*
-							#ifdef USING_PRINTF
-								printf("sliceCounterFlag = %x  counter=%d\n",sliceCounterFlag,counter);
-							#endif
-							*/											
-							}
-							else
-							{
-								counter--;
-							}
-							
-							if(counter == 25)
-							{
-								counter = 0;											
-								if(sliceCounterFlag == 0x1FFFFFF)  //received all the 25 message of current package
-								{															
-									//write the buffer(100 byte) to flash
-									ret = (uint8_t)BSP_QSPI_Write_Safe(updateDataBuffer,FLASH_FOTA_REGION_START+(updateDifferDataPackageCounter)*100,100);
-									errorCount = 0;
-									while(ret != QSPI_OK && errorCount<3)  //try to write most 3 times
-									{
-										errorCount++;
-										BSP_QSPI_Erase_Safe(FLASH_FOTA_REGION_START+(updateDifferDataPackageCounter)*100,100);
-										ret = (uint8_t)BSP_QSPI_Write_Safe(updateDataBuffer,FLASH_FOTA_REGION_START+(updateDifferDataPackageCounter)*100,100);
-									}
-									if(ret == QSPI_OK)  // write successed
-									{
-										UDSPositiveAnswer(0x08,i,tempSliceCounter);	
-	
-										memset(updateDataBuffer,0, 100);
-										sliceCounterFlag = 0x0;
-										updateDifferDataPackageCounter++;
-									}
-									else  //write fail
-									{
-										UDSNegtiveAnswer(0x08,i,0xFFFFFFFF);  //failed to write this package to flash
-										
-									}
-								}
-								else
-								{
-									//received 25 messages, but lose one or more messages
-									//in this case, updater will try to send the package again(most 4 times)
-									UDSNegtiveAnswer(0x08,i,sliceCounterFlag);									
-								}
-							}
-						}
-						else
-						{
-							UDSNegtiveAnswer(0x05,i,0xEF); //the download process is not ready
-							counter = 0;
-						}
-					}
-					else
-					{
-						UDSNegtiveAnswer(0x05,i,0xFF);  //the service is not surpported in current dialog mode
-					}
-					break;
-				case 0x37:  //exit some one process
-					if(UDSDialogMode == 3)
+				for(UINT8 i = 0; i < 7; i++)
+				{
+					if(i+((*rawData)-1)*7 <17)
 					{
-						if(UDSSubService[i] == 0x0F)  // exit the download 
-						 {
-							UDSPositiveAnswer(0x04,i,0x00);
-					
-							downloadReady = FALSE;
-						 }
-						 else
-						 {
-							UDSNegtiveAnswer(0x05,i,0xEE);
-						}
+						VIN[i+((*rawData)-1)*7] = *(rawData + i+1 ) & 0xFF;
 					}
-					else
+				}
+			}
+			break;
+		case	0x18FEAE17:
+			frontBreakingPressure = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			backBreakingPressure = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			frontBreakingPressureErrorStatus = (UINT8)(((*(UINT8*)(rawData +6)))&0x3);
+			backBreakingPressureErrorStatus = (UINT8)(((*(UINT8*)(rawData +6))>>2)&0x3);
+			break;
+		case	0x18FEC117:
+			ODB = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			break;
+		case	0x18FF15A0:
+			dcdcErrorClass = (UINT8)(((*(UINT8*)(rawData +5)))&0x7);
+			dcdcWorkStatus = (UINT8)(((*(UINT8*)(rawData +5))>>3)&0x3);
+			break;
+		case	0x18FF16A1:
+			mainElectricityErrorClass = (UINT8)(((*(UINT8*)(rawData +5)))&0x7);
+			pumpWorkStatus = (UINT8)(((*(UINT8*)(rawData +5))>>3)&0x3);
+			break;
+		case	0x18FF17A2:
+			elecAirCompressorErrorStatus = (UINT8)(((*(UINT8*)(rawData +5)))&0x7);
+			elecAirCompressorWrokStatus = (UINT8)(((*(UINT8*)(rawData +5))>>3)&0x3);
+			break;
+		default:
+			break;
+			*/
+		case	0x18FF06F3:
+			bmsStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0xF);
+			printf("bmsStatus=%d\n",bmsStatus);
+			bmsErrClass = (UINT8)(((*(UINT8*)(rawData +0))>>4)&0xF);
+			printf("bmsErrClass=%d\n",bmsErrClass);
+			chrgConctStatus = (UINT8)(((*(UINT8*)(rawData +1)))&0x3);
+			printf("chrgConctStatus=%d\n",chrgConctStatus);
+			highVolPwrDwnReq = (UINT8)(((*(UINT8*)(rawData +1))>>2)&0x3);
+			printf("highVolPwrDwnReq=%d\n",highVolPwrDwnReq);
+			chrgStatus = (UINT8)(((*(UINT8*)(rawData +1))>>4)&0x7);
+			printf("chrgStatus=%d\n",chrgStatus);
+			bmsErrNum = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("bmsErrNum=%d\n",bmsErrNum);
+			bmsLife = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			printf("bmsLife=%d\n",bmsLife);
+			break;
+		case	0x18FF07F3:
+			maxChrgCurrAllowed = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("maxChrgCurrAllowed=%d\n",maxChrgCurrAllowed);
+			maxDischrgCurrAllowed = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("maxDischrgCurrAllowed=%d\n",maxDischrgCurrAllowed);
+			break;
+		case	0x18FF30F3:
+			battSoc = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("battSoc=%d\n",battSoc);
+			packTotalVol = (UINT16)(((*(UINT16*)(rawData +1)))&0xFFFF);
+			printf("packTotalVol=%d\n",packTotalVol);
+			packTotalCurr = (UINT16)(((*(UINT16*)(rawData +3)))&0xFFFF);
+			printf("packTotalCurr=%d\n",packTotalCurr);
+			insulationR = (UINT16)(((*(UINT16*)(rawData +5)))&0xFFFF);
+			printf("insulationR=%d\n",insulationR);
+			break;
+		case	0x18FF51F3:
+			maxCellVol = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("maxCellVol=%d\n",maxCellVol);
+			minCellVol = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("minCellVol=%d\n",minCellVol);
+			maxCellTemp = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			printf("maxCellTemp=%d\n",maxCellTemp);
+			minCellTemp = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			printf("minCellTemp=%d\n",minCellTemp);
+			avgCellTemp = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			printf("avgCellTemp=%d\n",avgCellTemp);
+			break;
+		case	0x18FF52F3:
+			maxVolSubsysCode = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("maxVolSubsysCode=%d\n",maxVolSubsysCode);
+			maxVolCellCode = (UINT16)(((*(UINT16*)(rawData +1)))&0xFFFF);
+			printf("maxVolCellCode=%d\n",maxVolCellCode);
+			minVolSubsysCode = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("minVolSubsysCode=%d\n",minVolSubsysCode);
+			minVoCelllCode = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("minVoCelllCode=%d\n",minVoCelllCode);
+			break;
+		case	0x18FF53F3:
+			maxTempSubsysCode = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("maxTempSubsysCode=%d\n",maxTempSubsysCode);
+			maxTempCellCode = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			printf("maxTempCellCode=%d\n",maxTempCellCode);
+			minTempSubsysCode = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("minTempSubsysCode=%d\n",minTempSubsysCode);
+			minTempCellCode = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("minTempCellCode=%d\n",minTempCellCode);
+			break;
+		case	0x18FF54F3:
+			numOfChrgableSubsys = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("numOfChrgableSubsys=%d\n",numOfChrgableSubsys);
+			lengthOfChrgableSysCode = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			printf("lengthOfChrgableSysCode=%d\n",lengthOfChrgableSysCode);
+			chrgableSysCode = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("chrgableSysCode=%d\n",chrgableSysCode);
+			chrgableSubsysCode = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("chrgableSubsysCode=%d\n",chrgableSubsysCode);
+			numOfCells = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("numOfCells=%d\n",numOfCells);
+			numOfCellTemp = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			printf("numOfCellTemp=%d\n",numOfCellTemp);
+			numOfBattErr = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			printf("numOfBattErr=%d\n",numOfBattErr);
+			break;
+		case	0x1801FBF3:
+			battCellU[0] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[0]=%d\n",battCellU[0]);
+			battCellU[1] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[1]=%d\n",battCellU[1]);
+			battCellU[2] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[2]=%d\n",battCellU[2]);
+			battCellU[3] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[3]=%d\n",battCellU[3]);
+			break;
+		case	0x1802FBF3:
+			battCellU[4] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[4]=%d\n",battCellU[4]);
+			battCellU[5] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[5]=%d\n",battCellU[5]);
+			battCellU[6] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[6]=%d\n",battCellU[6]);
+			battCellU[7] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[7]=%d\n",battCellU[7]);
+			break;
+		case	0x1803FBF3:
+			battCellU[8] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[8]=%d\n",battCellU[8]);
+			battCellU[9] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[9]=%d\n",battCellU[9]);
+			battCellU[10] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[10]=%d\n",battCellU[10]);
+			battCellU[11] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[11]=%d\n",battCellU[11]);
+			break;
+		case	0x1804FBF3:
+			battCellU[12] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[12]=%d\n",battCellU[12]);
+			battCellU[13] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[13]=%d\n",battCellU[13]);
+			battCellU[14] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[14]=%d\n",battCellU[14]);
+			battCellU[15] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[15]=%d\n",battCellU[15]);
+			break;
+		case	0x1805FBF3:
+			battCellU[16] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[16]=%d\n",battCellU[16]);
+			battCellU[17] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[17]=%d\n",battCellU[17]);
+			battCellU[18] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[18]=%d\n",battCellU[18]);
+			battCellU[19] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[19]=%d\n",battCellU[19]);
+			break;
+		case	0x1806FBF3:
+			battCellU[20] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[20]=%d\n",battCellU[20]);
+			battCellU[21] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[21]=%d\n",battCellU[21]);
+			battCellU[22] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[22]=%d\n",battCellU[22]);
+			battCellU[23] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[23]=%d\n",battCellU[23]);
+			break;
+		case	0x1807FBF3:
+			battCellU[24] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[24]=%d\n",battCellU[24]);
+			battCellU[25] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[25]=%d\n",battCellU[25]);
+			battCellU[26] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[26]=%d\n",battCellU[26]);
+			battCellU[27] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[27]=%d\n",battCellU[27]);
+			break;
+		case	0x1808FBF3:
+			battCellU[28] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[28]=%d\n",battCellU[28]);
+			battCellU[29] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[29]=%d\n",battCellU[29]);
+			battCellU[30] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[30]=%d\n",battCellU[30]);
+			battCellU[31] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[31]=%d\n",battCellU[31]);
+			break;
+		case	0x1809FBF3:
+			battCellU[32] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[32]=%d\n",battCellU[32]);
+			battCellU[33] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[33]=%d\n",battCellU[33]);
+			battCellU[34] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[34]=%d\n",battCellU[34]);
+			battCellU[35] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[35]=%d\n",battCellU[35]);
+			break;
+		case	0x180AFBF3:
+			battCellU[36] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[36]=%d\n",battCellU[36]);
+			battCellU[37] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[37]=%d\n",battCellU[37]);
+			battCellU[38] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[38]=%d\n",battCellU[38]);
+			battCellU[39] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[39]=%d\n",battCellU[39]);
+			break;
+		case	0x180BFBF3:
+			battCellU[40] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[40]=%d\n",battCellU[40]);
+			battCellU[41] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[41]=%d\n",battCellU[41]);
+			battCellU[42] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[42]=%d\n",battCellU[42]);
+			battCellU[43] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[43]=%d\n",battCellU[43]);
+			break;
+		case	0x180CFBF3:
+			battCellU[44] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[44]=%d\n",battCellU[44]);
+			battCellU[45] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[45]=%d\n",battCellU[45]);
+			battCellU[46] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[46]=%d\n",battCellU[46]);
+			battCellU[47] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[47]=%d\n",battCellU[47]);
+			break;
+		case	0x180DFBF3:
+			battCellU[48] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[48]=%d\n",battCellU[48]);
+			battCellU[49] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[49]=%d\n",battCellU[49]);
+			battCellU[50] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[50]=%d\n",battCellU[50]);
+			battCellU[51] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[51]=%d\n",battCellU[51]);
+			break;
+		case	0x180EFBF3:
+			battCellU[52] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[52]=%d\n",battCellU[52]);
+			battCellU[53] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[53]=%d\n",battCellU[53]);
+			battCellU[54] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[54]=%d\n",battCellU[54]);
+			battCellU[55] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[55]=%d\n",battCellU[55]);
+			break;
+		case	0x180FFBF3:
+			battCellU[56] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[56]=%d\n",battCellU[56]);
+			battCellU[57] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[57]=%d\n",battCellU[57]);
+			battCellU[58] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[58]=%d\n",battCellU[58]);
+			battCellU[59] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[59]=%d\n",battCellU[59]);
+			break;
+		case	0x1810FBF3:
+			battCellU[60] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[60]=%d\n",battCellU[60]);
+			battCellU[61] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[61]=%d\n",battCellU[61]);
+			battCellU[62] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[62]=%d\n",battCellU[62]);
+			battCellU[63] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[63]=%d\n",battCellU[63]);
+			break;
+		case	0x1811FBF3:
+			battCellU[64] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[64]=%d\n",battCellU[64]);
+			battCellU[65] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[65]=%d\n",battCellU[65]);
+			battCellU[66] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[66]=%d\n",battCellU[66]);
+			battCellU[67] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[67]=%d\n",battCellU[67]);
+			break;
+		case	0x1812FBF3:
+			battCellU[68] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[68]=%d\n",battCellU[68]);
+			battCellU[69] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[69]=%d\n",battCellU[69]);
+			battCellU[70] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[70]=%d\n",battCellU[70]);
+			battCellU[71] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[71]=%d\n",battCellU[71]);
+			break;
+		case	0x1813FBF3:
+			battCellU[72] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[72]=%d\n",battCellU[72]);
+			battCellU[73] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[73]=%d\n",battCellU[73]);
+			battCellU[74] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[74]=%d\n",battCellU[74]);
+			battCellU[75] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[75]=%d\n",battCellU[75]);
+			break;
+		case	0x1814FBF3:
+			battCellU[76] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[76]=%d\n",battCellU[76]);
+			battCellU[77] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[77]=%d\n",battCellU[77]);
+			battCellU[78] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[78]=%d\n",battCellU[78]);
+			battCellU[79] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[79]=%d\n",battCellU[79]);
+			break;
+		case	0x1815FBF3:
+			battCellU[80] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[80]=%d\n",battCellU[80]);
+			battCellU[81] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[81]=%d\n",battCellU[81]);
+			battCellU[82] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[82]=%d\n",battCellU[82]);
+			battCellU[83] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[83]=%d\n",battCellU[83]);
+			break;
+		case	0x1816FBF3:
+			battCellU[84] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[84]=%d\n",battCellU[84]);
+			battCellU[85] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[85]=%d\n",battCellU[85]);
+			battCellU[86] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[86]=%d\n",battCellU[86]);
+			battCellU[87] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[87]=%d\n",battCellU[87]);
+			break;
+		case	0x1817FBF3:
+			battCellU[88] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[88]=%d\n",battCellU[88]);
+			battCellU[89] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[89]=%d\n",battCellU[89]);
+			battCellU[90] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[90]=%d\n",battCellU[90]);
+			battCellU[91] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[91]=%d\n",battCellU[91]);
+			break;
+		case	0x1818FBF3:
+			battCellU[92] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[92]=%d\n",battCellU[92]);
+			battCellU[93] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[93]=%d\n",battCellU[93]);
+			battCellU[94] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[94]=%d\n",battCellU[94]);
+			battCellU[95] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[95]=%d\n",battCellU[95]);
+			break;
+		case	0x1819FBF3:
+			battCellU[96] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[96]=%d\n",battCellU[96]);
+			battCellU[97] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[97]=%d\n",battCellU[97]);
+			battCellU[98] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[98]=%d\n",battCellU[98]);
+			battCellU[99] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[99]=%d\n",battCellU[99]);
+			break;
+		case	0x181AFBF3:
+			battCellU[100] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[100]=%d\n",battCellU[100]);
+			battCellU[101] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[101]=%d\n",battCellU[101]);
+			battCellU[102] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[102]=%d\n",battCellU[102]);
+			battCellU[103] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[103]=%d\n",battCellU[103]);
+			break;
+		case	0x181BFBF3:
+			battCellU[104] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[104]=%d\n",battCellU[104]);
+			battCellU[105] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[105]=%d\n",battCellU[105]);
+			battCellU[106] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[106]=%d\n",battCellU[106]);
+			battCellU[107] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[107]=%d\n",battCellU[107]);
+			break;
+		case	0x181CFBF3:
+			battCellU[108] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[108]=%d\n",battCellU[108]);
+			battCellU[109] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[109]=%d\n",battCellU[109]);
+			battCellU[110] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[110]=%d\n",battCellU[110]);
+			battCellU[111] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[111]=%d\n",battCellU[111]);
+			break;
+		case	0x181DFBF3:
+			battCellU[112] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[112]=%d\n",battCellU[112]);
+			battCellU[113] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[113]=%d\n",battCellU[113]);
+			battCellU[114] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[114]=%d\n",battCellU[114]);
+			battCellU[115] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[115]=%d\n",battCellU[115]);
+			break;
+		case	0x181EFBF3:
+			battCellU[116] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[116]=%d\n",battCellU[116]);
+			battCellU[117] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[117]=%d\n",battCellU[117]);
+			battCellU[118] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[118]=%d\n",battCellU[118]);
+			battCellU[119] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[119]=%d\n",battCellU[119]);
+			break;
+		case	0x181FFBF3:
+			battCellU[120] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[120]=%d\n",battCellU[120]);
+			battCellU[121] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[121]=%d\n",battCellU[121]);
+			battCellU[122] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[122]=%d\n",battCellU[122]);
+			battCellU[123] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[123]=%d\n",battCellU[123]);
+			break;
+		case	0x1820FBF3:
+			battCellU[124] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[124]=%d\n",battCellU[124]);
+			battCellU[125] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[125]=%d\n",battCellU[125]);
+			battCellU[126] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[126]=%d\n",battCellU[126]);
+			battCellU[127] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[127]=%d\n",battCellU[127]);
+			break;
+		case	0x1821FBF3:
+			battCellU[128] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[128]=%d\n",battCellU[128]);
+			battCellU[129] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[129]=%d\n",battCellU[129]);
+			battCellU[130] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[130]=%d\n",battCellU[130]);
+			battCellU[131] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[131]=%d\n",battCellU[131]);
+			break;
+		case	0x1822FBF3:
+			battCellU[132] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[132]=%d\n",battCellU[132]);
+			battCellU[133] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[133]=%d\n",battCellU[133]);
+			battCellU[134] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[134]=%d\n",battCellU[134]);
+			battCellU[135] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[135]=%d\n",battCellU[135]);
+			break;
+		case	0x1823FBF3:
+			battCellU[136] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[136]=%d\n",battCellU[136]);
+			battCellU[137] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[137]=%d\n",battCellU[137]);
+			battCellU[138] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[138]=%d\n",battCellU[138]);
+			battCellU[139] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[139]=%d\n",battCellU[139]);
+			break;
+		case	0x1824FBF3:
+			battCellU[140] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[140]=%d\n",battCellU[140]);
+			battCellU[141] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[141]=%d\n",battCellU[141]);
+			battCellU[142] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[142]=%d\n",battCellU[142]);
+			battCellU[143] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[143]=%d\n",battCellU[143]);
+			break;
+		case	0x1825FBF3:
+			battCellU[144] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[144]=%d\n",battCellU[144]);
+			battCellU[145] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[145]=%d\n",battCellU[145]);
+			battCellU[146] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[146]=%d\n",battCellU[146]);
+			battCellU[147] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[147]=%d\n",battCellU[147]);
+			break;
+		case	0x1826FBF3:
+			battCellU[148] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[148]=%d\n",battCellU[148]);
+			battCellU[149] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[149]=%d\n",battCellU[149]);
+			battCellU[150] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[150]=%d\n",battCellU[150]);
+			battCellU[151] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[151]=%d\n",battCellU[151]);
+			break;
+		case	0x1827FBF3:
+			battCellU[152] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[152]=%d\n",battCellU[152]);
+			battCellU[153] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[153]=%d\n",battCellU[153]);
+			battCellU[154] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[154]=%d\n",battCellU[154]);
+			battCellU[155] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[155]=%d\n",battCellU[155]);
+			break;
+		case	0x1828FBF3:
+			battCellU[156] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[156]=%d\n",battCellU[156]);
+			battCellU[157] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[157]=%d\n",battCellU[157]);
+			battCellU[158] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[158]=%d\n",battCellU[158]);
+			battCellU[159] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[159]=%d\n",battCellU[159]);
+			break;
+		case	0x1829FBF3:
+			battCellU[160] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[160]=%d\n",battCellU[160]);
+			battCellU[161] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[161]=%d\n",battCellU[161]);
+			battCellU[162] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[162]=%d\n",battCellU[162]);
+			battCellU[163] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[163]=%d\n",battCellU[163]);
+			break;
+		case	0x182AFBF3:
+			battCellU[164] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[164]=%d\n",battCellU[164]);
+			battCellU[165] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[165]=%d\n",battCellU[165]);
+			battCellU[166] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[166]=%d\n",battCellU[166]);
+			battCellU[167] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[167]=%d\n",battCellU[167]);
+			break;
+		case	0x182BFBF3:
+			battCellU[168] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[168]=%d\n",battCellU[168]);
+			battCellU[169] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[169]=%d\n",battCellU[169]);
+			battCellU[170] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[170]=%d\n",battCellU[170]);
+			battCellU[171] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[171]=%d\n",battCellU[171]);
+			break;
+		case	0x182CFBF3:
+			battCellU[172] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[172]=%d\n",battCellU[172]);
+			battCellU[173] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[173]=%d\n",battCellU[173]);
+			battCellU[174] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[174]=%d\n",battCellU[174]);
+			battCellU[175] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[175]=%d\n",battCellU[175]);
+			break;
+		case	0x182DFBF3:
+			battCellU[176] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[176]=%d\n",battCellU[176]);
+			battCellU[177] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[177]=%d\n",battCellU[177]);
+			battCellU[178] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[178]=%d\n",battCellU[178]);
+			battCellU[179] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[179]=%d\n",battCellU[179]);
+			break;
+		case	0x182EFBF3:
+			battCellU[180] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[180]=%d\n",battCellU[180]);
+			battCellU[181] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[181]=%d\n",battCellU[181]);
+			battCellU[182] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[182]=%d\n",battCellU[182]);
+			battCellU[183] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[183]=%d\n",battCellU[183]);
+			break;
+		case	0x182FFBF3:
+			battCellU[184] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[184]=%d\n",battCellU[184]);
+			battCellU[185] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[185]=%d\n",battCellU[185]);
+			battCellU[186] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[186]=%d\n",battCellU[186]);
+			battCellU[187] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[187]=%d\n",battCellU[187]);
+			break;
+		case	0x1830FBF3:
+			battCellU[188] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[188]=%d\n",battCellU[188]);
+			battCellU[189] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[189]=%d\n",battCellU[189]);
+			battCellU[190] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[190]=%d\n",battCellU[190]);
+			battCellU[191] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[191]=%d\n",battCellU[191]);
+			break;
+		case	0x1831FBF3:
+			battCellU[192] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[192]=%d\n",battCellU[192]);
+			battCellU[193] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[193]=%d\n",battCellU[193]);
+			battCellU[194] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[194]=%d\n",battCellU[194]);
+			battCellU[195] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[195]=%d\n",battCellU[195]);
+			break;
+		case	0x1832FBF3:
+			battCellU[196] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[196]=%d\n",battCellU[196]);
+			battCellU[197] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[197]=%d\n",battCellU[197]);
+			battCellU[198] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[198]=%d\n",battCellU[198]);
+			battCellU[199] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[199]=%d\n",battCellU[199]);
+			break;
+		case	0x1833FBF3:
+			battCellU[200] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[200]=%d\n",battCellU[200]);
+			battCellU[201] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[201]=%d\n",battCellU[201]);
+			battCellU[202] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[202]=%d\n",battCellU[202]);
+			battCellU[203] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[203]=%d\n",battCellU[203]);
+			break;
+		case	0x1834FBF3:
+			battCellU[204] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[204]=%d\n",battCellU[204]);
+			battCellU[205] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[205]=%d\n",battCellU[205]);
+			battCellU[206] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[206]=%d\n",battCellU[206]);
+			battCellU[207] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[207]=%d\n",battCellU[207]);
+			break;
+		case	0x1835FBF3:
+			battCellU[208] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[208]=%d\n",battCellU[208]);
+			battCellU[209] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[209]=%d\n",battCellU[209]);
+			battCellU[210] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[210]=%d\n",battCellU[210]);
+			battCellU[211] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[211]=%d\n",battCellU[211]);
+			break;
+		case	0x1836FBF3:
+			battCellU[212] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[212]=%d\n",battCellU[212]);
+			battCellU[213] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[213]=%d\n",battCellU[213]);
+			battCellU[214] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[214]=%d\n",battCellU[214]);
+			battCellU[215] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[215]=%d\n",battCellU[215]);
+			break;
+		case	0x1837FBF3:
+			battCellU[216] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[216]=%d\n",battCellU[216]);
+			battCellU[217] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[217]=%d\n",battCellU[217]);
+			battCellU[218] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[218]=%d\n",battCellU[218]);
+			battCellU[219] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[219]=%d\n",battCellU[219]);
+			break;
+		case	0x1838FBF3:
+			battCellU[220] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[220]=%d\n",battCellU[220]);
+			battCellU[221] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[221]=%d\n",battCellU[221]);
+			battCellU[222] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[222]=%d\n",battCellU[222]);
+			battCellU[223] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[223]=%d\n",battCellU[223]);
+			break;
+		case	0x1839FBF3:
+			battCellU[224] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[224]=%d\n",battCellU[224]);
+			battCellU[225] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[225]=%d\n",battCellU[225]);
+			battCellU[226] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[226]=%d\n",battCellU[226]);
+			battCellU[227] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[227]=%d\n",battCellU[227]);
+			break;
+		case	0x183AFBF3:
+			battCellU[228] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[228]=%d\n",battCellU[228]);
+			battCellU[229] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[229]=%d\n",battCellU[229]);
+			battCellU[230] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[230]=%d\n",battCellU[230]);
+			battCellU[231] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[231]=%d\n",battCellU[231]);
+			break;
+		case	0x183BFBF3:
+			battCellU[232] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[232]=%d\n",battCellU[232]);
+			battCellU[233] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[233]=%d\n",battCellU[233]);
+			battCellU[234] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[234]=%d\n",battCellU[234]);
+			battCellU[235] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[235]=%d\n",battCellU[235]);
+			break;
+		case	0x183CFBF3:
+			battCellU[236] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[236]=%d\n",battCellU[236]);
+			battCellU[237] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[237]=%d\n",battCellU[237]);
+			battCellU[238] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[238]=%d\n",battCellU[238]);
+			battCellU[239] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[239]=%d\n",battCellU[239]);
+			break;
+		case	0x183DFBF3:
+			battCellU[240] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[240]=%d\n",battCellU[240]);
+			battCellU[241] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[241]=%d\n",battCellU[241]);
+			battCellU[242] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[242]=%d\n",battCellU[242]);
+			battCellU[243] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[243]=%d\n",battCellU[243]);
+			break;
+		case	0x183EFBF3:
+			battCellU[244] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[244]=%d\n",battCellU[244]);
+			battCellU[245] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[245]=%d\n",battCellU[245]);
+			battCellU[246] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[246]=%d\n",battCellU[246]);
+			battCellU[247] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[247]=%d\n",battCellU[247]);
+			break;
+		case	0x183FFBF3:
+			battCellU[248] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[248]=%d\n",battCellU[248]);
+			battCellU[249] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[249]=%d\n",battCellU[249]);
+			battCellU[250] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[250]=%d\n",battCellU[250]);
+			battCellU[251] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[251]=%d\n",battCellU[251]);
+			break;
+		case	0x1840FBF3:
+			battCellU[252] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[252]=%d\n",battCellU[252]);
+			battCellU[253] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[253]=%d\n",battCellU[253]);
+			battCellU[254] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[254]=%d\n",battCellU[254]);
+			battCellU[255] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[255]=%d\n",battCellU[255]);
+			break;
+		case	0x1841FBF3:
+			battCellU[256] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[256]=%d\n",battCellU[256]);
+			battCellU[257] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[257]=%d\n",battCellU[257]);
+			battCellU[258] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[258]=%d\n",battCellU[258]);
+			battCellU[259] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[259]=%d\n",battCellU[259]);
+			break;
+		case	0x1842FBF3:
+			battCellU[260] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[260]=%d\n",battCellU[260]);
+			battCellU[261] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[261]=%d\n",battCellU[261]);
+			battCellU[262] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[262]=%d\n",battCellU[262]);
+			battCellU[263] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[263]=%d\n",battCellU[263]);
+			break;
+		case	0x1843FBF3:
+			battCellU[264] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[264]=%d\n",battCellU[264]);
+			battCellU[265] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[265]=%d\n",battCellU[265]);
+			battCellU[266] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[266]=%d\n",battCellU[266]);
+			battCellU[267] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[267]=%d\n",battCellU[267]);
+			break;
+		case	0x1844FBF3:
+			battCellU[268] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[268]=%d\n",battCellU[268]);
+			battCellU[269] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[269]=%d\n",battCellU[269]);
+			battCellU[270] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[270]=%d\n",battCellU[270]);
+			battCellU[271] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[271]=%d\n",battCellU[271]);
+			break;
+		case	0x1845FBF3:
+			battCellU[272] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[272]=%d\n",battCellU[272]);
+			battCellU[273] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[273]=%d\n",battCellU[273]);
+			battCellU[274] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[274]=%d\n",battCellU[274]);
+			battCellU[275] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[275]=%d\n",battCellU[275]);
+			break;
+		case	0x1846FBF3:
+			battCellU[276] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[276]=%d\n",battCellU[276]);
+			battCellU[277] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[277]=%d\n",battCellU[277]);
+			battCellU[278] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[278]=%d\n",battCellU[278]);
+			battCellU[279] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[279]=%d\n",battCellU[279]);
+			break;
+		case	0x1847FBF3:
+			battCellU[280] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[280]=%d\n",battCellU[280]);
+			battCellU[281] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[281]=%d\n",battCellU[281]);
+			battCellU[282] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[282]=%d\n",battCellU[282]);
+			battCellU[283] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[283]=%d\n",battCellU[283]);
+			break;
+		case	0x1848FBF3:
+			battCellU[284] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[284]=%d\n",battCellU[284]);
+			battCellU[285] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[285]=%d\n",battCellU[285]);
+			battCellU[286] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[286]=%d\n",battCellU[286]);
+			battCellU[287] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[287]=%d\n",battCellU[287]);
+			break;
+		case	0x1849FBF3:
+			battCellU[288] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[288]=%d\n",battCellU[288]);
+			battCellU[289] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[289]=%d\n",battCellU[289]);
+			battCellU[290] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[290]=%d\n",battCellU[290]);
+			battCellU[291] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[291]=%d\n",battCellU[291]);
+			break;
+		case	0x184AFBF3:
+			battCellU[292] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[292]=%d\n",battCellU[292]);
+			battCellU[293] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[293]=%d\n",battCellU[293]);
+			battCellU[294] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[294]=%d\n",battCellU[294]);
+			battCellU[295] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[295]=%d\n",battCellU[295]);
+			break;
+		case	0x184BFBF3:
+			battCellU[296] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[296]=%d\n",battCellU[296]);
+			battCellU[297] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[297]=%d\n",battCellU[297]);
+			battCellU[298] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[298]=%d\n",battCellU[298]);
+			battCellU[299] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[299]=%d\n",battCellU[299]);
+			break;
+		case	0x184CFBF3:
+			battCellU[300] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[300]=%d\n",battCellU[300]);
+			battCellU[301] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[301]=%d\n",battCellU[301]);
+			battCellU[302] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[302]=%d\n",battCellU[302]);
+			battCellU[303] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[303]=%d\n",battCellU[303]);
+			break;
+		case	0x184DFBF3:
+			battCellU[304] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[304]=%d\n",battCellU[304]);
+			battCellU[305] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[305]=%d\n",battCellU[305]);
+			battCellU[306] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[306]=%d\n",battCellU[306]);
+			battCellU[307] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[307]=%d\n",battCellU[307]);
+			break;
+		case	0x184EFBF3:
+			battCellU[308] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[308]=%d\n",battCellU[308]);
+			battCellU[309] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[309]=%d\n",battCellU[309]);
+			battCellU[310] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[310]=%d\n",battCellU[310]);
+			battCellU[311] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[311]=%d\n",battCellU[311]);
+			break;
+		case	0x184FFBF3:
+			battCellU[312] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[312]=%d\n",battCellU[312]);
+			battCellU[313] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[313]=%d\n",battCellU[313]);
+			battCellU[314] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[314]=%d\n",battCellU[314]);
+			battCellU[315] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[315]=%d\n",battCellU[315]);
+			break;
+		case	0x1850FBF3:
+			battCellU[316] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[316]=%d\n",battCellU[316]);
+			battCellU[317] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[317]=%d\n",battCellU[317]);
+			battCellU[318] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[318]=%d\n",battCellU[318]);
+			battCellU[319] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[319]=%d\n",battCellU[319]);
+			break;
+		case	0x1851FBF3:
+			battCellU[320] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[320]=%d\n",battCellU[320]);
+			battCellU[321] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[321]=%d\n",battCellU[321]);
+			battCellU[322] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[322]=%d\n",battCellU[322]);
+			battCellU[323] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[323]=%d\n",battCellU[323]);
+			break;
+		case	0x1852FBF3:
+			battCellU[324] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[324]=%d\n",battCellU[324]);
+			battCellU[325] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[325]=%d\n",battCellU[325]);
+			battCellU[326] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[326]=%d\n",battCellU[326]);
+			battCellU[327] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[327]=%d\n",battCellU[327]);
+			break;
+		case	0x1853FBF3:
+			battCellU[328] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[328]=%d\n",battCellU[328]);
+			battCellU[329] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[329]=%d\n",battCellU[329]);
+			battCellU[330] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[330]=%d\n",battCellU[330]);
+			battCellU[331] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[331]=%d\n",battCellU[331]);
+			break;
+		case	0x1854FBF3:
+			battCellU[332] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[332]=%d\n",battCellU[332]);
+			battCellU[333] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[333]=%d\n",battCellU[333]);
+			battCellU[334] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[334]=%d\n",battCellU[334]);
+			battCellU[335] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[335]=%d\n",battCellU[335]);
+			break;
+		case	0x1855FBF3:
+			battCellU[336] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[336]=%d\n",battCellU[336]);
+			battCellU[337] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[337]=%d\n",battCellU[337]);
+			battCellU[338] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[338]=%d\n",battCellU[338]);
+			battCellU[339] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[339]=%d\n",battCellU[339]);
+			break;
+		case	0x1856FBF3:
+			battCellU[340] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[340]=%d\n",battCellU[340]);
+			battCellU[341] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[341]=%d\n",battCellU[341]);
+			battCellU[342] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[342]=%d\n",battCellU[342]);
+			battCellU[343] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[343]=%d\n",battCellU[343]);
+			break;
+		case	0x1857FBF3:
+			battCellU[344] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[344]=%d\n",battCellU[344]);
+			battCellU[345] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[345]=%d\n",battCellU[345]);
+			battCellU[346] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[346]=%d\n",battCellU[346]);
+			battCellU[347] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[347]=%d\n",battCellU[347]);
+			break;
+		case	0x1858FBF3:
+			battCellU[348] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[348]=%d\n",battCellU[348]);
+			battCellU[349] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[349]=%d\n",battCellU[349]);
+			battCellU[350] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[350]=%d\n",battCellU[350]);
+			battCellU[351] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[351]=%d\n",battCellU[351]);
+			break;
+		case	0x1859FBF3:
+			battCellU[352] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[352]=%d\n",battCellU[352]);
+			battCellU[353] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[353]=%d\n",battCellU[353]);
+			battCellU[354] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[354]=%d\n",battCellU[354]);
+			battCellU[355] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[355]=%d\n",battCellU[355]);
+			break;
+		case	0x185AFBF3:
+			battCellU[356] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[356]=%d\n",battCellU[356]);
+			battCellU[357] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[357]=%d\n",battCellU[357]);
+			battCellU[358] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[358]=%d\n",battCellU[358]);
+			battCellU[359] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[359]=%d\n",battCellU[359]);
+			break;
+		case	0x185BFBF3:
+			battCellU[360] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[360]=%d\n",battCellU[360]);
+			battCellU[361] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[361]=%d\n",battCellU[361]);
+			battCellU[362] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[362]=%d\n",battCellU[362]);
+			battCellU[363] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[363]=%d\n",battCellU[363]);
+			break;
+		case	0x185CFBF3:
+			battCellU[364] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[364]=%d\n",battCellU[364]);
+			battCellU[365] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[365]=%d\n",battCellU[365]);
+			battCellU[366] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[366]=%d\n",battCellU[366]);
+			battCellU[367] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[367]=%d\n",battCellU[367]);
+			break;
+		case	0x185DFBF3:
+			battCellU[368] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[368]=%d\n",battCellU[368]);
+			battCellU[369] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[369]=%d\n",battCellU[369]);
+			battCellU[370] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[370]=%d\n",battCellU[370]);
+			battCellU[371] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[371]=%d\n",battCellU[371]);
+			break;
+		case	0x185EFBF3:
+			battCellU[372] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[372]=%d\n",battCellU[372]);
+			battCellU[373] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[373]=%d\n",battCellU[373]);
+			battCellU[374] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[374]=%d\n",battCellU[374]);
+			battCellU[375] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[375]=%d\n",battCellU[375]);
+			break;
+		case	0x185FFBF3:
+			battCellU[376] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[376]=%d\n",battCellU[376]);
+			battCellU[377] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[377]=%d\n",battCellU[377]);
+			battCellU[378] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[378]=%d\n",battCellU[378]);
+			battCellU[379] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[379]=%d\n",battCellU[379]);
+			break;
+		case	0x1860FBF3:
+			battCellU[380] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			printf("battCellU[380]=%d\n",battCellU[380]);
+			battCellU[381] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			printf("battCellU[381]=%d\n",battCellU[381]);
+			battCellU[382] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			printf("battCellU[382]=%d\n",battCellU[382]);
+			battCellU[383] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			printf("battCellU[383]=%d\n",battCellU[383]);
+			break;
+		case	0x18A0FBF3:
+			battCellTemp[0] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("battCellTemp[0]=%d\n",battCellTemp[0]);
+			battCellTemp[1] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			printf("battCellTemp[1]=%d\n",battCellTemp[1]);
+			battCellTemp[2] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("battCellTemp[2]=%d\n",battCellTemp[2]);
+			battCellTemp[3] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("battCellTemp[3]=%d\n",battCellTemp[3]);
+			battCellTemp[4] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			printf("battCellTemp[4]=%d\n",battCellTemp[4]);
+			battCellTemp[5] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			printf("battCellTemp[5]=%d\n",battCellTemp[5]);
+			battCellTemp[6] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			printf("battCellTemp[6]=%d\n",battCellTemp[6]);
+			battCellTemp[7] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			printf("battCellTemp[7]=%d\n",battCellTemp[7]);
+			break;
+		case	0x18A1FBF3:
+			battCellTemp[8] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("battCellTemp[8]=%d\n",battCellTemp[8]);
+			battCellTemp[9] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			printf("battCellTemp[9]=%d\n",battCellTemp[9]);
+			battCellTemp[10] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("battCellTemp[10]=%d\n",battCellTemp[10]);
+			battCellTemp[11] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("battCellTemp[11]=%d\n",battCellTemp[11]);
+			battCellTemp[12] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			printf("battCellTemp[12]=%d\n",battCellTemp[12]);
+			battCellTemp[13] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			printf("battCellTemp[13]=%d\n",battCellTemp[13]);
+			battCellTemp[14] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			printf("battCellTemp[14]=%d\n",battCellTemp[14]);
+			battCellTemp[15] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			printf("battCellTemp[15]=%d\n",battCellTemp[15]);
+			break;
+		case	0x18A2FBF3:
+			battCellTemp[16] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("battCellTemp[16]=%d\n",battCellTemp[16]);
+			battCellTemp[17] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			printf("battCellTemp[17]=%d\n",battCellTemp[17]);
+			battCellTemp[18] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("battCellTemp[18]=%d\n",battCellTemp[18]);
+			battCellTemp[19] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("battCellTemp[19]=%d\n",battCellTemp[19]);
+			battCellTemp[20] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			printf("battCellTemp[20]=%d\n",battCellTemp[20]);
+			battCellTemp[21] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			printf("battCellTemp[21]=%d\n",battCellTemp[21]);
+			battCellTemp[22] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			printf("battCellTemp[22]=%d\n",battCellTemp[22]);
+			battCellTemp[23] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			printf("battCellTemp[23]=%d\n",battCellTemp[23]);
+			battCellTemp[24] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("battCellTemp[24]=%d\n",battCellTemp[24]);
+			battCellTemp[25] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			printf("battCellTemp[25]=%d\n",battCellTemp[25]);
+			battCellTemp[26] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("battCellTemp[26]=%d\n",battCellTemp[26]);
+			battCellTemp[27] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("battCellTemp[27]=%d\n",battCellTemp[27]);
+			battCellTemp[28] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			printf("battCellTemp[28]=%d\n",battCellTemp[28]);
+			battCellTemp[29] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			printf("battCellTemp[29]=%d\n",battCellTemp[29]);
+			battCellTemp[30] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			printf("battCellTemp[30]=%d\n",battCellTemp[30]);
+			battCellTemp[31] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			printf("battCellTemp[31]=%d\n",battCellTemp[31]);
+			break;
+		case	0x18A3FBF3:
+			battCellTemp[32] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("battCellTemp[32]=%d\n",battCellTemp[32]);
+			battCellTemp[33] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			printf("battCellTemp[33]=%d\n",battCellTemp[33]);
+			battCellTemp[34] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("battCellTemp[34]=%d\n",battCellTemp[34]);
+			battCellTemp[35] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("battCellTemp[35]=%d\n",battCellTemp[35]);
+			battCellTemp[36] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			printf("battCellTemp[36]=%d\n",battCellTemp[36]);
+			battCellTemp[37] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			printf("battCellTemp[37]=%d\n",battCellTemp[37]);
+			battCellTemp[38] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			printf("battCellTemp[38]=%d\n",battCellTemp[38]);
+			battCellTemp[39] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			printf("battCellTemp[39]=%d\n",battCellTemp[39]);
+			break;
+		case	0x18A4FBF3:
+			battCellTemp[40] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("battCellTemp[40]=%d\n",battCellTemp[40]);
+			battCellTemp[41] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			printf("battCellTemp[41]=%d\n",battCellTemp[41]);
+			battCellTemp[42] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("battCellTemp[42]=%d\n",battCellTemp[42]);
+			battCellTemp[43] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("battCellTemp[43]=%d\n",battCellTemp[43]);
+			battCellTemp[44] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			printf("battCellTemp[44]=%d\n",battCellTemp[44]);
+			battCellTemp[45] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			printf("battCellTemp[45]=%d\n",battCellTemp[45]);
+			battCellTemp[46] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			printf("battCellTemp[46]=%d\n",battCellTemp[46]);
+			battCellTemp[47] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			printf("battCellTemp[47]=%d\n",battCellTemp[47]);
+			break;
+		case	0x18A5FBF3:
+			battCellTemp[48] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("battCellTemp[48]=%d\n",battCellTemp[48]);
+			battCellTemp[49] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			printf("battCellTemp[49]=%d\n",battCellTemp[49]);
+			battCellTemp[50] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("battCellTemp[50]=%d\n",battCellTemp[50]);
+			battCellTemp[51] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("battCellTemp[51]=%d\n",battCellTemp[51]);
+			battCellTemp[52] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			printf("battCellTemp[52]=%d\n",battCellTemp[52]);
+			battCellTemp[53] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			printf("battCellTemp[53]=%d\n",battCellTemp[53]);
+			battCellTemp[54] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			printf("battCellTemp[54]=%d\n",battCellTemp[54]);
+			battCellTemp[55] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			printf("battCellTemp[55]=%d\n",battCellTemp[55]);
+			break;
+		case	0x18A6FBF3:
+			battCellTemp[56] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("battCellTemp[56]=%d\n",battCellTemp[56]);
+			battCellTemp[57] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			printf("battCellTemp[57]=%d\n",battCellTemp[57]);
+			battCellTemp[58] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("battCellTemp[58]=%d\n",battCellTemp[58]);
+			battCellTemp[59] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("battCellTemp[59]=%d\n",battCellTemp[59]);
+			battCellTemp[60] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			printf("battCellTemp[60]=%d\n",battCellTemp[60]);
+			battCellTemp[61] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			printf("battCellTemp[61]=%d\n",battCellTemp[61]);
+			battCellTemp[62] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			printf("battCellTemp[62]=%d\n",battCellTemp[62]);
+			battCellTemp[63] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			printf("battCellTemp[63]=%d\n",battCellTemp[63]);
+			break;
+		case	0x18FF08F3:
+			mainPosRlyStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0x3);
+			printf("mainPosRlyStatus=%d\n",mainPosRlyStatus);
+			preRlyStatus = (UINT8)(((*(UINT8*)(rawData +0))>>2)&0x3);
+			printf("preRlyStatus=%d\n",preRlyStatus);
+			mainNegRlyStatus = (UINT8)(((*(UINT8*)(rawData +0))>>4)&0x3);
+			printf("mainNegRlyStatus=%d\n",mainNegRlyStatus);
+			thrRlyStatus = (UINT8)(((*(UINT8*)(rawData +0))>>6)&0x3);
+			printf("thrRlyStatus=%d\n",thrRlyStatus);
+			ptc1RlyStatus = (UINT8)(((*(UINT8*)(rawData +1)))&0x3);
+			printf("ptc1RlyStatus=%d\n",ptc1RlyStatus);
+			airCondRlyStatus = (UINT8)(((*(UINT8*)(rawData +1))>>2)&0x3);
+			printf("airCondRlyStatus=%d\n",airCondRlyStatus);
+			dcChrg1PosRlyStatus = (UINT8)(((*(UINT8*)(rawData +1))>>4)&0x3);
+			printf("dcChrg1PosRlyStatus=%d\n",dcChrg1PosRlyStatus);
+			dcChrg1NegRlyStatus = (UINT8)(((*(UINT8*)(rawData +1))>>6)&0x3);
+			printf("dcChrg1NegRlyStatus=%d\n",dcChrg1NegRlyStatus);
+			dcChrg2PosRlyStatus = (UINT8)(((*(UINT8*)(rawData +2)))&0x3);
+			printf("dcChrg2PosRlyStatus=%d\n",dcChrg2PosRlyStatus);
+			dcChrg2NegRlyStatus = (UINT8)(((*(UINT8*)(rawData +2))>>2)&0x3);
+			printf("dcChrg2NegRlyStatus=%d\n",dcChrg2NegRlyStatus);
+			heatPosRlyStatus = (UINT8)(((*(UINT8*)(rawData +2))>>4)&0x3);
+			printf("heatPosRlyStatus=%d\n",heatPosRlyStatus);
+			heatNegRlyStatus = (UINT8)(((*(UINT8*)(rawData +2))>>6)&0x3);
+			printf("heatNegRlyStatus=%d\n",heatNegRlyStatus);
+			coolRlyStatus = (UINT8)(((*(UINT8*)(rawData +3)))&0x3);
+			printf("coolRlyStatus=%d\n",coolRlyStatus);
+			ptc2RlyStatus = (UINT8)(((*(UINT8*)(rawData +3))>>2)&0x3);
+			printf("ptc2RlyStatus=%d\n",ptc2RlyStatus);
+			mainPosRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +4)))&0x3);
+			printf("mainPosRlyErrStatus=%d\n",mainPosRlyErrStatus);
+			preRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +4))>>2)&0x3);
+			printf("preRlyErrStatus=%d\n",preRlyErrStatus);
+			mainNegRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +4))>>4)&0x3);
+			printf("mainNegRlyErrStatus=%d\n",mainNegRlyErrStatus);
+			thrRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +4))>>6)&0x3);
+			printf("thrRlyErrStatus=%d\n",thrRlyErrStatus);
+			ptc1RlyErrStatus = (UINT8)(((*(UINT8*)(rawData +5)))&0x3);
+			printf("ptc1RlyErrStatus=%d\n",ptc1RlyErrStatus);
+			airCondRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +5))>>2)&0x3);
+			printf("airCondRlyErrStatus=%d\n",airCondRlyErrStatus);
+			dcChrg1PosRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +5))>>4)&0x3);
+			printf("dcChrg1PosRlyErrStatus=%d\n",dcChrg1PosRlyErrStatus);
+			dcChrg1NegRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +5))>>6)&0x3);
+			printf("dcChrg1NegRlyErrStatus=%d\n",dcChrg1NegRlyErrStatus);
+			dcChrg2PosRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +6)))&0x3);
+			printf("dcChrg2PosRlyErrStatus=%d\n",dcChrg2PosRlyErrStatus);
+			dcChrg2NegRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +6))>>2)&0x3);
+			printf("dcChrg2NegRlyErrStatus=%d\n",dcChrg2NegRlyErrStatus);
+			heatPosRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +6))>>4)&0x3);
+			printf("heatPosRlyErrStatus=%d\n",heatPosRlyErrStatus);
+			heatNegRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +6))>>6)&0x3);
+			printf("heatNegRlyErrStatus=%d\n",heatNegRlyErrStatus);
+			coolRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +7)))&0x3);
+			printf("coolRlyErrStatus=%d\n",coolRlyErrStatus);
+			ptc2RlyErrStatus = (UINT8)(((*(UINT8*)(rawData +7))>>2)&0x3);
+			printf("ptc2RlyErrStatus=%d\n",ptc2RlyErrStatus);
+			break;
+		case	0x18FF60F3:
+			accChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			printf("accChrgAh=%d\n",accChrgAh);
+			accDischrgAh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			printf("accDischrgAh=%d\n",accDischrgAh);
+			break;
+		case	0x18FF61F3:
+			accChrgkWh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			printf("accChrgkWh=%d\n",accChrgkWh);
+			accDischrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			printf("accDischrgkWh=%d\n",accDischrgkWh);
+			break;
+		case	0x18FF62F3:
+			battSOH = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("battSOH=%d\n",battSOH);
+			break;
+		case	0x18FF63F3:
+			SN[0] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("SN[0]=%d\n",SN[0]);
+			SN[1] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			printf("SN[1]=%d\n",SN[1]);
+			SN[2] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("SN[2]=%d\n",SN[2]);
+			SN[3] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("SN[3]=%d\n",SN[3]);
+			SN[4] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			printf("SN[4]=%d\n",SN[4]);
+			SN[5] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			printf("SN[5]=%d\n",SN[5]);
+			SN[6] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			printf("SN[6]=%d\n",SN[6]);
+			SN[7] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			printf("SN[7]=%d\n",SN[7]);
+			break;
+		case	0x18FF64F3:
+			SN[8] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("SN[8]=%d\n",SN[8]);
+			SN[9] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			printf("SN[9]=%d\n",SN[9]);
+			SN[10] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("SN[10]=%d\n",SN[10]);
+			SN[11] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("SN[11]=%d\n",SN[11]);
+			SN[12] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			printf("SN[12]=%d\n",SN[12]);
+			SN[13] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			printf("SN[13]=%d\n",SN[13]);
+			SN[14] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			printf("SN[14]=%d\n",SN[14]);
+			SN[15] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			printf("SN[15]=%d\n",SN[15]);
+			break;
+		case	0x18FF65F3:
+			SN[16] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("SN[16]=%d\n",SN[16]);
+			SN[17] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			printf("SN[17]=%d\n",SN[17]);
+			SN[18] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("SN[18]=%d\n",SN[18]);
+			SN[19] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("SN[19]=%d\n",SN[19]);
+			SN[20] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			printf("SN[20]=%d\n",SN[20]);
+			SN[21] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			printf("SN[21]=%d\n",SN[21]);
+			SN[22] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			printf("SN[22]=%d\n",SN[22]);
+			SN[23] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			printf("SN[23]=%d\n",SN[23]);
+			break;
+		case	0x18FF66F3:
+			accRecvryChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			printf("accRecvryChrgAh=%d\n",accRecvryChrgAh);
+			accRecvryChrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			printf("accRecvryChrgkWh=%d\n",accRecvryChrgkWh);
+			break;
+		case	0x18FF67F3:
+			accStationChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			printf("accStationChrgAh=%d\n",accStationChrgAh);
+			accStationChrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			printf("accStationChrgkWh=%d\n",accStationChrgkWh);
+			break;
+		case	0x18FF68F3:
+			accGunChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			printf("accGunChrgAh=%d\n",accGunChrgAh);
+			accGunChrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			printf("accGunChrgkWh=%d\n",accGunChrgkWh);
+			break;
+		case	0x18FF69F3:
+			sglChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			printf("sglChrgAh=%d\n",sglChrgAh);
+			sglChrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			printf("sglChrgkWh=%d\n",sglChrgkWh);
+			break;
+		case	0x18FF10D0:
+			bmsHVOn = (UINT8)(((*(UINT8*)(rawData +0)))&0x3);
+			printf("bmsHVOn=%d\n",bmsHVOn);
+			break;
+		case	0x18FF20EF:
+			vcuDCVol = (UINT16)(((*(UINT16*)(rawData +1)))&0xFFFF);
+			printf("vcuDCVol=%d\n",vcuDCVol);
+			break;
+		case	0x18FF13A3:
+			acRelayStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0x3);
+			printf("acRelayStatus=%d\n",acRelayStatus);
+			ptcRelayStatus = (UINT8)(((*(UINT8*)(rawData +0))>>2)&0x3);
+			printf("ptcRelayStatus=%d\n",ptcRelayStatus);
+			mainRelayStatus = (UINT8)(((*(UINT8*)(rawData +0))>>3)&0x3);
+			printf("mainRelayStatus=%d\n",mainRelayStatus);
+			preRelayStatus = (UINT8)(((*(UINT8*)(rawData +0))>>4)&0x3);
+			printf("preRelayStatus=%d\n",preRelayStatus);
+			ptc2RelayStatus = (UINT8)(((*(UINT8*)(rawData +1)))&0x3);
+			printf("ptc2RelayStatus=%d\n",ptc2RelayStatus);
+			acRelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +4)))&0x3);
+			printf("acRelayErrorStatus=%d\n",acRelayErrorStatus);
+			ptcRelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +4))>>2)&0x3);
+			printf("ptcRelayErrorStatus=%d\n",ptcRelayErrorStatus);
+			mainRelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +4))>>4)&0x3);
+			printf("mainRelayErrorStatus=%d\n",mainRelayErrorStatus);
+			preRelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +4))>>6)&0x3);
+			printf("preRelayErrorStatus=%d\n",preRelayErrorStatus);
+			hvLockErrorStatus = (UINT8)(((*(UINT8*)(rawData +5)))&0x3);
+			printf("hvLockErrorStatus=%d\n",hvLockErrorStatus);
+			ptc2RelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +5))>>2)&0x3);
+			printf("ptc2RelayErrorStatus=%d\n",ptc2RelayErrorStatus);
+			break;
+		case	0x18FF1154:
+			ebcStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			printf("ebcStatus=%d\n",ebcStatus);
+			ebcAskHVOn = (UINT8)(((*(UINT8*)(rawData +1)))&0x1);
+			printf("ebcAskHVOn=%d\n",ebcAskHVOn);
+			ebcAskHVOff = (UINT8)(((*(UINT8*)(rawData +1))>>1)&0x1);
+			printf("ebcAskHVOff=%d\n",ebcAskHVOff);
+			retainLockSignal = (UINT8)(((*(UINT8*)(rawData +1))>>3)&0x1);
+			printf("retainLockSignal=%d\n",retainLockSignal);
+			dischargeLockSignal = (UINT8)(((*(UINT8*)(rawData +1))>>5)&0x1);
+			printf("dischargeLockSignal=%d\n",dischargeLockSignal);
+			chargeLockSignal = (UINT8)(((*(UINT8*)(rawData +1))>>6)&0x1);
+			printf("chargeLockSignal=%d\n",chargeLockSignal);
+			errorClass = (UINT8)(((*(UINT16*)(rawData +2))>>2)&0xFF);
+			printf("errorClass=%d\n",errorClass);
+			errorCode1 = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("errorCode1=%d\n",errorCode1);
+			errorCode2 = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			printf("errorCode2=%d\n",errorCode2);
+			chargeFlag = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			printf("chargeFlag=%d\n",chargeFlag);
+			exchangeBattAirPressure = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			printf("exchangeBattAirPressure=%d\n",exchangeBattAirPressure);
+			lifeSignal = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			printf("lifeSignal=%d\n",lifeSignal);
+			break;
+		case	0x18FF09D0:
+			vehicleStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0x3);
+			printf("vehicleStatus=%d\n",vehicleStatus);
+			currentGearPosition = (UINT8)(((*(UINT8*)(rawData +1)))&0x1F);
+			printf("currentGearPosition=%d\n",currentGearPosition);
+			break;
+		case	0x18FEF1D0:
+			parkingBreakStatus = (UINT8)(((*(UINT8*)(rawData +0))>>2)&0x3);
+			printf("parkingBreakStatus=%d\n",parkingBreakStatus);
+			breakingStatus = (UINT8)(((*(UINT8*)(rawData +3))>>4)&0x3);
+			printf("breakingStatus=%d\n",breakingStatus);
+			break;
+		case	0x18FF55D0:
+			if(*rawData >= 0x1 && *rawData <= 3)
+			{
+				for(UINT8 i = 0; i < 7; i++)
+				{
+					if(i+((*rawData)-1)*7 <17)
 					{
-						UDSNegtiveAnswer(0x05,i,0xFF);
+						VIN[i+((*rawData)-1)*7] = *(rawData + i+1 ) & 0xFF;
+                        printf("VIN[%d]=%d\n",i+((*rawData)-1)*7,VIN[i+((*rawData)-1)*7]);
 					}
-					break;
-				default:								
-					UDSNegtiveAnswer(0x04,i,0xFF);  //the service is not surpported
-					break;
-					
+				}
 			}
-		}
-	}
-
-	for(i=0; i<2; i++)
-	{
-		UDSService[i] = 0;
-		UDSSubService[i] = 0;
+			break;
+		case	0x18FEAE17:
+			frontBreakingPressure = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			printf("frontBreakingPressure=%d\n",frontBreakingPressure);
+			backBreakingPressure = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			printf("backBreakingPressure=%d\n",backBreakingPressure);
+			frontBreakingPressureErrorStatus = (UINT8)(((*(UINT8*)(rawData +6)))&0x3);
+			printf("frontBreakingPressureErrorStatus=%d\n",frontBreakingPressureErrorStatus);
+			backBreakingPressureErrorStatus = (UINT8)(((*(UINT8*)(rawData +6))>>2)&0x3);
+			printf("backBreakingPressureErrorStatus=%d\n",backBreakingPressureErrorStatus);
+			break;
+		case	0x18FEC117:
+			ODB = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			printf("ODB=%d\n",ODB);
+			break;
+		case	0x18FF15A0:
+			dcdcErrorClass = (UINT8)(((*(UINT8*)(rawData +5)))&0x7);
+			printf("dcdcErrorClass=%d\n",dcdcErrorClass);
+			dcdcWorkStatus = (UINT8)(((*(UINT8*)(rawData +5))>>3)&0x3);
+			printf("dcdcWorkStatus=%d\n",dcdcWorkStatus);
+			break;
+		case	0x18FF16A1:
+			mainElectricityErrorClass = (UINT8)(((*(UINT8*)(rawData +5)))&0x7);
+			printf("mainElectricityErrorClass=%d\n",mainElectricityErrorClass);
+			pumpWorkStatus = (UINT8)(((*(UINT8*)(rawData +5))>>3)&0x3);
+			printf("pumpWorkStatus=%d\n",pumpWorkStatus);
+			break;
+		case	0x18FF17A2:
+			elecAirCompressorErrorStatus = (UINT8)(((*(UINT8*)(rawData +5)))&0x7);
+			printf("elecAirCompressorErrorStatus=%d\n",elecAirCompressorErrorStatus);
+			elecAirCompressorWrokStatus = (UINT8)(((*(UINT8*)(rawData +5))>>3)&0x3);
+			printf("elecAirCompressorWrokStatus=%d\n",elecAirCompressorWrokStatus);
+			break;
+		default:
+			break;
 	}
 }
 
 
 /***********************************************************************************************************************
- * UDS肯定响应
- * 输入:应答数据长度、应答的报文指数、响应代码
- * 输出:响应报文发送成功/失败
- * 处理:发送肯定响应报文
+ * 周期性报文诊断
+ * 输入:报文ID
+ * 输出:--
+ * 处理:周期性诊断CAN报文是否丢失
 ***********************************************************************************************************************/
-UINT8 UDSPositiveAnswer(UINT8 answerLen,UINT8 messageIndex,UINT32 posCode)
+void canRxDaignose(void)
 {
-	CAN_Msg_Type UDSAnswer;
-	UINT8 ret;
-	UDSAnswer.Id = 0x7A8;
-	UDSAnswer.DLC = 8;
-	UDSAnswer.Data[0] = answerLen;
-	UDSAnswer.Data[1] = 0x78;
-	UDSAnswer.Data[2] = UDSService[messageIndex];
-	UDSAnswer.Data[3] = UDSSubService[messageIndex];
-	if(answerLen == 4)
+	
+	if(TimeCounter%1 == 0)
 	{
-		UDSAnswer.Data[4] = 0x00;
-		UDSAnswer.Data[5] = 0x00;
-		UDSAnswer.Data[6] = 0x00;
-		UDSAnswer.Data[7] = 0x00;
-	}
-	else if(answerLen==5)
-	{	UDSAnswer.Data[4] = posCode;
-		UDSAnswer.Data[5] = 0x00;
-		UDSAnswer.Data[6] = 0x00;
-		UDSAnswer.Data[7] = 0x00;
+		canRxErrorCounter[0]++;
+		canRxErrorCounter[1]++;
+		canRxErrorCounter[110]++;
+		canRxErrorCounter[121]++;
+		canRxErrorCounter[122]++;
 	}
-	else if(answerLen==6)
+	if(TimeCounter%2 == 0)
 	{
-		UDSAnswer.Data[4] = posCode>>8;
-		UDSAnswer.Data[5] = posCode;
-		UDSAnswer.Data[6] = 0x00;
-		UDSAnswer.Data[7] = 0x00;
+		
 	}
-	else if(answerLen==7)
+	if(TimeCounter%5 == 0)
 	{
-		UDSAnswer.Data[4] = posCode>>16;
-		UDSAnswer.Data[5] = posCode>>8;
-		UDSAnswer.Data[6] = posCode;
-		UDSAnswer.Data[7] = 0x00;
+
 	}
-	else if(answerLen==8)
+	if(TimeCounter%10 ==0)
 	{
-		UDSAnswer.Data[4] = posCode>>24;
-		UDSAnswer.Data[5] = posCode>>16;
-		UDSAnswer.Data[6] = posCode>>8;
-		UDSAnswer.Data[7] = posCode;
-	}
-	ret = HAL_Can_Transmit(UDSAnswer);
-	return ret;
-}
 
-
-/***********************************************************************************************************************
- * UDS否定响应
- * 输入:应答数据长度、应答的报文指数、响应代码
- * 输出:响应报文发送成功/失败
- * 处理:发送否定响应报文
-***********************************************************************************************************************/
-UINT8 UDSNegtiveAnswer(UINT8 answerLen,UINT8 messageIndex, UINT32 negCode)
-{
-	CAN_Msg_Type UDSAnswer;
-	UINT8 ret;
-	UDSAnswer.Id = 0x7A8;
-	UDSAnswer.DLC = 8;
-	UDSAnswer.Data[0] = answerLen;
-	UDSAnswer.Data[1] = 0x7F;
-	UDSAnswer.Data[2] = UDSService[messageIndex];
-	UDSAnswer.Data[3] = UDSSubService[messageIndex];
-	if(answerLen==4)
-	{
-		UDSAnswer.Data[3] = negCode;
-		UDSAnswer.Data[4] = 0x00;
-		UDSAnswer.Data[5] = 0x00;
-		UDSAnswer.Data[6] = 0x00;
-		UDSAnswer.Data[7] = 0x00;
 	}
-	if(answerLen==5)
-	{	UDSAnswer.Data[4] = negCode;
-		UDSAnswer.Data[5] = 0x00;
-		UDSAnswer.Data[6] = 0x00;
-		UDSAnswer.Data[7] = 0x00;
+	if(TimeCounter %20 ==0)
+	{
+
 	}
-	else if(answerLen==6)
+	if(TimeCounter%30 == 0)
 	{
-		UDSAnswer.Data[4] = negCode>>8;
-		UDSAnswer.Data[5] = negCode;
-		UDSAnswer.Data[6] = 0x00;
-		UDSAnswer.Data[7] = 0x00;
+
 	}
-	else if(answerLen==7)
+	if(TimeCounter%50 ==0)
 	{
-		UDSAnswer.Data[4] = negCode>>16;
-		UDSAnswer.Data[5] = negCode>>8;
-		UDSAnswer.Data[6] = negCode;
-		UDSAnswer.Data[7] = 0x00;
+
 	}
-	else if(answerLen==8)
+
+	for(int i=0;i<133;i++)
 	{
-		UDSAnswer.Data[4] = negCode>>24;
-		UDSAnswer.Data[5] = negCode>>16;
-		UDSAnswer.Data[6] = negCode>>8;
-		UDSAnswer.Data[7] = negCode;
+		if(canRxFlag[i] == 1)
+		{
+			canRxErrorCounter[i] = 0;
+			canRxFlag[i] = 0;
+		}		
+		
+		if(canRxErrorCounter[i]<3)
+		{
+			canRxShortError[i] = 0;
+			canRxLongError[i] = 0;
+		}
+		else if(canRxErrorCounter[i]>=3 && canRxErrorCounter[i]<13)
+		{
+			canRxShortError[i] = 1;
+			canRxLongError[i] = 0;
+		}
+		else if(canRxErrorCounter[i]>=13)
+		{
+			canRxShortError[i] = 0;
+			canRxLongError[i] = 1;
+			canRxMsgSetInvalidValue(COMInTable[i]);
+		}
+		else if(canRxErrorCounter[i] == 0xFF)
+		{
+			canRxErrorCounter[i] = 0xFE;
+		}		
 	}
-	ret = HAL_Can_Transmit(UDSAnswer);
-	return ret;
 }
 
 
 /***********************************************************************************************************************
- * 在接收升级包前,做一些准备性工作
- * 输入:--
- * 输出:--
- * 处理:清空计数,并准备接收数据包
+ * 报文序号查找
+ * 输入:报文ID
+ * 输出:报文ID在COMInTable中的序号
+ * 处理:--
 ***********************************************************************************************************************/
-BOOL UDSAskforDownLoadData()
+UINT8 canCOMInTableIndexFind(UINT32 canID)
 {
-	updateDifferDataPackageCounter = 0;
-	downloadReady = true;	
-	return TRUE;
+	UINT8 index = 0xFF;
+	for(int i=0;i<sizeof(COMInTable)/4;i++)
+	{
+		if(canID == COMInTable[i])
+		{
+			index = i;
+			break;
+		}
+	}
+	return index;
 }
 
 /***********************************************************************************************************************
- * 清除数据接收的flash区域
- * 输入:--
+ * 报文长时丢帧,数据置为无效值
+ * 输入:报文ID
  * 输出:--
- * 处理:清除数据接收的flash区域
+ * 处理:报文长时丢帧后,对应的ID的信号值为无效值
 ***********************************************************************************************************************/
-BOOL UDSClearFotaDownloadRegion()
+void canRxMsgSetInvalidValue(UINT32 ID)
 {
-	UINT8 ret = FALSE;
-	ret = BSP_QSPI_Erase_Safe(FLASH_FOTA_REGION_START, 0x46000); //512k-32k -200k = 280k -> 0x46000
-	
-	if(ret == QSPI_OK)
-	{
-		return TRUE;
-	}
-	else
-	{
-		return FALSE;
+	UINT8 rawData[8] = {0xFF};
+	switch (ID)
+	{	
+		case	0x18FF06F3:
+			bmsStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0x0F);
+			bmsErrClass = (UINT8)(((*(UINT8*)(rawData +0))>>4)&0xF);
+			chrgConctStatus = (UINT8)(((*(UINT8*)(rawData +1)))&0x3);
+			highVolPwrDwnReq = (UINT8)(((*(UINT8*)(rawData +1))>>2)&0x3);
+			chrgStatus = (UINT8)(((*(UINT8*)(rawData +1))>>4)&0x7);
+			bmsErrNum = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			bmsLife = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18FF07F3:
+			maxChrgCurrAllowed = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			maxDischrgCurrAllowed = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			break;
+		case	0x18FF30F3:
+			battSoc = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			packTotalVol = (UINT16)(((*(UINT16*)(rawData +1)))&0xFFFF);
+			packTotalCurr = (UINT16)(((*(UINT16*)(rawData +3)))&0xFFFF);
+			insulationR = (UINT16)(((*(UINT16*)(rawData +5)))&0xFFFF);
+			break;
+		case	0x18FF51F3:
+			maxCellVol = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			minCellVol = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			maxCellTemp = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			minCellTemp = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			avgCellTemp = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			break;
+		case	0x18FF52F3:
+			maxVolSubsysCode = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			maxVolCellCode = (UINT16)(((*(UINT16*)(rawData +1)))&0xFFFF);
+			minVolSubsysCode = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			minVoCelllCode = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			break;
+		case	0x18FF53F3:
+			maxTempSubsysCode = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			maxTempCellCode = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			minTempSubsysCode = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			minTempCellCode = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			break;
+		case	0x18FF54F3:
+			numOfChrgableSubsys = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			lengthOfChrgableSysCode = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			chrgableSysCode = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			chrgableSubsysCode = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			numOfCells = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			numOfCellTemp = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			numOfBattErr = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x1801FBF3:
+			battCellU[0] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[1] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[2] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[3] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1802FBF3:
+			battCellU[4] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[5] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[6] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[7] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1803FBF3:
+			battCellU[8] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[9] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[10] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[11] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1804FBF3:
+			battCellU[12] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[13] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[14] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[15] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1805FBF3:
+			battCellU[16] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[17] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[18] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[19] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1806FBF3:
+			battCellU[20] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[21] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[22] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[23] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1807FBF3:
+			battCellU[24] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[25] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[26] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[27] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1808FBF3:
+			battCellU[28] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[29] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[30] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[31] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1809FBF3:
+			battCellU[32] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[33] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[34] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[35] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x180AFBF3:
+			battCellU[36] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[37] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[38] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[39] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x180BFBF3:
+			battCellU[40] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[41] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[42] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[43] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x180CFBF3:
+			battCellU[44] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[45] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[46] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[47] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x180DFBF3:
+			battCellU[48] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[49] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[50] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[51] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x180EFBF3:
+			battCellU[52] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[53] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[54] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[55] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x180FFBF3:
+			battCellU[56] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[57] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[58] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[59] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1810FBF3:
+			battCellU[60] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[61] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[62] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[63] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1811FBF3:
+			battCellU[64] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[65] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[66] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[67] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1812FBF3:
+			battCellU[68] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[69] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[70] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[71] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1813FBF3:
+			battCellU[72] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[73] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[74] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[75] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1814FBF3:
+			battCellU[76] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[77] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[78] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[79] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1815FBF3:
+			battCellU[80] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[81] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[82] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[83] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1816FBF3:
+			battCellU[84] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[85] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[86] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[87] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1817FBF3:
+			battCellU[88] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[89] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[90] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[91] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1818FBF3:
+			battCellU[92] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[93] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[94] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[95] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1819FBF3:
+			battCellU[96] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[97] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[98] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[99] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x181AFBF3:
+			battCellU[100] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[101] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[102] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[103] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x181BFBF3:
+			battCellU[104] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[105] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[106] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[107] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x181CFBF3:
+			battCellU[108] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[109] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[110] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[111] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x181DFBF3:
+			battCellU[112] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[113] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[114] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[115] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x181EFBF3:
+			battCellU[116] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[117] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[118] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[119] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x181FFBF3:
+			battCellU[120] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[121] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[122] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[123] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1820FBF3:
+			battCellU[124] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[125] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[126] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[127] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1821FBF3:
+			battCellU[128] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[129] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[130] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[131] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1822FBF3:
+			battCellU[132] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[133] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[134] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[135] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1823FBF3:
+			battCellU[136] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[137] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[138] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[139] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1824FBF3:
+			battCellU[140] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[141] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[142] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[143] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1825FBF3:
+			battCellU[144] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[145] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[146] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[147] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1826FBF3:
+			battCellU[148] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[149] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[150] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[151] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1827FBF3:
+			battCellU[152] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[153] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[154] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[155] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1828FBF3:
+			battCellU[156] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[157] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[158] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[159] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1829FBF3:
+			battCellU[160] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[161] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[162] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[163] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x182AFBF3:
+			battCellU[164] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[165] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[166] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[167] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x182BFBF3:
+			battCellU[168] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[169] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[170] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[171] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x182CFBF3:
+			battCellU[172] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[173] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[174] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[175] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x182DFBF3:
+			battCellU[176] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[177] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[178] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[179] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x182EFBF3:
+			battCellU[180] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[181] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[182] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[183] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x182FFBF3:
+			battCellU[184] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[185] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[186] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[187] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1830FBF3:
+			battCellU[188] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[189] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[190] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[191] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1831FBF3:
+			battCellU[192] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[193] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[194] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[195] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1832FBF3:
+			battCellU[196] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[197] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[198] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[199] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1833FBF3:
+			battCellU[200] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[201] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[202] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[203] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1834FBF3:
+			battCellU[204] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[205] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[206] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[207] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1835FBF3:
+			battCellU[208] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[209] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[210] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[211] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1836FBF3:
+			battCellU[212] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[213] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[214] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[215] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1837FBF3:
+			battCellU[216] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[217] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[218] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[219] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1838FBF3:
+			battCellU[220] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[221] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[222] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[223] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1839FBF3:
+			battCellU[224] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[225] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[226] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[227] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x183AFBF3:
+			battCellU[228] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[229] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[230] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[231] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x183BFBF3:
+			battCellU[232] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[233] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[234] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[235] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x183CFBF3:
+			battCellU[236] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[237] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[238] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[239] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x183DFBF3:
+			battCellU[240] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[241] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[242] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[243] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x183EFBF3:
+			battCellU[244] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[245] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[246] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[247] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x183FFBF3:
+			battCellU[248] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[249] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[250] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[251] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1840FBF3:
+			battCellU[252] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[253] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[254] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[255] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1841FBF3:
+			battCellU[256] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[257] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[258] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[259] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1842FBF3:
+			battCellU[260] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[261] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[262] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[263] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1843FBF3:
+			battCellU[264] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[265] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[266] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[267] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1844FBF3:
+			battCellU[268] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[269] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[270] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[271] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1845FBF3:
+			battCellU[272] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[273] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[274] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[275] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1846FBF3:
+			battCellU[276] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[277] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[278] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[279] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1847FBF3:
+			battCellU[280] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[281] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[282] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[283] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1848FBF3:
+			battCellU[284] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[285] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[286] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[287] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1849FBF3:
+			battCellU[288] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[289] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[290] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[291] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x184AFBF3:
+			battCellU[292] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[293] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[294] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[295] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x184BFBF3:
+			battCellU[296] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[297] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[298] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[299] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x184CFBF3:
+			battCellU[300] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[301] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[302] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[303] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x184DFBF3:
+			battCellU[304] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[305] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[306] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[307] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x184EFBF3:
+			battCellU[308] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[309] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[310] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[311] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x184FFBF3:
+			battCellU[312] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[313] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[314] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[315] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1850FBF3:
+			battCellU[316] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[317] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[318] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[319] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1851FBF3:
+			battCellU[320] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[321] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[322] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[323] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1852FBF3:
+			battCellU[324] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[325] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[326] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[327] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1853FBF3:
+			battCellU[328] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[329] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[330] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[331] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1854FBF3:
+			battCellU[332] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[333] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[334] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[335] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1855FBF3:
+			battCellU[336] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[337] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[338] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[339] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1856FBF3:
+			battCellU[340] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[341] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[342] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[343] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1857FBF3:
+			battCellU[344] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[345] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[346] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[347] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1858FBF3:
+			battCellU[348] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[349] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[350] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[351] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1859FBF3:
+			battCellU[352] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[353] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[354] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[355] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x185AFBF3:
+			battCellU[356] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[357] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[358] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[359] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x185BFBF3:
+			battCellU[360] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[361] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[362] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[363] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x185CFBF3:
+			battCellU[364] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[365] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[366] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[367] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x185DFBF3:
+			battCellU[368] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[369] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[370] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[371] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x185EFBF3:
+			battCellU[372] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[373] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[374] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[375] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x185FFBF3:
+			battCellU[376] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[377] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[378] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[379] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x1860FBF3:
+			battCellU[380] = (UINT16)(((*(UINT16*)(rawData +0)))&0xFFFF);
+			battCellU[381] = (UINT16)(((*(UINT16*)(rawData +2)))&0xFFFF);
+			battCellU[382] = (UINT16)(((*(UINT16*)(rawData +4)))&0xFFFF);
+			battCellU[383] = (UINT16)(((*(UINT16*)(rawData +6)))&0xFFFF);
+			break;
+		case	0x18A0FBF3:
+			battCellTemp[0] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[1] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[2] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[3] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[4] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[5] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[6] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[7] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18A1FBF3:
+			battCellTemp[8] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[9] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[10] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[11] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[12] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[13] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[14] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[15] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18A2FBF3:
+			battCellTemp[16] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[17] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[18] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[19] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[20] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[21] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[22] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[23] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			battCellTemp[24] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[25] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[26] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[27] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[28] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[29] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[30] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[31] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18A3FBF3:
+			battCellTemp[32] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[33] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[34] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[35] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[36] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[37] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[38] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[39] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18A4FBF3:
+			battCellTemp[40] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[41] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[42] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[43] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[44] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[45] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[46] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[47] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18A5FBF3:
+			battCellTemp[48] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[49] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[50] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[51] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[52] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[53] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[54] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[55] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18A6FBF3:
+			battCellTemp[56] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			battCellTemp[57] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			battCellTemp[58] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			battCellTemp[59] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			battCellTemp[60] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			battCellTemp[61] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			battCellTemp[62] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			battCellTemp[63] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18FF08F3:
+			mainPosRlyStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0x3);
+			preRlyStatus = (UINT8)(((*(UINT8*)(rawData +0))>>2)&0x3);
+			mainNegRlyStatus = (UINT8)(((*(UINT8*)(rawData +0))>>4)&0x3);
+			thrRlyStatus = (UINT8)(((*(UINT8*)(rawData +0))>>6)&0x3);
+			ptc1RlyStatus = (UINT8)(((*(UINT8*)(rawData +1)))&0x3);
+			airCondRlyStatus = (UINT8)(((*(UINT8*)(rawData +1))>>2)&0x3);
+			dcChrg1PosRlyStatus = (UINT8)(((*(UINT8*)(rawData +1))>>4)&0x3);
+			dcChrg1NegRlyStatus = (UINT8)(((*(UINT8*)(rawData +1))>>6)&0x3);
+			dcChrg2PosRlyStatus = (UINT8)(((*(UINT8*)(rawData +2)))&0x3);
+			dcChrg2NegRlyStatus = (UINT8)(((*(UINT8*)(rawData +2))>>2)&0x3);
+			heatPosRlyStatus = (UINT8)(((*(UINT8*)(rawData +2))>>4)&0x3);
+			heatNegRlyStatus = (UINT8)(((*(UINT8*)(rawData +2))>>6)&0x3);
+			coolRlyStatus = (UINT8)(((*(UINT8*)(rawData +3)))&0x3);
+			ptc2RlyStatus = (UINT8)(((*(UINT8*)(rawData +3))>>2)&0x3);
+			mainPosRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +4)))&0x3);
+			preRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +4))>>2)&0x3);
+			mainNegRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +4))>>4)&0x3);
+			thrRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +4))>>6)&0x3);
+			ptc1RlyErrStatus = (UINT8)(((*(UINT8*)(rawData +5)))&0x3);
+			airCondRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +5))>>2)&0x3);
+			dcChrg1PosRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +5))>>4)&0x3);
+			dcChrg1NegRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +5))>>6)&0x3);
+			dcChrg2PosRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +6)))&0x3);
+			dcChrg2NegRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +6))>>2)&0x3);
+			heatPosRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +6))>>4)&0x3);
+			heatNegRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +6))>>6)&0x3);
+			coolRlyErrStatus = (UINT8)(((*(UINT8*)(rawData +7)))&0x3);
+			ptc2RlyErrStatus = (UINT8)(((*(UINT8*)(rawData +7))>>2)&0x3);
+			break;
+		case	0x18FF60F3:
+			accChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			accDischrgAh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			break;
+		case	0x18FF61F3:
+			accChrgkWh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			accDischrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			break;
+		case	0x18FF62F3:
+			battSOH = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			break;
+		case	0x18FF63F3:
+			SN[0] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			SN[1] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			SN[2] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			SN[3] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			SN[4] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			SN[5] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			SN[6] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			SN[7] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18FF64F3:
+			SN[8] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			SN[9] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			SN[10] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			SN[11] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			SN[12] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			SN[13] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			SN[14] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			SN[15] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18FF65F3:
+			SN[16] = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			SN[17] = (UINT8)(((*(UINT8*)(rawData +1)))&0xFF);
+			SN[18] = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			SN[19] = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			SN[20] = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			SN[21] = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			SN[22] = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			SN[23] = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18FF66F3:
+			accRecvryChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			accRecvryChrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			break;
+		case	0x18FF67F3:
+			accStationChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			accStationChrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			break;
+		case	0x18FF68F3:
+			accGunChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			accGunChrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			break;
+		case	0x18FF69F3:
+			sglChrgAh = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			sglChrgkWh = (UINT32)(((*(UINT32*)(rawData +4)))&0xFFFFFFFF);
+			break;
+		case	0x18FF10D0:
+			bmsHVOn = (UINT8)(((*(UINT8*)(rawData +0)))&0x3);
+			break;
+		case	0x18FF20EF:
+			vcuDCVol = (UINT16)(((*(UINT16*)(rawData +1)))&0xFFFF);
+			break;
+		case	0x18FF13A3:
+			acRelayStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0x3);
+			ptcRelayStatus = (UINT8)(((*(UINT8*)(rawData +0))>>2)&0x3);
+			mainRelayStatus = (UINT8)(((*(UINT8*)(rawData +0))>>3)&0x3);
+			preRelayStatus = (UINT8)(((*(UINT8*)(rawData +0))>>4)&0x3);
+			ptc2RelayStatus = (UINT8)(((*(UINT8*)(rawData +1)))&0x3);
+			acRelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +4)))&0x3);
+			ptcRelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +4))>>2)&0x3);
+			mainRelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +4))>>4)&0x3);
+			preRelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +4))>>6)&0x3);
+			hvLockErrorStatus = (UINT8)(((*(UINT8*)(rawData +5)))&0x3);
+			ptc2RelayErrorStatus = (UINT8)(((*(UINT8*)(rawData +5))>>2)&0x3);
+			break;
+		case	0x18FF1154:
+			ebcStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0xFF);
+			ebcAskHVOn = (UINT8)(((*(UINT8*)(rawData +1)))&0x1);
+			ebcAskHVOff = (UINT8)(((*(UINT8*)(rawData +1))>>1)&0x1);
+			retainLockSignal = (UINT8)(((*(UINT8*)(rawData +1))>>3)&0x1);
+			dischargeLockSignal = (UINT8)(((*(UINT8*)(rawData +1))>>5)&0x1);
+			chargeLockSignal = (UINT8)(((*(UINT8*)(rawData +1))>>6)&0x1);
+			errorClass = (UINT8)(((*(UINT16*)(rawData +2))>>2)&0xFF);
+			errorCode1 = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			errorCode2 = (UINT8)(((*(UINT8*)(rawData +4)))&0xFF);
+			chargeFlag = (UINT8)(((*(UINT8*)(rawData +5)))&0xFF);
+			exchangeBattAirPressure = (UINT8)(((*(UINT8*)(rawData +6)))&0xFF);
+			lifeSignal = (UINT8)(((*(UINT8*)(rawData +7)))&0xFF);
+			break;
+		case	0x18FF09D0:
+			vehicleStatus = (UINT8)(((*(UINT8*)(rawData +0)))&0x3);
+			currentGearPosition = (UINT8)(((*(UINT8*)(rawData +1)))&0x1F);
+			break;
+		case	0x18FEF1D0:
+			parkingBreakStatus = (UINT8)(((*(UINT8*)(rawData +0))>>2)&0x3);
+			breakingStatus = (UINT8)(((*(UINT8*)(rawData +3))>>4)&0x3);
+			break;
+		case	0x18FF55D0:
+			if(*rawData >= 0x1 && *rawData <= 3)
+			{
+				for(UINT8 i = 0; i < 7; i++)
+				{
+					if(i+((*rawData)-1)*7 <17)
+					{
+						VIN[i+((*rawData)-1)*7] = *(rawData + i+1 ) & 0xFF;
+					}
+				}
+			}
+			break;
+		case	0x18FEAE17:
+			frontBreakingPressure = (UINT8)(((*(UINT8*)(rawData +2)))&0xFF);
+			backBreakingPressure = (UINT8)(((*(UINT8*)(rawData +3)))&0xFF);
+			frontBreakingPressureErrorStatus = (UINT8)(((*(UINT8*)(rawData +6)))&0x3);
+			backBreakingPressureErrorStatus = (UINT8)(((*(UINT8*)(rawData +6))>>2)&0x3);
+			break;
+		case	0x18FEC117:
+			ODB = (UINT32)(((*(UINT32*)(rawData +0)))&0xFFFFFFFF);
+			break;
+		case	0x18FF15A0:
+			dcdcErrorClass = (UINT8)(((*(UINT8*)(rawData +5)))&0x7);
+			dcdcWorkStatus = (UINT8)(((*(UINT8*)(rawData +5))>>3)&0x3);
+			break;
+		case	0x18FF16A1:
+			mainElectricityErrorClass = (UINT8)(((*(UINT8*)(rawData +5)))&0x7);
+			pumpWorkStatus = (UINT8)(((*(UINT8*)(rawData +5))>>3)&0x3);
+			break;
+		case	0x18FF17A2:
+			elecAirCompressorErrorStatus = (UINT8)(((*(UINT8*)(rawData +5)))&0x7);
+			elecAirCompressorWrokStatus = (UINT8)(((*(UINT8*)(rawData +5))>>3)&0x3);
+			break;
+		default:
+			break;
 	}
 }
+
+
+
+
+
+
+
+

+ 285 - 60
src/AppSignal.c

@@ -11,80 +11,23 @@
 //
 /**declear the bool vars**/
 volatile BOOL NB_Fota_update_flag = FALSE;
-volatile BOOL BMS_Fota_update_flag = FALSE;
-volatile BOOL CanInterruptFlag = FALSE;
-
-
-BOOL downloadReady = FALSE;   
-
-
-/**declear the uint8 vars**/
-UINT8	battCellTemp[8] = {0xFF};       //Battery temperature 电池温度数值
-UINT8	MOSTemp = 0xFF;                 //mos temprature mos温度
-UINT8	packTemp = 0xFF;                //battery pack temprature   电池箱体温度
-UINT8	fastChargeTemp = 0xFF;          // fast charge plug temprature  快充插头温度
-UINT8	normalChargeTemp = 0xFF;        // normal charge plug temprature    慢充插头温度
-UINT8	heatTemp1 = 0xFF;               //Heating plate1 temperature    加热板温度1
-UINT8	heatTemp2 = 0xFF;               //Heating plate2 temperature    加热板温度2
-UINT8	nbReservedTemp1 = 0xFF;         //
-UINT8	nbReservedTemp2 = 0xFF;         //
-UINT8	maxCellTemp = 0xFF;             //最高单体温度
-UINT8	minCellTemp = 0xFF;             //最低单体温度
-UINT8	battSOC = 0xFF;                 //电池SOC
-UINT8	battSOH = 0xFF;                 //电池SOH
-UINT8	battWorkState = 0xFF;           //电池工作状态
-UINT8	bmsSwVersion = 0xFF;            //bms软件版本
-UINT8	bmsHwVersion = 0xFF;            //bms硬件版本
-UINT8	battMOSSwitchState = 0xFF;      //bms开关状态
-UINT8	battHeatEnableState = 0xFF;     //bms加热使能状态
-UINT8	reservedSignal1 = 0xFF;         //can信息保留信号1
-UINT8	reservedSignal2 = 0xFF;         //can信息保留信号2
-UINT8	reservedSignal3 = 0xFF;         //can信息保留信号3
-UINT8	reservedSignal4 = 0xFF;         //can信息保留信号4
-UINT8	reservedSignal5 = 0xFF;         //can信息保留信号5
-UINT8	reservedSignal6 = 0xFF;         //can信息保留信号6
-UINT8	reservedSignal7 = 0xFF;         //can信息保留信号7
-UINT8	reservedSignal8 = 0xFF;         //can信息保留信号8
-
-UINT8   Lockstatus = 0;             //Interlock status 高压互锁状态
+
 UINT8   TcpErrorcount=0;            //Error count TCP联网错误计数
 UINT8   TCPWorkState = 0;           //Tcp工作状态,0-表示发送,1-表示应答,2-表示监听以及心跳发送
 UINT8 	TcpSendLen = 0;             //Tcp send status Tcp发送状态
-UINT8   CanMsgEnble = 0;            //Can send status Can中断状态
-UINT8 	UDSSwitch = 0;              //下线检测标志位
 UINT8 	PosFlag = 0;                //定位信息是否有效标志位
-UINT8   UartRecvFlag = 0;           //Uart收到消息标志位0表示未收到,1表示收到
-UINT8   UartCmdRecvFlag = 0;        //Uart控制应答回复
-UINT8	UDSService[2] = {0};           //uds 服务
-UINT8	UDSSubService[2]  = {0};       // uds 子服务
-UINT8	UDSSubServiceActionCode[2]  = {0};  // uds 子服务状态
 UINT8   GpsFlag = 0;                  //GPS 数据有效标志位
-UINT8   BuzzerControl = 0;          //蜂鸣器控制状态
-UINT8   BattWorkStateDelay = 0;     //电池工作状态(延时处理后的)
-
 UINT8   PadInterrupt = 0x00;           //每个bit代表一个中断标志
+UINT8 	Lockstatus = 0x00;
 
 /**declear the uint16 vars**/
-UINT16	battCellU[28] = {0xFFFF};    //电池包单体电压
-UINT16	minCellVol = 0xFFFF;    //最小单体电压
-UINT16	maxCellVol = 0xFFFF;    //最大单体电压
-UINT16  avrgCellVol = 0xFFFF;   //平均单体电压 
-UINT16	battPackVol = 0xFFFF;   //电池总压
-UINT16	battI = 0xFFFF;         //电池总电流
 UINT16	nbHwVersion = 0xFFFF;   //数据模块硬件状态
 UINT16  ErrorNum[5]={0};        //Error array,故障数组
-UINT16  updateDifferDataPackageCounter = 0;  //差分包升级计数器
-
 
 /**declear the uint32 vars**/
-UINT32	battWarningState = 0xFFFFFFFF;  //电池告警状态
-UINT32	battProtectState = 0xFFFFFFFF;  //电池保护状态
 UINT32	nbSwVersion = 0xFFFFFFFF;       // 数据模块软件状态
-UINT32	battBalanceoInfo = 0xFFFFFFFF;  //电池均衡状态
-UINT32  Battdesigncap =0xFFFFFFFF;      //battery design cap 电池包设计容量
 volatile UINT32  TimeCounter = 0x00;             //主任务定时器计数
 
-
 /**declear the Handle vars**/
 osMutexId_t Error_Mutex = NULL;         //故障互锁句柄
 QueueHandle_t GpsRecvHandle = NULL;     //定位信息队列句柄
@@ -98,4 +41,286 @@ AppDataBody                 AppDataInfo;
 
 AppSocketConnectionContext  socContext = {-1,0};  //网络连接状态
 
-process_app 		        gProcess_app; //全局工作状态
+process_app 		        gProcess_app; //全局工作状态
+
+
+UINT32	COMInTable[133]	=	
+{
+0x18FF06F3,
+0x18FF07F3,
+0x18FF30F3,
+0x18FF51F3,
+0x18FF52F3,
+0x18FF53F3,
+0x18FF54F3,
+0x1801FBF3,
+0x1802FBF3,
+0x1803FBF3,
+0x1804FBF3,
+0x1805FBF3,
+0x1806FBF3,
+0x1807FBF3,
+0x1808FBF3,
+0x1809FBF3,
+0x180AFBF3,
+0x180BFBF3,
+0x180CFBF3,
+0x180DFBF3,
+0x180EFBF3,
+0x180FFBF3,
+0x1810FBF3,
+0x1811FBF3,
+0x1812FBF3,
+0x1813FBF3,
+0x1814FBF3,
+0x1815FBF3,
+0x1816FBF3,
+0x1817FBF3,
+0x1818FBF3,
+0x1819FBF3,
+0x181AFBF3,
+0x181BFBF3,
+0x181CFBF3,
+0x181DFBF3,
+0x181EFBF3,
+0x181FFBF3,
+0x1820FBF3,
+0x1821FBF3,
+0x1822FBF3,
+0x1823FBF3,
+0x1824FBF3,
+0x1825FBF3,
+0x1826FBF3,
+0x1827FBF3,
+0x1828FBF3,
+0x1829FBF3,
+0x182AFBF3,
+0x182BFBF3,
+0x182CFBF3,
+0x182DFBF3,
+0x182EFBF3,
+0x182FFBF3,
+0x1830FBF3,
+0x1831FBF3,
+0x1832FBF3,
+0x1833FBF3,
+0x1834FBF3,
+0x1835FBF3,
+0x1836FBF3,
+0x1837FBF3,
+0x1838FBF3,
+0x1839FBF3,
+0x183AFBF3,
+0x183BFBF3,
+0x183CFBF3,
+0x183DFBF3,
+0x183EFBF3,
+0x183FFBF3,
+0x1840FBF3,
+0x1841FBF3,
+0x1842FBF3,
+0x1843FBF3,
+0x1844FBF3,
+0x1845FBF3,
+0x1846FBF3,
+0x1847FBF3,
+0x1848FBF3,
+0x1849FBF3,
+0x184AFBF3,
+0x184BFBF3,
+0x184CFBF3,
+0x184DFBF3,
+0x184EFBF3,
+0x184FFBF3,
+0x1850FBF3,
+0x1851FBF3,
+0x1852FBF3,
+0x1853FBF3,
+0x1854FBF3,
+0x1855FBF3,
+0x1856FBF3,
+0x1857FBF3,
+0x1858FBF3,
+0x1859FBF3,
+0x185AFBF3,
+0x185BFBF3,
+0x185CFBF3,
+0x185DFBF3,
+0x185EFBF3,
+0x185FFBF3,
+0x1860FBF3,
+0x18A0FBF3,
+0x18A1FBF3,
+0x18A2FBF3,
+0x18A3FBF3,
+0x18A4FBF3,
+0x18A5FBF3,
+0x18A6FBF3,
+0x18FF08F3,
+0x18FF60F3,
+0x18FF61F3,
+0x18FF62F3,
+0x18FF63F3,
+0x18FF64F3,
+0x18FF65F3,
+0x18FF66F3,
+0x18FF67F3,
+0x18FF68F3,
+0x18FF69F3,
+0x18FF10D0,
+0x18FF20EF,
+0x18FF13A3,
+0x18FF1154,
+0x18FF09D0,
+0x18FEF1D0,
+0x18FF55D0,
+0x18FEAE17,
+0x18FEC117,
+0x18FF15A0,
+0x18FF16A1,
+0x18FF17A2
+};
+
+
+UINT8 canRxShortError[133] = {0};
+UINT8 canRxLongError[133] = {0};
+UINT8 canRxErrorCounter[133] = {0};
+UINT8 canRxFlag[133] = {0};
+
+
+
+
+
+
+//declear the UINT8 vars
+UINT8	bmsStatus= 0x00;
+UINT8	bmsErrClass= 0x00;
+UINT8	chrgConctStatus= 0x00;
+UINT8	highVolPwrDwnReq= 0x00;
+UINT8	chrgStatus= 0x00;
+UINT8	bmsErrNum= 0x00;
+UINT8	bmsLife= 0x00;
+UINT8	battSoc= 0x00;
+UINT8	maxCellTemp= 0x00;
+UINT8	minCellTemp= 0x00;
+UINT8	avgCellTemp= 0x00;
+UINT8	maxVolSubsysCode= 0x00;
+UINT8	minVolSubsysCode= 0x00;
+UINT8	maxTempSubsysCode= 0x00;
+UINT8	maxTempCellCode= 0x00;
+UINT8	minTempSubsysCode= 0x00;
+UINT8	minTempCellCode= 0x00;
+UINT8	numOfChrgableSubsys= 0x00;
+UINT8	lengthOfChrgableSysCode= 0x00;
+UINT8	chrgableSysCode= 0x00;
+UINT8	chrgableSubsysCode= 0x00;
+UINT8	numOfCellTemp= 0x00;
+UINT8	numOfBattErr= 0x00;
+UINT8	battCellTemp[64] = {0x00};
+UINT8	mainPosRlyStatus= 0x00;
+UINT8	preRlyStatus= 0x00;
+UINT8	mainNegRlyStatus= 0x00;
+UINT8	thrRlyStatus= 0x00;
+UINT8	ptc1RlyStatus= 0x00;
+UINT8	airCondRlyStatus= 0x00;
+UINT8	dcChrg1PosRlyStatus= 0x00;
+UINT8	dcChrg1NegRlyStatus= 0x00;
+UINT8	dcChrg2PosRlyStatus= 0x00;
+UINT8	dcChrg2NegRlyStatus= 0x00;
+UINT8	heatPosRlyStatus= 0x00;
+UINT8	heatNegRlyStatus= 0x00;
+UINT8	coolRlyStatus= 0x00;
+UINT8	ptc2RlyStatus= 0x00;
+UINT8	mainPosRlyErrStatus= 0x00;
+UINT8	preRlyErrStatus= 0x00;
+UINT8	mainNegRlyErrStatus= 0x00;
+UINT8	thrRlyErrStatus= 0x00;
+UINT8	ptc1RlyErrStatus= 0x00;
+UINT8	airCondRlyErrStatus= 0x00;
+UINT8	dcChrg1PosRlyErrStatus= 0x00;
+UINT8	dcChrg1NegRlyErrStatus= 0x00;
+UINT8	dcChrg2PosRlyErrStatus= 0x00;
+UINT8	dcChrg2NegRlyErrStatus= 0x00;
+UINT8	heatPosRlyErrStatus= 0x00;
+UINT8	heatNegRlyErrStatus= 0x00;
+UINT8	coolRlyErrStatus= 0x00;
+UINT8	ptc2RlyErrStatus= 0x00;
+UINT8	battSOH= 0x00;
+UINT8	SN[24] = {0x00};
+UINT8	bmsHVOn= 0x00;
+UINT8	acRelayStatus= 0x00;
+UINT8	ptcRelayStatus= 0x00;
+UINT8	mainRelayStatus= 0x00;
+UINT8	preRelayStatus= 0x00;
+UINT8	ptc2RelayStatus= 0x00;
+UINT8	acRelayErrorStatus= 0x00;
+UINT8	ptcRelayErrorStatus= 0x00;
+UINT8	mainRelayErrorStatus= 0x00;
+UINT8	preRelayErrorStatus= 0x00;
+UINT8	hvLockErrorStatus= 0x00;
+UINT8	ptc2RelayErrorStatus= 0x00;
+UINT8	ebcStatus= 0x00;
+UINT8	ebcAskHVOn= 0x00;
+UINT8	ebcAskHVOff= 0x00;
+UINT8	retainLockSignal= 0x00;
+UINT8	dischargeLockSignal= 0x00;
+UINT8	chargeLockSignal= 0x00;
+UINT8	errorClass= 0x00;
+UINT8	errorCode1= 0x00;
+UINT8	errorCode2= 0x00;
+UINT8	chargeFlag= 0x00;
+UINT8	exchangeBattAirPressure= 0x00;
+UINT8	lifeSignal= 0x00;
+UINT8	vehicleStatus= 0x00;
+UINT8	currentGearPosition= 0x00;
+UINT8	parkingBreakStatus= 0x00;
+UINT8	breakingStatus= 0x00;
+UINT8	VIN[17] = {0x00};
+UINT8	frontBreakingPressure= 0x00;
+UINT8	backBreakingPressure= 0x00;
+UINT8	frontBreakingPressureErrorStatus= 0x00;
+UINT8	backBreakingPressureErrorStatus= 0x00;
+UINT8	dcdcErrorClass= 0x00;
+UINT8	dcdcWorkStatus= 0x00;
+UINT8	mainElectricityErrorClass= 0x00;
+UINT8	pumpWorkStatus= 0x00;
+UINT8	elecAirCompressorErrorStatus= 0x00;
+UINT8	elecAirCompressorWrokStatus= 0x00;
+
+
+
+//declear the UINT16 vars
+UINT16	maxChrgCurrAllowed = 0x00;
+UINT16	maxDischrgCurrAllowed = 0x00;
+UINT16	packTotalVol = 0x00;
+UINT16	packTotalCurr = 0x00;
+UINT16	insulationR = 0x00;
+UINT16	maxCellVol = 0x00;
+UINT16	minCellVol = 0x00;
+UINT16	maxVolCellCode = 0x00;
+UINT16	minVoCelllCode = 0x00;
+UINT16	numOfCells = 0x00;
+UINT16	battCellU[384] = {0x00};
+UINT16	vcuDCVol = 0x00;
+
+
+
+//declear the UINT32 vars
+UINT32	accChrgAh= 0x00;
+UINT32	accDischrgAh= 0x00;
+UINT32	accChrgkWh= 0x00;
+UINT32	accDischrgkWh= 0x00;
+UINT32	accRecvryChrgAh= 0x00;
+UINT32	accRecvryChrgkWh= 0x00;
+UINT32	accStationChrgAh= 0x00;
+UINT32	accStationChrgkWh= 0x00;
+UINT32	accGunChrgAh= 0x00;
+UINT32	accGunChrgkWh= 0x00;
+UINT32	sglChrgAh= 0x00;
+UINT32	sglChrgkWh= 0x00;
+UINT32	ODB= 0x00;
+
+
+
+
+

+ 19 - 45
src/AppTaskCan.c

@@ -36,10 +36,7 @@ static void CanTask()
 	Can_InitType param;
     UINT8 udsFlag,msgFlag=0;
 	UINT8 i = 0;
-	UINT16 delayconuter = 0;
-	UINT8	UDSService[2];
-	UINT8	UDSSubService[2];
-	UINT8	UDSSubServiceActionCode[2];
+	UINT16 delayconuter = 0;	
 	CAN_Msg_Type CanRxMsg[2];
 	UINT8  ConvertCounter = 0;
 
@@ -52,9 +49,9 @@ static void CanTask()
 		{
 			case PROCESS_CAN_STATE_INIT:
 			{
-				param.baudrate = CAN_250Kbps;
+				param.baudrate = CAN_500Kbps;
 				param.mode = REQOP_NORMAL;	
-				param.packType = STD_PACK;
+				param.packType = EXT_PACK;
 				HAL_Can_Init(param);
 				osDelay(100);
 				PROC_CAN_STATE_SWITCH(PROCESS_CAN_STATE_WORK);
@@ -82,57 +79,34 @@ static void CanTask()
 			}
 			case PROCESS_CAN_STATE_WORK:
 			{
+				//printf("can task work\n");
 				if(HAL_Can_Receive(CanRxMsg)>0)					
 				{
+					//printf("can receive message\n");
 					delayconuter=0;						
-					for(i=0; i<2; i++)
-					{								
-						if(CanRxMsg[i].Id == 0x7A0)
-						{	
-							udsFlag = 1;
-							UDSService[i] =  CanRxMsg[i].Data[0];
-							UDSSubService[i] = CanRxMsg[i].Data[1];
-							UDSSubServiceActionCode[i] = CanRxMsg[i].Data[2];
-							if(UDSService[i] == 0x10)
-							{
-								if(UDSSubService[i] == 0x02)
-								{
-									UDSSwitch = 1;
-								}								
-							}
+					for(int i=0;i<2;i++)
+					{
+						if(CanRxMsg[i].Id != 0x00)
+						{
+							DecodeFunction(CanRxMsg[i].Id,CanRxMsg[i].Data);
+							canRxFlag[canCOMInTableIndexFind(CanRxMsg[i].Id)] = 1;
 						}
-						else if(CanRxMsg[i].Id == 0x7A1)
+						else
 						{
-							if(CanRxMsg[i].Data[0] != 0x00)
-							{
-								msgFlag = 1;	
-							}
-							else
-							{
-								msgFlag = 0;
-							}
+							continue;
 						}
-					}	
-					if(udsFlag==1)
-					{	
-						UDS_Service(CanRxMsg);
-						udsFlag = 0;
-					}			
+					}
 				}
 				else
 				{
 					delayconuter++;
-					osDelay(10);					
-				}
-				if(msgFlag == 1)
-				{
-					CanMsgTx1000ms();							
-				}	
-				if(delayconuter>=100 && msgFlag == 0)
+					osDelay(10);			
+				}					
+				if(delayconuter>=100)
 				{
 					delayconuter=0;
 					clrbit(PadInterrupt,0);
-					PROC_CAN_STATE_SWITCH(PROCESS_CAN_STATE_IDLE);
+					//PROC_CAN_STATE_SWITCH(PROCESS_CAN_STATE_IDLE);
 				}				
 				break;
 			}	
@@ -147,7 +121,7 @@ static void CanTask()
 						break;
 					}
 					osDelay(2000);
-				}    
+				}
 	            break;
 	       	}
 	   }

+ 1 - 1
src/AppTaskGps.c

@@ -144,7 +144,7 @@ static void GpsTask(void* arg)
 									GpsInfoData->direction[0] = 0xff;
 									GpsInfoData->direction[1] = 0xff;
 								}
-								if(speedtemp>=30 && speedtemp<=1500 && BattWorkStateDelay==0x01)
+								if(speedtemp>=30 && speedtemp<=1500)
 								{
 									AppDataInfo.appDataModify = true;
 									AppDataInfo.AccMileage = speedtemp/36 + AppDataInfo.AccMileage;

+ 19 - 16
src/AppTaskUart.c

@@ -124,14 +124,6 @@ static void UartTask(void* arg)
                 #ifdef USING_PRINTF
 					printf("[%d]Uart_Recv_buffer-%d: ",__LINE__,Uart_Recv_LEN);
                 #endif
-				#ifdef USING_PRINTF
-					printf("[%d]Uart_Recv_buffer-%d: ",__LINE__,Uart_Recv_LEN);
-					for(int i=0;i<Uart_Recv_LEN-5;i++)
-					{
-						printf("%2x - %x ",i,*((UINT8 *)&UartAnswerData.data+i));
-					}
-					printf("\n");
-				#endif
                 if(Uart_Recv_LEN>5)
                 {
                     UartRecvFlag = 1;
@@ -160,6 +152,14 @@ static void UartTask(void* arg)
 					PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_INTI);
 					break;
 				}
+                #ifdef USING_PRINTF1
+					printf("[%d]Uart_Recv_buffer-%d: ",__LINE__,Uart_Recv_LEN);
+					for(int i=0;i<Uart_Recv_LEN;i++)
+					{
+						printf("%x ",*((UINT8 *)&UartAnswerData.Header+i));
+					}
+					printf("\n");
+				#endif
                 break;
             }
             case PROCESS_UART_STATE_WRITE:
@@ -228,6 +228,9 @@ static UINT8 Uart_WriteCmd_func(UartWriteData_S UartWriteData)
             CRC_chk_buffer = crc_chk((UINT8 *)&Uart_Write_Msg,sizeof(Uart_Write_Msg)-2);
             Uart_Write_Msg.CRC_L = CRC_chk_buffer;
             Uart_Write_Msg.CRC_H = CRC_chk_buffer>>8;
+			#ifdef USING_PRINTF
+				printf("try to lock or unlock\n");
+			#endif
             break;
         }
 		case 0x02://是否加热
@@ -244,6 +247,9 @@ static UINT8 Uart_WriteCmd_func(UartWriteData_S UartWriteData)
             CRC_chk_buffer = crc_chk((UINT8 *)&Uart_Write_Msg,sizeof(Uart_Write_Msg)-2);
             Uart_Write_Msg.CRC_L = CRC_chk_buffer;
             Uart_Write_Msg.CRC_H = CRC_chk_buffer>>8;
+			#ifdef USING_PRINTF
+				printf("try to heat or unheat\n");
+			#endif
             break;
 		}
 		case 0x04://是否继电器控制
@@ -260,6 +266,9 @@ static UINT8 Uart_WriteCmd_func(UartWriteData_S UartWriteData)
             CRC_chk_buffer = crc_chk((UINT8 *)&Uart_Write_Msg,sizeof(Uart_Write_Msg)-2);
             Uart_Write_Msg.CRC_L = CRC_chk_buffer;
             Uart_Write_Msg.CRC_H = CRC_chk_buffer>>8;
+			#ifdef USING_PRINTF
+				printf("try to relay control\n");
+			#endif
             break;
 		}
         default:
@@ -326,25 +335,19 @@ void Uart_Cmd_Control(QueueHandle_t UartWriteCmdHandle,UartWriteData_S UartWrite
 		UartWriteData.Data[1] = HeatSwitch&0xFF;
 		osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
 	}
-	if(battWorkState ==0x00 && AppDataInfo.BattLock==TRUE && ((UartAnswerData.data[(0x1B+AppNVMData.BattCellCount + AppNVMData.BattTempCount + BMS_OTHER_TEMP)*2+1])&0x01)!=0x00)//try to lock lock the discharge 
+	if(battWorkState ==0x00 && AppDataInfo.BattLock==TRUE && ((UartAnswerData.data[(0x1B+AppNVMData.BattCellCount + AppNVMData.BattTempCount + BMS_OTHER_TEMP)*2+1])&0x03)!=0x02)//try to lock lock the discharge 
 	{
 		UartWriteData.WriteCmd = 0x01;
 		UartWriteData.Data[0] = 0x00|(UartAnswerData.data[(0x1B+AppNVMData.BattCellCount + AppNVMData.BattTempCount + BMS_OTHER_TEMP)*2]);
 		UartWriteData.Data[1] = 0x02;
 		osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
-		#ifdef USING_PRINTF
-            printf("try to lock %d,%d,%d,%d\n",AppDataInfo.BattLock,(UartAnswerData.data[(0x1B+AppNVMData.BattCellCount + AppNVMData.BattTempCount + BMS_OTHER_TEMP)*2+1]),AppNVMData.BattCellCount,AppNVMData.BattTempCount);
-        #endif
 	}
-	else if (battWorkState ==0x00 && AppDataInfo.BattLock==FALSE && ((UartAnswerData.data[(0x1B+AppNVMData.BattCellCount + AppNVMData.BattTempCount + BMS_OTHER_TEMP)*2+1])&0x01)!=0x01 ) // try to unlock
+	else if (battWorkState ==0x00 && AppDataInfo.BattLock==FALSE && ((UartAnswerData.data[(0x1B+AppNVMData.BattCellCount + AppNVMData.BattTempCount + BMS_OTHER_TEMP)*2+1])&0x03)!=0x03 ) // try to unlock
 	{
 		UartWriteData.WriteCmd = 0x01;
 		UartWriteData.Data[0] = 0x00|(UartAnswerData.data[(0x1B+AppNVMData.BattCellCount + AppNVMData.BattTempCount + BMS_OTHER_TEMP)*2]);
 		UartWriteData.Data[1] = 0x03;
 		osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
-		#ifdef USING_PRINTF
-            printf("try to unlock %d,%d,%d,%d\n",AppDataInfo.BattLock,(UartAnswerData.data[(0x1B+AppNVMData.BattCellCount + AppNVMData.BattTempCount + BMS_OTHER_TEMP)*2+1]),AppNVMData.BattCellCount,AppNVMData.BattTempCount);
-        #endif
 	}
 	if(AppDataInfo.RelayControl==TRUE && getbit((UartAnswerData.data[(0x09+AppNVMData.BattCellCount+AppNVMData.BattTempCount + BMS_OTHER_TEMP)*2+1]),0)==0x00)//继电器断开
 	{

+ 3 - 3
src/app.c

@@ -10,11 +10,11 @@
 void appInit(void *arg)
 {
     AppTaskMainInit(arg);
-    AppTaskTcpInit(arg);
-    AppTaskControlInit(arg);
+    //AppTaskTcpInit(arg);
+    //AppTaskControlInit(arg);
     AdcTaskInit();
     AppTaskGpsInit(arg);
-    AppTaskUartInit(arg);
+    //AppTaskUartInit(arg);
     AppTaskCanInit(arg);
     //AppTaskBcuInit(arg);
 }

+ 4 - 4
src/hal_module_adapter.c

@@ -897,10 +897,10 @@ void HAL_Can_Init(Can_InitType param)
 		CAN_WriteReg(RXF5EID8,0xFF&(param.RxExtIDL[5]));
 		
 	
-		CAN_WriteReg(RXB0CTRL,RXM_VALID_EXT|BUKT_ROLLOVER);
+		CAN_WriteReg(RXB0CTRL,RXM_RCV_ALL|BUKT_ROLLOVER);
 		CAN_WriteReg(RXB0DLC,DLC_8);
 		
-		CAN_WriteReg(RXB1CTRL,RXM_VALID_EXT|FILHIT1_FLTR_2);
+		CAN_WriteReg(RXB1CTRL,RXM_RCV_ALL);
 		CAN_WriteReg(RXB1DLC,DLC_8);
 	
 	}
@@ -1098,7 +1098,7 @@ UINT8  HAL_Can_Receive(CAN_Msg_Type* CanRxMsgBuffer)
 	UINT8 ret = 0;
 	
 	CAN_ReadReg(CANINTF,1,&temp);
-		
+		//printf("CANINTF = %x\n",temp);
 		ret = temp&0x03;
 
 		switch(ret)
@@ -1171,7 +1171,7 @@ UINT8  HAL_Can_Receive(CAN_Msg_Type* CanRxMsgBuffer)
 					j++;			
 				}
 
-			#ifdef USING_PRINTF1		
+			#ifdef USING_PRINTF1	
 				printf("buffer1 ID = %x\n",CanRxMsgBuffer[1].Id);
 				for(j=0;j<8;j++)
 				{