📄 rewr.cpp
字号:
#include "stdafx.h"
#define LOUExport extern "C" _declspec( dllexport )
#define ZERO_MEMORY(s) ::ZeroMemory(&s, sizeof(s))
HANDLE hCommDev=INVALID_HANDLE_VALUE;
int WaitFor(DWORD Timeout,DWORD Bytes,byte * inBuff)
{
DWORD OldTime,NowTime,nBytesRead;
EscapeCommFunction(hCommDev,SETRTS);
OldTime=GetTickCount();
do
{
NowTime=GetTickCount();
if((NowTime-OldTime)>Timeout)
{
EscapeCommFunction(hCommDev,CLRRTS);
PurgeComm(hCommDev,PURGE_RXCLEAR);
return -1;
}
if(::ReadFile(hCommDev, inBuff, Bytes, &nBytesRead, NULL))
{
NowTime=GetTickCount();
EscapeCommFunction(hCommDev,CLRRTS);
PurgeComm(hCommDev,PURGE_RXCLEAR);
//::PurgeComm(hCommDev, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
return nBytesRead;
}
}while(true);
}
bool Trasmit(HANDLE hFile,byte * buf, int num)
{
EscapeCommFunction(hCommDev,CLRRTS);
DWORD x;
for (int i=0;i<num;i++)
{
if (!WriteFile(hCommDev,buf+i,1,&x,NULL))// TransmitCommChar(hFile,buf[i])
return false;
WaitCommEvent(hCommDev,&x,NULL);
}
FlushFileBuffers(hCommDev);
Sleep(1);
return true;
}
//打开串行口
LOUExport bool WINAPI InitRewr(int x)
{
if (hCommDev != INVALID_HANDLE_VALUE)
return true;
// open communcations file
CString strPort;
if((x > 2)||(x<1))
{
return false;
}
else
{
strPort.Format(_T("COM%d"), x);
}
hCommDev = ::CreateFile(strPort, GENERIC_READ|GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hCommDev == INVALID_HANDLE_VALUE)
return FALSE;
BOOL bPurge = FALSE;
// get any early notifications
if(::SetCommMask(hCommDev, EV_TXEMPTY))
{
// setup device buffers
if(::SetupComm(hCommDev, 1024, 0))
{
// purge any information in the buffer
if(::PurgeComm(hCommDev, PURGE_TXABORT|PURGE_RXABORT|
PURGE_TXCLEAR|PURGE_RXCLEAR))
{
bPurge = TRUE;
}
}
}
if(!bPurge)
{
::CloseHandle(hCommDev);
return FALSE;
}
// set up for overlapped I/O
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = 10L;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 200L;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0L; //send imidiately
if(!::SetCommTimeouts(hCommDev, &CommTimeOuts))
{
::CloseHandle(hCommDev);
return FALSE;
}
// set up the connect
DCB dcb;
ZERO_MEMORY(dcb);
dcb.DCBlength = sizeof(DCB);
if(!::GetCommState(hCommDev, &dcb))
{
::CloseHandle(hCommDev);
return FALSE;
}
dcb.BaudRate = CBR_19200;//CBR_9600;//
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
// setup hardware flow control
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
// setup software flow control
dcb.fInX = dcb.fOutX = false;
//dcb.XonChar = '\xAA';
//dcb.XoffChar = '\xEE';
//dcb.XonLim = 100;
//dcb.XoffLim = 100;
dcb.fOutxCtsFlow=false;
dcb.fOutxDsrFlow=false;
// other various settings
dcb.fBinary = TRUE;
dcb.fParity = false;
if(!::SetCommState(hCommDev, &dcb))
{
::CloseHandle(hCommDev);
return FALSE;
}
EscapeCommFunction(hCommDev,CLRRTS);
return true;
}
//关串口
LOUExport bool WINAPI CloseRewr()
{
if (!hCommDev)
return FALSE;
if (CloseHandle(hCommDev))
{
hCommDev=INVALID_HANDLE_VALUE;
return TRUE;
}
return FALSE;
}
///////////////////////////////////
LOUExport bool WINAPI mif_reset()
{
byte buf[30];
buf[0]=0xff;
buf[1]=0xff;
buf[2]=0xbb;
buf[3]=0x01;
buf[4]=0x01;
buf[5]=0x01;
buf[6]=0xee;
if (!Trasmit(hCommDev,buf,7))
{
return false;
}
WaitFor(100,5,buf);
if (buf[2]==0xad)
return true;
else
return false;
}
LOUExport bool WINAPI mif_halt()
{
byte buf[30];
buf[0]=0xff;
buf[1]=0xff;
buf[2]=0xbb;
buf[3]=0x01;
buf[4]=0x09;
buf[5]=0x09;
buf[6]=0xee;
if (!Trasmit(hCommDev,buf,7))
{
return false;
}
WaitFor(100,5,buf);
if (buf[2]==0xad)
return true;
else
return false;
}
////////////////////////////////////////////////
bool CheckSum(int recnum, byte *pBuf)
{
if (recnum<=5)
return false;
byte checksum=0;
for (int i=2; i<recnum-2; i++)
checksum+=pBuf[i];
if ((checksum==pBuf[recnum-2]))
return true;
return false;
}
LOUExport bool WINAPI mif_request(byte mode, byte * tag)
{
byte buf[30];
int x;
buf[0]=0xff;
buf[1]=0xff;
buf[2]=0xbb;
buf[3]=0x02;
buf[4]=0x02;
buf[5]=mode;
buf[6]=mode+2;
buf[7]=0xee;
if (!Trasmit(hCommDev,buf,8))
{
return false;
}
x=WaitFor(100,7,buf);
if (CheckSum(x,buf))
{
*tag=buf[3];
*(tag+1)=buf[4];
return true;
}
else
return false;
}
LOUExport bool WINAPI mif_anticoll(byte bcnt, byte * snr)
{
byte buf[30];
int x;
buf[0]=0xff;
buf[1]=0xff;
buf[2]=0xbb;
buf[3]=0x06;
buf[4]=0x03;
buf[5]=bcnt;
buf[6]=snr[0];
buf[7]=snr[1];
buf[8]=snr[2];
buf[9]=snr[3];
buf[10]=snr[0]+snr[1]+snr[2]+snr[3]+0x03+bcnt;
buf[11]=0xee;
if (!Trasmit(hCommDev,buf,12))
{
return false;
}
x=WaitFor(100,9,buf);
if (CheckSum(x,buf))
{
snr[0]=buf[3];
snr[1]=buf[4];
snr[2]=buf[5];
snr[3]=buf[6];
return true;
}
else
return false;
}
LOUExport bool WINAPI mif_select(byte *snr, byte * size)
{
byte buf[30];
int x;
EscapeCommFunction(hCommDev,CLRRTS);
buf[0]=0xff;
buf[1]=0xff;
buf[2]=0xbb;
buf[3]=0x05;
buf[4]=0x04;
buf[5]=snr[0];
buf[6]=snr[1];
buf[7]=snr[2];
buf[8]=snr[3];
buf[9]=snr[0]+snr[1]+snr[2]+snr[3]+0x04;
buf[10]=0xee;
if (!Trasmit(hCommDev,buf,11))
{
return false;
}
x=WaitFor(100,6,buf);
if (CheckSum(x,buf))
{
*size=buf[3];
return true;
}
else
return false;
}
LOUExport bool WINAPI mif_loadkey(byte mode, byte key_addr, byte * newkey)
{
byte buf[30];
int x;
buf[0]=0xff;
buf[1]=0xff;
buf[2]=0xbb;
buf[3]=0x09;
buf[4]=0x05;
buf[5]=mode;
buf[6]=key_addr;
buf[7]=newkey[0];
buf[8]=newkey[1];
buf[9]=newkey[2];
buf[10]=newkey[3];
buf[11]=newkey[4];
buf[12]=newkey[5];
buf[13]=newkey[0]+newkey[1]+newkey[2]+newkey[3]+newkey[4]+newkey[5]+mode+key_addr+0x05;
buf[14]=0xee;
if (!Trasmit(hCommDev,buf,15))
{
return false;
}
x=WaitFor(100,5,buf);
if (buf[2]==0xad)
return true;
else
return false;
}
LOUExport bool WINAPI mif_authentication(byte mode, byte sector_nr)
{
byte buf[30];
int x;
buf[0]=0xff;
buf[1]=0xff;
buf[2]=0xbb;
buf[3]=0x03;
buf[4]=0x06;
buf[5]=mode;
buf[6]=sector_nr;
buf[7]=mode+sector_nr+0x06;
buf[8]=0xee;
if (!Trasmit(hCommDev,buf,9))
{
return false;
}
x=WaitFor(100,5,buf);
if (buf[2]==0xad)
return true;
else
return false;
}
LOUExport bool WINAPI mif_read(byte block_addr,byte * pData)
{
byte buf[30];
int x;
buf[0]=0xff;
buf[1]=0xff;
buf[2]=0xbb;
buf[3]=0x02;
buf[4]=0x07;
buf[5]=block_addr;
buf[6]=0x07+block_addr;
buf[7]=0xee;
if (!Trasmit(hCommDev,buf,8))
{
return false;
}
x=WaitFor(100,21,buf);
if (CheckSum(x,buf))
{
for (int i=0;i<16;i++)
pData[i]=buf[3+i];
return true;
}
else
return false;
}
LOUExport bool WINAPI mif_write(byte block_addr,byte * pData)
{
byte buf[30];
int x;
byte sum;
buf[0]=0xff;
buf[1]=0xff;
buf[2]=0xbb;
buf[3]=0x12;
buf[4]=0x08;
sum=buf[5]=block_addr;
for (x=0;x<16;x++)
{
buf[6+x]=pData[x];
sum+=pData[x];
}
buf[22]=sum+0x08;
buf[23]=0xee;
if (!Trasmit(hCommDev,buf,24))
{
return false;
}
x=WaitFor(100,5,buf);
if (buf[2]==0xad)
return true;
else
return false;
}
LOUExport bool WINAPI RewrTest(byte * data)
{
byte buf[30];
int x;
buf[0]=0xff;
buf[1]=0xff;
buf[2]=0xbb;
buf[3]=0x01;
buf[4]=0x00;
buf[5]=0x00;
buf[6]=0xee;
if (!Trasmit(hCommDev,buf,7))
{
return false;
}
x= WaitFor(100,26,data);
if (x>1)
return true;
else
return false;
}
LOUExport bool WINAPI mif_HL_authentication(byte mode, byte sector_nr)
{
byte buf[30];
int x;
buf[0]=0xff;
buf[1]=0xff;
buf[2]=0xbb;
buf[3]=0x03;
buf[4]=0x0a;
buf[5]=mode;
buf[6]=sector_nr;
buf[7]=mode+sector_nr+0x0a;
buf[8]=0xee;
if (!Trasmit(hCommDev,buf,9))
{
return false;
}
x=WaitFor(100,5,buf);
if (buf[2]==0xad)
return true;
else
return false;
}
LOUExport bool WINAPI Password_Xor(byte * data)
{
if (data==NULL)
return false;
data[0]^=0x19;
data[1]^=0x76;
data[2]^=0x01;
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -