mirror of
https://github.com/dimoniche/changer.git
synced 2026-01-30 01:03:30 +03:00
1514 lines
48 KiB
C
1514 lines
48 KiB
C
#include <includes.h>
|
||
#include "app_serv.h"
|
||
#include "modem.h"
|
||
#include "validator.h"
|
||
#include "coin.h"
|
||
#include "time.h"
|
||
#include "fiscal.h"
|
||
#include "menu.h"
|
||
#include "data.h"
|
||
#include "mode.h"
|
||
#include "menudesc.h"
|
||
#include "datadesc.h"
|
||
#include "control.h"
|
||
#include "validator.h"
|
||
#include "CCRSProtocol.h"
|
||
#include "menu.h"
|
||
#include "journal.h"
|
||
#include "fr.h"
|
||
#include "CRC16.h"
|
||
#include "modem_task.h"
|
||
#include "host_app.h"
|
||
#include "console.h"
|
||
#include "keyboard.h"
|
||
#include "ftp_app.h"
|
||
|
||
// åñëè îïðåäåëèòü ýòîò ìàêðîñ, áóäóò âíîñèòüñÿ äåíüãè ïî êíîïêå F1
|
||
//#define _DEBUG_MONEY
|
||
|
||
CPU_INT32U SystemTime;
|
||
|
||
CPU_INT32U money_timestamp;
|
||
CPU_INT32U coin_timestamp;
|
||
CPU_INT32U coin_out_timestamp;
|
||
|
||
CPU_INT08U EnabledChannelsNum;
|
||
CPU_INT08U RecentChannel;
|
||
CPU_INT08U UserMenuState;
|
||
#define USER_STATE_FIRST_PAGE 0
|
||
#define USER_STATE_ACCEPT_MONEY 1
|
||
#define USER_STATE_SHOW_THANKS 2
|
||
CPU_INT08U ThanksCtr;
|
||
|
||
CPU_INT08U ChannelsState[CHANNELS_NUM];
|
||
#define CHANNEL_STATE_FREE 0
|
||
#define CHANNEL_STATE_BUSY 1
|
||
#define CHANNEL_STATE_DISABLED 2
|
||
CPU_INT32U ChannelsCounters[CHANNELS_NUM];
|
||
CPU_INT32U ChannelsPayedTime[CHANNELS_NUM];
|
||
|
||
extern CPU_INT32U BillNominals[24];
|
||
CPU_INT32U incas_bill_nom_counter[24];
|
||
CPU_INT32U incas_common_bill_counter;
|
||
|
||
#define USER_QUERY_LEN 256
|
||
|
||
OS_STK UserTaskStk[USER_TASK_STK_SIZE];
|
||
OS_EVENT *UserQuery = NULL;
|
||
void *UserTbl[USER_QUERY_LEN];
|
||
|
||
int GetUserEvent(int* event);
|
||
void UserPrintMoneyMenu(void);
|
||
void WorkServer(void);
|
||
void UserPrintThanksMenu(void);
|
||
void UserPrintFirstMenu(void);
|
||
void UserPrintErrorMenu(void);
|
||
CPU_INT32U GetChannelsTimeForFree(CPU_INT08U ch);
|
||
void LoadAcceptedMoney(void);
|
||
|
||
void SetAcceptedMoney(CPU_INT32U money);
|
||
void ClearAcceptedMoney(void);
|
||
CPU_INT32U GetAcceptedMoney(void);
|
||
|
||
void SetAcceptedBankMoney(CPU_INT32U money);
|
||
void ClearAcceptedBankMoney(void);
|
||
CPU_INT32U GetAcceptedBankMoney(void);
|
||
|
||
void SetAcceptedRestMoney(CPU_INT32U money);
|
||
void ClearAcceptedRestMoney(void);
|
||
CPU_INT32U GetAcceptedRestMoney(void);
|
||
|
||
void SetAcceptedCoin(CPU_INT32U money);
|
||
void ClearAcceptedCoin(void);
|
||
CPU_INT32U GetAcceptedCoin(void);
|
||
|
||
void InitPass(void);
|
||
int CheckChannelEnabled(CPU_INT08U channel);
|
||
int ChannelBusy(CPU_INT08U ch);
|
||
void UserPrintIpDeviceErrMenu(CPU_INT08U post);
|
||
void UserPrintPrintBillMenu(void);
|
||
void UserPrintCoinOut(CPU_INT32U CountCoin);
|
||
|
||
#ifdef BOARD_CENTRAL_CFG
|
||
static char incassation;
|
||
static char was_critical_error;
|
||
#endif
|
||
|
||
#ifdef BOARD_POST_CFG
|
||
|
||
static int out_pulse_count = 0;
|
||
static int out_pulse_len = 0;
|
||
|
||
void AddOutPulses(int count, int len_ms)
|
||
{
|
||
#if OS_CRITICAL_METHOD == 3
|
||
OS_CPU_SR cpu_sr = 0;
|
||
#endif
|
||
OS_ENTER_CRITICAL();
|
||
|
||
out_pulse_count += count;
|
||
out_pulse_len = len_ms;
|
||
|
||
OS_EXIT_CRITICAL();
|
||
}
|
||
|
||
#endif
|
||
|
||
CPU_INT32U FindBillIndex(CPU_INT32U nom)
|
||
{
|
||
CPU_INT32U cash_mode;
|
||
GetData(&CashModeDesc, &cash_mode, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
if (cash_mode == 1)
|
||
{
|
||
// ïðîñòàâèì íîìèíàëû âðó÷íóþ
|
||
BillNominals[0] = 10;
|
||
BillNominals[1] = 50;
|
||
BillNominals[2] = 100;
|
||
BillNominals[3] = 500;
|
||
BillNominals[4] = 1000;
|
||
BillNominals[5] = 5000;
|
||
}
|
||
|
||
for (int i = 0; i < 6; i++)
|
||
{
|
||
if (BillNominals[i] == nom) return i;
|
||
}
|
||
|
||
return 0xFFFFFFFF;
|
||
}
|
||
|
||
/*!
|
||
Ñåðâåð îáðàáîòêè ñîáûòèé ïîëüçîâàòåëÿ
|
||
*/
|
||
void UserAppTask(void *p_arg)
|
||
{
|
||
CPU_INT32U accmoney;
|
||
int event;
|
||
|
||
#ifdef BOARD_CENTRAL_CFG
|
||
|
||
static CPU_INT08U fr_conn_ctr = 0;
|
||
|
||
int testMoney = 0;
|
||
incassation = 0;
|
||
was_critical_error = 0;
|
||
|
||
// ïðè ñòàðòå âêëþ÷èì ïðèåì äåíåã îòîâñþäó - åñëè ÷òî íå òàê íàñ ïîïðàâÿò
|
||
if (IsValidatorConnected()) CC_CmdBillType(0xffffff, 0xffffff, ADDR_FL);
|
||
CoinEnable();
|
||
BankEnable();
|
||
#endif
|
||
|
||
// êîëè÷åñòâî æåòîíîâ ïîä âûäà÷ó
|
||
CPU_INT32U CountCoin = 0;
|
||
// ðåæèì õîïïåðà
|
||
CPU_INT32U regime_hopper = 0;
|
||
// ñîñòîÿíèå õîïïåðà - 1 - âûäà÷à æåòîíîâ
|
||
CPU_INT32U hopperOn = 0;
|
||
// 1 - ïðèíÿëè äåíüãè
|
||
CPU_INT32U MoneyIn = 0;
|
||
// êíîïêà âêëþ÷åíà
|
||
CPU_INT32U led_on = 0;
|
||
// óæå íàæèìàëè êíîïêó
|
||
CPU_INT32U press_button = 0;
|
||
CPU_INT32U fiscal_enable = 0;
|
||
|
||
while (1)
|
||
{
|
||
if (GetUserEvent(&event))
|
||
{
|
||
switch (event){
|
||
#ifdef BOARD_CENTRAL_CFG
|
||
case EVENT_SEC:
|
||
// ïðîâåðêà ðåæèìà
|
||
CheckMode();
|
||
|
||
// ïðî÷èòàåì òåêóùåå âðåìÿ
|
||
SystemTime = GetTimeSec();
|
||
|
||
// ðàáî÷èé ñåðâåð - ñ÷åò÷èêè, ñîñòîÿíèÿ è ò.ï.
|
||
WorkServer();
|
||
|
||
GetData(&EnableFiscalDesc, &fiscal_enable, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
if(!fiscal_enable)
|
||
{
|
||
FiscalConnState = FISCAL_NOCONN;
|
||
}
|
||
|
||
// ïðîâåðèì ôèñêàëüíèê, åñëè îí îòâàëèëñÿ
|
||
if ((++fr_conn_ctr % 10) == 0)
|
||
{
|
||
if ((FiscalConnState == FISCAL_NOCONN) || (TstCriticalFiscalError()))
|
||
{
|
||
if (ConnectFiscalFast() == 0)
|
||
{
|
||
CheckFiscalStatus();
|
||
}
|
||
}
|
||
}
|
||
|
||
// ñåðâåð îøèáîê
|
||
ErrorServer();
|
||
|
||
#ifdef CONFIG_FTP_CLIENT_ENABLE
|
||
// FTP
|
||
FtpCheckTimeToSend(SystemTime);
|
||
#endif
|
||
|
||
// åñëè åñòü îøèáêè, íå ðàáîòàåì
|
||
if (TstCriticalErrors())
|
||
{
|
||
UserPrintErrorMenu();
|
||
RefreshMenu();
|
||
|
||
// âûêëþ÷èì ïðèåì äåíåã
|
||
if (was_critical_error == 0)
|
||
{
|
||
if(MoneyIn)
|
||
{
|
||
// åñëè åñòü âíåñåííûå ðàíåå äåíüãè - âûäàäèì ìîíåòû
|
||
PostUserEvent(EVENT_GIVE_COIN);
|
||
MoneyIn = 0;
|
||
}
|
||
|
||
if (IsValidatorConnected()) CC_CmdBillType(0x000000, 0x000000, ADDR_FL);
|
||
CoinDisable();
|
||
BankDisable();
|
||
was_critical_error = 1;
|
||
}
|
||
break;
|
||
}
|
||
|
||
// âêëþ÷èì çàíîâî ïðèåì äåíåã, åñëè áûëà îøèáêà
|
||
if (was_critical_error)
|
||
{
|
||
if (IsValidatorConnected()) CC_CmdBillType(0xffffff, 0xffffff, ADDR_FL);
|
||
CoinEnable();
|
||
BankEnable();
|
||
|
||
was_critical_error = 0;
|
||
break;
|
||
}
|
||
|
||
accmoney = GetAcceptedMoney();
|
||
accmoney += GetAcceptedBankMoney();
|
||
accmoney += GetAcceptedRestMoney();
|
||
|
||
{
|
||
// ñòîèìîñòü æåòîíà â õîïïåðå
|
||
CPU_INT32U HopperCost = 0;
|
||
GetData(&HopperCostDesc, &HopperCost, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
if(accmoney >= HopperCost) // íàáðàëè äåíåã íà æåòîí - ìîæíî çàæå÷ü êíîïêó
|
||
{
|
||
// ïðîâåðèì íåîáõîäèìîñòü çàêðûòèÿ ñìåíû, ìîæåò îøèáîê êàêèõ
|
||
CheckFiscalStatus();
|
||
|
||
if(!led_on) LED_OK_ON();
|
||
led_on = 1;
|
||
}
|
||
else
|
||
{
|
||
if(led_on) LED_OK_OFF();
|
||
led_on = 0;
|
||
}
|
||
|
||
// ïîñìîòðèì ñêîëüêî åùå ìîæíî äåðæàòü êðåäèò
|
||
CPU_INT32U HopperSaveCredit = 0;
|
||
GetData(&HopperSaveCreditDesc, &HopperSaveCredit, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
if ((accmoney > 0) && (HopperSaveCredit > 0) && (labs(OSTimeGet() - money_timestamp) > 60000UL * HopperSaveCredit))
|
||
{
|
||
// åñëè åñòü äåíüãè, ðàçðåøåíî îáíóëåíèå è ïðèøëî âðåìÿ - î÷èñòèì ñ÷åò÷èêè ïðèåìà äåíåã
|
||
SetAcceptedRestMoney(0);
|
||
SetAcceptedBankMoney(0);
|
||
SetAcceptedMoney(0);
|
||
MoneyIn = 0;
|
||
}
|
||
|
||
// ïîñìîòðèì ñêîëüêî åùå ìîæíî êðóòèòü ìîòîð õîïïåðà
|
||
CPU_INT32U HopperStopEngine = 0;
|
||
GetData(&HopperStopEngineDesc, &HopperStopEngine, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
if (hopperOn && (labs(OSTimeGet() - coin_timestamp) > 1000UL * HopperStopEngine))
|
||
{
|
||
// õîïïåð âêëþ÷åí è ïðèøëî âðåìÿ îñòàíîâèòü õîïïåð
|
||
FIO0CLR_bit.P0_24 = 1;
|
||
hopperOn = 0;
|
||
|
||
// è ñáðîñèòü äåíüãè - âñå ðàâíî óæå íå âûäàäèì - ïðîñòèì
|
||
SetAcceptedMoney(0);
|
||
SetAcceptedBankMoney(0);
|
||
}
|
||
|
||
// âûäàåì ìîíåòû ïî êíîïêå?
|
||
CPU_INT32U hopperStartButton = 0;
|
||
GetData(&HopperButtonStartDesc, &hopperStartButton, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
// åñëè íå ïî êíîïêå - íà êàæäîì âíåñåíèè ïðîâåðÿåì íåîáõîäèìîñòü âûäà÷è æåòîíîâ
|
||
// òàéì àóò óáðàëè - âûäàåì ñðàçó
|
||
//if(MoneyIn && !hopperStartButton /*&& (labs(OSTimeGet() - coin_out_timestamp) > 1000UL)*/)
|
||
/*{
|
||
if(accmoney >= HopperCost) // åñëè êîíå÷íî íàáðàëè äåíåã íà æåòîí
|
||
{
|
||
PostUserEvent(EVENT_GIVE_COIN);
|
||
MoneyIn = 0;
|
||
}
|
||
}*/
|
||
}
|
||
|
||
// ïðèíèìàåì äåíüãè
|
||
UserPrintMoneyMenu();
|
||
RefreshMenu();
|
||
break;
|
||
case EVENT_INCASSATION:
|
||
{
|
||
CPU_INT32U incas_sum = 0, temp;
|
||
for (CPU_INT32U i = 0; i < 24; i++)
|
||
{
|
||
CPU_INT32U val = 0;
|
||
GetData(&BillnomCountersDesc, &val, i, DATA_FLAG_DIRECT_INDEX);
|
||
incas_sum += val*BillNominals[i];
|
||
}
|
||
incassation = 1;
|
||
sprintf((char*)str_IncasMenu_3, " ÑÓÌÌÀ %u ðóá.", incas_sum);
|
||
// âåøàåì ìåíþ èíêàññàöèÿ
|
||
GoToMenu(IncasMenuPanel);
|
||
// ñîõðàíèì ñîáûòèå ñ óêàçàíèåì ñóììû äåíåã
|
||
SaveEventRecord(0, JOURNAL_EVENT_INCASSATION, incas_sum);
|
||
GetData(&BillCounterDesc, &incas_common_bill_counter, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
for (CPU_INT32U i = 0; i < 24; i++)
|
||
{
|
||
GetData(&BillnomCountersDesc, &incas_bill_nom_counter[i], i, DATA_FLAG_DIRECT_INDEX);
|
||
}
|
||
|
||
SetData(&IncasMoneyDesc, &incas_sum, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
temp = GetTimeSec();
|
||
SetData(&IncasTimeDesc, &temp, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
temp = INCAS_SEND_FLAG;
|
||
SetData(&IncasSendFlagDesc, &temp, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
PostModemTask(MODEM_TASK_SEND_INCAS);
|
||
// î÷èùàåì ñ÷åò÷èêè êóïþð
|
||
ClearBillnomCounter();
|
||
}
|
||
break;
|
||
case EVENT_INCASSATION_FINISH:
|
||
incassation = 0;
|
||
GoToPreviousMenu();
|
||
|
||
// âêëþ÷àåì ïðèåì êóïþð ïîñëå èíêàññàöèè
|
||
if (IsValidatorConnected()) CC_CmdBillType(0xffffff, 0xffffffff, ADDR_FL);
|
||
break;
|
||
case EVENT_MODE_CHANGE:
|
||
ReInitMenu();
|
||
SaveEventRecord(0, JOURNAL_EVENT_CHANGE_MODE, GetMode());
|
||
break;
|
||
case EVENT_COIN_INSERTED:
|
||
{
|
||
CPU_INT32U cpp = 1;
|
||
CPU_INT32U money, accmoney;
|
||
GetData(&CoinPerPulseDesc, &cpp, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
money = cpp * GetResetCoinCount();// + testMoney;
|
||
|
||
if(money == 0) break;
|
||
|
||
accmoney = GetAcceptedMoney();
|
||
accmoney += money;
|
||
SetAcceptedMoney(accmoney);
|
||
IncCounterCoin(money);
|
||
IncCounterAllCash(money);
|
||
|
||
money_timestamp = OSTimeGet();
|
||
if (UserMenuState == USER_STATE_ACCEPT_MONEY)
|
||
{
|
||
UserPrintMoneyMenu();
|
||
RefreshMenu();
|
||
}
|
||
if (money) SaveEventRecord(RecentChannel, JOURNAL_EVENT_MONEY_COIN, money);
|
||
|
||
{
|
||
// ïðîâåðèì íóæíî ëè îáðàòíî âêëþ÷àòü ìîíåòîïðèåìíèê íà ïðèåì (ïðèåì âûêëþ÷àåòñÿ ïðè ãåíåðàöèè ñîáûòèÿ)
|
||
|
||
// ñòîèìîñòü æåòîíà â õîïïåðå
|
||
CPU_INT32U HopperCost = 0;
|
||
GetData(&HopperCostDesc, &HopperCost, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
CPU_INT32U accmoney = GetAcceptedMoney();
|
||
accmoney += GetAcceptedBankMoney();
|
||
accmoney += GetAcceptedRestMoney();
|
||
|
||
coin_out_timestamp = OSTimeGet();
|
||
MoneyIn = 1;
|
||
|
||
// âûäàåì ìîíåòû ïî êíîïêå?
|
||
CPU_INT32U hopperStartButton = 0;
|
||
GetData(&HopperButtonStartDesc, &hopperStartButton, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
if(!hopperStartButton)
|
||
{
|
||
// âûäà÷à ìîíåò íå ïî êíîïêå è íàáðàëè íóæíóþ ñóììó - äåíåã áîëüøå íå æäåì - ãàñèì ïðèåì
|
||
if(accmoney >= HopperCost)
|
||
{
|
||
CoinDisable();
|
||
|
||
// øëåì ñðàçó ñîáûòèå âûäà÷è æåòîíîâ
|
||
PostUserEvent(EVENT_GIVE_COIN);
|
||
MoneyIn = 0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case EVENT_CASH_INSERTED:
|
||
{
|
||
CPU_INT32U cpp = 1;
|
||
CPU_INT32U money, accmoney;
|
||
GetData(&CashPerPulseDesc, &cpp, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
money = cpp * GetResetCashCount();
|
||
accmoney = GetAcceptedMoney();
|
||
accmoney += money;
|
||
SetAcceptedMoney(accmoney);
|
||
|
||
money_timestamp = OSTimeGet();
|
||
if (UserMenuState == USER_STATE_ACCEPT_MONEY)
|
||
{
|
||
UserPrintMoneyMenu();
|
||
RefreshMenu();
|
||
}
|
||
if (money) SaveEventRecord(RecentChannel, JOURNAL_EVENT_MONEY_NOTE, money);
|
||
CPU_INT32U billnom_index = FindBillIndex(money);
|
||
if (billnom_index != 0xFFFFFFFF) IncBillnomCounter(billnom_index);
|
||
|
||
coin_out_timestamp = OSTimeGet();
|
||
MoneyIn = 1;
|
||
}
|
||
break;
|
||
case EVENT_BANK_INSERTED:
|
||
{
|
||
CPU_INT32U cpp = 1;
|
||
CPU_INT32U money, accmoney;
|
||
GetData(&BankPerPulseDesc, &cpp, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
money = cpp * GetResetbankCount();// + testMoney;
|
||
|
||
if(money == 0) break;
|
||
|
||
accmoney = GetAcceptedBankMoney();
|
||
accmoney += money;
|
||
SetAcceptedBankMoney(accmoney);
|
||
IncCounterBank(money);
|
||
|
||
money_timestamp = OSTimeGet();
|
||
|
||
if (UserMenuState == USER_STATE_ACCEPT_MONEY)
|
||
{
|
||
UserPrintMoneyMenu();
|
||
RefreshMenu();
|
||
}
|
||
if (money) SaveEventRecord(RecentChannel, JOURNAL_EVENT_MONEY_BANK, money);
|
||
|
||
{
|
||
// ïðîâåðèì íóæíî ëè îáðàòíî âêëþ÷àòü áàíêîâñêèé òåðìèíàë íà ïðèåì (ïðèåì âûêëþ÷àåòñÿ ïðè ãåíåðàöèè ñîáûòèÿ)
|
||
|
||
// ñòîèìîñòü æåòîíà â õîïïåðå
|
||
CPU_INT32U HopperCost = 0;
|
||
GetData(&HopperCostDesc, &HopperCost, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
CPU_INT32U accmoney = GetAcceptedMoney();
|
||
accmoney += GetAcceptedBankMoney();
|
||
accmoney += GetAcceptedRestMoney();
|
||
|
||
coin_out_timestamp = OSTimeGet();
|
||
MoneyIn = 1;
|
||
|
||
// âûäàåì ìîíåòû ïî êíîïêå?
|
||
CPU_INT32U hopperStartButton = 0;
|
||
GetData(&HopperButtonStartDesc, &hopperStartButton, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
if(!hopperStartButton)
|
||
{
|
||
// âûäà÷à ìîíåò íå ïî êíîïêå è íàáðàëè íóæíóþ ñóììó - äåíåã áîëüøå íå æäåì - ãàñèì ïðèåì
|
||
if(accmoney >= HopperCost)
|
||
{
|
||
BankDisable();
|
||
|
||
// øëåì ñðàçó ñîáûòèå âûäà÷è æåòîíîâ
|
||
PostUserEvent(EVENT_GIVE_COIN);
|
||
MoneyIn = 0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case EVENT_BILL_ESCROW:
|
||
// êóïþðà â ïîëîæåíèè âîçâðàòà
|
||
if (IsValidatorConnected()) if (!CC_CmdPack(ADDR_FL)) SetErrorFlag(ERROR_VALIDATOR_CONN);
|
||
break;
|
||
case EVENT_BILL_STACKED:
|
||
// êóïþðà óëîæåíà
|
||
{
|
||
CPU_INT32U billnom_index;
|
||
CPU_INT32U note,accmoney;
|
||
note = GetResetBillCount(&billnom_index);
|
||
accmoney = GetAcceptedMoney();
|
||
accmoney += note;
|
||
SetAcceptedMoney(accmoney);
|
||
|
||
IncCounterCash(note);
|
||
IncCounterAllCash(note);
|
||
|
||
money_timestamp = OSTimeGet();
|
||
if (UserMenuState == USER_STATE_ACCEPT_MONEY)
|
||
{
|
||
UserPrintMoneyMenu();
|
||
RefreshMenu();
|
||
}
|
||
|
||
{
|
||
// ïðîâåðèì íóæíî ëè îáðàòíî âêëþ÷àòü êóïþðíèê íà ïðèåì (ïðèåì âûêëþ÷àåòñÿ ïðè ãåíåðàöèè ñîáûòèÿ)
|
||
|
||
// ñòîèìîñòü æåòîíà â õîïïåðå
|
||
CPU_INT32U HopperCost = 0;
|
||
GetData(&HopperCostDesc, &HopperCost, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
CPU_INT32U accmoney = GetAcceptedMoney();
|
||
accmoney += GetAcceptedBankMoney();
|
||
accmoney += GetAcceptedRestMoney();
|
||
|
||
coin_out_timestamp = OSTimeGet();
|
||
MoneyIn = 1;
|
||
|
||
// âûäàåì ìîíåòû ïî êíîïêå?
|
||
CPU_INT32U hopperStartButton = 0;
|
||
GetData(&HopperButtonStartDesc, &hopperStartButton, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
if(hopperStartButton)
|
||
{
|
||
// âûäà÷à ìîíåò ïî êíîïêå - æäåì åùå äåíåã
|
||
if (IsValidatorConnected()) CC_CmdBillType(0xffffff, 0xffffffff, ADDR_FL);
|
||
}
|
||
else
|
||
{
|
||
// âûäà÷à ìîíåò àâòîìàòè÷åñêè
|
||
if(accmoney < HopperCost)
|
||
{
|
||
// åùå íå íàáðàëè íóæíóþ ñóììó - âêëþ÷àåì êóïþðíèê íà ïðèåì
|
||
if (IsValidatorConnected()) CC_CmdBillType(0xffffff, 0xffffffff, ADDR_FL);
|
||
}
|
||
else
|
||
{
|
||
// øëåì ñðàçó ñîáûòèå âûäà÷è æåòîíîâ, åñëè íàêîïèëè íóæíóþ ñóììó
|
||
PostUserEvent(EVENT_GIVE_COIN);
|
||
MoneyIn = 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (note)
|
||
{
|
||
SaveEventRecord(RecentChannel, JOURNAL_EVENT_MONEY_NOTE, note);
|
||
IncBillnomCounter(billnom_index);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case EVENT_KEY_CANSEL:
|
||
#if 0
|
||
if ((GetMode() != MODE_WORK) || (incassation)) break;
|
||
if (TstCriticalErrors())
|
||
{
|
||
UserPrintErrorMenu();
|
||
RefreshMenu();
|
||
break;
|
||
}
|
||
UserMenuState = USER_STATE_FIRST_PAGE;
|
||
UserPrintFirstMenu();
|
||
RefreshMenu();
|
||
if (IsValidatorConnected()) CC_CmdBillType(0x000000, 0x000000, ADDR_FL);
|
||
#endif
|
||
break;
|
||
|
||
case EVENT_KEY_START:
|
||
//case EVENT_KEY_USER_START:
|
||
if (incassation) break;
|
||
if (GetMode() != MODE_WORK)
|
||
{
|
||
if (!FlagForPrintReport) break;
|
||
if (GetCurrentMenu() == xReportMenuPanel)
|
||
{ // ïå÷àòàåì X-îò÷åò
|
||
CPU_INT08U err;
|
||
if (IsFiscalConnected())
|
||
{
|
||
FPend();
|
||
FiscPrintDayReportNoClear(30, &err);
|
||
FPost();
|
||
if (err) {SetFiscalErrorByCode(err);}
|
||
SaveEventRecord(0, JOURNAL_EVENT_PRINT_X, GetTimeSec());
|
||
GoToPreviousMenu();
|
||
}
|
||
}
|
||
else if (GetCurrentMenu() == zReportMenuPanel)
|
||
{ // ïå÷àòàåì Z-îò÷åò
|
||
CPU_INT08U err;
|
||
if (IsFiscalConnected())
|
||
{
|
||
FPend();
|
||
FiscPrintDayReportClear(30, &err);
|
||
FPost();
|
||
if (err) {SetFiscalErrorByCode(err);}
|
||
SaveEventRecord(0, JOURNAL_EVENT_PRINT_Z, GetTimeSec());
|
||
GoToPreviousMenu();
|
||
ClrFiscalErrorByCode(FR_ERROR_CODE_4E);
|
||
}
|
||
}
|
||
else if (GetCurrentMenu() == bufReportMenuPanel)
|
||
{ // ïå÷àòàåì Z-îò÷åòû èç áóôåðà
|
||
CPU_INT08U err;
|
||
if (IsFiscalConnected())
|
||
{
|
||
FPend();
|
||
FiscPrintDayReportsFromBuf(30, &err);
|
||
FPost();
|
||
if (err) {SetFiscalErrorByCode(err);}
|
||
SaveEventRecord(0, JOURNAL_EVENT_PRINT_BUF, GetTimeSec());
|
||
GoToPreviousMenu();
|
||
}
|
||
}
|
||
else if (GetCurrentMenu() == CanselCheckMenuPanel)
|
||
{
|
||
int res = CanselFiscalBill();
|
||
SaveEventRecord(0, JOURNAL_EVENT_PRINT_X, res);
|
||
CheckFiscalStatus();
|
||
GoToPreviousMenu();
|
||
}
|
||
break;
|
||
}
|
||
|
||
// â ðàáî÷åì ðåæèìå - ïå÷àòàåì ÷åêè
|
||
//PostUserEvent(EVENT_PRINT_CHECK);
|
||
break;
|
||
|
||
// íàæàëè âíåøíþþ êíîïêó
|
||
case EVENT_KEY_USER_START:
|
||
|
||
if(led_on)
|
||
{
|
||
// íàæàëè êíîïêó, åñëè ìîæíî íàæèìàòü - âûäàäèì äåíüãè
|
||
if(!press_button) PostUserEvent(EVENT_GIVE_COIN);
|
||
press_button = 1;
|
||
}
|
||
break;
|
||
|
||
// çàäà÷à ðàáîòû ñ õîïïåðîì
|
||
case EVENT_GIVE_COIN:
|
||
|
||
// if (TstCriticalErrors())
|
||
// {
|
||
// UserPrintErrorMenu();
|
||
// RefreshMenu();
|
||
// break;
|
||
// }
|
||
|
||
// çäåñü óïðàâëÿåì õîïïåðîì--
|
||
{
|
||
GetData(&RegimeHopperDesc, ®ime_hopper, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
// ñòîèìîñòü æåòîíà â õîïïåðå
|
||
CPU_INT32U HopperCost = 0;
|
||
GetData(&HopperCostDesc, &HopperCost, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
CPU_INT32U accmoney = GetAcceptedMoney();
|
||
accmoney += GetAcceptedBankMoney();
|
||
accmoney += GetAcceptedRestMoney();
|
||
|
||
if(accmoney >= HopperCost)
|
||
{
|
||
// çàïðåòèì ïðèåì äåíåã - ïå÷àòàåì ÷åê è âûäàåì ìîíåòû - òîëüêî åñëè äîñòàòî÷íî äåíåã íà âûäà÷ó ìîíåòû
|
||
if (IsValidatorConnected()) CC_CmdBillType(0x000000, 0x000000, ADDR_FL);
|
||
CoinDisable();
|
||
BankDisable();
|
||
|
||
CountCoin = accmoney / HopperCost;
|
||
|
||
// íàïèøåì ñêîëüêî âûäàäèì æåòîíîâ
|
||
UserPrintCoinOut(CountCoin);
|
||
RefreshMenu();
|
||
|
||
OSTimeDly(1000);
|
||
|
||
if (CountCoin) SaveEventRecord(RecentChannel, JOURNAL_EVENT_COIN_OUT, CountCoin);
|
||
|
||
// åñëè õâàòàåò íà æåòîí - âíå çàâèñèìîñòè îò òèïà âûäà÷è æåòîíîâ
|
||
if(!regime_hopper)
|
||
{
|
||
// ðåæèì Elolution - óïðàâëÿåì âûäà÷åé æåòîíîâ èìïóëüñàìè
|
||
for(int j = 0; j < CountCoin; j++)
|
||
{
|
||
if(event_nomoney_hopper)
|
||
{
|
||
// no money event - exit
|
||
event_nomoney_hopper = 0;
|
||
break;
|
||
}
|
||
|
||
FIO0SET_bit.P0_24 = 1;
|
||
OSTimeDly(50);
|
||
FIO0CLR_bit.P0_24 = 1;
|
||
OSTimeDly(50);
|
||
}
|
||
|
||
IncCounterCoinOut(CountCoin);
|
||
|
||
// æåòîíû âûäàëè
|
||
CountCoin = 0;
|
||
|
||
// ïîñëå ðàáîòû ñ õîïïåðîì - ïå÷àòàåì ÷åêè - òîëüêî åñëè âûäàëè æåòîí
|
||
PostUserEvent(EVENT_PRINT_CHECK);
|
||
|
||
// íàéäåì îñòàòîê îò âûäà÷è æåòîíà
|
||
CPU_INT32U restMoney = accmoney % HopperCost;
|
||
|
||
SetAcceptedRestMoney(restMoney);
|
||
}
|
||
else
|
||
{
|
||
// íà÷àëè âûäàâàòü æåòîíû
|
||
hopperOn = 1;
|
||
|
||
// ðåæèì Cube - ðàçðåøàåì âûäàâàòü æåòîíû - ïîäíèìàåì ëèíèþ îïòîïàðà èíâåðòèðóåò â LOW, äàëåå íà P-êàíàëüíûé ïîëåâèê
|
||
FIO0SET_bit.P0_24 = 1;
|
||
|
||
// âðåìÿ çàïóñêà âûäà÷è æåòîíîâ
|
||
coin_timestamp = OSTimeGet();
|
||
|
||
// ïå÷àòü ÷åêà, ðàñ÷åò îñòàòêà ïîñëå îñòàíîâêè âûäà÷è íà õîïïåðå
|
||
}
|
||
}
|
||
}
|
||
|
||
break;
|
||
case EVENT_ERROR_HOPPER_ON:
|
||
{
|
||
// Èãíîðèðóåì îøèáêè õîïïåðà?
|
||
CPU_INT32U DisableHopperErrors = 0;
|
||
GetData(&DisableHopperErrorsDesc, &DisableHopperErrors, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
// óçíàåì ðåæèì ðàáîòû õîïïåðà
|
||
GetData(&RegimeHopperDesc, ®ime_hopper, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
if(DisableHopperErrors)
|
||
{
|
||
ClrErrorFlag(ERROR_HOPPER);
|
||
break;
|
||
}
|
||
|
||
if(regime_hopper)
|
||
{
|
||
// â ðåæèìå õîïïåðà Cube - äàò÷èêà îøèáêè íåò
|
||
ClrErrorFlag(ERROR_HOPPER);
|
||
break;
|
||
}
|
||
|
||
if(!TstErrorFlag(ERROR_HOPPER))
|
||
{
|
||
// ñèãíàë îøèáêè õîïïåðà
|
||
SetErrorFlag(ERROR_HOPPER);
|
||
}
|
||
}
|
||
break;
|
||
case EVENT_ERROR_HOPPER_OFF:
|
||
{
|
||
// ñèãíàë ÑÍßÒÈß îøèáêè õîïïåðà
|
||
ClrErrorFlag(ERROR_HOPPER);
|
||
}
|
||
break;
|
||
case EVENT_NOMONEY_HOPPER_ON:
|
||
{
|
||
// Èãíîðèðóåì îøèáêè õîïïåðà?
|
||
CPU_INT32U DisableHopperErrors = 0;
|
||
GetData(&DisableHopperErrorsDesc, &DisableHopperErrors, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
if(DisableHopperErrors)
|
||
{
|
||
ClrErrorFlag(ERROR_NO_MONEY_HOPPER);
|
||
break;
|
||
}
|
||
|
||
if(!TstErrorFlag(ERROR_NO_MONEY_HOPPER))
|
||
{
|
||
// ñèãíàë îòñóòñòâèÿ äåíåã â õîïïåðå
|
||
SetErrorFlag(ERROR_NO_MONEY_HOPPER);
|
||
}
|
||
}
|
||
break;
|
||
case EVENT_NOMONEY_HOPPER_OFF:
|
||
{
|
||
if(TstErrorFlag(ERROR_NO_MONEY_HOPPER))
|
||
{
|
||
// ñèãíàë ÑÍßÒÈß îòñóòñòâèÿ äåíåã â õîïïåðå
|
||
ClrErrorFlag(ERROR_NO_MONEY_HOPPER);
|
||
SaveEventRecord(RecentChannel, EVENT_FULL_MONEY_HOPPER, 0);
|
||
}
|
||
}
|
||
break;
|
||
case EVENT_PRINT_CHECK:
|
||
|
||
if (TstCriticalErrors())
|
||
{
|
||
// ÷åêè ïå÷àòàòü íåëüçÿ - õîòü îáíóëèì ïîëó÷åííûå äåíüãè çà âûäàííûå ìîíåòû è íàðàñòèì ñ÷åò÷èêè
|
||
CPU_INT32U accmoney = GetAcceptedMoney();
|
||
if (accmoney > 0)
|
||
{
|
||
IncCounter(ChannelsPayedTime[RecentChannel], accmoney);
|
||
SetAcceptedMoney(0);
|
||
}
|
||
|
||
accmoney = GetAcceptedBankMoney();
|
||
if (accmoney > 0)
|
||
{
|
||
IncCounter(ChannelsPayedTime[RecentChannel], accmoney);
|
||
SetAcceptedBankMoney(0);
|
||
}
|
||
|
||
led_on = 0;
|
||
press_button = 0;
|
||
LED_OK_OFF();
|
||
|
||
UserPrintErrorMenu();
|
||
RefreshMenu();
|
||
break;
|
||
}
|
||
|
||
// --------------------------
|
||
// íàõîäèìñÿ â ðàáî÷åì ðåæèìå
|
||
// --------------------------
|
||
{
|
||
// ïå÷àòàåì ÷åêè
|
||
// ïîëüçîâàòåëü âíåñ äåíüãè è íàæàë ÑÒÀÐÒ + ðåæèì ïå÷àòè ÏÎ ÊÍÎÏÊÅ
|
||
CPU_INT32U accmoney = GetAcceptedMoney();
|
||
|
||
if (accmoney > 0)
|
||
{
|
||
// íàïå÷àòàåì ÷åê
|
||
if (IsFiscalConnected())
|
||
{
|
||
UserPrintPrintBillMenu();
|
||
RefreshMenu();
|
||
|
||
if (PrintFiscalBill(accmoney, 0) == 0)
|
||
{
|
||
SaveEventRecord(RecentChannel, JOURNAL_EVENT_PRINT_BILL, GetTimeSec());
|
||
}
|
||
|
||
OSTimeDly(1000);
|
||
}
|
||
|
||
IncCounter(ChannelsPayedTime[RecentChannel], accmoney);
|
||
SetAcceptedMoney(0);
|
||
|
||
// ïîâåñèì ìåíþ "ÑÏÀÑÈÁÎ"
|
||
if (IsFiscalConnected())
|
||
{
|
||
UserPrintThanksMenu();
|
||
RefreshMenu();
|
||
|
||
OSTimeDly(1000);
|
||
}
|
||
|
||
led_on = 0;
|
||
press_button = 0;
|
||
LED_OK_OFF();
|
||
}
|
||
|
||
accmoney = GetAcceptedBankMoney();
|
||
|
||
if (accmoney > 0)
|
||
{
|
||
// íàïå÷àòàåì ÷åê
|
||
if (IsFiscalConnected())
|
||
{
|
||
UserPrintPrintBillMenu();
|
||
RefreshMenu();
|
||
|
||
if (PrintFiscalBill(accmoney, 1) == 0)
|
||
{
|
||
SaveEventRecord(RecentChannel, JOURNAL_EVENT_PRINT_BILL_ONLINE, GetTimeSec());
|
||
}
|
||
|
||
OSTimeDly(1000);
|
||
}
|
||
|
||
IncCounter(ChannelsPayedTime[RecentChannel], accmoney);
|
||
SetAcceptedBankMoney(0);
|
||
|
||
// ïîâåñèì ìåíþ "ÑÏÀÑÈÁÎ"
|
||
if (IsFiscalConnected())
|
||
{
|
||
UserPrintThanksMenu();
|
||
RefreshMenu();
|
||
|
||
OSTimeDly(1000);
|
||
}
|
||
|
||
led_on = 0;
|
||
press_button = 0;
|
||
LED_OK_OFF();
|
||
}
|
||
|
||
UserPrintMoneyMenu();
|
||
RefreshMenu();
|
||
|
||
// ÷åê íàïå÷àòàëè - ðàçðåøèì ñíîâà ïðèíèìàòü äåíüãè
|
||
if (IsValidatorConnected()) CC_CmdBillType(0xffffff, 0xffffff, ADDR_FL);
|
||
CoinEnable();
|
||
BankEnable();
|
||
|
||
MoneyIn = 0;
|
||
}
|
||
break;
|
||
#else
|
||
|
||
#endif
|
||
case EVENT_HOPPER_EXTRACTED:
|
||
{
|
||
if (!hopperOn || !CountCoin)
|
||
{
|
||
// ÷òî-òî ïîøëî íå òàê - îñòàíàâëèâàåì âûäà÷ó
|
||
//FIO0CLR_bit.P0_24 = 1;
|
||
//break;
|
||
}
|
||
|
||
// èìïóëüñû îò õîïïåðà â ðåæèìå Cube
|
||
// ñ÷èòàåì è ïûòàåìñÿ îñòàíîâèòü õîïïåð âîâðåìÿ
|
||
|
||
if (regime_hopper) // ðåæèì õîïïåðà áûë çàãðóæåí ðàíåå
|
||
{
|
||
// ìû â íóæíîì ðåæèìå - ïîñìîòðèì ñêîëüêî ìû òàì íàêîïèëè èìïóëüñîâ - âûäàëè æåòîíîâ
|
||
CPU_INT32U coin = GetResetHopperCount();
|
||
|
||
// ïðèáàâèì ñêîëüêî âûäàëè ðàíåå
|
||
coin += GetAcceptedCoin();
|
||
|
||
// íåòó æåòîíîâ - âûõîä
|
||
//if (!coin) break;
|
||
|
||
if (coin >= CountCoin)
|
||
{
|
||
// âñå âûäàëè - îñòàíàâëèâàåì âûäà÷ó
|
||
{
|
||
// ïîäîæäåì óêàçàííóþ ïàóçó, òê ìîòîð â õîïïåðå ÷óòü íå äîâîðà÷èâàåò, ïîñëå òîãî êàê èìïóëüñ îò íåãî ïðèøåë
|
||
// ïîýòîìó æäåì åùå íåìíîãî ÷òî áû ìîíåòà âûïàëà
|
||
CPU_INT32U HopperPauseEngineOff = 0;
|
||
GetData(&HopperPauseEngineOffDesc, &HopperPauseEngineOff, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
if(HopperPauseEngineOff > 0)
|
||
{
|
||
OSTimeDly(HopperPauseEngineOff);
|
||
}
|
||
}
|
||
|
||
FIO0CLR_bit.P0_24 = 1;
|
||
|
||
IncCounterCoinOut(CountCoin);
|
||
|
||
// æåòîíû âûäàëè
|
||
CountCoin = 0;
|
||
// îñòàíîâèëè âûäà÷ó
|
||
hopperOn = 0;
|
||
|
||
// æåòîíû âûäàëè - çàáûâàåì ïðî íèõ
|
||
SetAcceptedCoin(0);
|
||
|
||
// ïîñëå ðàáîòû ñ õîïïåðîì - ïå÷àòàåì ÷åêè - òîëüêî åñëè âûäàëè íóæíîå êîëè÷åñòâî æåòîíîâ
|
||
PostUserEvent(EVENT_PRINT_CHECK);
|
||
|
||
// ñêîëüêî äåíåã óæå åñòü
|
||
CPU_INT32U accmoney = GetAcceptedMoney();
|
||
accmoney += GetAcceptedBankMoney();
|
||
accmoney += GetAcceptedRestMoney();
|
||
|
||
// ñòîèìîñòü æåòîíà â õîïïåðå
|
||
CPU_INT32U HopperCost = 0;
|
||
GetData(&HopperCostDesc, &HopperCost, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
// íàéäåì îñòàòîê îò âûäà÷è æåòîíà
|
||
CPU_INT32U restMoney = accmoney % HopperCost;
|
||
SetAcceptedRestMoney(restMoney);
|
||
}
|
||
else
|
||
{
|
||
SetAcceptedCoin(coin);
|
||
coin_timestamp = OSTimeGet();
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case EVENT_KEY_F1:
|
||
//testMoney = 50;
|
||
//PostUserEvent(EVENT_COIN_INSERTED);
|
||
break;
|
||
case EVENT_KEY_F2:
|
||
//testMoney = 50;
|
||
//PostUserEvent(EVENT_NOMONEY_HOPPER_ON);
|
||
break;
|
||
case EVENT_KEY_F3:
|
||
//PostUserEvent(EVENT_NOMONEY_HOPPER_OFF);
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
OSTimeDly(1);
|
||
}
|
||
}
|
||
}
|
||
|
||
/*!
|
||
Ïîëüçîâàòåëüñêàÿ èíèöèàëèçàöèÿ
|
||
*/
|
||
void UserStartupFunc(void)
|
||
{
|
||
#ifdef BOARD_CENTRAL_CFG
|
||
|
||
// èíèöèàëèçàöèÿ ðåæèìà ðàáîòû
|
||
InitMode();
|
||
|
||
// èíèöèàëèçàöèÿ äàííûõ
|
||
CheckAllData();
|
||
|
||
OnChangeInitByDefault();
|
||
|
||
// ïðîâåðèì äëèííûå ñ÷åò÷èêè
|
||
CheckLongCounters();
|
||
|
||
// âîññòàíîâèì äåíüãè
|
||
LoadAcceptedMoney();
|
||
|
||
// ïðîâåðèì ïàðîëü
|
||
InitPass();
|
||
|
||
//íèöèàëèçàöèÿ êàíàëîâ
|
||
InitChannels();
|
||
|
||
// èíèöèàëèçàöèÿ ìåíþ
|
||
InitMenu();
|
||
|
||
OSTimeDly(1000);
|
||
|
||
// çàïóñòèì âàëèäàòîð
|
||
StartUpValidator();
|
||
|
||
OSTimeDly(1000);
|
||
InitFiscal();
|
||
|
||
// ïðîèíèöèàëèçèðóåì ÷àñû
|
||
InitRTC();
|
||
|
||
// ñäåëàåì çàïèñü î âêëþ÷åíèè
|
||
SaveEventRecord(0, JOURNAL_EVENT_DEVICE_ON, GetTimeSec());
|
||
|
||
ClrErrorFlag(ERROR_MODEM_CONN);
|
||
|
||
// çàïóñòèì ìîíåòíèê
|
||
InitCoin();
|
||
|
||
#endif
|
||
|
||
// ñîçäàäèì î÷åðåäü è çàäà÷ó
|
||
if (UserQuery == NULL)
|
||
{
|
||
UserQuery = OSQCreate(&UserTbl[0], USER_QUERY_LEN);
|
||
OSTaskCreate(UserAppTask, (void *)0, (OS_STK *)&UserTaskStk[USER_TASK_STK_SIZE-1], USER_TASK_PRIO);
|
||
}
|
||
|
||
//InitConsole();
|
||
|
||
#ifdef CONFIG_FTP_CLIENT_ENABLE
|
||
InitFTPApp();
|
||
#endif
|
||
|
||
SystemTime = GetTimeSec();
|
||
|
||
#ifdef BOARD_CENTRAL_CFG
|
||
// ïåðåéäåì â ñòàðòîâîå ìåíþ, åñëè ðàáîòà
|
||
if (GetMode() == MODE_WORK) {SetMenu(WORK_MENU);}
|
||
else SetMenu(SERVICE_MENU);
|
||
#endif
|
||
|
||
}
|
||
|
||
int GetUserEvent(int* event)
|
||
{
|
||
CPU_INT08U err = 0;
|
||
int evt = (int)OSQPend(UserQuery, 1, &err);
|
||
if (err != 0) return 0;
|
||
*event = evt;
|
||
return 1;
|
||
}
|
||
|
||
|
||
void PostUserEvent(int event)
|
||
{
|
||
OSQPost(UserQuery, (void *)event);
|
||
}
|
||
|
||
|
||
void InitUserMenu(void)
|
||
{
|
||
}
|
||
|
||
void UserPrintMoneyMenu(void)
|
||
{
|
||
char buf[32];
|
||
CPU_INT32U accmoney;
|
||
|
||
if (GetMode() != MODE_WORK) return;
|
||
|
||
strcpy(buf, " ");
|
||
PrintUserMenuStr(buf, 0);
|
||
sprintf(buf, "Âíåñèòå äåíüãè");
|
||
PrintUserMenuStrNew(buf, 1);
|
||
|
||
accmoney = GetAcceptedMoney();
|
||
accmoney += GetAcceptedBankMoney();
|
||
accmoney += GetAcceptedRestMoney();
|
||
|
||
sprintf(buf, "Ïðèíÿòî %d ðóá.", accmoney);
|
||
PrintUserMenuStrNew(buf, 2);
|
||
sprintf(buf, " ");
|
||
PrintUserMenuStr(buf, 3);
|
||
}
|
||
|
||
// âûâîä ìåíþ î íåâîçìîæîñòè ðàáîòû
|
||
void UserPrintErrorMenu(void)
|
||
{
|
||
char buf[32];
|
||
|
||
if (GetMode() != MODE_WORK) return;
|
||
|
||
if (TstErrorFlag(ERROR_VALIDATOR_CONN) || TstCriticalValidatorErrors())
|
||
{
|
||
sprintf(buf, "ÎØÈÁÊÀ");
|
||
PrintUserMenuStr(buf, 0);
|
||
sprintf(buf, "ÊÓÏÞÐÎÏÐÈÅÌÍÈÊÀ");
|
||
PrintUserMenuStr(buf, 1);
|
||
if (TstErrorFlag(ERROR_VALIDATOR_CONN))
|
||
{
|
||
sprintf(buf, "ÍÅÒ ÑÂßÇÈ");
|
||
PrintUserMenuStr(buf, 2);
|
||
sprintf(buf, "");
|
||
PrintUserMenuStr(buf, 3);
|
||
}
|
||
}
|
||
else if (TstErrorFlag(ERROR_FR_CONN))
|
||
{
|
||
sprintf(buf, "ÎØÈÁÊÀ");
|
||
PrintUserMenuStr(buf, 0);
|
||
sprintf(buf, "ÍÅÒ ÑÂßÇÈ Ñ ÔÐ");
|
||
PrintUserMenuStr(buf, 1);
|
||
sprintf(buf, "");
|
||
PrintUserMenuStr(buf, 2);
|
||
PrintUserMenuStr(buf, 3);
|
||
}
|
||
else if (TstCriticalFiscalError())
|
||
{
|
||
sprintf(buf, "ÎØÈÁÊÀ");
|
||
PrintUserMenuStr(buf, 0);
|
||
CPU_INT08U errcode = 0;
|
||
sprintf(buf, "ÎØÈÁÊÀ ÔÐ");
|
||
PrintUserMenuStr(buf, 1);
|
||
GetFirstCriticalFiscalError(&errcode);
|
||
GetDataItem(&JournalErrorNumberDesc0, (CPU_INT08U*)buf, errcode);
|
||
PrintUserMenuStr(buf, 2);
|
||
GetDataItem(&JournalErrorNumberDesc1, (CPU_INT08U*)buf, errcode);
|
||
PrintUserMenuStr(buf, 3);
|
||
}
|
||
else if(TstErrorFlag(ERROR_HOPPER))
|
||
{
|
||
sprintf(buf, "ÎØÈÁÊÀ");
|
||
PrintUserMenuStr(buf, 0);
|
||
sprintf(buf, "Õîïïåð îøèáêà äàò÷èêà");
|
||
PrintUserMenuStr(buf, 1);
|
||
|
||
sprintf(buf, "");
|
||
PrintUserMenuStr(buf, 2);
|
||
PrintUserMenuStr(buf, 3);
|
||
}
|
||
else if(TstErrorFlag(ERROR_NO_MONEY_HOPPER))
|
||
{
|
||
sprintf(buf, "ÎØÈÁÊÀ");
|
||
PrintUserMenuStr(buf, 0);
|
||
sprintf(buf, "Õîïïåð ïóñò");
|
||
PrintUserMenuStr(buf, 1);
|
||
|
||
sprintf(buf, "");
|
||
PrintUserMenuStr(buf, 2);
|
||
PrintUserMenuStr(buf, 3);
|
||
}
|
||
/*
|
||
else if (!FReportTest())
|
||
{
|
||
sprintf(buf, "ÏÅ×ÀÒb ÎÒ×ÅÒÀ");
|
||
PrintUserMenuStr(buf, 0);
|
||
sprintf(buf, "ÆÄÈÒÅ");
|
||
PrintUserMenuStr(buf, 1);
|
||
sprintf(buf, "ÏÐÈÍÒÅÐ");
|
||
PrintUserMenuStr(buf, 2);
|
||
sprintf(buf, "ÍÅÄÎÑÒÓÏÅÍ");
|
||
PrintUserMenuStr(buf, 3);
|
||
}
|
||
*/
|
||
}
|
||
|
||
int CheckChannelEnabled(CPU_INT08U channel)
|
||
{
|
||
CPU_INT32U en = 0;
|
||
GetData(&EnableChannelDesc, &en, channel, DATA_FLAG_DIRECT_INDEX);
|
||
if (en)
|
||
{
|
||
return 1;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
|
||
void WorkServer(void)
|
||
{
|
||
|
||
}
|
||
|
||
void UserPrintCoinOut(CPU_INT32U coin)
|
||
{
|
||
if (GetMode() != MODE_WORK) return;
|
||
|
||
char buf[32];
|
||
sprintf(buf, " ");
|
||
PrintUserMenuStr(buf, 0);
|
||
sprintf(buf, "Ïîëó÷èòå æåòîíû");
|
||
PrintUserMenuStrNew(buf, 1);
|
||
sprintf(buf, " %d", coin);
|
||
PrintUserMenuStrNew(buf, 2);
|
||
sprintf(buf, " ");
|
||
PrintUserMenuStr(buf, 3);
|
||
}
|
||
|
||
void UserPrintPrintBillMenu(void)
|
||
{
|
||
if (GetMode() != MODE_WORK) return;
|
||
|
||
char buf[32];
|
||
sprintf(buf, " ");
|
||
PrintUserMenuStr(buf, 0);
|
||
sprintf(buf, "Èäeò ïå÷àòü");
|
||
PrintUserMenuStr(buf, 1);
|
||
sprintf(buf, " ÷åêà");
|
||
PrintUserMenuStr(buf, 2);
|
||
sprintf(buf, " ");
|
||
PrintUserMenuStr(buf, 3);
|
||
}
|
||
|
||
void UserPrintThanksMenu(void)
|
||
{
|
||
if (GetMode() != MODE_WORK) return;
|
||
|
||
char buf[32];
|
||
sprintf(buf, " ");
|
||
PrintUserMenuStr(buf, 0);
|
||
sprintf(buf, " ÑÏÀÑÈÁÎ");
|
||
PrintUserMenuStr(buf, 1);
|
||
sprintf(buf, " ");
|
||
PrintUserMenuStr(buf, 2);
|
||
sprintf(buf, " ");
|
||
PrintUserMenuStr(buf, 3);
|
||
}
|
||
|
||
|
||
int ChannelBusy(CPU_INT08U ch)
|
||
{
|
||
return 0;
|
||
}
|
||
|
||
void UserPrintFirstMenu(void)
|
||
{
|
||
if (GetMode() != MODE_WORK) return;
|
||
|
||
char buf[32];
|
||
sprintf(buf, " ");
|
||
PrintUserMenuStr(buf, 0);
|
||
sprintf(buf, " ÂÍÅÑÈÒÅ");
|
||
PrintUserMenuStr(buf, 1);
|
||
sprintf(buf, " ÄÅÍÜÃÈ");
|
||
PrintUserMenuStr(buf, 2);
|
||
sprintf(buf, " ");
|
||
PrintUserMenuStr(buf, 3);
|
||
}
|
||
|
||
|
||
// ïðîâåðêà, áûëè ëè ñîõðàíåíû äåíüãè äî âûêëþ÷åíèÿ ïèòàíèÿ
|
||
void LoadAcceptedMoney(void)
|
||
{
|
||
CPU_INT32U m,crc,crct;
|
||
|
||
// ñ÷èòàåì cîõðàíåííûå äåíüãè èç FRAM
|
||
GetData(&AcceptedMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
// ñ÷èòàåì crc16 ýòèõ äåíåã èç FRAM
|
||
GetData(&AcceptedMoneyCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
crct = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
|
||
if (crct != crc)
|
||
{ // îáíóëÿåì, åñëè crc íå ñîøëàñü
|
||
m = 0;
|
||
crc = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
SetData(&AcceptedMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
SetData(&AcceptedMoneyCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
}
|
||
|
||
// ñ÷èòàåì cîõðàíåííûå äåíüãè èç FRAM
|
||
GetData(&AcceptedBankMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
// ñ÷èòàåì crc16 ýòèõ äåíåã èç FRAM
|
||
GetData(&AcceptedBankMoneyCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
crct = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
|
||
if (crct != crc)
|
||
{ // îáíóëÿåì, åñëè crc íå ñîøëàñü
|
||
m = 0;
|
||
crc = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
SetData(&AcceptedBankMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
SetData(&AcceptedBankMoneyCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
}
|
||
|
||
// ñ÷èòàåì cîõðàíåííûå äåíüãè èç FRAM
|
||
GetData(&AcceptedRestMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
// ñ÷èòàåì crc16 ýòèõ äåíåã èç FRAM
|
||
GetData(&AcceptedRestMoneyCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
crct = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
|
||
if (crct != crc)
|
||
{ // îáíóëÿåì, åñëè crc íå ñîøëàñü
|
||
m = 0;
|
||
crc = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
SetData(&AcceptedRestMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
SetData(&AcceptedRestMoneyCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
}
|
||
|
||
// ñ÷èòàåì cîõðàíåííûå äåíüãè èç FRAM
|
||
GetData(&AcceptedCoinDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
// ñ÷èòàåì crc16 ýòèõ äåíåã èç FRAM
|
||
GetData(&AcceptedCoinCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
crct = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
|
||
if (crct != crc)
|
||
{ // îáíóëÿåì, åñëè crc íå ñîøëàñü
|
||
m = 0;
|
||
crc = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
SetData(&AcceptedCoinDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
SetData(&AcceptedCoinCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
}
|
||
}
|
||
|
||
// äîáàâèòü äåíåã
|
||
void SetAcceptedMoney(CPU_INT32U money)
|
||
{
|
||
CPU_INT32U m,crc;
|
||
m=money;
|
||
crc = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
SetData(&AcceptedMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
SetData(&AcceptedMoneyCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
}
|
||
|
||
// î÷èñòèòü ñ÷åò÷èê äåíåã
|
||
void ClearAcceptedMoney(void)
|
||
{
|
||
CPU_INT32U m,crc;
|
||
m=0;
|
||
crc = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
SetData(&AcceptedMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
SetData(&AcceptedMoneyCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
}
|
||
|
||
// î÷èñòèòü ñ÷åò÷èê äåíåã
|
||
CPU_INT32U GetAcceptedMoney(void)
|
||
{
|
||
CPU_INT32U m;
|
||
GetData(&AcceptedMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
return m;
|
||
}
|
||
|
||
// äîáàâèòü äåíåã
|
||
void SetAcceptedBankMoney(CPU_INT32U money)
|
||
{
|
||
CPU_INT32U m,crc;
|
||
|
||
m=money;
|
||
crc = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
SetData(&AcceptedBankMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
SetData(&AcceptedBankMoneyCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
}
|
||
|
||
// î÷èñòèòü ñ÷åò÷èê äåíåã
|
||
void ClearAcceptedBankMoney(void)
|
||
{
|
||
CPU_INT32U m,crc;
|
||
|
||
m=0;
|
||
crc = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
SetData(&AcceptedBankMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
SetData(&AcceptedBankMoneyCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
}
|
||
|
||
// î÷èñòèòü ñ÷åò÷èê äåíåã
|
||
CPU_INT32U GetAcceptedBankMoney(void)
|
||
{
|
||
CPU_INT32U m;
|
||
|
||
GetData(&AcceptedBankMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
return m;
|
||
}
|
||
|
||
// äîáàâèòü äåíåã
|
||
void SetAcceptedRestMoney(CPU_INT32U money)
|
||
{
|
||
CPU_INT32U m,crc;
|
||
|
||
m=money;
|
||
crc = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
SetData(&AcceptedRestMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
SetData(&AcceptedRestMoneyCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
}
|
||
|
||
// î÷èñòèòü ñ÷åò÷èê äåíåã
|
||
void ClearAcceptedRestMoney(void)
|
||
{
|
||
CPU_INT32U m,crc;
|
||
|
||
m=0;
|
||
crc = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
SetData(&AcceptedRestMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
SetData(&AcceptedRestMoneyCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
}
|
||
|
||
// î÷èñòèòü ñ÷åò÷èê äåíåã
|
||
CPU_INT32U GetAcceptedRestMoney(void)
|
||
{
|
||
CPU_INT32U m;
|
||
|
||
GetData(&AcceptedRestMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
return m;
|
||
}
|
||
|
||
// âûäàëè æåòîíîâ
|
||
void SetAcceptedCoin(CPU_INT32U money)
|
||
{
|
||
CPU_INT32U m,crc;
|
||
m=money;
|
||
crc = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
SetData(&AcceptedCoinDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
SetData(&AcceptedCoinCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
}
|
||
|
||
// î÷èñòèòü ñ÷åò÷èê æåòîíîâ
|
||
void ClearAcceptedCoin(void)
|
||
{
|
||
CPU_INT32U m,crc;
|
||
m=0;
|
||
crc = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
|
||
SetData(&AcceptedCoinDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
SetData(&AcceptedCoinCRC16Desc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
}
|
||
|
||
// âûäàëè æåòîíîâ
|
||
CPU_INT32U GetAcceptedCoin(void)
|
||
{
|
||
CPU_INT32U m;
|
||
GetData(&AcceptedCoinDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
return m;
|
||
}
|
||
|
||
// èíèöèàëèçàöèÿ ïàðîëÿ
|
||
void InitPass(void)
|
||
{
|
||
CPU_INT32U pass,crc,crct;
|
||
GetData(&PassDesc, &pass, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
GetData(&PassCRCDesc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
|
||
crct = crc16((unsigned char*)&pass, sizeof(CPU_INT32U));
|
||
|
||
if (crct != crc)
|
||
{ // îáíóëÿåì, åñëè crc íå ñîøëàñü
|
||
pass = DEFAULT_PASSWORD;
|
||
crc = crc16((unsigned char*)&pass, sizeof(CPU_INT32U));
|
||
SetData(&PassDesc, &pass, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
SetData(&PassCRCDesc, &crc, 0, DATA_FLAG_SYSTEM_INDEX);
|
||
}
|
||
}
|