⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comm.c

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 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 + -