kwp2000-iso9141-2通讯程序.c

来自「汽车诊断程序kwp2000,iso9141-2的通讯程序」· C语言 代码 · 共 71 行

C
71
字号

/**************************************************************************************
*  函数原型:BYTE SendRecv_KWP2000(BYTE *cmdbuff,BYTE *recvbuff)                      *
*  功    能:发送和接收KWP2000的数据                                                  *
*  参    数:cmdbuff------发送KWP2000命令的缓冲区                                     *
*            recvbuff-----接收KWP2000命令的缓冲区                                     *
*  返    回: 接收数据的长度                                                           *
**************************************************************************************/
BYTE SendRecv_KWP2000(BYTE *cmdbuff,BYTE *recvbuff)
{
	BYTE i,cs,len=0;
	BYTE cmd[20];
	
	//将命令放入命令缓冲区
	for(i=0;i<=cmdbuff[0];i++)	cmd[i] = cmdbuff[i];
	
	//计算校验和
	for(i=1,cs=0,len=cmd[0];i<len;i++)	cs += cmd[i];
	cmd[i] = cs;	

	//===============发送KWP2000的命令===================9,0x85,0x11,0xf1,0x23,0x40,0x00,0x03,0x01,0xee
	SendString(cmd+1,cmd[0],BYTETOBYTE);

	//===============接收KWP2000的命令===================
	len=0;
	if(RecvString(recvbuff,4,OVERTIME) == 0)	return 0;
	if(recvbuff[0] == 0x80)
	{
		//0x80,0x11,0xf1,0x02,0x21,0x01,0xa6
		len = recvbuff[3]+1;
	}
	else
	{
		//0x85,0x11,0xf1,0x23,0x40,0x00,0x03,0x01,0xee
		len = recvbuff[0]-0x80;
	}
	if(RecvString(recvbuff+4,len,OVERTIME) == 0)	return 0;
	return len+4;
}

/**************************************************************************************
*  函数原型:BYTE SendRecv_ISO9141_2(BYTE *cmdbuff,BYTE *recvbuff)                    *
*  功    能:发送和接收ISO的数据                                                      *
*  参    数:cmdbuff------发送ISO命令的缓冲区                                         *
*            recvbuff-----接收ISO命令的缓冲区                                         *
*  返    回: 接受数据的长度                                                           *
**************************************************************************************/
BYTE SendRecv_ISO9141_2(BYTE *cmdbuff,BYTE *recvbuff)
{
	BYTE i,cs,cmdlen;
	BYTE cmd[20];
	
	//将命令放入命令缓冲区
	for(i=0;i<=cmdbuff[0];i++)	cmd[i] = cmdbuff[i];

	//计算校验和
	for(i=1,cs=0,cmdlen=cmd[0];i<cmdlen;i++)	cs += cmd[i];
	cmd[i] = cs;
	
	//===============发送ISO9141_2的命令===================6,0x68,0x6a,0xf1,0xb1,0x0e,0x82
	SendString(cmd+1,cmd[0],BYTETOBYTE);
	
	//===============接收ISO9141_2的命令===================6,0x68,0x6a,0xf1,0xb1,0x0e,0x82
	if(RecvString(recvbuff,1,OVERTIME) == 0)	return 0;
	for(i=1;;i++)
	{
		if(RecvString(recvbuff+i,1,OVERTIME) == 0)	break;
	}
	return i;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?