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

📄 readcodepage.cpp

📁 RFID读标示例
💻 CPP
字号:
#include <ubase.h>
#include <string.h>
#include <stdio.h>
#include <sys/Ispeaker.h>
#include "Readbarcode.h"
#include <iniops.h>
#include "readCodePage.h"
#include  <webcomm/webcomm.h>
#include "Mifare_i.h"
#include "T1_RFID.h"

#define _T1_RFID_  1 
#define _M1_RFID_  2 
#define _E1_RFID_  3 

#define _T1_COMM_  5 
#define _M1_COMM_  1 
#define _E1_COMM_  3 

CReadCodePage::CReadCodePage()
{
	m_IsOpenSucc=TRUE;
	//从ini文件中取得,识读卡片的种类
	memset(m_strRes,0x00,sizeof(m_strRes));
	ReadIni("mode","mode",m_strRes,"config.ini");
	switch(atoi(m_strRes)) {
	case _T1_RFID_:
		{
			UART_PARAM _sup;
			UartOpen(_T1_COMM_);
			UartGetParam(_T1_COMM_, &_sup);
			_sup.baudrate = 38400;
			_sup.data = 8;
			_sup.parity = 0;
			_sup.stop = 0;
			UartSetParam(_T1_COMM_, &_sup);
			UartClose(_T1_COMM_);
			break;
		}
	case _M1_RFID_:
		{
			//UartClose(_M1_COMM_);
			UartClear(_M1_COMM_);			
			if (!Mifare_Initialization(_M1_COMM_, 9600, 3000)) {
				//ShowMsg("初始化串口失败,请重试!");
				m_IsOpenSucc=FALSE;
			}
			break;
		}
	case _E1_RFID_:
		{
			UartClose(1);
			UartClose(4);
			//打开串口
			UartOpen(_E1_COMM_);
			
			//设置参数
			UART_PARAM param;
			
			param.baudrate	= 57600;
			param.data		= 8;
			param.parity	= NOPARITY;
			param.stop		= ONESTOPBIT;
			
			if (UartSetParam(_E1_COMM_, &param)==-1) 
			{
				CUMsgBox box("UartSetParam Error", MSGBOX_NORMAL);
				box.DoModal();
			}
			OpenEngine();
			break;
		}	
	default:
		break;
	}
	
}

CReadCodePage::~CReadCodePage()
{
	switch(atoi(m_strRes)) {
	case _T1_RFID_:
		{
			UartClose(_T1_COMM_);
			break;
		}
	case _M1_RFID_:
		{
			Mifare_UnInitialization();
			break;
		}
	case _E1_RFID_:
		{
			UartClose(_E1_COMM_);
			CloseEngine();			
			break;
		}	
	default:
		break;
	}
}

void CReadCodePage::OnInit()
{
	RECT rc;
	rc.left = 2;
	rc.right = 157;
	rc.top = 17;
	rc.bottom = 110;
	m_codebar.Create(this, "", 0, &rc);
	m_codebar.SetReadOnly(FALSE);	//现在可以测试输入法了
	m_codebar.SetImeStyle(UIME_HZ_INPUT, INPUT_MODE_NORMAL);
//	m_codebar.SetFocusEnable(FALSE);
	rc.left = 0;rc.right=160;
	rc.top = 112;rc.bottom =128;	
	m_labHelp.Create(this,"C-退出|7-识读|8-写入|9-清空",0,&rc);
	m_labHelp.SetStyle( m_labHelp.GetState() | 8 );
	SendMessage(&m_codebar, UM_KEYPRESS, 0, KEY_ENT);
	if(!m_IsOpenSucc) m_codebar.SetText("初始化串口失败,请重启!");
	m_codebar.Show();
}
void CReadCodePage::OnOK()
{
}
void CReadCodePage::OnUserMsg(UMSG *pMsg)
{
	if(pMsg->nMessage == MSG_BARCODE){	
		ShowMsg((char *)pMsg->nData);		
	}
}

void CReadCodePage::OnKey(int nKey, int nState)
{
	if(nKey == KEY_7){
		BOOL bIsSucc=TRUE;
		char strTmpData[1024]={0};
		switch(atoi(m_strRes)) {
		case _T1_RFID_:
			{
				if(!ReadT1Data(&strTmpData[0])){
					ShowMsg("读取数据不成功!");
					bIsSucc=FALSE;
				}
				break;
			}
		case _M1_RFID_:
			{
				if(!ReadM1Data(&strTmpData[0])){
					ShowMsg("读取数据不成功!");
					bIsSucc=FALSE;
				}				
				break;
			}
		case _E1_RFID_:
			{
				if(!ReadE1Data(&strTmpData[0])){
					ShowMsg("读取数据不成功!");
					bIsSucc=FALSE;
				}				
				break;
			}	
		default:
			break;
		}
		if(bIsSucc) ShowMsg(strTmpData);
	}else if(nKey ==KEY_8){
		char strWriteData[1024]={0};		
		if(strlen(m_codebar.GetTextPtr())==0){
			ShowMsg("请先输入要写入的数据!");
			return;
		}
		m_codebar.GetText(strWriteData);
		strWriteData[1023]=0x00;
		switch(atoi(m_strRes)) {
		case _T1_RFID_:
			{
				if(!WriteT1Data(strWriteData)){
					ShowMsg("写入数据不成功!");
				}else{
					ShowMsg("写入数据成功!");
				}
				break;
			}
		case _M1_RFID_:
			{
				if(!WriteM1Data(strWriteData)){
					ShowMsg("写入数据不成功!");
				}else{
					ShowMsg("写入数据成功!");
				}
				break;
			}
		case _E1_RFID_:
			{
				ShowMsg("此EM卡不能写入数据!");
				break;
			}	
		default:
			break;
		}
	}else if(nKey==KEY_9){
		m_codebar.SetText("");
		m_codebar.Show();
	}
	CUPage::OnKey(nKey,nState);
}

void CReadCodePage::ShowMsg(const char *str)
{
	
	CUString m_str;
	m_str.empty();
	if(strlen(m_codebar.GetTextPtr())!=0){
		m_str +=m_codebar.GetTextPtr();	
		m_str +="\n";
	}	
	m_str +=str;
	m_codebar.SetText(m_str.c_str());
	SendMessage(&m_codebar,UM_KEYPRESS,0,KEY_DOWN);
	m_codebar.Show();
}

BOOL CReadCodePage::ReadT1Data(char *pstr)
{
	char xdata;
	char cmd[30]={0};
	cmd[0] = 0x2;
	xdata = cmd[0];
	cmd[1] = 0;
	xdata ^= cmd[1];
	cmd[2] = 0;
	xdata ^= cmd[2];
	cmd[3] = 0x32;
	xdata ^= cmd[3];
	cmd[4] = xdata;
	int n = rfwr(cmd, pstr,TRUE);
	if (n != 256) return FALSE;
	beep(100);
	return TRUE;
	
}
BOOL CReadCodePage::ReadM1Data(char *pstr)
{
	int nsr = 0;
	if (!Mifare_GetSerialNumber(&nsr)) {
		return FALSE;
	}
	if (!Mifare_ReadBlock(0, 1, 0, pstr, nsr)) {
		return FALSE;
	}
	beep(100);
	return TRUE;
	
}
BOOL CReadCodePage::ReadE1Data(char *pstr)
{
	int m_Buf_count=0;
	char p_char;
	USleep(100);
	if(UartReadChar(_E1_COMM_, &p_char, 100) == -1){
		return FALSE;
	}
	pstr[m_Buf_count]=p_char;m_Buf_count++;
	while(UartReadChar(_E1_COMM_, &p_char, 100) != -1 && m_Buf_count<12)
	{
		pstr[m_Buf_count]=p_char;m_Buf_count++;
	}	
	pstr[10]='\0';
	UartClear(_E1_COMM_);
	beep(100);
	return TRUE;
}

BOOL CReadCodePage::WriteT1Data(char *pstr)
{
	int i,len=0,k,n,j;
	char xdata;
	char cmd[30]={0};
	char lvr[30]={0};
	char tmpstr[5];	
	i=0;
	cmd[0] = 0x2;
	xdata = cmd[0];
	cmd[1] = 0;
	xdata ^= cmd[1];
	cmd[2] = 5;
	xdata ^= cmd[2];
	cmd[3] = 0x20;
	xdata ^= cmd[3];
	cmd[4] = i;
	xdata ^= cmd[4];
	len=strlen(pstr);
	if(len>256) return FALSE;	
	for(j=0;j<len;j+=4){
		memset(tmpstr,0x00,sizeof(tmpstr));
		if(len-j>=4){ 
			memcpy(tmpstr,&pstr[j],4);			
		}
		else{
			memcpy(tmpstr,&pstr[j],len-j);
			
		}	
			
		for (k=0; k<4; k++)
		{
			cmd[5+k] = tmpstr[k];
			xdata ^= cmd[5+k];
		}
		cmd[9] = xdata;	
		cmd[10]=0x00;
		n = rfwr(cmd, NULL,FALSE);
		if (n!=0) return FALSE;
		i++;
		cmd[0] = 0x2;
		xdata = cmd[0];
		cmd[1] = 0;
		xdata ^= cmd[1];
		cmd[2] = 5;
		xdata ^= cmd[2];
		cmd[3] = 0x20;
		xdata ^= cmd[3];
		cmd[4] = i;
		xdata ^= cmd[4]; 
		
	}		
	beep(100);
	return TRUE;
}
BOOL CReadCodePage::WriteM1Data(char *pstr)
{
	int nsr = 0;
	if (!Mifare_GetSerialNumber(&nsr)) {
		return FALSE;
	}
	char buf[20];
	memset(buf, 0xff, 20);
	if (Mifare_Transkey(0, buf) == FALSE) {
		return FALSE;
	}
	
	if (!Mifare_WriteBlock(0, 1, 0, pstr, nsr)) {		
		return FALSE;
	}
	beep(100);
	return TRUE;
}


void CReadCodePage::OnQuit()
{
	CUPage::OnQuit();
}

int CReadCodePage::rfwr(char *cmd, char *data,BOOL IsRead)
{
	int i=0,j=0,len=0;
	char lvb[300];
	len = cmd[1]*256 + cmd[2] + 5;
	UartOpen(COM5);
	UartWrite(COM5, (char*)cmd, len,0);
	if (cmd[3] == 0x16)
	{
		memset(sdata, 0, 10);
		memcpy(sdata, (char*)(cmd+3), 8);
	}
	memset(lvb,0,100);
	while (1)
	{
		j++;
		i = UartReadChar(COM5,&lvb[0], 50);
		if (!i)
		{
			if(lvb[0] == 0x02)		break;
			if (lvb[0] == 0x01)		return -1;		
		}
		if (j>=30)
		{
			if (cmd[3] != 0x34)	return -2;	//未响应		
			else if (j>400)		//写整张卡耗时较久				
					return -2;	//未响应
		}
	}
	i = UartRead(COM5,&lvb[1], 2, 50);
	if (i!=2) return -3;
	len = lvb[1]*256 + lvb[2];
	i = UartRead(COM5, &lvb[3], len+2, 100);
	UartClose(COM5);
	if (i != (len+2))	return -4;
	j = 0x2;
	for (i=1; i<(len+5); i++)
		j ^= lvb[i];
	if (j != 0)	return -5;
	if ((lvb[3] -1) == cmd[3])	return -6;

	else if (lvb[3] != cmd[3])	return -7;
	else
	{
		if (len == 0)	return 0;
		if (data)	memcpy(data, lvb+4, len);		
		return (len);
	}
		
}

⌨️ 快捷键说明

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