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

📄 rwcomm.cpp

📁 刷卡器驱动源程序
💻 CPP
字号:
/*******************************************************************************
 *		This is a Dynamic Link Libraries For WBT2000 magnetic Reader/Writer   *
 *		V1.00A	                                                    		   *
 *******************************************************************************/
#include	<windows.h>
#define		MAXBLOCK	1024
int         bAllWentWell;

DCB			dcb;

HANDLE		idComDev;		//通讯资源句柄
BOOL		fConnected;		//是否打开了通讯资源TRUE=YES
BYTE		abIn[MAXBLOCK];
BYTE		abOut[MAXBLOCK];

BOOL		SetupCommRes( void );
/****************************************************************************
 *	 BOOL DllEntryPoint(HINSTANCE hDLL,DWORD dwReason,LPVOID  Reserved)		*
 ****************************************************************************/
BOOL WINAPI DllEntryPoint(HINSTANCE hDLL,DWORD dwReason,LPVOID  Reserved)
{
	switch(dwReason) {
		case DLL_PROCESS_ATTACH: {	
			break;
			}
		case DLL_THREAD_ATTACH: {	
			break;
			}
		case DLL_PROCESS_DETACH: {
			break;
			}
		case DLL_THREAD_DETACH: {
			break;
			}
		}  // switch
     if (bAllWentWell) 
		return true;
	 else
		return false;
}  // End of DllEntryPoint()
/****************************************************************************
 *					 BOOL OpenCommRes( void )				                *
 ****************************************************************************/
BOOL PASCAL InitCommPort( UINT ComPort )
{
	COMMTIMEOUTS	CommTimeOuts;
	BOOL			fRetVal;

	if( ComPort == 1 )
		idComDev = CreateFile( "COM1", GENERIC_READ|GENERIC_WRITE,
			0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	if( ComPort == 2 )
		idComDev = CreateFile( "COM2", GENERIC_READ|GENERIC_WRITE,
			0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	if( ComPort == 3 )
		idComDev = CreateFile( "COM2", GENERIC_READ|GENERIC_WRITE,
			0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	if( ComPort == 4 )
		idComDev = CreateFile( "COM2", GENERIC_READ|GENERIC_WRITE,
			0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

	if( idComDev == (HANDLE)(-1) )
		return FALSE;
	else  {
		SetCommMask( idComDev, EV_RXCHAR );
		// get any early notifications
		SetupComm( idComDev, 4096, 4096 );
		// set device buffers

		// setup for overlapped non-blocking I/O
		CommTimeOuts.ReadIntervalTimeout		=	0xFFFFFFFF;
		CommTimeOuts.ReadTotalTimeoutMultiplier	=	0;
		CommTimeOuts.ReadTotalTimeoutConstant	=	2000;
		CommTimeOuts.WriteTotalTimeoutMultiplier=	0;
		CommTimeOuts.WriteTotalTimeoutConstant	=	5000;
		SetCommTimeouts( idComDev, &CommTimeOuts );
		} // if

	fRetVal=SetupCommRes();
	if( fRetVal )
		fConnected = TRUE;

	return (fRetVal);
} // End of BOOL OpenCommRes( )
/****************************************************************************
 *	       UINT EndRWOper( void )											*
 ****************************************************************************/
UINT EndRWOper( UINT NoUser )//结束操作
{
	DWORD		nNumberWriten;
	WriteFile( idComDev, "\0330", 2, &nNumberWriten, NULL ); 

	if ( fConnected == TRUE ) {
		fConnected = FALSE;
		CloseHandle( idComDev );
		}

	return 1;
}  // End of void	EndRWOper( void )
/****************************************************************************
 *				 BOOL SetupCommRes(void)									*
 ****************************************************************************/
BOOL SetupCommRes(void)
{
	DCB dcb;

	GetCommState( idComDev,&dcb );  // 得到通讯资源当前设置
	// 设定主要参数
	dcb.BaudRate = 9600;  // 波特率
	dcb.ByteSize = 8;		// 数据位
	dcb.Parity = NOPARITY; // 检验位
	dcb.StopBits = ONESTOPBIT; // 停止位

	return ( SetCommState(idComDev,&dcb) ); // 根据参数设定通讯资源
}  // End of BOOL SetupCommRes( )
/****************************************************************************
 *	       UINT WriteDoubleTrack( LPCTSTR Tr2Str, LPCTSTR Tr3Str )          *
 ****************************************************************************/
UINT WriteDoubleTrack( LPCTSTR Tr2Str, LPCTSTR Tr3Str ) 
{
	BOOL		fReadStat;
	DWORD		dwLength, nNumberWriten;
	UINT		RetnCode;
	BYTE		WriteString[256];

	lstrcpy((LPTSTR)WriteString, "\033t"); //写二、三轨道数据,二轨道数据在前
	lstrcat((LPTSTR)WriteString, Tr2Str);
	lstrcat((LPTSTR)WriteString, "A");
	lstrcat((LPTSTR)WriteString, Tr3Str);
	lstrcat((LPTSTR)WriteString, "\035\033\\");

//	strcpy((char*) abOut, "\033t123456789012345678901234567890123456A0123456789012345678901234567890123456789012345678901234567890\035\033\\");
	WriteFile( idComDev, WriteString, sizeof(WriteString), &nNumberWriten, NULL ); 

	WriteFile( idComDev, "\033j", 2, &nNumberWriten, NULL ); 

	fReadStat =	ReadFile( idComDev, abIn, 4, &dwLength, NULL); 

/*	if ( fReadStat )
		MessageBox((const char*) &abIn[0] );//&& dwLength == 0)
*/	// 分析写卡结果

	LPSTR	pWhereErr;
	abIn[dwLength]	=	0;

	pWhereErr = (LPSTR) strstr( (const char*)abIn, "p");
	if( pWhereErr )	RetnCode = 0;
	pWhereErr = (LPSTR) strstr( (const char*)abIn, "q");
	if( pWhereErr ) RetnCode = 1;

//	pWhereErr = (LPSTR) strstr( (const char*)abIn, "r");
//	if( pWhereErr )	RetnCode = 2;

	return RetnCode;
}  // End of UINT WriteDoubleTrack( LPCTSTR Tr2Str, LPCTSTR Tr3Str ) 
/****************************************************************************
 *	       UINT WriteSingleTwoTrack( LPCTSTR Tr2Str )						*
 ****************************************************************************/
UINT WriteSingleTwoTrack( LPCTSTR Tr2Str ) 
{
	BOOL		fReadStat;
	DWORD		dwLength, nNumberWriten;
	UINT		RetnCode;
	BYTE		WriteString[256];

	lstrcpy((LPTSTR)WriteString, "\033t");
	lstrcat((LPTSTR)WriteString, Tr2Str);
	lstrcat((LPTSTR)WriteString, "\035\033\\");

	WriteFile( idComDev, WriteString, sizeof(WriteString), &nNumberWriten, NULL ); 
	WriteFile( idComDev, "\033j", 2, &nNumberWriten, NULL ); 

	fReadStat =	ReadFile( idComDev, abIn, 3, &dwLength, NULL); 

	LPSTR	pWhereErr;
	abIn[dwLength]	=	0;

	pWhereErr = (LPSTR) strstr( (const char*)abIn, "p");
	if( pWhereErr )	RetnCode = 0;

	pWhereErr = (LPSTR) strstr( (const char*)abIn, "q");
	if( pWhereErr ) RetnCode = 1;

//	pWhereErr = (LPSTR) strstr( (const char*)abIn, "r");
//	if( pWhereErr )	RetnCode = 2;

	return RetnCode;
}  // End of UINT WriteSingleTwoTrack( LPCTSTR Tr2Str ) 
/****************************************************************************
 *	       UINT WriteSingleThreeTrack( LPCTSTR Tr2Str )						*		
 ****************************************************************************/
UINT WriteSingleThreeTrack( LPCTSTR Tr3Str ) 
{
	BOOL		fReadStat;
	DWORD		dwLength, nNumberWriten;
	UINT		RetnCode;
	BYTE		WriteString[256];

	lstrcpy((LPTSTR)WriteString, "\033tA");
	lstrcat((LPTSTR)WriteString, Tr3Str);
	lstrcat((LPTSTR)WriteString, "\035\033\\");

	WriteFile( idComDev, WriteString, sizeof(WriteString), &nNumberWriten, NULL ); 
	WriteFile( idComDev, "\033j", 2, &nNumberWriten, NULL ); 

	fReadStat =	ReadFile( idComDev, abIn, 4, &dwLength, NULL); 

	LPSTR	pWhereErr;
	abIn[dwLength]	=	0;

	pWhereErr = (LPSTR) strstr( (const char*)abIn, "p");
	if( pWhereErr )	RetnCode = 0;

	pWhereErr = (LPSTR) strstr( (const char*)abIn, "q");
	if( pWhereErr ) RetnCode = 1;

//	pWhereErr = (LPSTR) strstr( (const char*)abIn, "r");
//	if( pWhereErr )	RetnCode = 2;

	return RetnCode;
}  // End of UINT WriteSingleThreeTrack( LPCTSTR Tr3Str ) 
/****************************************************************************
 *	       UINT ReadDoubleTrack( LPSTR Tr2Str, LPTSTR Tr3Str )				                *
 ****************************************************************************/
UINT  ReadDoubleTrack( LPSTR Tr2Str, LPTSTR Tr3Str ) 
{
	BOOL		fReadStat;
	UINT		RetnCode;
	DWORD		dwLength;
	DWORD		nNumberWriten;

	BYTE		Tr2Data[50];
	BYTE		Tr3Data[120];

	WriteFile( idComDev, "\033B]", 3, &nNumberWriten, NULL ); 
	WriteFile( idComDev, "\033j", 2, &nNumberWriten, NULL ); 

	memset(abIn, 0, sizeof(abIn) );   // Reset The Array

	fReadStat =	ReadFile( idComDev, abIn, 160, &dwLength, NULL); 

	int		pWhereS,pWhereA,pWhereGS;
	LPSTR	pWhereErr;
	abIn[dwLength]	=	0;

	pWhereErr = (LPSTR) strstr( (const char*)abIn, "q");
	if( pWhereErr )	RetnCode = 1;

//	pWhereErr = (LPSTR) strstr( (const char*)abIn, "r");
//	if( pWhereErr )	RetnCode = 2;

	pWhereErr = (LPSTR) strstr( (const char*)abIn, "p");
	if( pWhereErr ) {
		int i,j,length;
		length = sizeof( abIn );
		for ( i=0; i<length; i++ ) 
			if( abIn[i] == 's' ) pWhereS = i+1;
		for ( i=0; i<length; i++ )
			if( abIn[i] == 'A' ) pWhereA = i;
		for ( i=0; i<length; i++ )
			if( abIn[i] == '?' ) pWhereGS = i;

		for ( i= pWhereS,j=0; i< pWhereA; i++,j++ )
			Tr2Data[j] = abIn[i];
		Tr2Data[j]=0x0;
		for ( i= pWhereA+1,j=0; i< pWhereGS; i++,j++ )
			Tr3Data[j] = abIn[i];
		Tr3Data[j]=0x0;

/*		MessageBox( (const char*) &Tr2Data[0] );
		MessageBox( (const char*) &Tr3Data[0] );
*/
		RetnCode = 0;
		} //if

	lstrcpy ( Tr2Str, (LPSTR) Tr2Data );
	lstrcpy ( Tr3Str, (LPSTR) Tr3Data );

	return RetnCode;
}  // UINT ReadDoubleTrack( LPSTR Tr2Str, LPTSTR Tr3Str ) 
/****************************************************************************
 *	       UINT ReadSingleTwoTrack( LPSTR Tr2Str )							*
 ****************************************************************************/
UINT ReadSingleTwoTrack( LPSTR Tr2Str ) 
{
	BOOL		fReadStat;
	UINT		RetnCode;
	DWORD		dwLength;
	DWORD		nNumberWriten;

	BYTE		Tr2Data[50];

	WriteFile( idComDev, "\033]", 3, &nNumberWriten, NULL );  // 读2道
	WriteFile( idComDev, "\033j", 2, &nNumberWriten, NULL ); 

	memset(abIn, 0, sizeof(abIn) );   // Reset The Array

	fReadStat =	ReadFile( idComDev, abIn, 50, &dwLength, NULL); 

	int		pWhereS,pWhereGS;
	LPSTR	pWhereErr;
	abIn[dwLength]	=	0;

	pWhereErr = (LPSTR) strstr( (const char*)abIn, "q");
	if( pWhereErr )	RetnCode = 1;

//	pWhereErr = (LPSTR) strstr( (const char*)abIn, "r");
//	if( pWhereErr )	RetnCode = 2;

	pWhereErr = (LPSTR) strstr( (const char*)abIn, "p");
	if( pWhereErr ) {
		int i,j,length;
		length = sizeof( abIn );
		for ( i=0; i<length; i++ ) 
			if( abIn[i] == 's' ) pWhereS = i+1;
		for ( i=0; i<length; i++ )
			if( abIn[i] == '?' ) pWhereGS = i;

		for ( i= pWhereS,j=0; i< pWhereGS; i++,j++ )
			Tr2Data[j] = abIn[i];
		Tr2Data[j]=0x0;
		RetnCode = 0;
		} //if

	lstrcpy ( Tr2Str, (LPSTR) Tr2Data );

	return RetnCode;
}  // UINT ReadSingleTwoTrack( LPSTR Tr2Str ) 
/****************************************************************************
 *	       UINT ReadSingleThreeTrack(  LPTSTR Tr3Str )						*
 ****************************************************************************/
UINT ReadSingleThreeTrack( LPSTR Tr3Str ) 
{
	BOOL		fReadStat;
	UINT		RetnCode;
	DWORD		dwLength;
	DWORD		nNumberWriten;

	BYTE		Tr3Data[120];

	WriteFile( idComDev, "\033T]", 3, &nNumberWriten, NULL );  // 读3道
	WriteFile( idComDev, "\033j", 2, &nNumberWriten, NULL ); 

	memset(abIn, 0, sizeof(abIn) );   // Reset The Array

	fReadStat =	ReadFile( idComDev, abIn, 120, &dwLength, NULL); 

	int		pWhereA,pWhereGS;
	LPSTR	pWhereErr;
	abIn[dwLength]	=	0;

	pWhereErr = (LPSTR) strstr( (const char*)abIn, "q");
	if( pWhereErr )	RetnCode = 1;

//	pWhereErr = (LPSTR) strstr( (const char*)abIn, "r");
//	if( pWhereErr )	RetnCode = 2;
	pWhereErr = (LPSTR) strstr( (const char*)abIn, "p");
	if( pWhereErr ) {
		int i,j,length;
		length = sizeof( abIn );
		for ( i=0; i<length; i++ ) 
			if( abIn[i] == 'A' ) pWhereA = i+1;
		for ( i=0; i<length; i++ )
			if( abIn[i] == '?' ) pWhereGS = i;

		for ( i= pWhereA,j=0; i< pWhereGS; i++,j++ )
			Tr3Data[j] = abIn[i];
		Tr3Data[j]=0x0;
		RetnCode = 0;
		} //if

	lstrcpy ( Tr3Str, (LPSTR) Tr3Data );

	return RetnCode;
}  // UINT ReadSingleThreeTrack( LPSTR Tr3Str ) 
/******************************* End of Program *****************************/

⌨️ 快捷键说明

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