📄 rwcomm.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 + -