первый
This commit is contained in:
328
devices/Validators/Validator.~cpp
Normal file
328
devices/Validators/Validator.~cpp
Normal file
@ -0,0 +1,328 @@
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include <IniFiles.hpp>
|
||||
#include "Validator.h"
|
||||
#include "ud_Module.h"
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
Validator* validator=NULL;
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#pragma package(smart_init)
|
||||
//---------------------------------------------------------------------------
|
||||
#define POLYNOMIAL 0x08408
|
||||
unsigned int GetCRC16(unsigned char* bufData, unsigned int sizeData)
|
||||
{
|
||||
unsigned int CRC, i;
|
||||
unsigned char j;
|
||||
CRC = 0;
|
||||
for(i=0; i < sizeData; i++)
|
||||
{
|
||||
CRC ^= bufData[i];
|
||||
for(j=0; j < 8; j++)
|
||||
{
|
||||
if(CRC & 0x0001) {CRC >>= 1; CRC ^= POLYNOMIAL;}
|
||||
else CRC >>= 1;
|
||||
}
|
||||
}
|
||||
return CRC;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
/*unsigned int GetCRC16(char* bufData, unsigned int sizeData)
|
||||
{ return GetCRC16((unsigned char*)bufData, sizeData);
|
||||
}*/
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
int addZero(int val,int cnt)
|
||||
{
|
||||
for(int i=0;i<cnt;i++)
|
||||
val=val*10;
|
||||
return val;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
Validator::Validator()
|
||||
{
|
||||
Pay=0;
|
||||
cPort=new ComPort();
|
||||
bNominals=false;
|
||||
vThread=NULL;
|
||||
|
||||
LoadSetup();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
Validator::~Validator()
|
||||
{
|
||||
delete cPort;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ini <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
void Validator::LoadSetup()
|
||||
{
|
||||
TIniFile* ini=new TIniFile(ExtractFilePath(ParamStr(0))+"\\Setup.ini");
|
||||
cPort->ComNumber=ini->ReadInteger("Validator","Port",0);
|
||||
cPort->BaudRate=ini->ReadInteger("Validator","BaudRate",0);
|
||||
delete ini;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void Validator::SaveSetup()
|
||||
{
|
||||
TIniFile* ini=new TIniFile(ExtractFilePath(ParamStr(0))+"\\Setup.ini");
|
||||
ini->WriteInteger("Validator","Port",cPort->ComNumber);
|
||||
ini->WriteInteger("Validator","BaudRate",cPort->BaudRate);
|
||||
delete ini;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
bool Validator::startPay() //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(vThread!=NULL) vThread->Stop(); //<2F><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
vThread = new ValidatorThread(false);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
bool Validator::stopPay() //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(vThread!=NULL)
|
||||
vThread->Stop();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 <20><><EFBFBD><EFBFBD><EFBFBD> <20> CRC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool Validator::CheckOnCRC(unsigned char* lpBuffer,unsigned long nSize)
|
||||
{
|
||||
if(nSize<2) return false;
|
||||
unsigned int CRC=GetCRC16(lpBuffer,nSize-2);
|
||||
WORD* pCRC=(WORD*)&lpBuffer[nSize-2];
|
||||
return (CRC==*pCRC);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//req - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> CRC
|
||||
//ans - <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CRC <20><><EFBFBD> <20><><EFBFBD>
|
||||
bool Validator::SendCommand(std::string req, std::string &ans)
|
||||
{
|
||||
unsigned short crc=GetCRC16((unsigned char*)req.c_str(),req.size());
|
||||
req+=((char*)(&crc))[0]; req+=((char*)(&crc))[1];
|
||||
DWORD BytesWritten=cPort->Write(req.c_str(),req.size());
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ans="";
|
||||
for(int i=0;i<255;i++)
|
||||
{
|
||||
Sleep(10);
|
||||
char ch;
|
||||
DWORD BytesRead=cPort->Read(&ch,1);
|
||||
if (BytesRead>0) ans+=ch; else break;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> CRC
|
||||
if(ans.size()>=2)
|
||||
{
|
||||
crc=GetCRC16((unsigned char*)ans.c_str(),ans.size()-2);
|
||||
if(crc==((unsigned short*)(&ans.c_str()[ans.size()-2]))[0]) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool Validator::Start()
|
||||
{
|
||||
if(cPort->Open(cPort->ComNumber))
|
||||
{
|
||||
cPort->BaudRate=cPort->BaudRate;
|
||||
if(!cPort->Setup(2)) return false;
|
||||
|
||||
if(!Reset()) return false; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(!getSerialNumber()) return false; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(!getNominals()) return false; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(!SetEnableBillTypes(true)) return false; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
}else return false;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (RESET 30H Command for Bill-to-Bill unit to self-reset)
|
||||
bool Validator::Reset()
|
||||
{
|
||||
std::string req,ans;
|
||||
req+=(char)0x02; req+=(char)0x03; req+=(char)0x06; req+=(char)0x30;
|
||||
return SendCommand(req,ans);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (GET STATUS 31H Request for Bill-to-Bill unit set-up status)
|
||||
bool Validator::GetStatus()
|
||||
{
|
||||
std::string req,ans;
|
||||
req+=(char)0x02; req+=(char)0x03; req+=(char)0x06; req+=(char)0x31; //req+=(char)0x41; req+=(char)0xB3;
|
||||
bool r=SendCommand(req,ans);
|
||||
if(r && ans.length()>6) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3 <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
return r;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
//enable - true <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, false <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
||||
bool Validator::SetEnableBillTypes(bool enable)
|
||||
{
|
||||
std::string req,ans;
|
||||
if(enable)
|
||||
{ req+=(char)0x02; req+=(char)0x03; req+=(char)0x0C; req+=(char)0x34;
|
||||
req+=(char)0xFF; req+=(char)0xFF; req+=(char)0xFF; //24 <20><><EFBFBD><EFBFBD>
|
||||
req+=(char)0x00; req+=(char)0x00; req+=(char)0x00; //24 <20><><EFBFBD><EFBFBD>
|
||||
}else
|
||||
{ req+=(char)0x02; req+=(char)0x03; req+=(char)0x0C; req+=(char)0x34;
|
||||
req+=(char)0x00; req+=(char)0x00; req+=(char)0x00; //24 <20><><EFBFBD><EFBFBD>
|
||||
req+=(char)0x00; req+=(char)0x00; req+=(char)0x00; //24 <20><><EFBFBD><EFBFBD>
|
||||
}
|
||||
bool r=SendCommand(req,ans);
|
||||
return r;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
bool Validator::getSerialNumber()
|
||||
{
|
||||
DWORD BytesWritten=cPort->Write(ConIdent,sizeof(ConIdent));
|
||||
DWORD BytesRead=cPort->Read(ReadAr,sizeof(ReadAr));
|
||||
if(!CheckOnCRC(ReadAr,BytesRead)) return false;
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(BytesRead!=39)
|
||||
{
|
||||
saveLog(1,"<22><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
return false;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AnsiString str1((char*)&ReadAr[3],15);
|
||||
BatchNumber=str1.Trim();
|
||||
|
||||
AnsiString str2((char*)&ReadAr[18],12);
|
||||
SerialNumber=str2.Trim();
|
||||
|
||||
Sleep(100);
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool Validator::getNominals()
|
||||
{
|
||||
bNominals=false;
|
||||
Sleep(100); //<2F><> <20><><EFBFBD><EFBFBD>
|
||||
DWORD BytesWritten=cPort->Write(ConGetBT,sizeof(ConGetBT));
|
||||
DWORD BytesRead=cPort->Read(ReadAr,sizeof(ReadAr));
|
||||
if(!CheckOnCRC(ReadAr,BytesRead)) return bNominals;
|
||||
Sleep(100); //<2F><> <20><><EFBFBD><EFBFBD>
|
||||
for(unsigned char i=0;i<23;i++)
|
||||
{
|
||||
bt[i].val=addZero(ReadAr[3+i*5],ReadAr[3+i*5+4]);
|
||||
//<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3 <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
bt[i].country[0]=ReadAr[3+i*5+1];
|
||||
bt[i].country[1]=ReadAr[3+i*5+2];
|
||||
bt[i].country[2]=ReadAr[3+i*5+3];
|
||||
bt[i].val=addZero(ReadAr[3+i*5],ReadAr[3+i*5+4]);
|
||||
}
|
||||
bNominals=true;
|
||||
return bNominals;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//state - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 0 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int Validator::getPay(int &state)
|
||||
{
|
||||
state=0;
|
||||
if(!cPort->bOpen){Sleep(1000); return 0;}
|
||||
|
||||
int result=0;
|
||||
DWORD BytesWritten=0;
|
||||
DWORD BytesRead=0;
|
||||
|
||||
BytesWritten=cPort->Write(ConReACK, sizeof(ConReACK)); //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Sleep(10);
|
||||
|
||||
BytesWritten=cPort->Write(ConStPoll, sizeof(ConStPoll)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BytesRead=cPort->Read(ReadAr,sizeof(ReadAr));
|
||||
if(CheckOnCRC(ReadAr,BytesRead))
|
||||
{
|
||||
if(ReadAr[3] == 0x13) //19 <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RESET
|
||||
{
|
||||
//saveLog(1,"(State)0x13 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
}else
|
||||
if(ReadAr[3]==0x14) //20 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (IDLING <20> The state in which Bill-to-Bill is ready accept bills)
|
||||
{
|
||||
//saveLog(1,"(State)0x14 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
}else
|
||||
if(ReadAr[3]==0x15) //21 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD> 3 <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
{
|
||||
state=0x15;
|
||||
//saveLog(1,"(State)21 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
}else
|
||||
if(ReadAr[3]==0x17) //23 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
//saveLog(1,"(State)23 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
|
||||
}else
|
||||
if(ReadAr[3]==0x19) //25 DISABLED <20> The Bill-to-Bill unit has been disabled by the Controller and also the state in which Bill-to-Bill unit is after initialization.
|
||||
{
|
||||
state=0x19;
|
||||
//saveLog(1,"(State)25 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>!!!");
|
||||
|
||||
SetEnableBillTypes(true);
|
||||
}else
|
||||
if(ReadAr[3]==0x1c) //28 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
//saveLog(1,"(State)28 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
}else
|
||||
if(ReadAr[3]==0x41) //41H <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
{
|
||||
//saveLog(1,"(State)0x41 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...");
|
||||
}else
|
||||
if(ReadAr[3]==0x45) //69 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>".
|
||||
{
|
||||
//saveLog(1,"(State)69 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
}else
|
||||
if(ReadAr[3]==0x81) //129 <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
state=0x81;
|
||||
//saveLog(1,"(State)129 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
|
||||
if(ReadAr[4]<23)
|
||||
{
|
||||
result=bt[ReadAr[4]].val; //<2F> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ReadAr[5]
|
||||
saveLog(1,"(Pay)"+IntToStr(result));
|
||||
}
|
||||
}else
|
||||
saveLog(1,"(State???)"+IntToStr(ReadAr[3]));
|
||||
saveLog(1,"(State???)"+IntToStr(ReadAr[3]));
|
||||
}
|
||||
Sleep(100);
|
||||
|
||||
return result;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void Validator::endPay()
|
||||
{
|
||||
SetEnableBillTypes(false);
|
||||
|
||||
DWORD BytesWritten,BytesRead;
|
||||
BytesWritten=cPort->Write(ConReACK , sizeof(ConReACK));
|
||||
|
||||
BytesWritten=cPort->Write(ConStPoll , sizeof(ConStPoll));
|
||||
BytesRead=cPort->Read(ReadAr,sizeof(ReadAr));
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
int Validator::GetState() //<2F><><EFBFBD><EFBFBD> 0 <20><> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
//if(! bNominals) getNominals(); //todo <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(! bNominals) return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
AnsiString Validator::GetStatusDescription(BYTE StatusCode) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if (StatusCode == 0x00)
|
||||
return "OK";
|
||||
else
|
||||
if (StatusCode == 1)
|
||||
return "<22><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>";
|
||||
else
|
||||
return "Error";
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user