📄 klinecomm.c
字号:
CommunicationFlag2=0;
CommunicationFlag3=0;
}
}
if(G_bSendEnble)
{
G_n8ByteInter++;
if(G_n8ByteInter==4)
{
G_n8ByteInter=0;
ActivateTask(KlineCommunicationTask);
// bBasicTask28Ready=1;//trigger K_line communication send data
// G_un32SYSTaskPriority[2]=100;//触发K线发送任务
}
}
}
/******************************************************************************
Function Name : CheckSum
Engineer : Manda
Date : 12/12/2005
Arguments : none
Return : none
Notes : This function calculates the byte of check sum of a response message.
******************************************************************************/
unsigned char CheckSum()
{
unsigned int i=0;
unsigned int data=0;
while(i<=G_un16ResponseMLength-2)
{
data+=G_uc8ResponseMessage[i];
i++;
}
return(data&0x00ff);// checksum of G_uc8ResponseMessage[].
}
/******************************************************************************
Function Name : CreatRespMesKWP2000
Engineer : Manda
Date : 12/12/2005
Arguments : none
Return : none
Notes : This function creats response message according to KWP2000 Protocol
******************************************************************************/
void CreatRespMesKWP2000()
{
unsigned int i;
// unsigned int reindex;
if(bStartFlag) //Message of start communication
{
G_uc8ResponseMessage[0]=0x83;
G_uc8ResponseMessage[3]=0xc1;
G_uc8ResponseMessage[4]=0xea;// add. length byte 0xe9 NO
G_uc8ResponseMessage[5]=0x8f;
G_un16ResponseMLength=7;
G_uc8ResponseMessage[6]=CheckSum();//0xc4? 0xbe
bStartFlag=0;
G_bSendReady=1;
}
if(bStopFlag) //Message of stop communication
{
G_uc8ResponseMessage[0]=0x81;
G_uc8ResponseMessage[3]=0xc2;
G_uc8ResponseMessage[4]=0x45;
G_un16ResponseMLength=5;
bStopFlag=0;
G_bSendReady=1;
}
if(bAccessTimingFlag)
{
}
if(bHandshakeFlag) //Message of tester present communication
{
G_uc8ResponseMessage[0]=0x81;
G_uc8ResponseMessage[3]=0x7e;
G_uc8ResponseMessage[4]=0x01;
G_un16ResponseMLength=5;
bHandshakeFlag=0;
G_bSendReady=1;
}
/* if(bReadDTCBySFlag)
{
if(G_bReceiveComplete)
{
// DTCTable();
G_un8DTCNum=0;
for(i=0;i<DTCNUM;i++)
{
if(DTC_Table[i]!=0)
G_un8DTCNum++; //故障码数
}
}
if(G_un8DTCNum<21)
{
G_uc8ResponseMessage[0]=0x80+2+3*G_un8DTCNum;
G_uc8ResponseMessage[3]=0x58;
G_uc8ResponseMessage[4]=G_un8DTCNum;
G_un16ResponseMLength=3*G_un8DTCNum+6;
reindex=5;G_un8DTCNum=0;
}
else
{
G_uc8ResponseMessage[0]=0x80;
G_uc8ResponseMessage[3]=2+3*G_un8DTCNum;
G_uc8ResponseMessage[4]=0x58;
G_uc8ResponseMessage[5]=G_un8DTCNum;
G_un16ResponseMLength=3*G_un8DTCNum+7;
reindex=6;G_un8DTCNum=0;
}
for(i=0;i<DTCNUM;i++)
{
if(DTC_Table[i])
{
G_uc8ResponseMessage[reindex]=DTC_Table[i]>>8;
G_uc8ResponseMessage[reindex+1]=DTC_Table[i]&0x00ff;
G_uc8ResponseMessage[reindex+2]=0;//_DTCStatus.Byte;//0xe3;DTCStatus
reindex+=3;
}
}
G_uc8ResponseMessage[G_un16ResponseMLength-1]=CheckSum();// checksum
bReadDTCBySFlag=0;
G_bSendReady=1;
}
if(bClearFlag) // Clear/reset emission-related diagnostic information
{
if(1)//G_un8Mode==MODE_STOP) //under the condition of the ignition ON and the engine not running.
{
for(i=0;i<DTCNUM;i++)
{
DTCStatusFlag[i].Bits.PendingFaultPresent=0;
DTCStatusFlag[i].Bits.ValidatedFaultPresent=0;
DTCStatusFlag[i].Bits.DTCStorageState=0;
}
// DTCTable();
//DisableInterrupts;
SectorEraseEeprom(&EEPROM_DTCTab,DTCNUM);
//SectorEraseEeprom(&EEPROM_SelfDTCTab,(unsigned int)(DTCNUM/2));
//EnableInterrupts;
G_uc8ResponseMessage[0]=0x83;
G_uc8ResponseMessage[3]=0x54;
G_uc8ResponseMessage[4]=0x00;
G_uc8ResponseMessage[5]=0x00;
G_un16ResponseMLength=7;
G_uc8ResponseMessage[6]=CheckSum();
bClearFlag=0;
G_bSendReady=1;
}
else // under other conditions
{
bCondNotCorrect=1;
G_uc8ResponseMessage[0]=0x83;
G_uc8ResponseMessage[3]=0x7f;
G_uc8ResponseMessage[4]=0x54;
G_uc8ResponseMessage[5]=0x22;
G_un16ResponseMLength=7;
G_uc8ResponseMessage[6]=CheckSum();//0x2a
G_bSendReady=1;
}
} */
if(bReadDataLIDFlag) //Read Data By Local Identifier service
{
unsigned int scalingtemp;
G_bReceiveComplete=1;
G_uc8ResponseMessage[3]=0x61;
G_uc8ResponseMessage[4]=G_ReadDataPID;
switch(G_ReadDataPID)
{
case 0x01:
G_uc8ResponseMessage[0]=0x9f;
G_uc8ResponseMessage[5]=KLineData01_1;//发动机状态
G_uc8ResponseMessage[6]=KLineData01_2;//
G_uc8ResponseMessage[7]=(unsigned char)(KLineData01_3>>8);///
G_uc8ResponseMessage[8]=(unsigned char)(KLineData01_3&0x00ff);
G_uc8ResponseMessage[9]=(unsigned char)(KLineData01_4>>8);//
G_uc8ResponseMessage[10]=(unsigned char)(KLineData01_4&0x00ff);//
scalingtemp=(unsigned int)(KLineData01_5*10);
G_uc8ResponseMessage[11]=(unsigned char)(scalingtemp>>8);//
G_uc8ResponseMessage[12]=(unsigned char)(scalingtemp&0x00ff);//
scalingtemp=(unsigned int)(KLineData01_6*10);//
G_uc8ResponseMessage[13]=(unsigned char)(scalingtemp>>8);//
G_uc8ResponseMessage[14]=(unsigned char)(scalingtemp&0x00ff);//
scalingtemp=(unsigned int)(KLineData01_7*10);//
G_uc8ResponseMessage[15]=(unsigned char)(scalingtemp>>8);//
G_uc8ResponseMessage[16]=(unsigned char)(scalingtemp&0x00ff);//
G_uc8ResponseMessage[17]=(unsigned char)(KLineData01_8>>8);//
G_uc8ResponseMessage[18]=(unsigned char)(KLineData01_8&0x00ff);//
G_uc8ResponseMessage[19]=(unsigned char)(KLineData01_9>>8);//
G_uc8ResponseMessage[20]=(unsigned char)(KLineData01_9&0x00ff);//
scalingtemp=(unsigned int)(KLineData01_10*10);//
G_uc8ResponseMessage[21]=(unsigned char)(scalingtemp>>8);//
G_uc8ResponseMessage[22]=(unsigned char)(scalingtemp&0x00ff);//
G_uc8ResponseMessage[23]=(unsigned char)(KLineData01_11>>8);//
G_uc8ResponseMessage[24]=(unsigned char)(KLineData01_11&0x00ff);//
G_uc8ResponseMessage[25]=(unsigned char)(KLineData01_12>>8);//
G_uc8ResponseMessage[26]=(unsigned char)(KLineData01_12&0x00ff);//
G_uc8ResponseMessage[27]=(unsigned char)(KLineData01_13>>8);//
G_uc8ResponseMessage[28]=(unsigned char)(KLineData01_13&0x00ff);//
G_uc8ResponseMessage[29]=(unsigned char)(KLineData01_14>>8);//
G_uc8ResponseMessage[30]=(unsigned char)(KLineData01_14&0x00ff);//
G_uc8ResponseMessage[31]=(unsigned char)(KLineData01_15>>8);//
G_uc8ResponseMessage[32]=(unsigned char)(KLineData01_15&0x00ff);//
G_uc8ResponseMessage[33]=KLineData01_16;//
G_un16ResponseMLength=35;
G_uc8ResponseMessage[34]=CheckSum();
break;
case 0x02://
G_uc8ResponseMessage[0]=0x93;
//只读unsigned int 型数据
G_uc8ResponseMessage[5]=(unsigned char)(KLineData02_1>>8);//
G_uc8ResponseMessage[6]=(unsigned char)(KLineData02_1&0x00ff);
G_uc8ResponseMessage[7]=(unsigned char)(KLineData02_2>>8);//
G_uc8ResponseMessage[8]=(unsigned char)(KLineData02_2&0x00ff);
G_uc8ResponseMessage[9]=(unsigned char)(KLineData02_3>>8);//
G_uc8ResponseMessage[10]=(unsigned char)(KLineData02_3&0x00ff);
G_uc8ResponseMessage[11]=(unsigned char)(KLineData02_4>>8);//
G_uc8ResponseMessage[12]=(unsigned char)(KLineData02_4&0x00ff);//
G_uc8ResponseMessage[13]=(unsigned char)(KLineData02_5>>8);//
G_uc8ResponseMessage[14]=(unsigned char)(KLineData02_5&0x00ff);//
G_uc8ResponseMessage[15]=(unsigned char)(KLineData02_6>>8);//
G_uc8ResponseMessage[16]=(unsigned char)(KLineData02_6&0x00ff);
G_uc8ResponseMessage[17]=KLineData02_7;//
G_uc8ResponseMessage[18]=(unsigned char)(KLineData02_8>>24);//
G_uc8ResponseMessage[19]=(unsigned char)(KLineData02_8>>16&0xff);
G_uc8ResponseMessage[20]=(unsigned char)(KLineData02_8>>8&0xff);
G_uc8ResponseMessage[21]=(unsigned char)(KLineData02_8&0xff);
G_un16ResponseMLength=23;
G_uc8ResponseMessage[22]=CheckSum();
break;
case 0x03://
G_uc8ResponseMessage[0]=0x92;
//只读unsigned int 型数据
G_uc8ResponseMessage[5]=(unsigned char)(KLineData03_1>>8);//
G_uc8ResponseMessage[6]=(unsigned char)(KLineData03_1&0x00ff);
G_uc8ResponseMessage[7]=(unsigned char)(KLineData03_2>>8);//
G_uc8ResponseMessage[8]=(unsigned char)(KLineData03_2&0x00ff);
G_uc8ResponseMessage[9]=(unsigned char)(KLineData03_3>>8);//
G_uc8ResponseMessage[10]=(unsigned char)(KLineData03_3&0x00ff);
G_uc8ResponseMessage[11]=(unsigned char)(KLineData03_4>>8);//
G_uc8ResponseMessage[12]=(unsigned char)(KLineData03_4&0x00ff);//
G_uc8ResponseMessage[13]=(unsigned char)(KLineData03_5>>8);//
G_uc8ResponseMessage[14]=(unsigned char)(KLineData03_5&0x00ff);//
G_uc8ResponseMessage[15]=(unsigned char)(KLineData03_6>>8);//
G_uc8ResponseMessage[16]=(unsigned char)(KLineData03_6&0x00ff);
G_uc8ResponseMessage[17]=(unsigned char)(KLineData03_7>>8);//
G_uc8ResponseMessage[18]=(unsigned char)(KLineData03_7&0x00ff);
G_uc8ResponseMessage[19]=(unsigned char)(KLineData03_8>>8);//
G_uc8ResponseMessage[20]=(unsigned char)(KLineData03_8&0x00ff);
G_un16ResponseMLength=22;
G_uc8ResponseMessage[21]=CheckSum();
break;
case 0x04://
G_uc8ResponseMessage[0]=0x92;
//只读unsigned int 型数据
G_uc8ResponseMessage[5]=(unsigned char)(KLineData04_1>>8);//
G_uc8ResponseMessage[6]=(unsigned char)(KLineData04_1&0x00ff);
G_uc8ResponseMessage[7]=(unsigned char)(KLineData04_2>>8);//
G_uc8ResponseMessage[8]=(unsigned char)(KLineData04_2&0x00ff);
G_uc8ResponseMessage[9]=(unsigned char)(KLineData04_3>>8);//
G_uc8ResponseMessage[10]=(unsigned char)(KLineData04_3&0x00ff);
G_uc8ResponseMessage[11]=(unsigned char)(KLineData04_4>>8);//
G_uc8ResponseMessage[12]=(unsigned char)(KLineData04_4&0x00ff);//
G_uc8ResponseMessage[13]=(unsigned char)(KLineData04_5>>8);//
G_uc8ResponseMessage[14]=(unsigned char)(KLineData04_5&0x00ff);//
G_uc8ResponseMessage[15]=(unsigned char)(KLineData04_6>>8);//
G_uc8ResponseMessage[16]=(unsigned char)(KLineData04_6&0x00ff);
G_uc8ResponseMessage[17]=(unsigned char)(KLineData04_7>>8);//
G_uc8ResponseMessage[18]=(unsigned char)(KLineData04_7&0x00ff);
G_uc8ResponseMessage[19]=(unsigned char)(KLineData04_8>>8);//
G_uc8ResponseMessage[20]=(unsigned char)(KLineData04_8&0x00ff);
G_un16ResponseMLength=22;
G_uc8ResponseMessage[21]=CheckSum();
break;
case 0x05://
G_uc8ResponseMessage[0]=0x92;
//只读unsigned int 型数据
G_uc8ResponseMessage[5]=(unsigned char)(KLineData05_1>>8);//
G_uc8ResponseMessage[6]=(unsigned char)(KLineData05_1&0x00ff);
G_uc8ResponseMessage[7]=(unsigned char)(KLineData05_2>>8);//
G_uc8ResponseMessage[8]=(unsigned char)(KLineData05_2&0x00ff);
G_uc8ResponseMessage[9]=(unsigned char)(KLineData05_3>>8);//
G_uc8ResponseMessage[10]=(unsigned char)(KLineData05_3&0x00ff);
G_uc8ResponseMessage[11]=(unsigned char)(KLineData05_4>>8);//
G_uc8ResponseMessage[12]=(unsigned char)(KLineData05_4&0x00ff);//
G_uc8ResponseMessage[13]=(unsigned char)(KLineData05_5>>8);//
G_uc8ResponseMessage[14]=(unsigned char)(KLineData05_5&0x00ff);//
G_uc8ResponseMessage[15]=(unsigned char)(KLineData05_6>>8);//
G_uc8ResponseMessage[16]=(unsigned char)(KLineData05_6&0x00ff);
G_uc8ResponseMessage[17]=(unsigned char)(KLineData05_7>>8);//
G_uc8ResponseMessage[18]=(unsigned char)(KLineData05_7&0x00ff);
G_uc8ResponseMessage[19]=(unsigned char)(KLineData05_8>>8);//
G_uc8ResponseMessage[20]=(unsigned char)(KLineData05_8&0x00ff);
G_un16ResponseMLength=22;
G_uc8ResponseMessage[21]=CheckSum();
break;
case 0x06://
G_uc8ResponseMessage[0]=0x92;
//只读unsigned int 型数据
G_uc8ResponseMessage[5]=(unsigned char)(KLineData06_1>>8);//
G_uc8ResponseMessage[6]=(unsigned char)(KLineData06_1&0x00ff);
G_uc8ResponseMessage[7]=(unsigned char)(KLineData06_2>>8);//
G_uc8ResponseMessage[8]=(unsigned char)(KLineData06_2&0x00ff);
G_uc8ResponseMessage[9]=(unsigned char)(KLineData06_3>>8);//
G_uc8ResponseMessage[10]=(unsigned char)(KLineData06_3&0x00ff);
G_uc8ResponseMessage[11]=(unsigned char)(KLineData06_4>>8);//
G_uc8ResponseMessage[12]=(unsigned char)(KLineData06_4&0x00ff);//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -