📄 serialcomm.cpp
字号:
// SerialComm.cpp: implementation of the SerialComm class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ICRD.h"
#include "SerialComm.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
SerialComm::SerialComm()
{
}
SerialComm::~SerialComm()
{
}
SerialComm::RDinit(int serialPort)
{
serial_port = clSd.initCOM(serialPort);
if( (int)serial_port == -1)
return 0;
RDReset();
return 1;
}
//操作读卡器前调用此函数
SerialComm::RDReset()
{
unsigned char ucCommand = 0xb9;
unsigned char a_ucSData[5] = {0x80,0x00,0x00,0x00,0x00};
unsigned char a_ucRData[256];
unsigned short usDataLen = 5;
packet(ucCommand,a_ucSData,usDataLen,0x96);
clSd.readCom(serial_port,a_ucRData);
return 1;
}
SerialComm::readRDSerialNumber(unsigned char a_ucSerial[])
{
unsigned char ucCommand = 0xb7;
unsigned char a_ucSData[7] = {0x80,0x00,0x00,0x01,0x90,0x00,0x10};
unsigned char a_ucRData[256];
unsigned short usDataLen = 7;
int i;
packet(ucCommand,a_ucSData,usDataLen,0x1b);
clSd.readCom(serial_port,a_ucRData);
for(i = 0; i < a_ucRData[3]; i++)
a_ucSerial[i] = a_ucRData[4+i];
a_ucSerial[i] = '\0';
return 1;
}
SerialComm::readRDVersionNumber(unsigned char a_ucVersion[])
{
unsigned char ucCommand = 0xb0;
unsigned char a_ucSData[7] = {0x80,0x00,0x00,0x00,0x00,0x00,0x12};
unsigned char a_ucRData[256];
unsigned short usDataLen = 7;
int i;
packet(ucCommand,a_ucSData,usDataLen,0x8f);
clSd.readCom(serial_port,a_ucRData);
for(i = 0; i < a_ucRData[3]; i++)
a_ucVersion[i] = a_ucRData[4+i];
a_ucVersion[i] = '\0';
return 1;
}
SerialComm::RDBeep()
{
unsigned char ucCommand = 0xb4;
unsigned char a_ucSData[7] = {0x80,0x00,0x00,0x00,0x00,0x00,0x14};
unsigned short usDataLen = 7;
unsigned char a_ucRData[256];
int i;
packet(ucCommand,a_ucSData,usDataLen,0x8d);
clSd.readCom(serial_port,a_ucRData);
return 1;
}
SerialComm::readRDPassword(unsigned char a_ucPassword[])
{
unsigned char ucCommand = 0xb7;
unsigned char a_ucSData[7] = {0x80,0x00,0x00,0x01,0x82,0x00,0x03};
unsigned char a_ucRData[256];
unsigned short usDataLen = 7;
int i;
packet(ucCommand,a_ucSData,usDataLen,0x1a);
clSd.readCom(serial_port,a_ucRData);
for(i = 0; i < a_ucRData[3]; i++)
{
a_ucPassword[2*i] = (a_ucRData[4+i]>>4)+'0';
a_ucPassword[2*i+1] = (a_ucRData[4+i] & 0x0f)+'0';
}
a_ucPassword[2*i] = '\0';
return 1;
}
SerialComm::packet(unsigned char ucCommand,unsigned char* data,short ucLen,unsigned char crc)
{
unsigned char a_ucPacket[256];//a_ucPacket[ucLen+5];
int i;
//固定包头
a_ucPacket[0] = 0xaa;
//设置命令字(或者类型??)
a_ucPacket[1] = ucCommand;
a_ucPacket[3] = ucLen & 0xff;
a_ucPacket[2] = ucLen >> 8;
for(i = 0; i < ucLen; i++)
a_ucPacket[i+4] = data[i];
//最后一位还不知道什么意思
//a_ucPacket[i+4] = CRC8(&a_ucPacket[4],ucLen);
//a_ucPacket[i+4] = CRC8(a_ucPacket,ucLen+4);
a_ucPacket[i+4] = crc;
//发送包
return clSd.writeCom(serial_port,a_ucPacket,(int)ucLen+5);
}
unsigned char SerialComm::CRC8(unsigned char * ucPtr, unsigned char ucLen)
{
unsigned char i;
unsigned char crc=0;
while(ucLen--!=0)
{
for(i=1; i!=0; i*=2)
{
if((crc&1)!=0) {crc/=2; crc^=0x8C;}
else crc/=2;
if((*ucPtr&i)!=0) crc^=0x8C;
}
ucPtr++;
}
return(crc);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -