//---------------------------------------------------------------------------

#ifndef ValidatorH
#define ValidatorH
//---------------------------------------------------------------------------
#include "../ComPort.h"
#include "ValidatorThread.h"
//---------------------------------------------------------------------------
unsigned char ConReACK[6] = {0x02,0x03,0x06,0x00,0xC2,0x82}; //Ответ валидатору что всё нормально...
unsigned char ConReset[6] = {0x02,0x03,0x06,0x30,0x41,0xB3}; //RESET Перезагрузить валидатор
unsigned char ConGetBT[6] = {0x02,0x03,0x06,0x41,0x4F,0xD1}; //GET BILL TABLE Какие купюры прошиты в валидаторе
unsigned char ConStPoll[6]= {0x02,0x03,0x06,0x33,0xDA,0x81}; //POLL 33H Request for Bill-to-Bill unit activity Status (Перейти в режим получения платежей)
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; //Номинал купюры
	char country[3]; //Код страны
};
//---------------------------------------------------------------------------
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; //Удалось ли получить номиналы
	BillType bt[24];
	AnsiString BatchNumber, SerialNumber; //Номер партии и серийный

	Validator();
	virtual ~Validator();
	bool Start(); //открыть порт и проинициализировать валидатор

	bool Reset(); //Перезагрузить валидатор
	bool getSerialNumber(); //Получить номер партии и серийник
	bool getNominals(); //Получить номиналы прошитых купюр
	void LoadSetup();
	void SaveSetup();

	int getPay();
	void endPay(); //Вызывается при завершении оплаты
	bool startPay(); //Стартуем поток
	bool stopPay(); //Стопим поток

	int GetState(); //Если 0 то всё в порядке
	AnsiString GetStatusDescription(BYTE StatusCode); //Описание статуса
};
//---------------------------------------------------------------------------
extern Validator* validator;
//---------------------------------------------------------------------------
#endif

