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

📄 kd6006.cpp

📁 磁卡读写器编程
💻 CPP
字号:
/*********************************************************************
 *   Designed by xiaohuiyang 2002.03.15    E-mail: yxh2001@21cn.com  * 
 *********************************************************************/
// KD680.cpp: implementation of the CKD6006 class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "KD6006.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
extern void TraceDebug(char *pchData, int len);


CKD6006::CKD6006()
{
	gTimeOut = 5;
	m_ReadMode = 0;
	mSerialPort = 0;
	mExtPort = 0;
}

CKD6006::~CKD6006()
{
    gCom.AsynClose();
}

short CKD6006::zSetPort(short SerialPort)
{
	gCom.AsynClose();
	mSerialPort = SerialPort;
	gCom.SetupParam(mSerialPort, 9600, 'N', '8', '1');
	return 0;
}

/************************
    扩口器选择:
      入口参数:A,B,C,D,K(注意用大写)
*************************/
void CKD6006::zSetExtPort(short ExtPort)
{
	mExtPort = ExtPort;
}

short CKD6006::zSelectExtPort()
{
    char chCommand[256];
    int  nLen, ret;
    short j = 0;

	if(mExtPort < 1 || mExtPort > 5)
	{
		return 0;
	}
	if(!gCom.AsynOpen())
	{
		return -1;
	}
    memset(chCommand, '\0', 256);
	switch(mExtPort)
	{
	case 1:
	    strcpy(chCommand, "\x1b%A");
		break;
	case 2:
	    strcpy(chCommand, "\x1b%B");
		break;
	case 3:
	    strcpy(chCommand, "\x1b%C");
		break;
	case 4:
	    strcpy(chCommand, "\x1b%D");
		break;
	case 5:
	    strcpy(chCommand, "\x1b%K");
		break;
	}
    nLen = strlen(chCommand);
    gCom.AsynSendData(chCommand, strlen(chCommand));
	ret = gCom.sReadByLen(3, 1);
	if(ret < 3)
	{
		return -3;
	}
	return 0;
}

int CKD6006::gOpenKD606Com()
{
	short ret;

	ret = zSelectExtPort(); 
	if(ret)
	{
		return ret;
	}
	if(mSerialPort <= 0)
		return _NO_DEVICE;

	if(!gCom.AsynOpen())
	{
		return -1;
	}
	return 0;
}

short CKD6006::zSetReadMode(char TrackMode)
{
    char chSend[256];

    memset(chSend,'\0',256);
    sprintf(chSend,"%c%c%c",0x1B,0x42,0x5D);

    if(gCom.AsynSendData(chSend, strlen(chSend)) < 0)
	{
        return -1;
    }
	m_ReadMode = 1;
	return 0;

}

short CKD6006::zWaitReadTrack(char TrackMode)
{
	char *pchRTrack2, *pchRTrack3;
	short ret,i;

	memset(Track2,'\0',256);
	memset(Track3,'\0',256);

	if(!m_ReadMode)
	{
		ret = zSetReadMode(TrackMode);
		if(ret<0)
		{
			return _ERR_SETREAD;
		}
	}
	ret = gCom.sReadByEndChar(0x1C, 1);
    if(ret == _NO_DATA)
	{
		return _NO_DATA;
	}
	else if(ret < _NO_DATA) 
	{
		m_ReadMode = 0;
		return ret;
	}
	m_ReadMode = 0;

	for(i = 0; i < gCom.nRcvlen; i++)
    {
        if(gCom.chRcvbuf[i]==0x1B  && gCom.chRcvbuf[i+1] == 0x73)
		{
            break;
        }
    }
	if(i == gCom.nRcvlen)
		return  _ERR_RCVDATA;

    i+=2;

    if(gCom.chRcvbuf[i] == 0x7F)
	{
        i++;
    }

	pchRTrack2 = Track2;
	pchRTrack3 = Track3;

    *pchRTrack2 = '\0';
    for (; i < gCom.nRcvlen; i++)
    {
        if(gCom.chRcvbuf[i] == 0x41)
            break;
        *pchRTrack2 = gCom.chRcvbuf[i];
        pchRTrack2++;
    }
    *pchRTrack2 = '\0';

    i++;
    *pchRTrack3 = '\0';
    if(gCom.chRcvbuf[i] == 0x7F)
	{
		i++;
    }

    for(; i < gCom.nRcvlen; i++)
    {
        if(gCom.chRcvbuf[i] == 0x3F)
		{
            break;
		}
        *pchRTrack3 = gCom.chRcvbuf[i];
        pchRTrack3++;
    }
    *pchRTrack3 = '\0';

	if(strlen(Track2) < 6 && strlen(Track3) < 6)
	{
		return _ERR_RCVDATA;
	}
    return _OK_RCV;
}

⌨️ 快捷键说明

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