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

📄 serialcomm.cpp

📁 对应MSP430椭圆曲线加密器的客户端应用程序
💻 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 + -