changer/PROJECT/app/app_serv.c

1514 lines
48 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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, &regime_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, &regime_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);
}
}