📄 comm.c
字号:
/*pinpad.c*/
#include "includes.h"
/************************************
* 通讯解包 *
* cmdbuf: 输入,命令数据 *
* cmdtype: 输出,命令类别 *
* cardtype: 输出,卡类别 *
* cmddata: 输出,命令体 *
************************************
int CommExpack( unsigned char *cmdbuf, // 输入的命令数据
unsigned char *cmdtype, // 命令类别(输出)
unsigned char *cardtype, // 卡类别(输出)
unsigned char *cmddata) // 命令体(输出)
{
}
*/
static bit UseDebug = 0;
/*********************************************/
bit CommSend(unsigned char *buf, int len)
{
unsigned char data lrc;
unsigned char data exbuf[3];
unsigned char data tmp;
int i;
exbuf[0] = 0x02;
hex2bcd(len, exbuf+1);
lrc = exbuf[1] ^ exbuf[2] ^ 0x03;
for(i=0; i<len; i++)
{
if(InvPack)
buf[i] ^= 0xff;
lrc ^= buf[i];
}
for(i=0; i<3; i++)
{
if(!UseDebug)
ComClear(IBufOnly); //ComClear(AllBuf); // 050511
ComWrite(exbuf, 3);
ComWrite(buf, len);
ComWrite("\x03", 1);
ComWrite(&lrc, 1);
if( ComRead(&tmp, 1) < 1 )
continue;
else if(tmp == ACK)
return 1;
}
return 0;
}
void CommSendNotWaitAck(unsigned char *buf, int len)
{
unsigned char data lrc;
unsigned char data exbuf[3];
int i;
exbuf[0] = 0x02;
hex2bcd(len, exbuf+1);
lrc = exbuf[1] ^ exbuf[2] ^ 0x03;
for(i=0; i<len; i++)
{
if(InvPack)
buf[i] ^= 0xff;
lrc ^= buf[i];
}
ComWrite(exbuf, 3);
ComWrite(buf, len);
ComWrite("\x03", 1);
ComWrite(&lrc, 1);
}
unsigned int CommRead(unsigned char *buf, int maxlen)
{
unsigned char ctrl;
unsigned int len, i;
unsigned char packlen[2];
if(ComIBufBytesTell() == 0)
return 0;
//////////////////////////////////////////////////////
// 通讯层的解包,不需要更改 //
if(ComRead(&ctrl, 1) < 1) //
return 0; //stx //
if(ctrl != STX) //
return 0; //
if(ComRead(packlen, 2) < 2) //
return 0; //len1, len2 //
len = bcd2hex(packlen); //
if(len > maxlen) //
return 0; // too max len //
if(ComRead(buf, len) < len) //
return 0; //package + etx + lrc //
if(ComRead(&ctrl, 1) < 1)
return 0;
if(ctrl != ETX)
return 0;
if(ComRead(&ctrl, 1) < 1) // read lrc
return 0;
ctrl ^= packlen[0] ^ packlen[1] ^ ETX;
for(i=0; i<len; i++)
ctrl ^= buf[i];
if(ctrl != 0)
{ //
ComWrite("\x15", 1); // nak //
return 0; //
} //
ComWrite("\x06", 1); // ack //
// 通讯解包完成 //
//////////////////////////////////////////////////////
if(InvPack)
{
for(i=0; i<len; i++)
buf[i] ^= 0xff;
}
return len;
}
void CommUseDbg(bit fusedbg)
{
UseDebug = fusedbg;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -