первый
This commit is contained in:
94
devices/Validators/CCNETdevice/CCNETDeviceClass.cpp
Normal file
94
devices/Validators/CCNETdevice/CCNETDeviceClass.cpp
Normal file
@ -0,0 +1,94 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include "CCNETDeviceClass.h"
|
||||
#include "CCNETDeviceThread.h"
|
||||
#include "DeviceClass.h"
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#pragma package(smart_init)
|
||||
|
||||
TCCNETDeviceClass::TCCNETDeviceClass(int id, int ComPort,TLogClass* _Log): CValidator(id, ComPort,_Log, "CCNETValidator")
|
||||
{
|
||||
DataLengthIndex = 2;
|
||||
BeginByte = 0x02;
|
||||
LoggingErrors = true;
|
||||
|
||||
COMParameters->DtrControl = DTR_CONTROL_DISABLE;
|
||||
COMParameters->RtsControl = RTS_CONTROL_DISABLE;
|
||||
Port->ReopenPort();
|
||||
}
|
||||
|
||||
TCCNETDeviceClass::~TCCNETDeviceClass()
|
||||
{
|
||||
}
|
||||
|
||||
void TCCNETDeviceClass::Start()
|
||||
{
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (DeviceState->State != NotRun)
|
||||
return;
|
||||
DeviceState->State = Wait;
|
||||
DeviceThread = new TCCNETDeviceThread();
|
||||
DeviceThread->Log = Log;
|
||||
DeviceThread->DeviceState = DeviceState;
|
||||
DeviceThread->CommandParameters = CommandParameters;
|
||||
DeviceThread->SendType = SendType;
|
||||
DeviceThread->Port = Port;
|
||||
DeviceThread->Command = Command;
|
||||
DeviceThread->CommandSize = CommandSize;
|
||||
DeviceThread->Answer = Answer;
|
||||
DeviceThread->AnswerSize = AnswerSize;
|
||||
DeviceThread->data = data;
|
||||
DeviceThread->len_data = &len_data;
|
||||
|
||||
DeviceThread->CommandCriticalSection = CommandCriticalSection;
|
||||
|
||||
DeviceThread->DataLengthIndex = DataLengthIndex;
|
||||
DeviceThread->BeginByte = BeginByte;
|
||||
DeviceThread->LoggingErrors = LoggingErrors;
|
||||
DeviceThread->LastError = LastError;
|
||||
DeviceThread->EndByte = EndByte;
|
||||
DeviceThread->CRCLength = CRCLength;
|
||||
DeviceThread->DataLength = DataLength;
|
||||
|
||||
DeviceThread->DeviceStarted = DeviceStarted;
|
||||
DeviceThread->DeviceStopped = DeviceStopped;
|
||||
DeviceThread->DevicePaused = DevicePaused;
|
||||
DeviceThread->DeviceStateChanged = DeviceStateChanged;
|
||||
DeviceThread->CommandStarted = CommandStarted;
|
||||
DeviceThread->CommandPaused = CommandPaused;
|
||||
DeviceThread->CommandFinished = CommandFinished;
|
||||
DeviceThread->MaxCash = MaxCash;
|
||||
DeviceThread->MinCash = MinCash;
|
||||
|
||||
DeviceThread->ChangeEvent = ChangeEvent;
|
||||
((TCCNETDeviceThread*)DeviceThread)->DisabledNominals = DisabledNominals;
|
||||
DeviceState->Nominal = 0;
|
||||
|
||||
DeviceThread->ExchangeRate = ExchangeRate;
|
||||
DeviceThread->Currency = Currency;
|
||||
}
|
||||
|
||||
bool TCCNETDeviceClass::IsItYou()
|
||||
{
|
||||
if (DeviceState->StateCode == 0xFF)
|
||||
return false;
|
||||
|
||||
DisableBill();
|
||||
Sleep(800);
|
||||
if (DeviceState->StateCode != 0x19)
|
||||
return false;
|
||||
|
||||
EnableBill();
|
||||
Sleep(800);
|
||||
if (DeviceState->StateCode != 0x14)
|
||||
return false;
|
||||
|
||||
DisableBill();
|
||||
return true;
|
||||
}
|
||||
|
||||
18
devices/Validators/CCNETdevice/CCNETDeviceClass.h
Normal file
18
devices/Validators/CCNETdevice/CCNETDeviceClass.h
Normal file
@ -0,0 +1,18 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#ifndef CCNETDeviceClassH
|
||||
#define CCNETDeviceClassH
|
||||
//---------------------------------------------------------------------------
|
||||
#include "CValidator.h"
|
||||
|
||||
class TCCNETDeviceClass : public CValidator
|
||||
{
|
||||
protected:
|
||||
virtual void Start();
|
||||
public:
|
||||
TCCNETDeviceClass(int id, int ComPort,TLogClass* _Log = NULL);
|
||||
virtual ~TCCNETDeviceClass();
|
||||
virtual bool IsItYou();
|
||||
};
|
||||
|
||||
#endif
|
||||
1379
devices/Validators/CCNETdevice/CCNETDeviceThread.cpp
Normal file
1379
devices/Validators/CCNETdevice/CCNETDeviceThread.cpp
Normal file
File diff suppressed because it is too large
Load Diff
57
devices/Validators/CCNETdevice/CCNETDeviceThread.h
Normal file
57
devices/Validators/CCNETdevice/CCNETDeviceThread.h
Normal file
@ -0,0 +1,57 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#ifndef CCNETDeviceThreadH
|
||||
#define CCNETDeviceThreadH
|
||||
//---------------------------------------------------------------------------
|
||||
#include "DeviceThread.h"
|
||||
|
||||
class TCCNETDeviceThread : public TDeviceThread
|
||||
{
|
||||
protected:
|
||||
BYTE inter_crc_h;
|
||||
BYTE inter_crc_l;
|
||||
unsigned int mask;
|
||||
|
||||
int OfflineCount;
|
||||
|
||||
AnsiString BillDescr;
|
||||
AnsiString RejectingDescr;
|
||||
AnsiString FailureDescr;
|
||||
|
||||
int ResetCount;
|
||||
clock_t DisableTime;
|
||||
bool InitDisable;
|
||||
int LastEnDisCommand;//0-ok,1-disable,2-enable;
|
||||
|
||||
virtual void SendPacket(BYTE command,int len_packet, BYTE* data);
|
||||
virtual void calc_crc(BYTE byte);
|
||||
unsigned short Calc_CRC16CCNET(BYTE* DataBuf, unsigned short BufLen);
|
||||
|
||||
virtual void ParseAnswer(int mode = 0);
|
||||
virtual void GetStay();
|
||||
virtual void Reset();
|
||||
virtual void Return();
|
||||
virtual void Hold();
|
||||
virtual int Stack();
|
||||
virtual void EnableAll();
|
||||
virtual void Disable();
|
||||
virtual void PollingLoop();
|
||||
virtual void SendACK();
|
||||
virtual void SendNAK();
|
||||
|
||||
std::string GetMainFailureDescription(BYTE StatusCode);
|
||||
std::string GetHardwareFailureDescription(BYTE StatusCode);
|
||||
std::string GetStatusDescription(BYTE StatusCode);
|
||||
AnsiString GetRejectionDescription(BYTE StatusCode);
|
||||
AnsiString GetFailureDescription(BYTE StatusCode);
|
||||
virtual std::string GetStateDescription();
|
||||
virtual void __fastcall ProcessLoopCommand();
|
||||
|
||||
virtual void ProcessOutCommand();
|
||||
public:
|
||||
__fastcall TCCNETDeviceThread();
|
||||
virtual __fastcall ~TCCNETDeviceThread();
|
||||
void CommandDisable();
|
||||
bool IsItYou();
|
||||
};
|
||||
#endif
|
||||
19
devices/Validators/CCNETdevice/CCNETdevice.cpp
Normal file
19
devices/Validators/CCNETdevice/CCNETdevice.cpp
Normal file
@ -0,0 +1,19 @@
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include "CCNETdevice.h"
|
||||
#include "CCNETDeviceThread.h"
|
||||
|
||||
#pragma package(smart_init)
|
||||
|
||||
TCCNETdevice::TCCNETdevice(int id, int ComPort,TLogClass* _Log) : TCCNETDeviceClass(id, ComPort,_Log)
|
||||
{
|
||||
LoggingErrors = false;
|
||||
DisableBill();
|
||||
DeviceName = "CCNETValidator";
|
||||
DeviceState->OutStateCode = DSE_NOTMOUNT;
|
||||
}
|
||||
|
||||
TCCNETdevice::~TCCNETdevice()
|
||||
{
|
||||
}
|
||||
20
devices/Validators/CCNETdevice/CCNETdevice.h
Normal file
20
devices/Validators/CCNETdevice/CCNETdevice.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef CCNETdeviceH
|
||||
#define CCNETdeviceH
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "CCNETDeviceClass.h"
|
||||
//#include "CValidator.h"
|
||||
|
||||
//class TCCNETdevice : public TDeviceClass
|
||||
class TCCNETdevice : public TCCNETDeviceClass
|
||||
{
|
||||
private:
|
||||
protected:
|
||||
public:
|
||||
TCCNETdevice(int id, int ComPort,TLogClass* _Log = NULL);
|
||||
virtual ~TCCNETdevice();
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
94
devices/Validators/CCNETdevice/_CCNETDeviceClass.cpp
Normal file
94
devices/Validators/CCNETdevice/_CCNETDeviceClass.cpp
Normal file
@ -0,0 +1,94 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include "CCNETDeviceClass.h"
|
||||
#include "CCNETDeviceThread.h"
|
||||
#include "DeviceClass.h"
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#pragma package(smart_init)
|
||||
|
||||
TCCNETDeviceClass::TCCNETDeviceClass(int id, int ComPort,TLogClass* _Log): CValidator(id, ComPort,_Log, "CCNETValidator")
|
||||
{
|
||||
DataLengthIndex = 2;
|
||||
BeginByte = 0x02;
|
||||
LoggingErrors = true;
|
||||
|
||||
COMParameters->DtrControl = DTR_CONTROL_DISABLE;
|
||||
COMParameters->RtsControl = RTS_CONTROL_DISABLE;
|
||||
Port->ReopenPort();
|
||||
}
|
||||
|
||||
TCCNETDeviceClass::~TCCNETDeviceClass()
|
||||
{
|
||||
}
|
||||
|
||||
void TCCNETDeviceClass::Start()
|
||||
{
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (DeviceState->State != NotRun)
|
||||
return;
|
||||
DeviceState->State = Wait;
|
||||
DeviceThread = new TCCNETDeviceThread();
|
||||
DeviceThread->Log = Log;
|
||||
DeviceThread->DeviceState = DeviceState;
|
||||
DeviceThread->CommandParameters = CommandParameters;
|
||||
DeviceThread->SendType = SendType;
|
||||
DeviceThread->Port = Port;
|
||||
DeviceThread->Command = Command;
|
||||
DeviceThread->CommandSize = CommandSize;
|
||||
DeviceThread->Answer = Answer;
|
||||
DeviceThread->AnswerSize = AnswerSize;
|
||||
DeviceThread->data = data;
|
||||
DeviceThread->len_data = &len_data;
|
||||
|
||||
DeviceThread->CommandCriticalSection = CommandCriticalSection;
|
||||
|
||||
DeviceThread->DataLengthIndex = DataLengthIndex;
|
||||
DeviceThread->BeginByte = BeginByte;
|
||||
DeviceThread->LoggingErrors = LoggingErrors;
|
||||
DeviceThread->LastError = LastError;
|
||||
DeviceThread->EndByte = EndByte;
|
||||
DeviceThread->CRCLength = CRCLength;
|
||||
DeviceThread->DataLength = DataLength;
|
||||
|
||||
DeviceThread->DeviceStarted = DeviceStarted;
|
||||
DeviceThread->DeviceStopped = DeviceStopped;
|
||||
DeviceThread->DevicePaused = DevicePaused;
|
||||
DeviceThread->DeviceStateChanged = DeviceStateChanged;
|
||||
DeviceThread->CommandStarted = CommandStarted;
|
||||
DeviceThread->CommandPaused = CommandPaused;
|
||||
DeviceThread->CommandFinished = CommandFinished;
|
||||
DeviceThread->MaxCash = MaxCash;
|
||||
DeviceThread->MinCash = MinCash;
|
||||
|
||||
DeviceThread->ChangeEvent = ChangeEvent;
|
||||
((TCCNETDeviceThread*)DeviceThread)->DisabledNominals = DisabledNominals;
|
||||
DeviceState->Nominal = 0;
|
||||
|
||||
DeviceThread->ExchangeRate = ExchangeRate;
|
||||
DeviceThread->Currency = Currency;
|
||||
}
|
||||
|
||||
bool TCCNETDeviceClass::IsItYou()
|
||||
{
|
||||
if (DeviceState->StateCode == 0xFF)
|
||||
return false;
|
||||
|
||||
DisableBill();
|
||||
Sleep(800);
|
||||
if (DeviceState->StateCode != 0x19)
|
||||
return false;
|
||||
|
||||
EnableBill();
|
||||
Sleep(800);
|
||||
if (DeviceState->StateCode != 0x14)
|
||||
return false;
|
||||
|
||||
DisableBill();
|
||||
return true;
|
||||
}
|
||||
|
||||
18
devices/Validators/CCNETdevice/_CCNETDeviceClass.h
Normal file
18
devices/Validators/CCNETdevice/_CCNETDeviceClass.h
Normal file
@ -0,0 +1,18 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#ifndef CCNETDeviceClassH
|
||||
#define CCNETDeviceClassH
|
||||
//---------------------------------------------------------------------------
|
||||
#include "CValidator.h"
|
||||
|
||||
class TCCNETDeviceClass : public CValidator
|
||||
{
|
||||
protected:
|
||||
virtual void Start();
|
||||
public:
|
||||
TCCNETDeviceClass(int id, int ComPort,TLogClass* _Log = NULL);
|
||||
virtual ~TCCNETDeviceClass();
|
||||
virtual bool IsItYou();
|
||||
};
|
||||
|
||||
#endif
|
||||
1379
devices/Validators/CCNETdevice/_CCNETDeviceThread.cpp
Normal file
1379
devices/Validators/CCNETdevice/_CCNETDeviceThread.cpp
Normal file
File diff suppressed because it is too large
Load Diff
57
devices/Validators/CCNETdevice/_CCNETDeviceThread.h
Normal file
57
devices/Validators/CCNETdevice/_CCNETDeviceThread.h
Normal file
@ -0,0 +1,57 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#ifndef CCNETDeviceThreadH
|
||||
#define CCNETDeviceThreadH
|
||||
//---------------------------------------------------------------------------
|
||||
#include "DeviceThread.h"
|
||||
|
||||
class TCCNETDeviceThread : public TDeviceThread
|
||||
{
|
||||
protected:
|
||||
BYTE inter_crc_h;
|
||||
BYTE inter_crc_l;
|
||||
unsigned int mask;
|
||||
|
||||
int OfflineCount;
|
||||
|
||||
AnsiString BillDescr;
|
||||
AnsiString RejectingDescr;
|
||||
AnsiString FailureDescr;
|
||||
|
||||
int ResetCount;
|
||||
clock_t DisableTime;
|
||||
bool InitDisable;
|
||||
int LastEnDisCommand;//0-ok,1-disable,2-enable;
|
||||
|
||||
virtual void SendPacket(BYTE command,int len_packet, BYTE* data);
|
||||
virtual void calc_crc(BYTE byte);
|
||||
unsigned short Calc_CRC16CCNET(BYTE* DataBuf, unsigned short BufLen);
|
||||
|
||||
virtual void ParseAnswer(int mode = 0);
|
||||
virtual void GetStay();
|
||||
virtual void Reset();
|
||||
virtual void Return();
|
||||
virtual void Hold();
|
||||
virtual int Stack();
|
||||
virtual void EnableAll();
|
||||
virtual void Disable();
|
||||
virtual void PollingLoop();
|
||||
virtual void SendACK();
|
||||
virtual void SendNAK();
|
||||
|
||||
std::string GetMainFailureDescription(BYTE StatusCode);
|
||||
std::string GetHardwareFailureDescription(BYTE StatusCode);
|
||||
std::string GetStatusDescription(BYTE StatusCode);
|
||||
AnsiString GetRejectionDescription(BYTE StatusCode);
|
||||
AnsiString GetFailureDescription(BYTE StatusCode);
|
||||
virtual std::string GetStateDescription();
|
||||
virtual void __fastcall ProcessLoopCommand();
|
||||
|
||||
virtual void ProcessOutCommand();
|
||||
public:
|
||||
__fastcall TCCNETDeviceThread();
|
||||
virtual __fastcall ~TCCNETDeviceThread();
|
||||
void CommandDisable();
|
||||
bool IsItYou();
|
||||
};
|
||||
#endif
|
||||
19
devices/Validators/CCNETdevice/_CCNETdevice.cpp
Normal file
19
devices/Validators/CCNETdevice/_CCNETdevice.cpp
Normal file
@ -0,0 +1,19 @@
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include "CCNETdevice.h"
|
||||
#include "CCNETDeviceThread.h"
|
||||
|
||||
#pragma package(smart_init)
|
||||
|
||||
TCCNETdevice::TCCNETdevice(int id, int ComPort,TLogClass* _Log) : TCCNETDeviceClass(id, ComPort,_Log)
|
||||
{
|
||||
LoggingErrors = false;
|
||||
DisableBill();
|
||||
DeviceName = "CCNETValidator";
|
||||
DeviceState->OutStateCode = DSE_NOTMOUNT;
|
||||
}
|
||||
|
||||
TCCNETdevice::~TCCNETdevice()
|
||||
{
|
||||
}
|
||||
20
devices/Validators/CCNETdevice/_CCNETdevice.h
Normal file
20
devices/Validators/CCNETdevice/_CCNETdevice.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef CCNETdeviceH
|
||||
#define CCNETdeviceH
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "CCNETDeviceClass.h"
|
||||
//#include "CValidator.h"
|
||||
|
||||
//class TCCNETdevice : public TDeviceClass
|
||||
class TCCNETdevice : public TCCNETDeviceClass
|
||||
{
|
||||
private:
|
||||
protected:
|
||||
public:
|
||||
TCCNETdevice(int id, int ComPort,TLogClass* _Log = NULL);
|
||||
virtual ~TCCNETdevice();
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
419
devices/Validators/Validator.cpp
Normal file
419
devices/Validators/Validator.cpp
Normal file
@ -0,0 +1,419 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#include "stdafx.h"
|
||||
//------------------------------------------------------------------------------
|
||||
#pragma hdrstop
|
||||
|
||||
#include <string>
|
||||
#include <windows.h>
|
||||
|
||||
//#include <IniFiles.hpp>
|
||||
#include "Validator.h"
|
||||
#include "inifile.h"
|
||||
#include "stdTools.h"
|
||||
//#include "ud_Module.h"
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//Validator* validator=NULL;
|
||||
//---------------------------------------------------------------------------
|
||||
//---------------------------------------------------------------------------
|
||||
unsigned char ConReset[6] = { 0x02,0x03,0x06,0x30,0x41,0xB3 }; //RESET <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned char ConReACK[6] = { 0x02,0x03,0x06,0x00,0xC2,0x82 }; //<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>...
|
||||
unsigned char ConStPoll[6] = { 0x02,0x03,0x06,0x33,0xDA,0x81 }; //POLL 33H Request for Bill-to-Bill unit activity Status (<28><><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>)
|
||||
unsigned char ConIdent[6] = { 0x02,0x03,0x06,0x37,0xFE,0xC7 }; //IDENTIFICATION 37H Request for Model, Serial Number, Country ISO code, Asset Number
|
||||
|
||||
//#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; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 1 <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
pthread_mutex_init(&m_mutex, NULL);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
Validator::~Validator()
|
||||
{
|
||||
stopPay();
|
||||
pthread_mutex_destroy(&m_mutex);
|
||||
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();
|
||||
ini->Load("settings.ini");
|
||||
cPort->ComNumber=ini->ReadString("Validator","Port","0");
|
||||
cPort->BaudRate=ini->ReadLong("Validator","BaudRate","0");
|
||||
m_testmode=ini->ReadBool("Validator","TestMode","0");
|
||||
delete ini;
|
||||
}*/
|
||||
//---------------------------------------------------------------------------
|
||||
bool Validator::OpenCOMPort(std::string ComNumber, int BaudRate)
|
||||
{
|
||||
cPort->ComNumber = ComNumber;
|
||||
cPort->BaudRate = BaudRate;
|
||||
|
||||
cPort->Close();
|
||||
|
||||
if (cPort->Open(cPort->ComNumber))
|
||||
{
|
||||
if (!cPort->Setup(2))
|
||||
return false;
|
||||
|
||||
if (!cPort->SetTimeout(500)) //50 <20><><EFBFBD> 5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 1/10 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return false;
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<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);
|
||||
unsigned int* pCRC=(unsigned int*)&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];
|
||||
unsigned int 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;
|
||||
unsigned int 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()
|
||||
{
|
||||
bool result=true;
|
||||
|
||||
if(result) result=result && Reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(result) result=result && getSerialNumber(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(result) result=result && getNominals(); //<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(result) result=result && SetEnableBillTypes(true); //<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>
|
||||
|
||||
return result || m_testmode; //<2F> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> OK
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<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()
|
||||
{
|
||||
unsigned int BytesWritten=cPort->Write(ConIdent,sizeof(ConIdent));
|
||||
unsigned int 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)
|
||||
{
|
||||
Utility::logrotate("validator.log","<EFBFBD><EFBFBD> <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>
|
||||
std::string str1((char*)&ReadAr[3],15);
|
||||
BatchNumber= Utility::trim(str1);
|
||||
|
||||
std::string str2((char*)&ReadAr[18],12);
|
||||
SerialNumber= Utility::trim(str2);
|
||||
|
||||
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()
|
||||
{
|
||||
unsigned char ConGetBT[6] = { 0x02,0x03,0x06,0x41,0x4F,0xD1 }; //GET BILL TABLE <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ConGetBT[5] = GetCRC16(ConGetBT, 5); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CRC
|
||||
|
||||
bNominals=false;
|
||||
Sleep(100); //<2F><> <20><><EFBFBD><EFBFBD>
|
||||
unsigned int BytesWritten=cPort->Write(ConGetBT,sizeof(ConGetBT));
|
||||
unsigned int 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::getTHPay(int &state)
|
||||
{
|
||||
state=0;
|
||||
int result = 0;
|
||||
if(!cPort->isOpen()){Sleep(1000); return result;}
|
||||
|
||||
unsigned char buffer[255];
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
|
||||
unsigned int BytesWritten=0;
|
||||
unsigned int 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(buffer,sizeof(buffer));
|
||||
if(CheckOnCRC(buffer,BytesRead))
|
||||
{
|
||||
switch (buffer[3])
|
||||
{
|
||||
case 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
|
||||
//Utility::logrotate("validator.log","(State)0x13 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
break;
|
||||
case 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)
|
||||
//Utility::logrotate("validator.log","(State)0x14 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
break;
|
||||
case 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;
|
||||
//Utility::logrotate("validator.log","(State)21 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
break;
|
||||
case 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>
|
||||
state = 0x17;
|
||||
//Utility::logrotate("validator.log","(State)23 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
|
||||
break;
|
||||
case 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;
|
||||
//Utility::logrotate("validator.log","(State)25 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>!!!");
|
||||
SetEnableBillTypes(true);
|
||||
break;
|
||||
case 0x1c: //28 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//Utility::logrotate("validator.log","(State)28 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
break;
|
||||
case 0x41: //41H <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
//Utility::logrotate("validator.log","(State)0x41 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...");
|
||||
break;
|
||||
case 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>".
|
||||
//Utility::logrotate("validator.log","(State)69 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
break;
|
||||
case 0x81: //129 <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
state = 0x81;
|
||||
//Utility::logrotate("validator.log","(State)129 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
if (buffer[4]<23)
|
||||
{
|
||||
result = bt[buffer[4]].val; //<2F> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> buffer[5]
|
||||
Utility::logrotate("validator.log", "(Pay)" + Utility::IntToStdStr(result));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
Utility::logrotate("validator.log", "(State???)" + Utility::IntToStdStr(buffer[3]));
|
||||
}
|
||||
|
||||
Utility::logrotate("validator.log", "buffer[3] = " + Utility::IntToStdStr(buffer[3]));
|
||||
Utility::logrotate("validator.log", "state = " + Utility::IntToStdStr(state));
|
||||
|
||||
}
|
||||
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);
|
||||
|
||||
unsigned int 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(m_testmode) return 0;
|
||||
//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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
std::string Validator::GetStatusDescription(char StatusCode) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if (StatusCode == 0x00)
|
||||
return "OK";
|
||||
else
|
||||
if (StatusCode == 1)
|
||||
return "<EFBFBD><EFBFBD> <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";
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
bool Validator::startPay() //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if (!execute_thread) //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
int ret = pthread_create(&m_threadid, NULL, Validator::thread_func, (void*)this);
|
||||
if (ret == 0)
|
||||
execute_thread = true;
|
||||
}
|
||||
return execute_thread;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
bool Validator::stopPay() //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if (execute_thread)
|
||||
{
|
||||
execute_thread = false;
|
||||
void* ret = NULL;
|
||||
pthread_join(m_threadid, &ret);
|
||||
}
|
||||
return !execute_thread;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void* Validator::thread_func(void *pData)
|
||||
{
|
||||
Validator* validator=(Validator*) pData;
|
||||
while (validator->execute_thread)
|
||||
{
|
||||
int pay,state;
|
||||
pay = validator->getTHPay(state);
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (pthread_mutex_lock(&validator->m_mutex) == 0)
|
||||
{
|
||||
validator->m_payState = state;
|
||||
pthread_mutex_unlock(&validator->m_mutex);
|
||||
}
|
||||
if (pay > 0) //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if (pthread_mutex_lock(&validator->m_mutex) == 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
validator->m_pays.add(pay);
|
||||
pthread_mutex_unlock(&validator->m_mutex);
|
||||
}
|
||||
}
|
||||
}
|
||||
validator->endPay();
|
||||
return NULL;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int Validator::getPay()
|
||||
{
|
||||
int pay = 0;
|
||||
if (pthread_mutex_lock(&m_mutex) == 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if (m_pays.count() > 0)
|
||||
{
|
||||
pay = m_pays.get(0);
|
||||
m_pays.del((unsigned int)0);
|
||||
}
|
||||
pthread_mutex_unlock(&m_mutex);
|
||||
}
|
||||
return pay;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
int Validator::getPayState()
|
||||
{
|
||||
int result = 0;
|
||||
if (pthread_mutex_lock(&m_mutex) == 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
result = m_payState;
|
||||
pthread_mutex_unlock(&m_mutex);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
107
devices/Validators/Validator.h
Normal file
107
devices/Validators/Validator.h
Normal file
@ -0,0 +1,107 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#ifndef ValidatorH
|
||||
#define ValidatorH
|
||||
//---------------------------------------------------------------------------
|
||||
#include "../ComPort.h"
|
||||
#define HAVE_STRUCT_TIMESPEC
|
||||
#include <pthread.h>
|
||||
#include "structs.h"
|
||||
//#include "ValidatorThread.h"
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define fcRESET 0x30;// Command for Bill - to - Bill unit to self - reset ALL
|
||||
#define fcGET_STATUS 0x31;// Request for Bill - to - Bill unit set - up status IDLING, DISABLED
|
||||
#define fcSET_SECURITY 0x32;//Sets Bill - to - Bill unit Security Mode. Command is followed by set - up data.See command format INITIALIZE, DISABLED
|
||||
#define fcPOLL 0x33; //Request for Bill - to - Bill unit activity Status ALL
|
||||
#define fcENABLE_BILL_TYPES 0x34; //Indicates Bill Type enable or disable. Command is followed by set - up data.See command format IDLING, ACCEPTING,REJECTING, ESCROW,HOLDING, STACKING,RETURNING, DISABLED
|
||||
#define fcSTACK 0x35; //Sent by Controller to stack a bill in escrow to drop cassette or to one of the recycling cassettes ESCROW, HOLDING
|
||||
#define fcRETURN 0x36; //Sent by Controller to return a bill in escrow ESCROW, HOLDING
|
||||
#define fcIDENTIFICATION 0x37; //Request for Model, Serial Number, Country ISO code, Asset Number POWER UP, INITIALISE, DISABLED, IDLING
|
||||
#define fcHOLD 0x38; //Command for holding a bill in Escrow state ESCROW, HOLDING
|
||||
|
||||
#define fcSET_BARCODE_PARAMETERS 0x39; // Command for settings the barcode format and number of characters INITIALIZE, DISABLED
|
||||
#define fcEXTRACT_BARCODE_DATA 0x3A; // Command for retrieving barcode data if barcode coupon is found.If this command is sent when barcode coupon is not found the Bill Validator returns ILLEGAL COMMAND response. ESCROW, PACKED, IDLING, DISABLED
|
||||
#define fcRECYCLING_CASSETTE_STATUS 0x3B; // Request for Bill - to - Bill unit recycling cassette status IDLING, DISABLED, ESCROW
|
||||
#define fcDISPENSE 0x3C; // Command to dispense bill(s) DISABLED
|
||||
#define fcUNLOAD 0x3D; // Command to unload bills from recycling cassette(s) to drop cassette DISABLED
|
||||
#define fcEXTENDED_IDENTIFICATION 0x3E; // Request for Model, Serial Number, Software Version of Bill - to - Bill unit and its subunits, Country ISO code, Asset Number DISABLED, IDLING
|
||||
#define fcSET_RECYCLING_CASSETTE_TYPE 0x40; // Assigns recycling cassettes to bill type DISABLED
|
||||
#define fcGET_BILL_TABLE 0x41; // Request for bill type description IDLING, DISABLED
|
||||
#define fcDOWNLOAD 0x50; // Command for transition to download mode. Please refer to CCNET Document 2 for details. DISABLED, FAILURE, DROP CASSETTE REMOVED
|
||||
#define fcGET_CRC32_OF_THE_CODE 0x51; // Request for Bill Validator<6F>s firmware CRC32. POWER UP, INITIALIZE, DISABLED, FAILURE
|
||||
#define fcMODULE_DOWNLOAD 0x52; // Command to enter an internal module update mode.Please refer to CCNET Document 2 for details. DISABLED
|
||||
#define fcMODULE_IDENTIFICATION_REQUEST 0x53; // Request serial numbers of all intelligent modules DISABLED, IDLING
|
||||
#define fcREQUEST_STATISTICS 0x60; // Command for retrieving full information about acceptance performance.Please refer to CCNET Document 3 for details. DISABLED
|
||||
#define fcREAL_TIME_CLOCK 0x62; // Read or initialize internal Real - Time Clock.DISABLED
|
||||
#define fcPOWER_RECOVERY 0x66; // Request whether there was a power cut and perform credit recovery DISABLED
|
||||
#define fcEMPTY_DISPENSER 0x67; // Dispense all bills remaining in the dispenser after power cut. POWER CUT WHILE DISPENSING
|
||||
#define fcSET_OPTIONS 0x68; // Set various Bill - To - Bill options INITIALIZE, DISABLED
|
||||
#define fcGET_OPTIONS 0x69; // Set various Bill - To - Bill options INITIALIZE, DISABLED EXTENDED CASSETTE
|
||||
#define fcSTATUS 0x70; // Extended recycling cassette status request DISABLED
|
||||
//---------------------------------------------------------------------------
|
||||
struct BillType
|
||||
{
|
||||
int val; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char country[3]; //<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
int addZero(int val,int cnt); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
//---------------------------------------------------------------------------
|
||||
class Validator
|
||||
{
|
||||
private:
|
||||
unsigned char ReadAr[255];
|
||||
protected:
|
||||
//int Pay;
|
||||
|
||||
bool CheckOnCRC(unsigned char* lpBuffer,unsigned long nSize);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool execute_thread = false; //<2F><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
pthread_t m_threadid;
|
||||
static void *thread_func(void *d);
|
||||
pthread_mutex_t m_mutex;
|
||||
|
||||
|
||||
TSimpleList2<int> m_pays; //<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
int m_payState; //<2F><><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>)
|
||||
|
||||
int getTHPay(int &state); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void endPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
public:
|
||||
bool m_testmode; //<2F><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
ComPort* cPort; //<2F> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool bNominals; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 1 <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
BillType bt[24]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::string BatchNumber, SerialNumber; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
Validator();
|
||||
virtual ~Validator();
|
||||
//---------------------------------------------------------------------------
|
||||
bool OpenCOMPort(std::string ComNumber, int BaudRate);
|
||||
bool SendCommand(std::string req, std::string &ans);
|
||||
bool Start(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
bool Reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool GetStatus(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool SetEnableBillTypes(bool enable); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
bool getSerialNumber(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool getNominals(); //<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>
|
||||
|
||||
bool startPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int getPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int getPayState(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool stopPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
int GetState(); //<2F><><EFBFBD><EFBFBD> 0 <20><> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::string GetStatusDescription(char StatusCode); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
extern Validator* validator;
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
|
||||
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";
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
64
devices/Validators/Validator.~h
Normal file
64
devices/Validators/Validator.~h
Normal file
@ -0,0 +1,64 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#ifndef ValidatorH
|
||||
#define ValidatorH
|
||||
//---------------------------------------------------------------------------
|
||||
#include "../ComPort.h"
|
||||
#include "ValidatorThread.h"
|
||||
//---------------------------------------------------------------------------
|
||||
unsigned char ConReset[6] = {0x02,0x03,0x06,0x30,0x41,0xB3}; //RESET <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned char ConReACK[6] = {0x02,0x03,0x06,0x00,0xC2,0x82}; //<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>...
|
||||
unsigned char ConGetBT[6] = {0x02,0x03,0x06,0x41,0x4F,0xD1}; //GET BILL TABLE <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char ConStPoll[6]= {0x02,0x03,0x06,0x33,0xDA,0x81}; //POLL 33H Request for Bill-to-Bill unit activity Status (<28><><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>)
|
||||
unsigned char ConIdent[6] = {0x02,0x03,0x06,0x37,0xFE,0xC7}; //IDENTIFICATION 37H Request for Model, Serial Number, Country ISO code, Asset Number
|
||||
//---------------------------------------------------------------------------
|
||||
struct BillType
|
||||
{
|
||||
int val; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char country[3]; //<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
int addZero(int val,int cnt);
|
||||
//---------------------------------------------------------------------------
|
||||
class Validator
|
||||
{
|
||||
private:
|
||||
unsigned char ReadAr[255];
|
||||
protected:
|
||||
int Pay;
|
||||
ValidatorThread* vThread;
|
||||
bool CheckOnCRC(unsigned char* lpBuffer,unsigned long nSize);
|
||||
public:
|
||||
ComPort* cPort;
|
||||
bool bNominals; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BillType bt[24]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
AnsiString BatchNumber, SerialNumber; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
Validator();
|
||||
virtual ~Validator();
|
||||
bool SendCommand(std::string req, std::string &ans);
|
||||
bool Start(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
bool Reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool GetStatus(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool SetEnableBillTypes(bool enable); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
bool getSerialNumber(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool getNominals(); //<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>
|
||||
void LoadSetup();
|
||||
void SaveSetup();
|
||||
|
||||
int getPay(int &state);
|
||||
void endPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool startPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool stopPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
int GetState(); //<2F><><EFBFBD><EFBFBD> 0 <20><> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AnsiString GetStatusDescription(BYTE StatusCode); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
extern Validator* validator;
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
|
||||
158
devices/Validators/ValidatorThread.cpp
Normal file
158
devices/Validators/ValidatorThread.cpp
Normal file
@ -0,0 +1,158 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
|
||||
#include "ValidatorThread.h"
|
||||
#include "Validator.h"
|
||||
#include "PrinterOPOS.h"
|
||||
#include "uf_Main.h"
|
||||
#include "ud_Module.h"
|
||||
#pragma package(smart_init)
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// Important: Methods and properties of objects in VCL can only be
|
||||
// used in a method called using Synchronize, for example:
|
||||
//
|
||||
// Synchronize(UpdateCaption);
|
||||
//
|
||||
// where UpdateCaption could look like:
|
||||
//
|
||||
// void __fastcall ValidatorThread::UpdateCaption()
|
||||
// {
|
||||
// Form1->Caption = "Updated in a thread";
|
||||
// }
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall ValidatorThread::ValidatorThread(bool CreateSuspended)
|
||||
: TThread(CreateSuspended)
|
||||
{
|
||||
bStop=false;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall ValidatorThread::Execute()
|
||||
{
|
||||
while(!bStop)
|
||||
{
|
||||
pay=validator->getPay(state);
|
||||
Synchronize(UpdateState);
|
||||
if(pay!=0)
|
||||
Synchronize(UpdateCaption);
|
||||
}
|
||||
validator->endPay();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void ValidatorThread::Stop()
|
||||
{
|
||||
bStop=true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><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> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
void __fastcall ValidatorThread::UpdateState()
|
||||
{
|
||||
|
||||
//TODO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!
|
||||
if(state==0x15)
|
||||
{
|
||||
frmMain->gbtnJCheck->Enabled=false;
|
||||
frmMain->gbtnPCheck->Enabled=false;
|
||||
}else
|
||||
if(state==0x19 || state==0x81)
|
||||
{
|
||||
if(frmMain->sum!=0)
|
||||
{
|
||||
frmMain->gbtnJCheck->Enabled=true;
|
||||
frmMain->gbtnPCheck->Enabled=true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
void __fastcall ValidatorThread::UpdateCaption()
|
||||
{
|
||||
TService* ser=NULL;
|
||||
|
||||
bool isOk=true;
|
||||
frmMain->gbtnJCheck->Enabled=true; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
frmMain->gbtnPCheck->Enabled=true;
|
||||
frmMain->gbtnMainMenu->Enabled=false;
|
||||
|
||||
frmMain->sum+=pay;
|
||||
// frmMain->Label13->Caption=dModule->language->Values["npay"]+" "+IntToStr(frmMain->sum)+"<22><>.";
|
||||
frmMain->Label9->Caption=dModule->language->Values["npay"]+" "+IntToStr(frmMain->sum)+"<EFBFBD><EFBFBD>.";
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
TService* s=NULL;
|
||||
for(int i=0;i<dModule->LService->Count;i++)
|
||||
{
|
||||
if(((TService*)dModule->LService->Items[i])->select)
|
||||
{
|
||||
s=(TService*)dModule->LService->Items[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(s!=NULL)
|
||||
{
|
||||
s->sum+=pay;
|
||||
s->lblSum->Caption=IntToStr(s->sum);
|
||||
}
|
||||
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(dModule->UserType) //true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->BalanceType==1) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->addPayJuridicalPerson(dModule->UserId, pay, g_printer->getCheckId()+1))
|
||||
dModule->OraSession1->Commit();
|
||||
else
|
||||
{isOk=false; dModule->OraSession1->Rollback();}
|
||||
}else
|
||||
if(dModule->BalanceType==2) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->addPayJuridicalPerson(dModule->UserId, pay, g_printer->getCheckId()+1))
|
||||
dModule->OraSession1->Commit();
|
||||
else
|
||||
{isOk=false; dModule->OraSession1->Rollback();}
|
||||
}
|
||||
}else //false - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
ser=dModule->getSelectService();
|
||||
if(ser==NULL){isOk=false; dModule->OraSession1->Rollback();}
|
||||
else
|
||||
{
|
||||
if(dModule->BalanceType==1) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->addPayPhysicalPerson(dModule->UserId, ser->id, pay, g_printer->getCheckId()+1))
|
||||
dModule->OraSession1->Commit();
|
||||
else
|
||||
{isOk=false; dModule->OraSession1->Rollback();}
|
||||
}else
|
||||
if(dModule->BalanceType==2) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->addPayPhysicalPerson(dModule->UserId, ser->id, pay, g_printer->getCheckId()+1))
|
||||
dModule->OraSession1->Commit();
|
||||
else
|
||||
{isOk=false; dModule->OraSession1->Rollback();}
|
||||
}
|
||||
}
|
||||
}
|
||||
}catch(...){isOk=false;}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(!isOk)
|
||||
{
|
||||
int set_id=0; if(ser!=NULL) set_id=ser->id;
|
||||
if(dModule->BalanceType==1)
|
||||
{
|
||||
dModule->savePay(1,dModule->UserType,dModule->UserId,set_id,pay,g_printer->getCheckId()+1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
else
|
||||
if(dModule->BalanceType==2)
|
||||
dModule->savePay(2,dModule->UserType,dModule->UserId,set_id,pay,g_printer->getCheckId()+1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
23
devices/Validators/ValidatorThread.h
Normal file
23
devices/Validators/ValidatorThread.h
Normal file
@ -0,0 +1,23 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#ifndef ValidatorThreadH
|
||||
#define ValidatorThreadH
|
||||
//---------------------------------------------------------------------------
|
||||
#include <Classes.hpp>
|
||||
//---------------------------------------------------------------------------
|
||||
class ValidatorThread : public TThread
|
||||
{
|
||||
private:
|
||||
protected:
|
||||
bool bStop;
|
||||
int state;
|
||||
void __fastcall Execute();
|
||||
public:
|
||||
int pay;
|
||||
__fastcall ValidatorThread(bool CreateSuspended);
|
||||
void Stop();
|
||||
void __fastcall UpdateCaption();
|
||||
void __fastcall UpdateState();
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
153
devices/Validators/ValidatorThread.~cpp
Normal file
153
devices/Validators/ValidatorThread.~cpp
Normal file
@ -0,0 +1,153 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
|
||||
#include "ValidatorThread.h"
|
||||
#include "Validator.h"
|
||||
#include "PrinterOPOS.h"
|
||||
#include "uf_Main.h"
|
||||
#include "ud_Module.h"
|
||||
#pragma package(smart_init)
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// Important: Methods and properties of objects in VCL can only be
|
||||
// used in a method called using Synchronize, for example:
|
||||
//
|
||||
// Synchronize(UpdateCaption);
|
||||
//
|
||||
// where UpdateCaption could look like:
|
||||
//
|
||||
// void __fastcall ValidatorThread::UpdateCaption()
|
||||
// {
|
||||
// Form1->Caption = "Updated in a thread";
|
||||
// }
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall ValidatorThread::ValidatorThread(bool CreateSuspended)
|
||||
: TThread(CreateSuspended)
|
||||
{
|
||||
bStop=false;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall ValidatorThread::Execute()
|
||||
{
|
||||
while(!bStop)
|
||||
{
|
||||
pay=validator->getPay(state);
|
||||
Synchronize(UpdateState);
|
||||
if(pay!=0)
|
||||
Synchronize(UpdateCaption);
|
||||
}
|
||||
validator->endPay();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void ValidatorThread::Stop()
|
||||
{
|
||||
bStop=true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><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> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
void __fastcall ValidatorThread::UpdateState()
|
||||
{
|
||||
|
||||
//TODO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!
|
||||
if(state==0x15)
|
||||
{
|
||||
frmMain->gbtnJCheck->Enabled=false;
|
||||
frmMain->gbtnPCheck->Enabled=false;
|
||||
}else
|
||||
if(state==0x19 || state==0x81)
|
||||
{
|
||||
if(frmMain->sum!=0)
|
||||
{
|
||||
frmMain->gbtnJCheck->Enabled=true;
|
||||
frmMain->gbtnPCheck->Enabled=true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
void __fastcall ValidatorThread::UpdateCaption()
|
||||
{
|
||||
bool isOk=true;
|
||||
frmMain->gbtnJCheck->Enabled=true; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
frmMain->gbtnPCheck->Enabled=true;
|
||||
frmMain->gbtnMainMenu->Enabled=false;
|
||||
|
||||
frmMain->sum+=pay;
|
||||
// frmMain->Label13->Caption=dModule->language->Values["npay"]+" "+IntToStr(frmMain->sum)+"<22><>.";
|
||||
frmMain->Label9->Caption=dModule->language->Values["npay"]+" "+IntToStr(frmMain->sum)+"<22><>.";
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
TService* s=NULL;
|
||||
for(int i=0;i<dModule->LService->Count;i++)
|
||||
{
|
||||
if(((TService*)dModule->LService->Items[i])->select)
|
||||
{
|
||||
s=(TService*)dModule->LService->Items[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(s!=NULL)
|
||||
{
|
||||
s->sum+=pay;
|
||||
s->lblSum->Caption=IntToStr(s->sum);
|
||||
}
|
||||
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(dModule->UserType) //true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->BalanceType==1) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->addPayJuridicalPerson(dModule->UserId, pay, g_printer->getCheckId()+1))
|
||||
dModule->OraSession1->Commit();
|
||||
else
|
||||
{isOk=false; dModule->OraSession1->Rollback();}
|
||||
}else
|
||||
if(dModule->BalanceType==2) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->addPayJuridicalPerson(dModule->UserId, pay, g_printer->getCheckId()+1))
|
||||
dModule->OraSession1->Commit();
|
||||
else
|
||||
{isOk=false; dModule->OraSession1->Rollback();}
|
||||
}
|
||||
}else //false - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
TService* ser=dModule->getSelectService();
|
||||
if(ser==NULL){isOk=false; dModule->OraSession1->Rollback();}
|
||||
else
|
||||
{
|
||||
if(dModule->BalanceType==1) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->addPayPhysicalPerson(dModule->UserId, ser->id, pay, g_printer->getCheckId()+1))
|
||||
dModule->OraSession1->Commit();
|
||||
else
|
||||
{isOk=false; dModule->OraSession1->Rollback();}
|
||||
}else
|
||||
if(dModule->BalanceType==2) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->addPayPhysicalPerson(dModule->UserId, ser->id, pay, g_printer->getCheckId()+1))
|
||||
dModule->OraSession1->Commit();
|
||||
else
|
||||
{isOk=false; dModule->OraSession1->Rollback();}
|
||||
}
|
||||
}
|
||||
}
|
||||
}catch(...){isOk=false;}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(!isOk)
|
||||
{
|
||||
if(dModule->BalanceType==1)
|
||||
dModule->savePay(1,dModule->UserType,dModule->UserId,ser->id,pay,g_printer->getCheckId()+1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else
|
||||
if(dModule->BalanceType==2)
|
||||
dModule->savePay(2,dModule->UserType,dModule->UserId,ser->id,pay,g_printer->getCheckId()+1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
23
devices/Validators/ValidatorThread.~h
Normal file
23
devices/Validators/ValidatorThread.~h
Normal file
@ -0,0 +1,23 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#ifndef ValidatorThreadH
|
||||
#define ValidatorThreadH
|
||||
//---------------------------------------------------------------------------
|
||||
#include <Classes.hpp>
|
||||
//---------------------------------------------------------------------------
|
||||
class ValidatorThread : public TThread
|
||||
{
|
||||
private:
|
||||
protected:
|
||||
bool bStop;
|
||||
int state;
|
||||
void __fastcall Execute();
|
||||
public:
|
||||
int pay;
|
||||
__fastcall ValidatorThread(bool CreateSuspended);
|
||||
void Stop();
|
||||
void __fastcall UpdateCaption();
|
||||
void __fastcall UpdateState();
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
233
devices/Validators/_Validator.cpp
Normal file
233
devices/Validators/_Validator.cpp
Normal file
@ -0,0 +1,233 @@
|
||||
//---------------------------------------------------------------------------00
|
||||
|
||||
|
||||
#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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<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;
|
||||
|
||||
LoadSetup();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
Validator::~Validator()
|
||||
{
|
||||
delete cPort;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
bool Validator::Start()
|
||||
{
|
||||
if(cPort->Open(cPort->port))
|
||||
{
|
||||
cPort->BaudRate=cPort->BaudRate;
|
||||
if(!cPort->Setup()) 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>
|
||||
}else return false;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<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);
|
||||
}
|
||||
/*---------------------------------------------------------------------------
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
bool Validator::Reset()
|
||||
{
|
||||
DWORD BytesWritten=cPort->Write(ConReset,sizeof(ConReset));
|
||||
DWORD BytesRead=cPort->Read(ReadAr,sizeof(ReadAr));
|
||||
Sleep(5000);
|
||||
return CheckOnCRC(ReadAr,BytesRead);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
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("<EFBFBD><EFBFBD> <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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void Validator::LoadSetup()
|
||||
{
|
||||
TIniFile* ini=new TIniFile(ExtractFilePath(ParamStr(0))+"\\Setup.ini");
|
||||
cPort->port=ini->ReadString("Validator","Port","");
|
||||
cPort->BaudRate=ini->ReadInteger("Validator","BaudRate",0);
|
||||
delete ini;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void Validator::SaveSetup()
|
||||
{
|
||||
TIniFile* ini=new TIniFile(ExtractFilePath(ParamStr(0))+"\\Setup.ini");
|
||||
ini->WriteString("Validator","Port",cPort->port);
|
||||
ini->WriteInteger("Validator","BaudRate",cPort->BaudRate);
|
||||
delete ini;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
bool Validator::startPay() //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
vThread = new ValidatorThread(false);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
bool Validator::stopPay() //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
vThread->Stop();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><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>
|
||||
int Validator::getPay()
|
||||
{
|
||||
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] == 19)
|
||||
{}else
|
||||
if(ReadAr[3]==20) //IDLING <20> The state in which Bill-to-Bill is ready accept bills.
|
||||
{}else
|
||||
if(ReadAr[3]==21) //******<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)*****
|
||||
{}else
|
||||
if(ReadAr[3]==23)
|
||||
{}else
|
||||
if(ReadAr[3]==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.
|
||||
{
|
||||
BytesWritten=cPort->Write(ConEnBT , sizeof(ConEnBT));
|
||||
BytesRead=cPort->Read(ReadAr,sizeof(ReadAr));
|
||||
}else
|
||||
if(ReadAr[3]==28) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{}else
|
||||
if(ReadAr[3]==69)
|
||||
{}else
|
||||
if(ReadAr[3]==129) //<2F> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><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("(Pay)"+IntToStr(result));
|
||||
}
|
||||
}
|
||||
}
|
||||
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()
|
||||
{
|
||||
DWORD BytesWritten=cPort->Write(ConDiBT , sizeof(ConDiBT));
|
||||
DWORD BytesRead=cPort->Read(ReadAr,sizeof(ReadAr));
|
||||
|
||||
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 "<EFBFBD><EFBFBD> <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";
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
63
devices/Validators/_Validator.h
Normal file
63
devices/Validators/_Validator.h
Normal file
@ -0,0 +1,63 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#ifndef ValidatorH
|
||||
#define ValidatorH
|
||||
//---------------------------------------------------------------------------
|
||||
#include "../ComPort.h"
|
||||
#include "ValidatorThread.h"
|
||||
//---------------------------------------------------------------------------
|
||||
unsigned char ConReACK[6] = {0x02,0x03,0x06,0x00,0xC2,0x82}; //<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>...
|
||||
unsigned char ConReset[6] = {0x02,0x03,0x06,0x30,0x41,0xB3}; //RESET <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char ConGetBT[6] = {0x02,0x03,0x06,0x41,0x4F,0xD1}; //GET BILL TABLE <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char ConStPoll[6]= {0x02,0x03,0x06,0x33,0xDA,0x81}; //POLL 33H Request for Bill-to-Bill unit activity Status (<28><><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>)
|
||||
unsigned char ConIdent[6] = {0x02,0x03,0x06,0x37,0xFE,0xC7}; //IDENTIFICATION 37H Request for Model, Serial Number, Country ISO code, Asset Number
|
||||
|
||||
unsigned char ConEnBT[12] = {0x02,0x03,0x0C,0x34,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xB5,0xC1};
|
||||
unsigned char ConDiBT[12] = {0x02,0x03,0x0C,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x0C};
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
struct BillType
|
||||
{
|
||||
int val; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char country[3]; //<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
int addZero(int val,int cnt);
|
||||
//---------------------------------------------------------------------------
|
||||
class Validator
|
||||
{
|
||||
private:
|
||||
unsigned char ReadAr[255];
|
||||
protected:
|
||||
int Pay;
|
||||
ValidatorThread* vThread;
|
||||
bool CheckOnCRC(unsigned char* lpBuffer,unsigned long nSize);
|
||||
public:
|
||||
ComPort* cPort;
|
||||
bool bNominals; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BillType bt[24];
|
||||
AnsiString BatchNumber, SerialNumber; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
Validator();
|
||||
virtual ~Validator();
|
||||
bool Start(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
bool Reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool getSerialNumber(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool getNominals(); //<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>
|
||||
void LoadSetup();
|
||||
void SaveSetup();
|
||||
|
||||
int getPay();
|
||||
void endPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool startPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool stopPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
int GetState(); //<2F><><EFBFBD><EFBFBD> 0 <20><> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AnsiString GetStatusDescription(BYTE StatusCode); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
extern Validator* validator;
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
|
||||
104
devices/Validators/_ValidatorThread.cpp
Normal file
104
devices/Validators/_ValidatorThread.cpp
Normal file
@ -0,0 +1,104 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
|
||||
#include "ValidatorThread.h"
|
||||
#include "Validator.h"
|
||||
#include "PrinterOPOS.h"
|
||||
#include "uf_Main.h"
|
||||
#include "ud_Module.h"
|
||||
#pragma package(smart_init)
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// Important: Methods and properties of objects in VCL can only be
|
||||
// used in a method called using Synchronize, for example:
|
||||
//
|
||||
// Synchronize(UpdateCaption);
|
||||
//
|
||||
// where UpdateCaption could look like:
|
||||
//
|
||||
// void __fastcall ValidatorThread::UpdateCaption()
|
||||
// {
|
||||
// Form1->Caption = "Updated in a thread";
|
||||
// }
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall ValidatorThread::ValidatorThread(bool CreateSuspended)
|
||||
: TThread(CreateSuspended)
|
||||
{
|
||||
bStop=false;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall ValidatorThread::Execute()
|
||||
{
|
||||
while(!bStop)
|
||||
{
|
||||
pay=validator->getPay();
|
||||
if(pay!=0) Synchronize(UpdateCaption);
|
||||
}
|
||||
validator->endPay();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void ValidatorThread::Stop()
|
||||
{
|
||||
bStop=true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
void __fastcall ValidatorThread::UpdateCaption()
|
||||
{
|
||||
bool isOk=true;
|
||||
frmMain->gbtnJCheck->Enabled=true; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
frmMain->gbtnPCheck->Enabled=true;
|
||||
frmMain->gbtnMainMenu->Enabled=false;
|
||||
|
||||
frmMain->sum+=pay;
|
||||
frmMain->Label13->Caption=dModule->language->Values["npay"]+" "+IntToStr(frmMain->sum)+"<EFBFBD><EFBFBD>.";
|
||||
frmMain->Label9->Caption=frmMain->Label13->Caption;
|
||||
try
|
||||
{
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(dModule->UserType) //true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->BalanceType) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->addPayJuridicalPerson(dModule->UserId, pay, printerOPOS->CheckId+1))
|
||||
dModule->OraSession1->Commit();
|
||||
else
|
||||
{isOk=false; dModule->OraSession1->Rollback();}
|
||||
}else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->addPayJuridicalPerson(dModule->UserId, pay, printerOPOS->CheckId+1))
|
||||
dModule->OraSession1->Commit();
|
||||
else
|
||||
{isOk=false; dModule->OraSession1->Rollback();}
|
||||
}
|
||||
}else //false - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->BalanceType) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->addPayPhysicalPerson(dModule->UserId, pay, printerOPOS->CheckId+1))
|
||||
dModule->OraSession1->Commit();
|
||||
else
|
||||
{isOk=false; dModule->OraSession1->Rollback();}
|
||||
}else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(dModule->addPayPhysicalPerson(dModule->UserId, pay, printerOPOS->CheckId+1))
|
||||
dModule->OraSession1->Commit();
|
||||
else
|
||||
{isOk=false; dModule->OraSession1->Rollback();}
|
||||
}
|
||||
}
|
||||
}catch(...){isOk=false;}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(!isOk)
|
||||
{
|
||||
if(dModule->BalanceType)
|
||||
dModule->savePay(1,dModule->UserType,dModule->UserId,pay,printerOPOS->CheckId+1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else
|
||||
dModule->savePay(2,dModule->UserType,dModule->UserId,pay,printerOPOS->CheckId+1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
21
devices/Validators/_ValidatorThread.h
Normal file
21
devices/Validators/_ValidatorThread.h
Normal file
@ -0,0 +1,21 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#ifndef ValidatorThreadH
|
||||
#define ValidatorThreadH
|
||||
//---------------------------------------------------------------------------
|
||||
#include <Classes.hpp>
|
||||
//---------------------------------------------------------------------------
|
||||
class ValidatorThread : public TThread
|
||||
{
|
||||
private:
|
||||
protected:
|
||||
bool bStop;
|
||||
void __fastcall Execute();
|
||||
public:
|
||||
int pay;
|
||||
__fastcall ValidatorThread(bool CreateSuspended);
|
||||
void Stop();
|
||||
void __fastcall UpdateCaption();
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
327
devices/Validators/__history/Validator.cpp.~1~
Normal file
327
devices/Validators/__history/Validator.cpp.~1~
Normal file
@ -0,0 +1,327 @@
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#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]));
|
||||
}
|
||||
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";
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
328
devices/Validators/__history/Validator.cpp.~2~
Normal file
328
devices/Validators/__history/Validator.cpp.~2~
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);
|
||||
testmode=ini->ReadInteger("Validator","TestMode",false);
|
||||
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]));
|
||||
}
|
||||
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";
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
332
devices/Validators/__history/Validator.cpp.~3~
Normal file
332
devices/Validators/__history/Validator.cpp.~3~
Normal file
@ -0,0 +1,332 @@
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#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);
|
||||
testmode=ini->ReadInteger("Validator","TestMode",false);
|
||||
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()
|
||||
{
|
||||
bool result=true;
|
||||
|
||||
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 result=false;
|
||||
|
||||
return result || m_testmode;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<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]));
|
||||
}
|
||||
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";
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
332
devices/Validators/__history/Validator.cpp.~4~
Normal file
332
devices/Validators/__history/Validator.cpp.~4~
Normal file
@ -0,0 +1,332 @@
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#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);
|
||||
testmode=ini->ReadInteger("Validator","TestMode",false);
|
||||
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()
|
||||
{
|
||||
bool result=true;
|
||||
|
||||
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 result=false;
|
||||
|
||||
return result || m_testmode; //<2F> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> OK
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<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]));
|
||||
}
|
||||
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";
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
333
devices/Validators/__history/Validator.cpp.~5~
Normal file
333
devices/Validators/__history/Validator.cpp.~5~
Normal file
@ -0,0 +1,333 @@
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#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);
|
||||
testmode=ini->ReadInteger("Validator","TestMode",false);
|
||||
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()
|
||||
{
|
||||
bool result=true;
|
||||
|
||||
if(cPort->Open(cPort->ComNumber))
|
||||
{
|
||||
cPort->BaudRate=cPort->BaudRate;
|
||||
result = result && cPort->Setup(2);
|
||||
|
||||
if(result) result=result && Reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(result) result=result && getSerialNumber(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(result) result=result && getNominals(); //<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(result) result=result && SetEnableBillTypes(true); //<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 result=false;
|
||||
|
||||
return result || m_testmode; //<2F> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> OK
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<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]));
|
||||
}
|
||||
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";
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
333
devices/Validators/__history/Validator.cpp.~6~
Normal file
333
devices/Validators/__history/Validator.cpp.~6~
Normal file
@ -0,0 +1,333 @@
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#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);
|
||||
m_testmode=ini->ReadInteger("Validator","TestMode",false);
|
||||
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()
|
||||
{
|
||||
bool result=true;
|
||||
|
||||
if(cPort->Open(cPort->ComNumber))
|
||||
{
|
||||
cPort->BaudRate=cPort->BaudRate;
|
||||
result = result && cPort->Setup(2);
|
||||
|
||||
if(result) result=result && Reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(result) result=result && getSerialNumber(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(result) result=result && getNominals(); //<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(result) result=result && SetEnableBillTypes(true); //<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 result=false;
|
||||
|
||||
return result || m_testmode; //<2F> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> OK
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<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]));
|
||||
}
|
||||
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";
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
333
devices/Validators/__history/Validator.cpp.~7~
Normal file
333
devices/Validators/__history/Validator.cpp.~7~
Normal file
@ -0,0 +1,333 @@
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#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);
|
||||
m_testmode=ini->ReadInteger("Validator","TestMode",false);
|
||||
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()
|
||||
{
|
||||
bool result=true;
|
||||
|
||||
if(cPort->Open(cPort->ComNumber))
|
||||
{
|
||||
cPort->BaudRate=cPort->BaudRate;
|
||||
result = result && cPort->Setup(2);
|
||||
|
||||
if(result) result=result && Reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(result) result=result && getSerialNumber(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(result) result=result && getNominals(); //<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(result) result=result && SetEnableBillTypes(true); //<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 result=false;
|
||||
|
||||
return result || m_testmode; //<2F> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> OK
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<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]));
|
||||
}
|
||||
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(m_testmode) return 0;
|
||||
//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";
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
333
devices/Validators/__history/Validator.cpp.~8~
Normal file
333
devices/Validators/__history/Validator.cpp.~8~
Normal file
@ -0,0 +1,333 @@
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#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);
|
||||
m_testmode=ini->ReadInteger("Validator","TestMode",false);
|
||||
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()
|
||||
{
|
||||
bool result=true;
|
||||
|
||||
if(cPort->Open(cPort->ComNumber))
|
||||
{
|
||||
cPort->BaudRate=cPort->BaudRate;
|
||||
result = result && cPort->Setup(2);
|
||||
|
||||
if(result) result=result && Reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(result) result=result && getSerialNumber(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(result) result=result && getNominals(); //<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(result) result=result && SetEnableBillTypes(true); //<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 result=false;
|
||||
|
||||
return result || m_testmode; //<2F> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> OK
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//<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]));
|
||||
}
|
||||
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(m_testmode) return 0;
|
||||
//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";
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
64
devices/Validators/__history/Validator.h.~1~
Normal file
64
devices/Validators/__history/Validator.h.~1~
Normal file
@ -0,0 +1,64 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#ifndef ValidatorH
|
||||
#define ValidatorH
|
||||
//---------------------------------------------------------------------------
|
||||
#include "../ComPort.h"
|
||||
#include "ValidatorThread.h"
|
||||
//---------------------------------------------------------------------------
|
||||
unsigned char ConReset[6] = {0x02,0x03,0x06,0x30,0x41,0xB3}; //RESET <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned char ConReACK[6] = {0x02,0x03,0x06,0x00,0xC2,0x82}; //<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>...
|
||||
unsigned char ConGetBT[6] = {0x02,0x03,0x06,0x41,0x4F,0xD1}; //GET BILL TABLE <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char ConStPoll[6]= {0x02,0x03,0x06,0x33,0xDA,0x81}; //POLL 33H Request for Bill-to-Bill unit activity Status (<28><><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>)
|
||||
unsigned char ConIdent[6] = {0x02,0x03,0x06,0x37,0xFE,0xC7}; //IDENTIFICATION 37H Request for Model, Serial Number, Country ISO code, Asset Number
|
||||
//---------------------------------------------------------------------------
|
||||
struct BillType
|
||||
{
|
||||
int val; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char country[3]; //<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
int addZero(int val,int cnt);
|
||||
//---------------------------------------------------------------------------
|
||||
class Validator
|
||||
{
|
||||
private:
|
||||
unsigned char ReadAr[255];
|
||||
protected:
|
||||
int Pay;
|
||||
ValidatorThread* vThread;
|
||||
bool CheckOnCRC(unsigned char* lpBuffer,unsigned long nSize);
|
||||
public:
|
||||
ComPort* cPort;
|
||||
bool bNominals; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BillType bt[24]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
AnsiString BatchNumber, SerialNumber; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
Validator();
|
||||
virtual ~Validator();
|
||||
bool SendCommand(std::string req, std::string &ans);
|
||||
bool Start(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
bool Reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool GetStatus(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool SetEnableBillTypes(bool enable); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
bool getSerialNumber(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool getNominals(); //<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>
|
||||
void LoadSetup();
|
||||
void SaveSetup();
|
||||
|
||||
int getPay(int &state);
|
||||
void endPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool startPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool stopPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
int GetState(); //<2F><><EFBFBD><EFBFBD> 0 <20><> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AnsiString GetStatusDescription(BYTE StatusCode); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
extern Validator* validator;
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
|
||||
64
devices/Validators/__history/Validator.h.~2~
Normal file
64
devices/Validators/__history/Validator.h.~2~
Normal file
@ -0,0 +1,64 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#ifndef ValidatorH
|
||||
#define ValidatorH
|
||||
//---------------------------------------------------------------------------
|
||||
#include "../ComPort.h"
|
||||
#include "ValidatorThread.h"
|
||||
//---------------------------------------------------------------------------
|
||||
unsigned char ConReset[6] = {0x02,0x03,0x06,0x30,0x41,0xB3}; //RESET <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned char ConReACK[6] = {0x02,0x03,0x06,0x00,0xC2,0x82}; //<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>...
|
||||
unsigned char ConGetBT[6] = {0x02,0x03,0x06,0x41,0x4F,0xD1}; //GET BILL TABLE <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char ConStPoll[6]= {0x02,0x03,0x06,0x33,0xDA,0x81}; //POLL 33H Request for Bill-to-Bill unit activity Status (<28><><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>)
|
||||
unsigned char ConIdent[6] = {0x02,0x03,0x06,0x37,0xFE,0xC7}; //IDENTIFICATION 37H Request for Model, Serial Number, Country ISO code, Asset Number
|
||||
//---------------------------------------------------------------------------
|
||||
struct BillType
|
||||
{
|
||||
int val; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char country[3]; //<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
int addZero(int val,int cnt);
|
||||
//---------------------------------------------------------------------------
|
||||
class Validator
|
||||
{
|
||||
private:
|
||||
unsigned char ReadAr[255];
|
||||
protected:
|
||||
int Pay;
|
||||
ValidatorThread* vThread;
|
||||
bool CheckOnCRC(unsigned char* lpBuffer,unsigned long nSize);
|
||||
public:
|
||||
ComPort* cPort;
|
||||
bool bNominals; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BillType bt[24]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
AnsiString BatchNumber, SerialNumber; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
Validator();
|
||||
virtual ~Validator();
|
||||
bool SendCommand(std::string req, std::string &ans);
|
||||
bool Start(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
bool Reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool GetStatus(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool SetEnableBillTypes(bool enable); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
bool getSerialNumber(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool getNominals(); //<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>
|
||||
void LoadSetup();
|
||||
void SaveSetup();
|
||||
|
||||
int getPay(int &state);
|
||||
void endPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool startPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool stopPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
int GetState(); //<2F><><EFBFBD><EFBFBD> 0 <20><> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AnsiString GetStatusDescription(BYTE StatusCode); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
extern Validator* validator;
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
|
||||
64
devices/Validators/__history/Validator.h.~3~
Normal file
64
devices/Validators/__history/Validator.h.~3~
Normal file
@ -0,0 +1,64 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#ifndef ValidatorH
|
||||
#define ValidatorH
|
||||
//---------------------------------------------------------------------------
|
||||
#include "../ComPort.h"
|
||||
#include "ValidatorThread.h"
|
||||
//---------------------------------------------------------------------------
|
||||
unsigned char ConReset[6] = {0x02,0x03,0x06,0x30,0x41,0xB3}; //RESET <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned char ConReACK[6] = {0x02,0x03,0x06,0x00,0xC2,0x82}; //<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>...
|
||||
unsigned char ConGetBT[6] = {0x02,0x03,0x06,0x41,0x4F,0xD1}; //GET BILL TABLE <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char ConStPoll[6]= {0x02,0x03,0x06,0x33,0xDA,0x81}; //POLL 33H Request for Bill-to-Bill unit activity Status (<28><><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>)
|
||||
unsigned char ConIdent[6] = {0x02,0x03,0x06,0x37,0xFE,0xC7}; //IDENTIFICATION 37H Request for Model, Serial Number, Country ISO code, Asset Number
|
||||
//---------------------------------------------------------------------------
|
||||
struct BillType
|
||||
{
|
||||
int val; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char country[3]; //<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
int addZero(int val,int cnt); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
//---------------------------------------------------------------------------
|
||||
class Validator
|
||||
{
|
||||
private:
|
||||
unsigned char ReadAr[255];
|
||||
protected:
|
||||
int Pay;
|
||||
ValidatorThread* vThread;
|
||||
bool CheckOnCRC(unsigned char* lpBuffer,unsigned long nSize);
|
||||
public:
|
||||
ComPort* cPort; //<2F> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool bNominals; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BillType bt[24]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
AnsiString BatchNumber, SerialNumber; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
Validator();
|
||||
virtual ~Validator();
|
||||
bool SendCommand(std::string req, std::string &ans);
|
||||
bool Start(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
bool Reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool GetStatus(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool SetEnableBillTypes(bool enable); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
bool getSerialNumber(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool getNominals(); //<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>
|
||||
void LoadSetup();
|
||||
void SaveSetup();
|
||||
|
||||
int getPay(int &state);
|
||||
void endPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool startPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool stopPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
int GetState(); //<2F><><EFBFBD><EFBFBD> 0 <20><> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AnsiString GetStatusDescription(BYTE StatusCode); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
extern Validator* validator;
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
|
||||
66
devices/Validators/__history/Validator.h.~4~
Normal file
66
devices/Validators/__history/Validator.h.~4~
Normal file
@ -0,0 +1,66 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#ifndef ValidatorH
|
||||
#define ValidatorH
|
||||
//---------------------------------------------------------------------------
|
||||
#include "../ComPort.h"
|
||||
#include "ValidatorThread.h"
|
||||
//---------------------------------------------------------------------------
|
||||
unsigned char ConReset[6] = {0x02,0x03,0x06,0x30,0x41,0xB3}; //RESET <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned char ConReACK[6] = {0x02,0x03,0x06,0x00,0xC2,0x82}; //<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>...
|
||||
unsigned char ConGetBT[6] = {0x02,0x03,0x06,0x41,0x4F,0xD1}; //GET BILL TABLE <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char ConStPoll[6]= {0x02,0x03,0x06,0x33,0xDA,0x81}; //POLL 33H Request for Bill-to-Bill unit activity Status (<28><><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>)
|
||||
unsigned char ConIdent[6] = {0x02,0x03,0x06,0x37,0xFE,0xC7}; //IDENTIFICATION 37H Request for Model, Serial Number, Country ISO code, Asset Number
|
||||
//---------------------------------------------------------------------------
|
||||
struct BillType
|
||||
{
|
||||
int val; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char country[3]; //<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
int addZero(int val,int cnt); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
//---------------------------------------------------------------------------
|
||||
class Validator
|
||||
{
|
||||
private:
|
||||
unsigned char ReadAr[255];
|
||||
protected:
|
||||
int Pay;
|
||||
ValidatorThread* vThread;
|
||||
bool CheckOnCRC(unsigned char* lpBuffer,unsigned long nSize);
|
||||
public:
|
||||
bool testmode; //<2F><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
ComPort* cPort; //<2F> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool bNominals; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BillType bt[24]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
AnsiString BatchNumber, SerialNumber; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
Validator();
|
||||
virtual ~Validator();
|
||||
bool SendCommand(std::string req, std::string &ans);
|
||||
bool Start(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
bool Reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool GetStatus(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool SetEnableBillTypes(bool enable); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
bool getSerialNumber(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool getNominals(); //<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>
|
||||
void LoadSetup();
|
||||
void SaveSetup();
|
||||
|
||||
int getPay(int &state);
|
||||
void endPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool startPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool stopPay(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
int GetState(); //<2F><><EFBFBD><EFBFBD> 0 <20><> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AnsiString GetStatusDescription(BYTE StatusCode); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
extern Validator* validator;
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
|
||||
BIN
devices/Validators/ccnetd1v2_4_.pdf
Normal file
BIN
devices/Validators/ccnetd1v2_4_.pdf
Normal file
Binary file not shown.
Reference in New Issue
Block a user