Files
Tools_CPP/devices/Validators/CCNETdevice/CCNETDeviceThread.cpp
2024-11-01 12:23:13 +05:00

1380 lines
42 KiB
C++
Raw Permalink Blame History

//---------------------------------------------------------------------------
#pragma hdrstop
#include <math.h>
#include "CCNETDeviceThread.h"
#include "CValidator.h"
#include "boost/format.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#define POLYNOMINAL 0x08408
#define PollingInterval 100
__fastcall TCCNETDeviceThread::TCCNETDeviceThread() : TDeviceThread(true)
{
bill_count_old = bill_count = 0;
mask = 0xffff;// bill mask
count_inkass = bill_numb = 0;
lang = 1;
LastEnDisCommand = 0;
}
__fastcall TCCNETDeviceThread::~TCCNETDeviceThread()
{
}
void __fastcall TCCNETDeviceThread::ProcessLoopCommand()
{
ThreadTerminated = false;
try
{
if (Terminated) return;
GetStay();
if (Terminated) return;
if (DeviceState->StateCode != 0xff && DeviceState->StateCode != 0x00)
{
DeviceState->OutStateCode = DSE_OK;
if (Log) Log->Write("CCNET Device has found.");
ChangeDeviceState();
Reset();
}
else
{
DeviceState->OutStateCode = DSE_NOTMOUNT;
if (Log != NULL)
if (Log) Log->Write("No CCNET Device Present...");
/*DeviceState->StateChange = true;
if (DeviceStateChanged)
DeviceStateChanged(DeviceState);
DeviceState->OldOutStateCode = DeviceState->OutStateCode;*/
ChangeDeviceState();
}
LoopOfCommands();
}
__finally
{
}
}
void TCCNETDeviceThread::ParseAnswer(int mode)
{
try
{
ClearBuffer(data);
*len_data = 0;
if (DeviceState)
AnswerSize = DeviceState->AnswerSize;
if ((AnswerSize>3)&&(PollingMode))
{
int len_command = (int)Answer[2];
if (Answer[3] != 0)
DeviceState->StateCode = Answer[3];
if (len_command >= 7)
DeviceState->SubStateCode = Answer[4];
if (len_command > 7)
{
*len_data = len_command - 7;
memcpy(data,&Answer[7],*len_data);
}
}
BYTE command = CommandParameters->CommandCode;
CommandParameters->SetParameters(Command,CommandSize,command,DeviceState->StateCode);
}
__finally
{
}
}
void TCCNETDeviceThread::calc_crc(BYTE byte)
{
unsigned char i,c;
unsigned short temp_crc;
inter_crc_h ^= byte;
temp_crc = inter_crc_l;
temp_crc <<= 8;
temp_crc |= inter_crc_h;
for (i=0;i<8;i++)
{
c = (unsigned char)(temp_crc & 0x01);
temp_crc >>= 1;
if (c) temp_crc ^= POLYNOMINAL;
}
inter_crc_l = (unsigned char)(temp_crc >> 8);
inter_crc_h = temp_crc;
}
unsigned short TCCNETDeviceThread::Calc_CRC16CCNET(BYTE* DataBuf, unsigned short BufLen)
{
unsigned short i;
inter_crc_h = inter_crc_l = 0;
for (i=0;i<BufLen;i++) calc_crc(DataBuf[i]);
i=inter_crc_h;
i<<=8;
i+=inter_crc_l;
return i;
}
void TCCNETDeviceThread::SendPacket(BYTE command,int len_packet, BYTE* data)
{
if (!Port->PortInit)
{
DeviceState->StateCode = 0xff;
return;
}
try
{
//<2F><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ClearCommand();
ClearAnswer();
Command[0] = 0x2;
Command[1] = 0x3;
BYTE len_char = (BYTE)len_packet;
int n_sm = 4;
if (len_packet<256)
len_char = (BYTE)len_packet;
else
{
Command[4] = (BYTE)len_packet;
Command[5] = (BYTE)(len_packet >> 8);
n_sm = 6;
}
Command[2] = (BYTE)len_char;
Command[3] = (BYTE)command;
if (data!=NULL)
memcpy(&Command[n_sm],data,len_packet-n_sm-2);
Calc_CRC16CCNET(Command,(unsigned short)(len_packet-2));
Command[len_packet-2] = inter_crc_h;
Command[len_packet-1] = inter_crc_l;
Command[len_packet] = 3;
CommandParameters->SetParameters(Command,len_packet,command,0);
CommandSize = len_packet;
}
__finally
{
}
}
void TCCNETDeviceThread::GetStay()//POLL command
{
try
{
if (!Port->PortInit)
{
DeviceState->StateCode = 0xff;
return;
}
BYTE command = 0x33;
SendPacket(command,6,NULL);
ProcessCommand();
if (Terminated) return;
if (DeviceState->AnswerSize > 0)
OfflineCount = 0;
else
{
OfflineCount++;
if (OfflineCount >= 50)
{
OfflineCount = 50;
if (DeviceState->OutStateCode != DSE_NOTMOUNT)
{
DeviceState->OutStateCode = DSE_NOTMOUNT;
ChangeDeviceState();
return;
}
}
}
if (DeviceState->StateCode == 0xff)
return;
if (Terminated) return;
SendACK();
}
__finally
{
}
}
void TCCNETDeviceThread::Reset()
{
try
{
if (!Port->PortInit)
{
DeviceState->StateCode = 0xff;
return;
}
BYTE command=0x30;
SendPacket(command,6,NULL);
ProcessCommand();
Log->Write("RESET");
if (Terminated) return;
if (DeviceState->StateCode == 0xff)
return;
if (DeviceState->StateCode == 0)
bill_nominal = 0;
}
__finally
{
}
}
void TCCNETDeviceThread::EnableAll()
{
try
{
if (!Port->PortInit)
{
DeviceState->StateCode = 0xff;
return;
}
DeviceState->Idle = false;
Log->Write("Idle = false");
BYTE command=0x34;
BYTE billmask[10];
memset (billmask,0xff,10); //enable all
if (mask!=0)
{
billmask[1] = (BYTE)( (mask>>8) & 0xff);
billmask[2] = (BYTE)(mask & 0xff);
// 0 - skip (16-23 bill type)
billmask[4] = billmask[1];
billmask[5] = billmask[2];
// 3 - skip (16-23 bill type)
}
SendPacket(command,12,billmask);
ProcessCommand();
Log->Write("ENABLE BILL");
LastEnDisCommand = 2;
}
__finally
{
}
}
void TCCNETDeviceThread::Disable()
{
try
{
if (!Port->PortInit)
{
DeviceState->StateCode = 0xff;
return;
}
if (DeviceState->StateCode == 0xff)
return;
BYTE command=0x34;
SendPacket(command,12,(BYTE*)"\x00\x00\x00\x00\x00\x00");
ProcessCommand();
Log->Write("DISABLE BILL");
LastEnDisCommand = 1;
}
__finally
{
}
}
void TCCNETDeviceThread::CommandDisable()
{
try
{
if (!Port->PortInit)
{
DeviceState->StateCode = 0xff;
return;
}
if (DeviceState->StateCode == 0xff)
return;
BYTE command=0x34;
SendPacket(command,12,(BYTE*)"\x00\x00\x00\x00\x00\x00");
}
__finally
{
}
}
void TCCNETDeviceThread::Return(void)
{
try
{
if (!Port->PortInit)
{
DeviceState->StateCode = 0xff;
return;
}
BYTE command=0x36;
SendPacket(command,6,NULL);
ProcessCommand();
if (Terminated) return;
if (DeviceState->StateCode == 0xff)
return;
if (Terminated)
return;
GetStay();
if (Terminated) return;
for (int i=0;i<100 && (DeviceState->StateCode == 0x18);i++)
{
if (Terminated) return;
GetStay();
if (Terminated) return;
}
}
__finally
{
}
}
void TCCNETDeviceThread::Hold(void)
{
try
{
if (!Port->PortInit)
{
DeviceState->StateCode = 0xff;
return;
}
BYTE command=0x38;
SendPacket(command,6,NULL);
ProcessCommand();
}
__finally
{
}
}
int TCCNETDeviceThread::Stack()
{
int stacked=0;
try
{
if (!Port->PortInit)
{
DeviceState->StateCode = 0xff;
return 0;
}
BYTE command=0x35;
SendPacket(command,6,NULL);
ProcessCommand();
}
__finally
{
}
return stacked;
}
void TCCNETDeviceThread::SendACK()
{
TSendType old = SendType;
SendType = NotRecieveAnswer;
SendPacket(0,6,NULL);
ProcessCommand();
SendType = old;
}
void TCCNETDeviceThread::SendNAK()
{
TSendType old = SendType;
SendType = NotRecieveAnswer;
SendPacket(0xFF,6,NULL);
ProcessCommand();
SendType = old;
}
void TCCNETDeviceThread::PollingLoop()
{
AnsiString mess;
// int count_inkass=0;
int error=0;
if (!Port->PortInit)
{
DeviceState->StateCode = 0xff;
DeviceState->OutStateCode = DSE_NOTMOUNT;
return;
}
if (Terminated) return;
//new 16-03-2007
ProcessOutCommand();
if (Terminated) return;
int OldState = DeviceState->StateCode;
GetStay();
int State = DeviceState->StateCode;
if (Terminated) return;
try
{
if ((OldState == State)&&(EnterLoop == false))
{
//if (Terminated) return;
//SendACK();
return;
}
if(State == 0)
return;
//<2F><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
EnterLoop = false;
//DeviceState->Billing = false;
DeviceState->Enabling = false;
switch (State)
{
case 0x14: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (Terminated) return;
//SendACK();
if (DeviceState->Stacked)
DeviceState->Processing = false;
DeviceState->Stacked = false;
DeviceState->Enabling = true;
if ((!DeviceState->BillEnable)||(LastEnDisCommand==1))
Disable();
if (LastEnDisCommand == 2)
LastEnDisCommand = 0;
DeviceState->OutStateCode = DSE_OK;
DeviceState->SetOutCodes(DSE_NOTSET,VLD_BILL_ENABLE);
break;
case 0x19: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SetInitialized();
if (Terminated) return;
//SendACK();
DeviceState->Idle = true;
Log->Write("Idle = true");
error=0;
if (Terminated) return;
if ((DeviceState->BillEnable)||(LastEnDisCommand==2))
EnableAll();
if (LastEnDisCommand == 1)
LastEnDisCommand = 0;
DeviceState->OutStateCode = DSE_OK;
DeviceState->SetOutCodes(DSE_NOTSET,VLD_BILL_DISABLE);
break;
case 0x15: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
error = 0;
if (Terminated) return;
//SendACK();
DeviceState->Processing = true;
DeviceState->SetOutCodes(DSE_NOTSET,VLD_ACCEPTING);
if (!DeviceState->BillEnable)
Return();
break;
case 0x13: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (Terminated) return;
DeviceState->SetOutCodes(DSE_NOTSET,VLD_INITIALIZE);
//SendACK();
break;
case 0x41: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (Terminated) return;
DeviceState->OutStateCode = DSE_STACKERFULL;
DeviceState->SetOutCodes(VLD_STACKER_FULL,VLD_STACKER_FULL);
//SendACK();
if (Terminated) return;
Reset();
error = 1;
break;
case 0x42: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (Terminated) return;
//SendACK();
DeviceState->OutStateCode = DSE_STACKEROPEN;
DeviceState->SetOutCodes(DSE_NOTSET,VLD_STACKER_OPENED);
break;
case 0x11://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> with BILL
if (Terminated) return;
DeviceState->SetOutCodes(DSE_NOTSET,VLD_POWER_UP_WITH_BILL_IN_ACCEPTOR);
Reset();
break;
case 0x12://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> with BILL
if (Terminated) return;
DeviceState->SetOutCodes(DSE_NOTSET,VLD_POWER_UP_WITH_BILL_IN_STACKER);
Reset();
break;
case 0x10://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (Terminated) return;
DeviceState->SetOutCodes(DSE_NOTSET,VLD_INITIALIZE);
//SendACK();
if (Terminated) return;
Reset();
break;
case 0x43: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DeviceState->OutStateCode = DSE_BILLJAM;
if (Terminated) return;
//SendACK();
DeviceState->SetOutCodes(VLD_BILL_JAM,VLD_BILL_JAM);
if (Terminated) return;
if (error == 0)
Reset();
error=1;
break;
case 0x1C:// rejecting Error
Log->Write((boost::format("Main Failure Description: %1%") % GetMainFailureDescription(DeviceState->SubStateCode).c_str()).str().c_str());
//DeviceState->OutStateCode = DSE_MAINERROR;
DeviceState->OutStateCode = DSE_BILLREJECT;
switch (DeviceState->SubStateCode)
{
case 0x60:
case 0x61:
case 0x62:
case 0x63:
case 0x64:
case 0x67:
case 0x69:
case 0x6A:
DeviceState->OutStateCode = DSE_BILLREJECT;
}
error = 1;
if (Terminated) return;
//SendACK();
break;
case 0x45: //cheated
if (Terminated) return;
//SendACK();
DeviceState->SetOutCodes(VLD_CHEATED,VLD_CHEATED);
//DeviceState->OutStateCode = DSE_CHEATED;
break;
case 0x44:// cassete jammed
if (Terminated) return;
//SendACK();
if (Terminated) return;
DeviceState->SetOutCodes(VLD_BILL_JAM,VLD_BILL_JAM);
if (DeviceState->OutStateCode != DSE_BILLJAM)
Reset();
error = 1;
DeviceState->OutStateCode = DSE_BILLJAM;
break;
case 0x47: // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
error = 1;
Log->Write((boost::format("Hardware Failure Description: %1%") % GetHardwareFailureDescription(DeviceState->SubStateCode).c_str()).str().c_str());
DeviceState->OutStateCode = DSE_HARDWARE_ERROR;
if (Terminated) return;
//SendACK();
break;
case 0xFF:
//error = 1;
//DeviceState->OutStateCode = DSE_NOTMOUNT;
break;
case 0x80: //ESCROW
{
bill_nominal = 0;
DeviceState->SetOutCodes(DSE_NOTSET,VLD_ACCEPTING);
DeviceState->Stacking = true;
Log->Write((boost::format("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> %1%") % DeviceState->SubStateCode).str().c_str());
if (Currency.LowerCase() == "rur")
{
BillDescr = " RUR";
Log->Write(BillDescr.c_str());
switch (DeviceState->SubStateCode)
{
case 1:
bill_nominal = 5;break;
case 2:
bill_nominal = 10;break;
case 3:
bill_nominal = 50;break;
case 4:
bill_nominal = 100;break;
case 5:
bill_nominal = 500;break;
case 6:
bill_nominal = 1000;break;
case 7:
bill_nominal = 5000;break;
case 23:
break;
default:
bill_nominal = 0;break;
}
}
if (Currency.LowerCase() == "kzt")
{
BillDescr = " KZT";
Log->Write(BillDescr.c_str());
switch (DeviceState->SubStateCode)
{
case 1:
bill_nominal = 200;break;
case 2:
bill_nominal = 500;break;
case 3:
bill_nominal = 1000;break;
case 4:
bill_nominal = 2000;break;
case 5:
bill_nominal = 5000;break;
case 6:
bill_nominal = 10000;break;
default:
bill_nominal = 0;break;
}
}
if (Currency.LowerCase() == "uah")
{
BillDescr = " UAH";
Log->Write(BillDescr.c_str());
switch (DeviceState->SubStateCode)
{
case 0:
bill_nominal = 1;break;
case 1:
bill_nominal = 2;break;
case 2:
bill_nominal = 5;break;
case 3:
bill_nominal = 10;break;
case 4:
bill_nominal = 20;break;
case 5:
bill_nominal = 50;break;
case 6:
bill_nominal = 100;break;
case 7:
bill_nominal = 200;break;
case 8:
bill_nominal = 500;break;
default:
bill_nominal = 0;break;
}
}
if (Currency.LowerCase() == "eur")
{
BillDescr = " EUR";
Log->Write(BillDescr.c_str());
switch (DeviceState->SubStateCode)
{
case 2: bill_nominal = 5;break;
case 3: bill_nominal = 10;break;
case 4: bill_nominal = 20;break;
case 5: bill_nominal = 50;break;
case 6: bill_nominal = 100;break;
case 7: bill_nominal = 500;break;
default:
bill_nominal = 0;break;
}
}
if (Currency.LowerCase() == "uzs")
{
BillDescr = " UZS";
Log->Write(BillDescr.c_str());
switch (DeviceState->SubStateCode)
{
case 1: bill_nominal = 100;break;
case 2: bill_nominal = 200;break;
case 3: bill_nominal = 500;break;
case 4: bill_nominal = 1000;break;
default:
bill_nominal = 0;break;
}
}
DeviceState->Nominal = bill_nominal;
if (Terminated) return;
//SendACK();
if (this->bill_nominal == 0)
{
DeviceState->Stacking = false;
Return();
}
else
if ((this->bill_nominal > MaxCash)||(this->bill_nominal < MinCash))
{
DeviceState->Billing = false;
DeviceState->Stacking = false;
mess.sprintf("Returning nominal = %.2f",bill_nominal);
Return();
if (Log) Log->Write(mess.c_str());
}
else
{
if (IsNominalEnabled(this->bill_nominal))
{
mess.sprintf("Stacking nominal = %.2f",bill_nominal);
if (Log) Log->Write(mess.c_str());
Stack();
}
else
{
DeviceState->Billing = false;
mess.sprintf("Returning nominal = %.2f",bill_nominal);
DeviceState->Stacking = false;
Return();
if (Log) Log->Write(mess.c_str());
}
}
}
break;
case 0x17:
DeviceState->SetOutCodes(DSE_NOTSET,VLD_STACKING);
if (Log) Log->Write("Stacking");
/*DeviceState->Stacking = true;
for (int i=0;i<100 && (DeviceState->StateCode==0x17);i++)
{
if (Terminated) return;
GetStay();
}*/
break;
case 0x81: //STACKED
DeviceState->Billing = false;
DeviceState->OutStateCode = DSE_OK;
if (DeviceState->Stacking == false)
{
Log->Write("STACKED with Stacking = false. Error!");
//08-07-2007
if (Terminated) return;
for (int i=0;i<200 && (DeviceState->StateCode == 0x81);i++)
{
if (Terminated) return;
SendACK();
Sleep(50);
GetStay();
}
if (DeviceState->StateCode == 0x81)
{
Log->Write("Validator frozen in state STACKED");
DeviceState->OutStateCode = DSE_NOTMOUNT;
Reset();
Sleep(1000);
EnableAll();
}
//break;
return;
}
else
{
DeviceState->SetOutCodes(DSE_NOERROR,VLD_STACKED);
DeviceState->Billing = true;
DeviceState->Stacking = false;
DeviceState->Stacked = true;
bill_count += bill_nominal;
DeviceState->Global += bill_nominal;
bill_numb++;
DeviceState->Count++;
mess.sprintf("Stacked nominal = %.2f",bill_nominal);
if (Log) Log->Write(mess.c_str());
DeviceState->OutStateCode = DSE_OK;
error = 0;
}
break;
case 0x82: // bill returned
error = 0;
DeviceState->SetOutCodes(VLD_RETURNED,VLD_RETURNED);
if (Terminated) return;
//SendACK();
break;
default:
if (Terminated) return;
//SendACK();
}
if (Terminated)
return;
GetStateDescription();
Log->Write((boost::format("State = %1% - [%2%] %3%; OldState = %4%; OutState = %5%") % DeviceState->StateCode % State % DeviceState->StateDescription % OldState % DeviceState->OutStateCode).str().c_str());
if (DeviceState->OldStateCode == 0x42)
//DeviceState->OutStateCode = DSE_SETCASSETTE;
DeviceState->OutStateCode = DSE_OK;
DeviceState->OldStateCode = OldState;
if(DeviceState->StateCode == 0)
DeviceState->StateCode = State;
if ((DeviceState->OldOutStateCode != DeviceState->OutStateCode) ||
(DeviceState->Stacked) ||
(DeviceState->Processing) ||
(DeviceState->Enabling))
{
DeviceState->StateChange = true;
if ((DeviceState->OldOutStateCode == DeviceState->OutStateCode)&&(DeviceState->Billing == true))
DeviceState->StateChange = false;
Log->Write((boost::format("OldOutStateCode=%1%; OutStateCode=%2%; Billing=%3%") % DeviceState->OldOutStateCode % DeviceState->OutStateCode % DeviceState->Billing).str().c_str());
if (DeviceStateChanged)
DeviceStateChanged(DeviceState);
if (State == 0x81) //STACKED
{
DeviceState->Billing = false;
DeviceState->Nominal = 0;
}
DeviceState->OldOutStateCode = DeviceState->OutStateCode;
}
}
__finally
{
}
}
std::string TCCNETDeviceThread::GetStateDescription()
{
if (DeviceState)
{
switch (DeviceState->StateCode)
{
case 0x00:
//DeviceState->OutStateCode = DSE_OK;
break;
case 0xFF:
//DeviceState->OutStateCode = DSE_NOTMOUNT;
break;
case 0x10:
case 0x11:
case 0x12:
DeviceState->OutStateCode = DSE_OK;
break;
case 0x1C:
//DeviceState->OutStateCode = DSE_MAINERROR;
DeviceState->OutStateCode = DSE_BILLREJECT;
switch (DeviceState->SubStateCode)
{
case 0x60:
case 0x61:
case 0x62:
case 0x63:
case 0x64:
case 0x67:
case 0x69:
case 0x6A:
DeviceState->OutStateCode = DSE_BILLREJECT;
}
break;
case 0x47:
DeviceState->OutStateCode = DSE_HARDWARE_ERROR;
break;
case 0x13:
DeviceState->OutStateCode = DSE_OK;
break;
case 0x14:
DeviceState->OutStateCode = DSE_OK;
break;
case 0x15:
//DeviceState->OutStateCode = DSE_OK;
break;
case 0x17:
//DeviceState->OutStateCode = DSE_OK;
break;
case 0x18:
DeviceState->OutStateCode = DSE_OK;
break;
case 0x19:
//DeviceState->OutStateCode = DSE_OK;
break;
case 0x1A:
//DeviceState->OutStateCode = DSE_OK;
break;
case 0x1B:
//DeviceState->OutStateCode = DSE_OK;
break;
case 0x1D:
//DeviceState->OutStateCode = DSE_OK;
break;
case 0x1E:
//DeviceState->OutStateCode = DSE_OK;
break;
case 0x21:
//DeviceState->OutStateCode = DSE_SETCASSETTE;
DeviceState->OutStateCode = DSE_OK;
break;
case 0x25:
//DeviceState->OutStateCode = DSE_OK;
break;
case 0x26:
//DeviceState->OutStateCode = DSE_OK;
break;
case 0x28:
//DeviceState->OutStateCode = DSE_MAINERROR;
break;
case 0x29:
//DeviceState->OutStateCode = DSE_SETCASSETTE;
DeviceState->OutStateCode = DSE_OK;
break;
case 0x30:
//DeviceState->OutStateCode = DSE_OK;
break;
case 0x41:
DeviceState->OutStateCode = DSE_STACKERFULL;
break;
case 0x42:
DeviceState->OutStateCode = DSE_STACKEROPEN;
break;
case 0x43:
DeviceState->OutStateCode = DSE_BILLJAM;
break;
case 0x44:
DeviceState->OutStateCode = DSE_BILLJAM;
break;
case 0x45:
//DeviceState->OutStateCode = DSE_HARDWARE_ERROR;
//DeviceState->OutStateCode = DSE_CHEATED;
break;
case 0x46:
DeviceState->OutStateCode = DSE_OK;
break;
case 0x80:
//DeviceState->OutStateCode = DSE_OK;
break;
case 0x81:
DeviceState->OutStateCode = DSE_OK;
break;
case 0x82:
//DeviceState->OutStateCode = DSE_OK;
break;
}
if (lang == 0)
switch (DeviceState->StateCode)
{
case 0x00:
//DeviceState->StateDescription = "ACK";
break;
case 0xFF:
DeviceState->StateDescription = "NAK";
break;
case 0x10:
case 0x11:
case 0x12:
DeviceState->StateDescription = "POWER UP";
break;
case 0x1C:
DeviceState->StateDescription = "REJECTING";
break;
case 0x47:
//DeviceState->OutStateCode = DSE_HARDWARE_ERROR;
DeviceState->StateDescription = "HARDWARE FAILURE";
break;
case 0x13:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "INITIALIZE";
break;
case 0x14:
////DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "IDLING";
break;
case 0x15:
////DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "ACCEPTING";
break;
case 0x17:
////DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "STACKING";
break;
case 0x18:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "RETURNING";
break;
case 0x19:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "DISABLED";
break;
case 0x1A:
////DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "HOLDING";
break;
case 0x1B:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "BUSY";
break;
case 0x1D:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "DISPENSING";
break;
case 0x1E:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "UNLOADING";
break;
case 0x21:
//DeviceState->OutStateCode = DSE_SETCASSETTE;
DeviceState->StateDescription = "SETTING TYPE CASSETTE";
break;
case 0x25:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "DISPENSED";
break;
case 0x26:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "UNLOADED";
break;
case 0x28:
//DeviceState->OutStateCode = DSE_MAINERROR;
DeviceState->StateDescription = "INVALID BILL NUMBER";
break;
case 0x29:
//DeviceState->OutStateCode = DSE_SETCASSETTE;
DeviceState->StateDescription = "SET TYPE CASSETTE";
break;
case 0x30:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "INVALID COMMAND";
break;
case 0x41:
//DeviceState->OutStateCode = DSE_STACKERFULL;
DeviceState->StateDescription = "DROP CASSETTE FULL";
break;
case 0x42:
//DeviceState->OutStateCode = DSE_STACKEROPEN;
DeviceState->StateDescription = "DROP CASSETTE REMOVED";
break;
case 0x43:
//DeviceState->OutStateCode = DSE_HARDWARE_ERROR;
DeviceState->StateDescription = "JAM IN ACCEPTOR";
break;
case 0x44:
//DeviceState->OutStateCode = DSE_HARDWARE_ERROR;
DeviceState->StateDescription = "JAM IN STACKER";
break;
case 0x45:
//DeviceState->OutStateCode = DSE_HARDWARE_ERROR;
DeviceState->StateDescription = "CHEATED";
break;
case 0x46:
//DeviceState->OutStateCode = DSE_HARDWARE_ERROR;
DeviceState->StateDescription = "PAUSED";
break;
case 0x80:
////DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "ESCROW";
break;
case 0x81:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "PACKED, STACKED";
break;
case 0x82:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "RETURNED";
break;
}
if (lang == 1)
switch (DeviceState->StateCode)
{
case 0x00:
//DeviceState->OutStateCode = DSE_OK;
//DeviceState->StateDescription = "ACK";
break;
case 0xFF:
//DeviceState->OutStateCode = DSE_NOTMOUNT;
DeviceState->StateDescription = "NAK";
break;
case 0x10:
case 0x11:
case 0x12:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x1C:
//DeviceState->OutStateCode = DSE_MAINERROR;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x47:
//DeviceState->OutStateCode = DSE_HARDWARE_ERROR;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x13:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x14:
////DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x15:
////DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x17:
////DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x18:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x19:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x1A:
////DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x1B:
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
//DeviceState->OutStateCode = DSE_OK;
break;
case 0x1D:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x1E:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x21:
//DeviceState->OutStateCode = DSE_SETCASSETTE;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x25:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x26:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x28:
//DeviceState->OutStateCode = DSE_MAINERROR;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x29:
//DeviceState->OutStateCode = DSE_SETCASSETTE;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x30:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x41:
//DeviceState->OutStateCode = DSE_STACKERFULL;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x42:
//DeviceState->OutStateCode = DSE_STACKEROPEN;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x43:
//DeviceState->StateDescription = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
//DeviceState->OutStateCode = DSE_HARDWARE_ERROR;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x44:
//DeviceState->StateDescription = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
//DeviceState->OutStateCode = DSE_HARDWARE_ERROR;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x45:
//DeviceState->OutStateCode = DSE_HARDWARE_ERROR;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x46:
//DeviceState->OutStateCode = DSE_HARDWARE_ERROR;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x80:
////DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x81:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case 0x82:
//DeviceState->OutStateCode = DSE_OK;
DeviceState->StateDescription = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
}
//DeviceState->StateDescription = DeviceState->StateDescription;
}
return DeviceState->StateDescription;
}
std::string TCCNETDeviceThread::GetMainFailureDescription(BYTE StatusCode)
{
switch (StatusCode)
{
case 0x60: //DeviceState->SubStateDescription = "Insertion_error";
DeviceState->SetOutCodes(VLD_INSERTION_ERROR,VLD_INSERTION_ERROR);
break;
case 0x61: //DeviceState->SubStateDescription = "Dielectric_error";
DeviceState->SetOutCodes(VLD_DIELECTRIC_ERROR,VLD_DIELECTRIC_ERROR);
break;
case 0x62: //DeviceState->SubStateDescription = "Previously_inserted_bill_remains_in_head";
DeviceState->SetOutCodes(VLD_BILL_IN_HEAD,VLD_BILL_IN_HEAD);
break;
case 0x63: //DeviceState->SubStateDescription = "Compensation__factor_error";
DeviceState->SetOutCodes(VLD_COMPENSATION_FACTOR_ERROR,VLD_COMPENSATION_FACTOR_ERROR);
break;
case 0x64: //DeviceState->SubStateDescription = "Bill_transport_error";
DeviceState->SetOutCodes(VLD_BILL_TRANSPORT_ERROR,VLD_BILL_TRANSPORT_ERROR);
break;
case 0x65: //DeviceState->SubStateDescription = "Identification_error";
DeviceState->SetOutCodes(VLD_IDENTIFICATION_ERROR,VLD_IDENTIFICATION_ERROR);
break;
case 0x66: //DeviceState->SubStateDescription = "Verification_error";
DeviceState->SetOutCodes(VLD_VERIFICATION_ERROR,VLD_VERIFICATION_ERROR);
break;
case 0x67: //DeviceState->SubStateDescription = "Optic_sensor_error";
DeviceState->SetOutCodes(VLD_OPTIC_SENSOR_ERROR,VLD_OPTIC_SENSOR_ERROR);
break;
case 0x68: //DeviceState->SubStateDescription = "Return_by_inhibit_error";
DeviceState->SetOutCodes(VLD_RETURN_BY_INHIBIT_ERROR,VLD_RETURN_BY_INHIBIT_ERROR);
break;
case 0x69: //DeviceState->SubStateDescription = "Capacistance_error";
DeviceState->SetOutCodes(VLD_CAPACISTANCE_ERROR,VLD_CAPACISTANCE_ERROR);
break;
case 0x6A: //DeviceState->SubStateDescription = "Operation_error";
DeviceState->SetOutCodes(VLD_OPERATION_ERROR,VLD_OPERATION_ERROR);
break;
case 0x6C: //DeviceState->SubStateDescription = "Length_error";
DeviceState->SetOutCodes(VLD_LENGTH_ERROR,VLD_LENGTH_ERROR);
break;
default : //DeviceState->SubStateDescription = "Unknown_error";
//DeviceState->SetOutCodes(,);
break;
}
if (lang == 0)
switch (StatusCode)
{
case 0x60: DeviceState->SubStateDescription = "Insertion_error";break;
case 0x61: DeviceState->SubStateDescription = "Dielectric_error";break;
case 0x62: DeviceState->SubStateDescription = "Previously_inserted_bill_remains_in_head";break;
case 0x63: DeviceState->SubStateDescription = "Compensation__factor_error";break;
case 0x64: DeviceState->SubStateDescription = "Bill_transport_error";break;
case 0x65: DeviceState->SubStateDescription = "Identification_error";break;
case 0x66: DeviceState->SubStateDescription = "Verification_error";break;
case 0x67: DeviceState->SubStateDescription = "Optic_sensor_error";break;
case 0x68: DeviceState->SubStateDescription = "Return_by_inhibit_error";break;
case 0x69: DeviceState->SubStateDescription = "Capacistance_error";break;
case 0x6A: DeviceState->SubStateDescription = "Operation_error";break;
case 0x6C: DeviceState->SubStateDescription = "Length_error";break;
default : DeviceState->SubStateDescription = "Unknown_error";break;
}
if (lang == 1)
switch (StatusCode)
{
case 0x60: DeviceState->SubStateDescription = "Insertion_error";break;
case 0x61: DeviceState->SubStateDescription = "Dielectric_error";break;
case 0x62: DeviceState->SubStateDescription = "Previously_inserted_bill_remains_in_head";break;
case 0x63: DeviceState->SubStateDescription = "Compensation__factor_error";break;
case 0x64: DeviceState->SubStateDescription = "Bill_transport_error";break;
case 0x65: DeviceState->SubStateDescription = "Identification_error";break;
case 0x66: DeviceState->SubStateDescription = "Verification_error";break;
case 0x67: DeviceState->SubStateDescription = "Optic_sensor_error";break;
case 0x68: DeviceState->SubStateDescription = "Return_by_inhibit_error";break;
case 0x69: DeviceState->SubStateDescription = "Capacistance_error";break;
case 0x6A: DeviceState->SubStateDescription = "Operation_error";break;
case 0x6C: DeviceState->SubStateDescription = "Length_error";break;
default : DeviceState->SubStateDescription = "Unknown_error";break;
}
return DeviceState->SubStateDescription;
}
std::string TCCNETDeviceThread::GetHardwareFailureDescription(BYTE StatusCode)
{
switch (StatusCode)
{
case 0x50: //DeviceState->SubStateDescription = "Stack_motor_falure";
DeviceState->SetOutCodes(VLD_STACK_MOTOR_FAILURE,VLD_STACK_MOTOR_FAILURE);
break;
case 0x51: //DeviceState->SubStateDescription = "Transport_speed_motor_falure";
DeviceState->SetOutCodes(VLD_TRANSPORT_SPEED_MOTOR_FAILURE,VLD_TRANSPORT_SPEED_MOTOR_FAILURE);
break;
case 0x52: //DeviceState->SubStateDescription = "Transport-motor_falure";
DeviceState->SetOutCodes(VLD_TRANSPORT_MOTOR_FAILURE,VLD_TRANSPORT_MOTOR_FAILURE);
break;
case 0x53: //DeviceState->SubStateDescription = "Aligning_motor_falure";
DeviceState->SetOutCodes(VLD_ALIGNING_MOTOR_FAILURE,VLD_ALIGNING_MOTOR_FAILURE);
break;
case 0x54: //DeviceState->SubStateDescription = "Initial_cassete_falure";
DeviceState->SetOutCodes(VLD_CASSETTE_FAILURE,VLD_CASSETTE_FAILURE);
break;
case 0x55: //DeviceState->SubStateDescription = "Optical_canal_falure";
DeviceState->SetOutCodes(VLD_OPTICAL_CANAL_FAILURE,VLD_OPTICAL_CANAL_FAILURE);
break;
case 0x56: //DeviceState->SubStateDescription = "Magnetical_canal_falure";
DeviceState->SetOutCodes(VLD_MAGNETICAL_CANAL_FAILURE,VLD_MAGNETICAL_CANAL_FAILURE);
break;
case 0x5F: //DeviceState->SubStateDescription = "Capacitance_canal_falure";
DeviceState->SetOutCodes(VLD_CAPACITANCE_CANAL_FAILURE,VLD_CAPACITANCE_CANAL_FAILURE);
break;
default : //DeviceState->SubStateDescription = "Unknown_error";
//DeviceState->SetOutCodes(,);
break;
}
switch (StatusCode)
{
case 0x50: DeviceState->SubStateDescription = "Stack_motor_falure";break;
case 0x51: DeviceState->SubStateDescription = "Transport_speed_motor_falure";break;
case 0x52: DeviceState->SubStateDescription = "Transport-motor_falure";break;
case 0x53: DeviceState->SubStateDescription = "Aligning_motor_falure";break;
case 0x54: DeviceState->SubStateDescription = "Initial_cassete_falure";break;
case 0x55: DeviceState->SubStateDescription = "Optical_canal_falure";break;
case 0x56: DeviceState->SubStateDescription = "Magnetical_canal_falure";break;
case 0x5F: DeviceState->SubStateDescription = "Capacitance_canal_falure";break;
default : DeviceState->SubStateDescription = "Unknown_error";break;
}
//DeviceState->SubStateDescription = DeviceState->SubStateDescription;
return DeviceState->SubStateDescription;
}
bool TCCNETDeviceThread::IsItYou()
{
GetStay();
if (DeviceState->StateCode == 0xFF)
return false;
Disable();
Sleep(100);
GetStay();
if (DeviceState->StateCode != 0x19)
return false;
return true;
}
void TCCNETDeviceThread::ProcessOutCommand()
{
try
{
BYTE Command = GetExtCommand();
switch (Command)
{
case oc_DisableBill:
Log->Write("ExtCommand DisableBill");
Disable();
break;
case oc_EnableBill:
Log->Write("ExtCommand EnableBill");
EnableAll();
DeviceState->Idle = false;
break;
}
}
__finally
{
//ExtCommand = EXTC_Free;
}
}