добавил банковские терминалы

This commit is contained in:
dimoniche 2019-07-05 01:22:42 +03:00
parent e7ad361aea
commit 864b5670bf
12 changed files with 832 additions and 127 deletions

View File

@ -45,10 +45,16 @@ void UserPrintThanksMenu(int post);
void UserPrintFirstMenu(void);
void UserPrintErrorMenu(void);
CPU_INT32U GetChannelsTimeForFree(CPU_INT08U ch);
void LoadAcceptedMoney(void);
void SetAcceptedMoney(CPU_INT32U money,int post);
void ClearAcceptedMoney(int post);
CPU_INT32U GetAcceptedMoney(int post);
void SetAcceptedBankMoney(CPU_INT32U money,int post);
void ClearAcceptedBankMoney(int post);
CPU_INT32U GetAcceptedBankMoney(int post);
void InitPass(void);
int CheckChannelEnabled(CPU_INT08U channel);
int ChannelBusy(CPU_INT08U ch);
@ -97,8 +103,9 @@ washStateEnum wash_State[COUNT_POST + COUNT_VACUUM] = {waitMoney, waitMoney, wai
int countSecWait[COUNT_POST + COUNT_VACUUM] = {0, 0, 0, 0, 0, 0, 0, 0};
CPU_INT32U enable_coin[COUNT_POST + COUNT_VACUUM];
CPU_INT32U cash_enable[COUNT_POST + COUNT_VACUUM];
CPU_INT32U enable_signal[COUNT_POST + COUNT_VACUUM];
CPU_INT32U cash_enable[COUNT_POST];
CPU_INT32U bank_enable[COUNT_POST];
CPU_INT32U enable_signal[COUNT_POST];
void DrawMenu(void)
{
@ -108,10 +115,10 @@ void DrawMenu(void)
{
if((enable_coin[currentPosition]
|| cash_enable[currentPosition]
|| enable_signal[currentPosition])
&& currentPosition < COUNT_POST) break;
else if((enable_coin[currentPosition]
|| enable_signal[currentPosition])
|| bank_enable[currentPosition]
|| enable_signal[currentPosition])
&& currentPosition < COUNT_POST) break;
else if((enable_coin[currentPosition])
&& currentPosition >= COUNT_POST) break;
}
@ -188,13 +195,15 @@ void UserAppTask(void *p_arg)
break;
}
for(int post = 0; post < COUNT_POST + COUNT_VACUUM; post++)
for(int post = 0; post < COUNT_POST; post++)
{
GetData(&EnableCoinDesc, &enable_coin[post], post, DATA_FLAG_DIRECT_INDEX);
GetData(&EnableValidatorDesc, &cash_enable[post], post, DATA_FLAG_DIRECT_INDEX);
GetData(&EnableBankDesc, &bank_enable[post], post, DATA_FLAG_DIRECT_INDEX);
GetData(&EnableSignalDesc, &enable_signal[post], post, DATA_FLAG_DIRECT_INDEX);
accmoney = GetAcceptedMoney(post);
accmoney += GetAcceptedBankMoney(post);
if (accmoney > 0)
{
@ -235,6 +244,22 @@ void UserAppTask(void *p_arg)
}
}
for(int post = COUNT_POST; post < COUNT_POST + COUNT_VACUUM; post++)
{
accmoney = GetAcceptedMoney(post);
if (accmoney > 0)
{
// äëÿ ìîíåòîïðèåìíèêîâ ïûëåñîñîâ - ïå÷àòü ÷åêà ïî òàéìàóòó
GetData(&CoinTimeOutDesc, &print_timeout, post, DATA_FLAG_DIRECT_INDEX);
if (labs(OSTimeGet() - money_timestamp[post]) > 1000UL * print_timeout)
{
PostUserEvent(EVENT_CASH_PRINT_CHECK_POST1 + post);
}
}
}
// ïðèíèìàåì äåíüãè
DrawMenu();
@ -320,7 +345,33 @@ void UserAppTask(void *p_arg)
wash_State[number_post] = insertMoney;
}
break;
case EVENT_BANK_INSERTED_POST1:
case EVENT_BANK_INSERTED_POST2:
case EVENT_BANK_INSERTED_POST3:
case EVENT_BANK_INSERTED_POST4:
case EVENT_BANK_INSERTED_POST5:
case EVENT_BANK_INSERTED_POST6:
{
CPU_INT32U cpp = 1;
CPU_INT32U money, accmoney;
int number_post = event - EVENT_BANK_INSERTED_POST1;
GetData(&BankPerPulseDesc, &cpp, number_post, DATA_FLAG_DIRECT_INDEX);
money = cpp * GetResetbankCount(number_post) + testMoney;
accmoney = GetAcceptedBankMoney(number_post);
accmoney += money;
SetAcceptedBankMoney(accmoney, number_post);
money_timestamp[number_post] = OSTimeGet();
if (money) SaveEventRecord(number_post, JOURNAL_EVENT_MONEY_NOTE_POST1 + number_post, money);
wash_State[number_post] = insertMoney;
}
break;
case EVENT_KEY_CANSEL:
break;
@ -387,13 +438,13 @@ void UserAppTask(void *p_arg)
case EVENT_STOP_MONEY_POST4:
case EVENT_STOP_MONEY_POST5:
case EVENT_STOP_MONEY_POST6:
case EVENT_STOP_MONEY_VACUUM1:
case EVENT_STOP_MONEY_VACUUM2:
if (GetMode() == MODE_WORK) //
{
int number_post = event - EVENT_STOP_MONEY_POST1;
accmoney = GetAcceptedMoney(number_post);
accmoney += GetAcceptedBankMoney(number_post);
if (accmoney > 0)
{
wash_State[number_post] = washing;
@ -407,14 +458,14 @@ void UserAppTask(void *p_arg)
case EVENT_WAIT_CASH_PRINT_CHECK_POST4:
case EVENT_WAIT_CASH_PRINT_CHECK_POST5:
case EVENT_WAIT_CASH_PRINT_CHECK_POST6:
case EVENT_WAIT_CASH_PRINT_CHECK_VACUUM1:
case EVENT_WAIT_CASH_PRINT_CHECK_VACUUM2:
if (GetMode() == MODE_WORK) //
{
int number_post = event - EVENT_WAIT_CASH_PRINT_CHECK_POST1;
int count_delay = 0;
accmoney = GetAcceptedMoney(number_post);
accmoney += GetAcceptedBankMoney(number_post);
if (accmoney > 0)
{
// çàïóñòèì çàäåðæêó ïå÷àòè ÷åêà
@ -442,14 +493,46 @@ void UserAppTask(void *p_arg)
int number_post = event - EVENT_CASH_PRINT_CHECK_POST1;
// çäåñü ñîáûòèå ñòàðòà ïå÷àòè ÷åêà - âêëþ÷èëè íàñîñ èëè ïûëåñîñ
CPU_INT32U accmoney = GetAcceptedMoney(number_post);
accmoney = GetAcceptedMoney(number_post);
if (accmoney > 0)
{
UserPrintPrintBillMenu(number_post);
RefreshMenu();
// íàïå÷àòàåì ÷åê
// íàïå÷àòàåì íàëè÷íûé ÷åê
if (IsFiscalConnected())
{
if (PrintFiscalBill(accmoney,number_post) == 0) // çäåñü äîáàâèòü ñ êàêîãî ïîñòà ÷åê
{
SaveEventRecord(number_post, JOURNAL_EVENT_PRINT_BILL_POST1 + number_post, GetTimeSec());
}
}
IncCounter(number_post, ChannelsPayedTime[number_post], accmoney);
SetAcceptedMoney(0, number_post);
OSTimeDly(1000);
// ïîâåñèì ìåíþ "ÑÏÀÑÈÁÎ"
if (IsFiscalConnected())
{
UserPrintThanksMenu(number_post);
RefreshMenu();
}
OSTimeDly(1000);
wash_State[number_post] = waitMoney;
}
// çäåñü ñîáûòèå ñòàðòà ïå÷àòè ÷åêà - âêëþ÷èëè íàñîñ èëè ïûëåñîñ
accmoney = GetAcceptedBankMoney(number_post);
if (accmoney > 0)
{
UserPrintPrintBillMenu(number_post);
RefreshMenu();
// íàïå÷àòàåì áåçíàëè÷íûé ÷åê
if (IsFiscalConnected())
{
if (PrintFiscalBill(accmoney,number_post) == 0) // çäåñü äîáàâèòü ñ êàêîãî ïîñòà ÷åê
@ -476,8 +559,8 @@ void UserAppTask(void *p_arg)
break;
case EVENT_KEY_F1:
//testMoney = 100;
//PostUserEvent(EVENT_CASH_INSERTED_POST1);
testMoney = 100;
PostUserEvent(EVENT_COIN_INSERTED_VACUUM1);
/*FIO4SET_bit.P4_28 = 1;
OSTimeDly(50);
@ -767,6 +850,24 @@ void LoadAcceptedMoney(void)
SetData(&AcceptedMoneyCRC16Desc, &crc, i, DATA_FLAG_DIRECT_INDEX);
}
}
for(int i = 0; i < COUNT_POST; i++)
{
// ñ÷èòàåì cîõðàíåííûå äåíüãè èç FRAM
GetData(&AcceptedBankMoneyDesc, &m, i, DATA_FLAG_DIRECT_INDEX);
// ñ÷èòàåì crc16 ýòèõ äåíåã èç FRAM
GetData(&AcceptedBankMoneyCRC16Desc, &crc, i, DATA_FLAG_DIRECT_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, i, DATA_FLAG_DIRECT_INDEX);
SetData(&AcceptedBankMoneyCRC16Desc, &crc, i, DATA_FLAG_DIRECT_INDEX);
}
}
}
// äîáàâèòü äåíåã
@ -797,6 +898,34 @@ CPU_INT32U GetAcceptedMoney(int post)
return m;
}
// äîáàâèòü äåíåã
void SetAcceptedBankMoney(CPU_INT32U money, int post)
{
CPU_INT32U m,crc;
m=money;
crc = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
SetData(&AcceptedBankMoneyDesc, &m, post, DATA_FLAG_DIRECT_INDEX);
SetData(&AcceptedBankMoneyCRC16Desc, &crc, post, DATA_FLAG_DIRECT_INDEX);
}
// î÷èñòèòü ñ÷åò÷èê äåíåã
void ClearAcceptedBankMoney(int post)
{
CPU_INT32U m,crc;
m=0;
crc = crc16((unsigned char*)&m, sizeof(CPU_INT32U));
SetData(&AcceptedBankMoneyDesc, &m, post, DATA_FLAG_DIRECT_INDEX);
SetData(&AcceptedBankMoneyCRC16Desc, &crc, post, DATA_FLAG_DIRECT_INDEX);
}
// î÷èñòèòü ñ÷åò÷èê äåíåã
CPU_INT32U GetAcceptedBankMoney(int post)
{
CPU_INT32U m;
GetData(&AcceptedBankMoneyDesc, &m, post, DATA_FLAG_DIRECT_INDEX);
return m;
}
// èíèöèàëèçàöèÿ ïàðîëÿ
void InitPass(void)
{

View File

@ -54,14 +54,19 @@ enum{
EVENT_CASH_INSERTED_POST5,
EVENT_CASH_INSERTED_POST6,
EVENT_BANK_INSERTED_POST1,
EVENT_BANK_INSERTED_POST2,
EVENT_BANK_INSERTED_POST3,
EVENT_BANK_INSERTED_POST4,
EVENT_BANK_INSERTED_POST5,
EVENT_BANK_INSERTED_POST6,
EVENT_STOP_MONEY_POST1,
EVENT_STOP_MONEY_POST2,
EVENT_STOP_MONEY_POST3,
EVENT_STOP_MONEY_POST4,
EVENT_STOP_MONEY_POST5,
EVENT_STOP_MONEY_POST6,
EVENT_STOP_MONEY_VACUUM1,
EVENT_STOP_MONEY_VACUUM2,
EVENT_WAIT_CASH_PRINT_CHECK_POST1,
EVENT_WAIT_CASH_PRINT_CHECK_POST2,
@ -69,8 +74,6 @@ enum{
EVENT_WAIT_CASH_PRINT_CHECK_POST4,
EVENT_WAIT_CASH_PRINT_CHECK_POST5,
EVENT_WAIT_CASH_PRINT_CHECK_POST6,
EVENT_WAIT_CASH_PRINT_CHECK_VACUUM1,
EVENT_WAIT_CASH_PRINT_CHECK_VACUUM2,
EVENT_CASH_PRINT_CHECK_POST1,
EVENT_CASH_PRINT_CHECK_POST2,

View File

@ -3,7 +3,7 @@
#include "fiscal.h"
#define EVENT_RECORDS_COUNT 512 // ÷èñëî çàïèñåé â æóðíàëå
#define EVENT_RECORDS_COUNT 384 // ÷èñëî çàïèñåé â æóðíàëå
#pragma pack(push, 1)
/// ñòðóêòóðà çàïèñè æóðíàëà ðàáî÷èõ ñîáûòèé

View File

@ -74,6 +74,41 @@ TDataDescStruct const CashPulseLenDesc = {
50
};
/*************************************
Длина импульса входа банковского терминала, мс
*************************************/
TRangeValueULONG const BankPulseLenRange = {20, 250};
CPU_INT08U const BankPulseLenName[] = "Длина имп.,мс";
void OnChangeBankPulseLen()
{
CPU_INT32U pulse, pause;
for(int post = 0; post < COUNT_POST; post++)
{
GetData(&BankPulseLenDesc, &pulse, post, DATA_FLAG_DIRECT_INDEX);
GetData(&BankPauseLenDesc, &pause, post, DATA_FLAG_DIRECT_INDEX);
SetBankPulseParam(pulse, pause, post);
}
}
TDataDescStruct const BankPulseLenDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_IS_ARRAY, // признак массива
COUNT_POST, // размер массива
&BankIndexDesc, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, bank_pulse_len), // указатель на переменную или адрес FRAM
(void*)&BankPulseLenRange, // указатель на границы параметра
OnChangeBankPulseLen, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
BankPulseLenName, // указатель на строку названия параметра
DATA_NO_INDEX, // признак индексного параметра (список строк)
NULL, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
50
};
/*************************************
Длина паузы входа купюрника, мс
*************************************/
@ -98,6 +133,30 @@ TDataDescStruct const CashPauseLenDesc = {
20
};
/*************************************
Длина паузы входа банковского терминала, мс
*************************************/
TRangeValueULONG const BankPauseLenRange = {20, 250};
CPU_INT08U const BankPauseLenName[] = "Пауза имп.,мс";
TDataDescStruct const BankPauseLenDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_IS_ARRAY, // признак массива
COUNT_POST, // размер массива
&BankIndexDesc, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, bank_pause_len), // указатель на переменную или адрес FRAM
(void*)&BankPauseLenRange, // указатель на границы параметра
OnChangeBankPulseLen, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
BankPauseLenName, // указатель на строку названия параметра
DATA_NO_INDEX, // признак индексного параметра (список строк)
NULL, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
20
};
/*************************************
Название кнопки СТАРТ (СТАРТ или ПУСК)
*************************************/
@ -136,7 +195,6 @@ CPU_INT08U const OnOffList_str0[] = "
CPU_INT08U const OnOffList_str1[] = "вкл.";
CPU_INT08U const *EnableValidatorList[] = {OnOffList_str0, OnOffList_str1};
TDataDescStruct const EnableValidatorDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
@ -155,6 +213,30 @@ TDataDescStruct const EnableValidatorDesc = {
1 // значение по умолчанию
};
/*************************************
Включение банковского терминала
*************************************/
TRangeValueULONG const EnableBankRange = {0, 1};
CPU_INT08U const EnableBankName[] = "Банк.термин.";
TDataDescStruct const EnableBankDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_IS_ARRAY, // признак массива
COUNT_POST, // размер массива
&BankIndexDesc, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, DeviceConfig.EnableBank), // указатель на переменную или адрес FRAM
(void*)&EnableBankRange, // указатель на границы параметра
NULL, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
EnableBankName, // указатель на строку названия параметра
DATA_IS_INDEX, // признак индексного параметра (список строк)
EnableValidatorList, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
1 // значение по умолчанию
};
/*************************************
Включение модема
*************************************/
@ -321,7 +403,7 @@ TDataDescStruct const StatSendHourMinDesc = {
/*************************************
Индекс при настройке сигналов
*************************************/
TRangeValueULONG const SignalIndexRange = {0, 7};
TRangeValueULONG const SignalIndexRange = {0, 5};
CPU_INT08U const SignalIndexName[] = "НАСТ.СИГН.ПЕЧ.";
CPU_INT08U const SignalIndex_str0[] = "1";
CPU_INT08U const SignalIndex_str1[] = "2";
@ -329,9 +411,7 @@ CPU_INT08U const SignalIndex_str2[] = "3";
CPU_INT08U const SignalIndex_str3[] = "4";
CPU_INT08U const SignalIndex_str4[] = "5";
CPU_INT08U const SignalIndex_str5[] = "6";
CPU_INT08U const SignalIndex_str6[] = "Ï1";
CPU_INT08U const SignalIndex_str7[] = "Ï2";
CPU_INT08U const *SignalIndexList[] = {SignalIndex_str0, SignalIndex_str1,SignalIndex_str2,SignalIndex_str3,SignalIndex_str4,SignalIndex_str5,SignalIndex_str6,SignalIndex_str7};
CPU_INT08U const *SignalIndexList[] = {SignalIndex_str0, SignalIndex_str1,SignalIndex_str2,SignalIndex_str3,SignalIndex_str4,SignalIndex_str5};
CPU_INT32U CoinIndex = 0;
@ -373,7 +453,7 @@ TDataDescStruct const EnableSignalDesc = {
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_IS_ARRAY, // признак массива
COUNT_POST+COUNT_VACUUM,// ðàçìåð ìàññèâà
COUNT_POST,// размер массива
&SignalIndexDesc, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, enableSignalPrint), // указатель на переменную или адрес FRAM
(void*)&EnableSignalRange, // указатель на границы параметра
@ -407,7 +487,7 @@ TDataDescStruct const SignalPulseDesc = {
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_IS_ARRAY, // признак массива
COUNT_POST+COUNT_VACUUM, // ðàçìåð ìàññèâà
COUNT_POST, // размер массива
&SignalIndexDesc, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, signal_pulse_len), // указатель на переменную или адрес FRAM
(void*)&SignalPulseRange, // указатель на границы параметра
@ -510,6 +590,38 @@ TDataDescStruct const CoinPerPulseDesc = {
1 // значение по умолчанию
};
/*************************************
Таймаут печати чека монетоприемника
*************************************/
TRangeValueULONG const CoinTimeOutRange = {1, 999};
CPU_INT08U const CoinTimeOutName[] = "Таймаут";
void OnchangeTimeOutCoin(void)
{
if(CoinIndex < COUNT_POST)
{
}
}
TDataDescStruct const CoinTimeOutDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_IS_ARRAY, // признак массива
COUNT_POST+COUNT_VACUUM, // размер массива
&CoinIndexDesc, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, DeviceConfig.CoinTimeOut), // указатель на переменную или адрес FRAM
(void*)&CoinTimeOutRange, // указатель на границы параметра
OnchangeTimeOutCoin, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
CoinTimeOutName, // указатель на строку названия параметра
DATA_NO_INDEX, // признак индексного параметра (список строк)
NULL, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
30 // значение по умолчанию
};
/*************************************
Индекс при настройке купюроприемников
*************************************/
@ -538,6 +650,33 @@ TDataDescStruct const CashIndexDesc = {
0
};
/*************************************
Индекс при настройке банковского терминала
*************************************/
TRangeValueULONG const BankIndexRange = {0, 5};
CPU_INT08U const BankIndexName[] = "НАСТР.БАНК.ТЕРМ";
void OnChangeBankIndex(void)
{
}
TDataDescStruct const BankIndexDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_RAM, // расположение параметра
DATA_NO_ARRAY, // признак массива
0, // размер массива
NULL, // указатель на десриптор индекса массива
(void*)&CoinIndex, // указатель на переменную или адрес FRAM
(void*)&BankIndexRange, // указатель на границы параметра
OnChangeBankIndex, // функция по изменению
0, // смещение между элементами в массиве
BankIndexName, // указатель на строку названия параметра
DATA_IS_INDEX, // признак индексного параметра (список строк)
CoinIndexList, // указатель на список строк для индексного параметра
DATA_INIT_ENABLE,
0
};
/*************************************
Режим купюрника
@ -665,16 +804,45 @@ TDataDescStruct const CashPerPulseDesc = {
10 // значение по умолчанию
};
/*************************************
Цена импульса банковского терминала в импульсном режиме
*************************************/
TRangeValueULONG const BankPerPulseRange = {1, 9999};
CPU_INT08U const BankPerPulseName[] = "Руб./имп.";
TDataDescStruct const BankPerPulseDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_IS_ARRAY, // признак массива
COUNT_POST, // размер массива
&BankIndexDesc, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, DeviceConfig.BankPerPulse), // указатель на переменную или адрес FRAM
(void*)&BankPerPulseRange, // указатель на границы параметра
NULL, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
BankPerPulseName, // указатель на строку названия параметра
DATA_NO_INDEX, // признак индексного параметра (список строк)
NULL, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
10 // значение по умолчанию
};
void OnChangeLevel()
{
CPU_INT32U level1, level2, level3;
CPU_INT32U level1, level2, level3, level4;
for(int post = 0; post < COUNT_POST + COUNT_VACUUM; post++)
{
if(post < COUNT_POST) GetData(&CashLevelDesc, &level1, post, DATA_FLAG_DIRECT_INDEX);
GetData(&CoinLevelDesc, &level2, post, DATA_FLAG_DIRECT_INDEX);
GetData(&SignalStopMoneyLevelDesc, &level3, post, DATA_FLAG_DIRECT_INDEX);
if(post < COUNT_POST)
{
GetData(&CashLevelDesc, &level1, post, DATA_FLAG_DIRECT_INDEX);
GetData(&BankLevelDesc, &level2, post, DATA_FLAG_DIRECT_INDEX);
GetData(&SignalStopMoneyLevelDesc, &level3, post, DATA_FLAG_DIRECT_INDEX);
}
GetData(&CoinLevelDesc, &level4, post, DATA_FLAG_DIRECT_INDEX);
SetLevelParam(level1, level2, level3, post);
SetLevelParam(level1, level2, level3, level4, post);
}
}
@ -705,6 +873,27 @@ TDataDescStruct const CashLevelDesc = {
1 // значение по умолчанию
};
/*************************************
Уровень сигнала банковскогог терминала
*************************************/
TDataDescStruct const BankLevelDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_IS_ARRAY, // признак массива
COUNT_POST, // размер массива
&BankIndexDesc, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, DeviceConfig.BankLevel), // указатель на переменную или адрес FRAM
(void*)&LevelRange, // указатель на границы параметра
OnChangeLevel, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
LevelName, // указатель на строку названия параметра
DATA_IS_INDEX, // признак индексного параметра (список строк)
LevelList, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
1 // значение по умолчанию
};
/*************************************
Уровень сигнала монетника
*************************************/
@ -736,7 +925,7 @@ TDataDescStruct const SignalStopMoneyLevelDesc = {
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_IS_ARRAY, // признак массива
COUNT_POST + COUNT_VACUUM, // ðàçìåð ìàññèâà
COUNT_POST, // размер массива
&SignalIndexDesc, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, DeviceConfig.SignalLevel), // указатель на переменную или адрес FRAM
(void*)&LevelRange, // указатель на границы параметра
@ -1957,6 +2146,47 @@ TDataDescStruct const AcceptedMoneyCRC16Desc = {
0
};
/*************************************
Дескриптор для энергонезависимого сохранения текущих денег
*************************************/
TDataDescStruct const AcceptedBankMoneyDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_IS_ARRAY, // признак массива
COUNT_POST,// размер массива
NULL, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, FRAM_AcceptedBankMoney), // указатель на переменную или адрес FRAM
NULL, // указатель на границы параметра
NULL, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
NULL, // указатель на строку названия параметра
DATA_NO_INDEX, // признак индексного параметра (список строк)
NULL, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
0
};
/*************************************
Дескриптор Crc16 энергонезависимого сохранения текущих денег
*************************************/
TDataDescStruct const AcceptedBankMoneyCRC16Desc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_IS_ARRAY, // признак массива
COUNT_POST, // размер массива
NULL, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, crc_AcceptedBankMoney), // указатель на переменную или адрес FRAM
NULL, // указатель на границы параметра
NULL, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
NULL, // указатель на строку названия параметра
DATA_NO_INDEX, // признак индексного параметра (список строк)
NULL, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
0
};
/*************************************
Дескриптор пароля
@ -2530,6 +2760,14 @@ const TDataDescArrayStruct AllDataArray[] =
{&CoinLevelDesc, "CoinLevelDesc"},
{&SignalStopMoneyLevelDesc, "SignalStopMoneyLevelDesc"},
{&EnableBankDesc, "EnableBankDesc"},
{&BankPerPulseDesc, "BankPerPulseDesc"},
{&BankPulseLenDesc, "BankPulseLenDesc"},
{&BankPauseLenDesc, "BankPauseLenDesc"},
{&BankLevelDesc, "BankLevelDesc"},
{&CoinTimeOutDesc, "CoinTimeOutDesc"},
{NULL, ""}
};

View File

@ -17,14 +17,19 @@
// ñòðóêòóðà êîíôèãóðàöèè àïïàðàòóðû
typedef struct{
CPU_INT32U EnableValidator[COUNT_POST + COUNT_VACUUM];
CPU_INT32U EnableCoinAcceptor[COUNT_POST + COUNT_VACUUM];
CPU_INT32U EnableValidator[COUNT_POST];
CPU_INT32U EnableBank[COUNT_POST];
CPU_INT32U EnableModem;
CPU_INT32U EnableFiscal;
CPU_INT32U EnableFiscalDayClear;
CPU_INT32U ServiceName;
CPU_INT32U CoinPerPulse[COUNT_POST + COUNT_VACUUM]; // öåíà èìïóëüñà ìîíåòîïðèåìíèêà
CPU_INT32U CoinTimeOut[COUNT_POST + COUNT_VACUUM]; // òàéìàóò ïå÷àòè ÷åêà ìîíåòîïðèåìíèêà
CPU_INT32U BillFormat;
CPU_INT32U DisableFiscalErrors; // îòêëþ÷åíèå ðåàêöèè íà îøèáêè ÔÐ
@ -35,14 +40,19 @@ typedef struct{
CPU_INT32U ClearJournalAfterSend;
CPU_INT32U StatSendHourMin;
CPU_INT32U CashMode[COUNT_POST + COUNT_VACUUM];
CPU_INT32U CashPerPulse[COUNT_POST + COUNT_VACUUM]; // öåíà èìïóëüñà êóïþðíèêà
CPU_INT32U CashMode[COUNT_POST];
CPU_INT32U CashPerPulse[COUNT_POST]; // öåíà èìïóëüñà êóïþðíèêà
CPU_INT32U BankPerPulse[COUNT_POST]; // öåíà èìïóëüñà áàíêîâñêîãî òåðìèíàëà
CPU_INT32U PrintTimeout;
CPU_INT32U PrintTimeoutAfter;
CPU_INT32U CashLevel[COUNT_POST + COUNT_VACUUM]; // óðîâåíü ñèãíàëà êóïþðíèêà
CPU_INT32U CoinLevel[COUNT_POST + COUNT_VACUUM]; // óðîâåíü ñèãíàëà ìîíåòíèêà
CPU_INT32U SignalLevel[COUNT_POST + COUNT_VACUUM]; // óðîâåíü ñèãíàëà ñèãíàëà ïå÷àòè
CPU_INT32U CashLevel[COUNT_POST]; // óðîâåíü ñèãíàëà êóïþðíèêà
CPU_INT32U SignalLevel[COUNT_POST]; // óðîâåíü ñèãíàëà ñèãíàëà ïå÷àòè
CPU_INT32U BankLevel[COUNT_POST]; // óðîâåíü ñèãíàëà êóïþðíèêà
CPU_INT32U PrintMode;
@ -69,6 +79,7 @@ extern TDataDescStruct const EnableFiscalDesc;
extern TDataDescStruct const EnableCoinDesc;
extern TDataDescStruct const EnableModemDesc;
extern TDataDescStruct const EnableValidatorDesc;
extern TDataDescStruct const EnableBankDesc;
extern TDataDescStruct const CoinPerPulseDesc;
extern TDataDescStruct const EnableFiscalDayClearDesc;
@ -104,6 +115,8 @@ extern TDataDescStruct const BillFormatDesc;
extern TDataDescStruct const AcceptedMoneyDesc;
extern TDataDescStruct const AcceptedMoneyCRC16Desc;
extern TDataDescStruct const AcceptedBankMoneyDesc;
extern TDataDescStruct const AcceptedBankMoneyCRC16Desc;
extern TDataDescStruct const DisableFiscalErrorsDesc;
@ -164,6 +177,8 @@ extern TDataDescStruct const TaxSystemDesc;
extern TDataDescStruct const CoinIndexDesc;
extern TDataDescStruct const CashIndexDesc;
extern TDataDescStruct const BankIndexDesc;
extern CPU_INT32U CoinIndex;
extern TDataDescStruct const SignalIndexDesc;
@ -174,4 +189,12 @@ extern TDataDescStruct const CashLevelDesc;
extern TDataDescStruct const CoinLevelDesc;
extern TDataDescStruct const SignalPrintLevelDesc;
extern TDataDescStruct const SignalStopMoneyLevelDesc;
extern TDataDescStruct const BankPerPulseDesc;
extern TDataDescStruct const BankPulseLenDesc;
extern TDataDescStruct const BankPauseLenDesc;
extern TDataDescStruct const BankLevelDesc;
extern TDataDescStruct const CoinTimeOutDesc;
#endif //#ifndef _DATADESC_H_

View File

@ -11,22 +11,42 @@ typedef struct
CPU_INT32U SerialNum;
TDeviceConfig DeviceConfig;
// ñ÷åò÷èêè
TCounters Counters;
// äëèííûå ñ÷åò÷èêè ñ CRC16
TCountersLong CountersLong;
CPU_INT32U FRAM_AcceptedMoney[COUNT_POST + COUNT_VACUUM];
CPU_INT32U crc_AcceptedMoney[COUNT_POST + COUNT_VACUUM];
CPU_INT32U FRAM_AcceptedBankMoney[COUNT_POST];
CPU_INT32U crc_AcceptedBankMoney[COUNT_POST];
CPU_INT32U enableSignalPrint[COUNT_POST];
CPU_INT32U signal_pulse_len[COUNT_POST];
CPU_INT32U cash_pulse_len[COUNT_POST];
CPU_INT32U cash_pause_len[COUNT_POST];
CPU_INT32U bank_pulse_len[COUNT_POST];
CPU_INT32U bank_pause_len[COUNT_POST];
CPU_INT08U manual_service_flag[4];
char manual_service_name[32];
CPU_INT32U TaxFormat;
CPU_INT32U SubjSell;
CPU_INT32U CommandV2;
CPU_INT32U TaxSystem;
CPU_INT32U Pass;
CPU_INT32U crc_Pass;
// æóðíàë ñîáûòèé+îøèáîê
TEventRecord EventRecords[EVENT_RECORDS_COUNT];
CPU_INT32U Price;
CPU_INT32U Pass;
CPU_INT32U crc_Pass;
// ñ÷åò÷èêè
TCounters Counters;
// äëèííûå ñ÷åò÷èêè ñ CRC16
TCountersLong CountersLong;
CPU_INT32U LastEmailTime;
@ -44,19 +64,5 @@ typedef struct
CPU_INT16U port;
CPU_INT08U manual_service_flag[4];
char manual_service_name[32];
CPU_INT32U cash_pulse_len[COUNT_POST + COUNT_VACUUM];
CPU_INT32U cash_pause_len[COUNT_POST + COUNT_VACUUM];
CPU_INT32U TaxFormat;
CPU_INT32U SubjSell;
CPU_INT32U CommandV2;
CPU_INT32U TaxSystem;
CPU_INT32U enableSignalPrint[COUNT_POST + COUNT_VACUUM];
CPU_INT32U signal_pulse_len[COUNT_POST + COUNT_VACUUM];
}TFramMap;

View File

@ -675,7 +675,7 @@ const TMenuPanel SetNewPassMenuPanel[] = {arr_SetNewPassMenuArray, NULL, 2, MENU
const CPU_INT08U str_DeviceMenu_0[] = " ÎÁÎÐÓÄÎÂÀÍÈÅ";
const CPU_INT08U str_DeviceMenu_1[] = "ÔÐ";
const CPU_INT08U str_DeviceMenu_2[] = "Ìîíåòîïðèåìíèêè";
//const CPU_INT08U str_DeviceMenu_3[] = "Ìîäåì";
const CPU_INT08U str_DeviceMenu_3[] = "Áàíê.òåðìèíàëû";
const CPU_INT08U str_DeviceMenu_4[] = "Êóïþðîïðèåìíèêè";
const CPU_INT08U str_DeviceMenu_5[] = "Ñèãíàë ïå÷àòè";
@ -707,12 +707,12 @@ const TMenuLine line_DeviceMenu_3 = {
(void*)&CoinSetupPanel // ïàíåëü äëÿ ïåðåõîäà
};
/*const TMenuLine line_DeviceMenu_4 = {
const TMenuLine line_DeviceMenu_4 = {
MENU_LINE_GOTO_MENU, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)str_DeviceMenu_3, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
(void*)&ModemSetupPanel // ïàíåëü äëÿ ïåðåõîäà
};*/
(void*)&BankSetupPanel // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_DeviceMenu_5 = {
MENU_LINE_GOTO_MENU, // òèï ïóíêòà ìåíþ
@ -721,8 +721,8 @@ const TMenuLine line_DeviceMenu_5 = {
(void*)&SignalSetupPanel // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLineArray arr_DeviceMenuArray[] = {&line_DeviceMenu_0, &line_DeviceMenu_1, &line_DeviceMenu_2, &line_DeviceMenu_3, &line_DeviceMenu_5,/*&line_DeviceMenu_4,*/ NULL};
const TMenuPanel DeviceMenuPanel[] = {arr_DeviceMenuArray, NULL, 5, MENU_PANEL_STANDARD};
const TMenuLineArray arr_DeviceMenuArray[] = {&line_DeviceMenu_0, &line_DeviceMenu_1, &line_DeviceMenu_2, &line_DeviceMenu_4, &line_DeviceMenu_3, &line_DeviceMenu_5, NULL};
const TMenuPanel DeviceMenuPanel[] = {arr_DeviceMenuArray, NULL, 6, MENU_PANEL_STANDARD};
/***********************************
ÌÅÍÞ ÍÀÑÒÐÎÉÊÀ ñèãíàëîâ ïå÷àòè ÷åêîâ
@ -895,6 +895,13 @@ const TMenuLine line_CoinMenu_2 = {
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_CoinMenu_4 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&CoinTimeOutDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_CoinMenu_3 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
@ -907,8 +914,8 @@ void OnEnterCoinMenu(void)
CoinIndex = 0;
}
const TMenuLineArray arr_CoinMenuArray[] = {&line_CoinMenu_0, &line_CoinMenu_1, &line_CoinMenu_2, &line_CoinMenu_3, NULL};
const TMenuPanel CoinSetupPanel[] = {arr_CoinMenuArray, OnEnterCoinMenu, 4, MENU_PANEL_STANDARD};
const TMenuLineArray arr_CoinMenuArray[] = {&line_CoinMenu_0, &line_CoinMenu_1, &line_CoinMenu_2, &line_CoinMenu_4, &line_CoinMenu_3, NULL};
const TMenuPanel CoinSetupPanel[] = {arr_CoinMenuArray, OnEnterCoinMenu, 5, MENU_PANEL_STANDARD};
/***********************************
ÌÅÍÞ ÍÀÑÒÐÎÉÊÀ ÊÓÏÞÐÎÏÐÈÅÌÍÈÊÎÂ
@ -966,6 +973,55 @@ const TMenuLine line_CashMenu_6 = {
const TMenuLineArray arr_ValidatorMenuArray[] = {&line_CashMenu_0, &line_CashMenu_1, /*&line_CashMenu_2,*/ &line_CashMenu_3, &line_CashMenu_4, &line_CashMenu_5, &line_CashMenu_6, NULL};
const TMenuPanel ValidatorSetupPanel[] = {arr_ValidatorMenuArray, OnEnterCoinMenu, 6, MENU_PANEL_STANDARD};
/***********************************
ÌÅÍÞ ÍÀÑÒÐÎÉÊÀ ÁÀÍÊÎÂÑÊÈÕ ÒÅÐÌÈÍÀËÎÂ
***********************************/
const TMenuLine line_BankMenu_0 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
MENU_FIXED_LINE|MENU_INDEX_LINE, // äîï. ôëàãè
(void*)&BankIndexDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_BankMenu_1 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&EnableBankDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_BankMenu_3 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&BankPerPulseDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_BankMenu_4 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&BankPulseLenDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_BankMenu_5 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&BankPauseLenDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_BankMenu_6 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&BankLevelDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLineArray arr_BankMenuArray[] = {&line_BankMenu_0, &line_BankMenu_1, &line_BankMenu_3, &line_BankMenu_4, &line_BankMenu_5, &line_BankMenu_6, NULL};
const TMenuPanel BankSetupPanel[] = {arr_BankMenuArray, OnEnterCoinMenu, 6, MENU_PANEL_STANDARD};
/***********************************
ÇÀÑÒÀÂÊÀ ÄËß ÊËÈÅÍÒÀ
***********************************/

View File

@ -54,6 +54,7 @@ extern const TMenuPanel ChannelCountersPanel[];
extern const TMenuPanel CommonCountersPanel[];
extern const TMenuPanel bufReportMenuPanel[];
extern const TMenuPanel ValidatorSetupPanel[];
extern const TMenuPanel BankSetupPanel[];
extern void PrintUserMenuStr(char* str, CPU_INT08U n);
extern void PrintEventJournalRecord(TEventRecord *record);

View File

@ -13,13 +13,18 @@ void InitImpInput(void);
CPU_INT32U CoinImpCounter[COUNT_POST + COUNT_VACUUM];
CPU_INT32U CashImpCounter[COUNT_POST + COUNT_VACUUM];
CPU_INT32U BankImpCounter[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U cash_pulse[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U cash_pause[COUNT_POST + COUNT_VACUUM];
static char pend_cash_counter[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U pend_cash_timestamp[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U bank_pulse[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U bank_pause[COUNT_POST + COUNT_VACUUM];
static char pend_bank_counter[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U pend_bank_timestamp[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U signal_pulse[COUNT_POST + COUNT_VACUUM];
static char pend_upsignal_counter[COUNT_POST + COUNT_VACUUM];
static char pend_downsignal_counter[COUNT_POST + COUNT_VACUUM];
@ -28,6 +33,7 @@ static CPU_INT32U pend_signal_timestamp[COUNT_POST + COUNT_VACUUM];
CPU_INT32U cashLevel[COUNT_POST + COUNT_VACUUM];
CPU_INT32U coinLevel[COUNT_POST + COUNT_VACUUM];
CPU_INT32U SignalLevel[COUNT_POST + COUNT_VACUUM];
CPU_INT32U bankLevel[COUNT_POST + COUNT_VACUUM];
void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause, CPU_INT32U post)
{
@ -40,6 +46,17 @@ void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause, CPU_INT32U post)
OS_EXIT_CRITICAL();
}
void SetBankPulseParam(CPU_INT32U pulse, CPU_INT32U pause, CPU_INT32U post)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
bank_pulse[post] = pulse * 1;
bank_pause[post] = pause;
OS_EXIT_CRITICAL();
}
void SetSignalPulseParam(CPU_INT32U pulse, CPU_INT32U post)
{
#if OS_CRITICAL_METHOD == 3
@ -50,26 +67,38 @@ void SetSignalPulseParam(CPU_INT32U pulse, CPU_INT32U post)
OS_EXIT_CRITICAL();
}
void SetLevelParam(CPU_INT32U level1, CPU_INT32U level2, CPU_INT32U level3, CPU_INT32U post)
void SetLevelParam(CPU_INT32U level1, CPU_INT32U level2, CPU_INT32U level3, CPU_INT32U level4, CPU_INT32U post)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
if(post < COUNT_POST) cashLevel[post] = level1;
coinLevel[post] = level2;
SignalLevel[post] = level3;
if(post < COUNT_POST)
{
cashLevel[post] = level1;
bankLevel[post] = level2;
SignalLevel[post] = level3;
}
coinLevel[post] = level4;
OS_EXIT_CRITICAL();
}
void CoinTask(void *p_arg)
{
CPU_INT32U enable_coin[COUNT_POST + COUNT_VACUUM];
CPU_INT32U cash_enable[COUNT_POST + COUNT_VACUUM];
CPU_INT32U enable_signal[COUNT_POST + COUNT_VACUUM];
CPU_INT32U cash_enable[COUNT_POST];
CPU_INT32U enable_signal[COUNT_POST];
CPU_INT32U bank_enable[COUNT_POST];
CPU_INT32U last_cash_count[COUNT_POST];
CPU_INT32U last_cash_time[COUNT_POST];
CPU_INT32U last_bank_count[COUNT_POST];
CPU_INT32U last_bank_time[COUNT_POST];
CPU_INT32U last_cash_count[COUNT_POST + COUNT_VACUUM];
CPU_INT32U last_cash_time[COUNT_POST + COUNT_VACUUM];
CPU_INT32U last_settings_time = 0;
while(1)
@ -79,8 +108,13 @@ void CoinTask(void *p_arg)
for(int i = 0; i < COUNT_POST + COUNT_VACUUM; i++)
{
GetData(&EnableCoinDesc, &enable_coin[i], i, DATA_FLAG_DIRECT_INDEX);
GetData(&EnableValidatorDesc, &cash_enable[i], i, DATA_FLAG_DIRECT_INDEX);
GetData(&EnableSignalDesc, &enable_signal[i], i, DATA_FLAG_DIRECT_INDEX);
if(i < COUNT_POST)
{
GetData(&EnableValidatorDesc, &cash_enable[i], i, DATA_FLAG_DIRECT_INDEX);
GetData(&EnableSignalDesc, &enable_signal[i], i, DATA_FLAG_DIRECT_INDEX);
GetData(&EnableBankDesc, &bank_enable[i], i, DATA_FLAG_DIRECT_INDEX);
}
}
last_settings_time = OSTimeGet();
@ -107,6 +141,9 @@ void CoinTask(void *p_arg)
GetResetCoinCount(i);
}
if(i >= COUNT_POST) continue;
// òîëüêî ìîíåòîïðèåìíèêîâ 8 - îñòàëüíûõ êàíàëîâ 6
OS_ENTER_CRITICAL();
if (enable_signal[i])
{
@ -131,8 +168,46 @@ void CoinTask(void *p_arg)
}
OS_EXIT_CRITICAL();
if (bank_enable[i])
{
OS_ENTER_CRITICAL();
if (pend_bank_counter[i])
{
// èìïóëüñû èíêðåìåíòèðóåì òîëüêî ïîñëå âûäåðæêè ïàóçû
if (OSTimeGet() - pend_bank_timestamp[i] > bank_pause[i])
{
pend_bank_counter[i] = 0;
BankImpCounter[i]++;
}
}
OS_EXIT_CRITICAL();
if (GetbankCount(i))
{
if (last_bank_count[i] == GetbankCount(i))
{
if (labs(OSTimeGet() - last_bank_time[i]) > 500)
{
PostUserEvent(EVENT_BANK_INSERTED_POST1 + i);
}
}
else
{
last_bank_count[i] = GetbankCount(i);
last_bank_time[i] = OSTimeGet();
}
}
else
{
last_bank_time[i] = OSTimeGet();
}
}
else
{
GetResetbankCount(i);
}
if (!cash_enable[i]) {GetResetCashCount(i); continue;}
if(i >= COUNT_POST) continue;
OS_ENTER_CRITICAL();
if (pend_cash_counter[i])
@ -229,9 +304,36 @@ CPU_INT32U GetResetCashCount(int index)
return ctr;
}
// ïîëó÷èòü ÷èñëî èìïóëüñîâ îò êóïþðíèêà
CPU_INT32U GetbankCount(int index)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
CPU_INT32U ctr = BankImpCounter[index];
OS_EXIT_CRITICAL();
return ctr;
}
// ïîëó÷èòü ÷èñëî èìïóëüñîâ îò êóïþðíèêà è ñáðîñèòü ñ÷åò÷èê
CPU_INT32U GetResetbankCount(int index)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
CPU_INT32U ctr = BankImpCounter[index];
BankImpCounter[index] = 0;
OS_EXIT_CRITICAL();
return ctr;
}
CPU_INT32U period[COUNT_POST + COUNT_VACUUM];
CPU_INT32U period_cash[COUNT_POST + COUNT_VACUUM];
CPU_INT32U period_bank[COUNT_POST + COUNT_VACUUM];
CPU_INT32U period_signal[COUNT_POST + COUNT_VACUUM];
CPU_INT32U T3CR = 0;
// èíèöèàëèçàöèÿ ìîíåòîïðèåìíèêà
@ -241,13 +343,18 @@ void InitCoin(void)
{
CoinImpCounter[i] = 0;
CashImpCounter[i] = 0;
BankImpCounter[i] = 0;
cash_pulse[i] = 50;
cash_pause[i] = 50;
pend_cash_counter[i] = 0;
pend_cash_timestamp[i] = 0;
bank_pulse[i] = 50;
bank_pause[i] = 50;
pend_bank_counter[i] = 0;
pend_bank_timestamp[i] = 0;
signal_pulse[i] = 1000;
pend_upsignal_counter[i] = 0;
pend_downsignal_counter[i] = 0;
@ -255,6 +362,7 @@ void InitCoin(void)
period[i] = 0;
period_cash[i] = 0;
period_bank[i] = 0;
period_signal[i] = 0;
}
@ -342,19 +450,35 @@ CPU_INT32U input_register()
{
SETBIT(input, 18);
}
if (FIO0PIN_bit.P0_6)
if (FIO1PIN_bit.P1_25)
{
SETBIT(input, 19);
}
if (FIO1PIN_bit.P1_25)
if (FIO0PIN_bit.P0_28)
{
SETBIT(input, 20);
}
if (FIO0PIN_bit.P0_10)
if (FIO0PIN_bit.P0_27)
{
SETBIT(input, 21);
}
if (FIO1PIN_bit.P1_24)
{
SETBIT(input, 22);
}
if (FIO1PIN_bit.P1_23)
{
SETBIT(input, 23);
}
if (FIO0PIN_bit.P0_6)
{
SETBIT(input, 24);
}
if (FIO0PIN_bit.P0_10)
{
SETBIT(input, 25);
}
return input;
}
@ -718,26 +842,9 @@ void InputCapture_ISR(void)
period[6] = T3CR;
}
}
// ñèãíàë ïå÷àòè ÷åêà ïûëåñîñ 1
if(TSTBIT(input_event, 19))
{
pend_signal_timestamp[6] = OSTimeGet();
if ((FIO0PIN_bit.P0_6 && SignalLevel[6]) || (!FIO0PIN_bit.P0_6 && !SignalLevel[6]))
{
pend_upsignal_counter[6] = 1;
pend_downsignal_counter[6] = 0;
}
else
{
pend_upsignal_counter[6] = 0;
pend_downsignal_counter[6] = 1;
}
}
// ìîíåòîïðèåìíèê ïûëåñîñ 2
if(TSTBIT(input_event, 20))
if(TSTBIT(input_event, 19))
{
if ((!FIO1PIN_bit.P1_25 && coinLevel[7]) || (FIO1PIN_bit.P1_25 && !coinLevel[7]))
{ // ïðèøåë çàäíèé ôðîíò
@ -752,20 +859,129 @@ void InputCapture_ISR(void)
}
}
// ñèãíàë ïå÷àòè ÷åêà ïûëåñîñ 2
if(TSTBIT(input_event, 21))
// áàíê 1
if(TSTBIT(input_event, 20))
{
pend_signal_timestamp[7] = OSTimeGet();
if ((FIO0PIN_bit.P0_10 && SignalLevel[7]) || (!FIO0PIN_bit.P0_10 && !SignalLevel[7]))
{
pend_upsignal_counter[7] = 1;
pend_downsignal_counter[7] = 0;
if ((!FIO0PIN_bit.P0_28 && bankLevel[0]) || (FIO0PIN_bit.P0_28 && !bankLevel[0]))
{ // ïðèøåë çàäíèé ôðîíò
CPU_INT32U cr=T3CR;
cr -= period_bank[0];
if (cr > (bank_pulse[0] - COIN_IMP_SPAN))
{
pend_bank_counter[0] = 1;
pend_bank_timestamp[0] = OSTimeGet();
}
}
else
{
pend_upsignal_counter[7] = 0;
pend_downsignal_counter[7] = 1;
{ // ïðèøåë ïåðåäíèé ôðîíò
period_bank[0] = T3CR;
pend_bank_counter[0] = 0;
}
}
// áàíê 2
if(TSTBIT(input_event, 21))
{
if ((!FIO0PIN_bit.P0_27 && bankLevel[1]) || (FIO0PIN_bit.P0_27 && !bankLevel[1]))
{ // ïðèøåë çàäíèé ôðîíò
CPU_INT32U cr=T3CR;
cr -= period_bank[1];
if (cr > (bank_pulse[1] - COIN_IMP_SPAN))
{
pend_bank_counter[1] = 1;
pend_bank_timestamp[1] = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period_bank[1] = T3CR;
pend_bank_counter[1] = 0;
}
}
// áàíê 3
if(TSTBIT(input_event, 22))
{
if ((!FIO1PIN_bit.P1_24 && bankLevel[2]) || (FIO1PIN_bit.P1_24 && !bankLevel[2]))
{ // ïðèøåë çàäíèé ôðîíò
CPU_INT32U cr=T3CR;
cr -= period_bank[2];
if (cr > (bank_pulse[2] - COIN_IMP_SPAN))
{
pend_bank_counter[2] = 1;
pend_bank_timestamp[2] = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period_bank[2] = T3CR;
pend_bank_counter[2] = 0;
}
}
// áàíê 4
if(TSTBIT(input_event, 23))
{
if ((!FIO1PIN_bit.P1_23 && bankLevel[3]) || (FIO1PIN_bit.P1_23 && !bankLevel[3]))
{ // ïðèøåë çàäíèé ôðîíò
CPU_INT32U cr=T3CR;
cr -= period_bank[3];
if (cr > (bank_pulse[3] - COIN_IMP_SPAN))
{
pend_bank_counter[3] = 1;
pend_bank_timestamp[3] = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period_bank[3] = T3CR;
pend_bank_counter[3] = 0;
}
}
// áàíê 5
if(TSTBIT(input_event, 24))
{
if ((!FIO0PIN_bit.P0_6 && bankLevel[4]) || (FIO0PIN_bit.P0_6 && !bankLevel[4]))
{ // ïðèøåë çàäíèé ôðîíò
CPU_INT32U cr=T3CR;
cr -= period_bank[4];
if (cr > (bank_pulse[4] - COIN_IMP_SPAN))
{
pend_bank_counter[4] = 1;
pend_bank_timestamp[4] = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period_bank[4] = T3CR;
pend_bank_counter[4] = 0;
}
}
// áàíê 6
if(TSTBIT(input_event, 25))
{
if ((!FIO0PIN_bit.P0_10 && bankLevel[5]) || (FIO0PIN_bit.P0_10 && !bankLevel[5]))
{ // ïðèøåë çàäíèé ôðîíò
CPU_INT32U cr=T3CR;
cr -= period_bank[5];
if (cr > (bank_pulse[5] - COIN_IMP_SPAN))
{
pend_bank_counter[5] = 1;
pend_bank_timestamp[5] = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period_bank[5] = T3CR;
pend_bank_counter[5] = 0;
}
}
}
@ -905,20 +1121,44 @@ void InitImpInput (void)
PINMODE0_bit.P0_5 = 0;
FIO0DIR_bit.P0_5 = 0;
FIO0MASK_bit.P0_5 = 0;
// ñèãíàë ïå÷àòè ÷åêà ïûëåñîñ 1
PINSEL0_bit.P0_6 = 0;
PINMODE0_bit.P0_6 = 0;
FIO0DIR_bit.P0_6 = 0;
FIO0MASK_bit.P0_6 = 0;
// ìîíåòîïðèåìíèê ïûëåñîñ 2
PINSEL3_bit.P1_25 = 0;
PINMODE3_bit.P1_25 = 0;
FIO1DIR_bit.P1_25 = 0;
FIO1MASK_bit.P1_25 = 0;
// ñèãíàë ïå÷àòè ÷åêà ïûëåñîñ 2
// áàíê 1
PINSEL1_bit.P0_28 = 0;
PINMODE1_bit.P0_28 = 0;
FIO0DIR_bit.P0_28 = 0;
FIO0MASK_bit.P0_28 = 0;
// áàíê 2
PINSEL1_bit.P0_27 = 0;
PINMODE1_bit.P0_27 = 0;
FIO0DIR_bit.P0_27 = 0;
FIO0MASK_bit.P0_27 = 0;
// áàíê 3
PINSEL3_bit.P1_24 = 0;
PINMODE3_bit.P1_24 = 0;
FIO1DIR_bit.P1_24 = 0;
FIO1MASK_bit.P1_24 = 0;
// áàíê 4
PINSEL3_bit.P1_23 = 0;
PINMODE3_bit.P1_23 = 0;
FIO1DIR_bit.P1_23 = 0;
FIO1MASK_bit.P1_23 = 0;
// áàíê 5
PINSEL0_bit.P0_6 = 0;
PINMODE0_bit.P0_6 = 0;
FIO0DIR_bit.P0_6 = 0;
FIO0MASK_bit.P0_6 = 0;
// áàíê 6
PINSEL0_bit.P0_10 = 0;
PINMODE0_bit.P0_10 = 0;
FIO0DIR_bit.P0_10 = 0;

View File

@ -12,11 +12,18 @@ extern CPU_INT32U GetCoinCount(int index);
extern CPU_INT32U GetResetCoinCount(int index);
extern void CoinDisable(void);
extern void CoinEnable(void);
extern CPU_INT32U GetCashCount(int index);
extern CPU_INT32U GetResetCashCount(int index);
extern CPU_INT32U GetbankCount(int index);
extern CPU_INT32U GetResetbankCount(int index);
extern void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause, CPU_INT32U post);
extern void SetBankPulseParam(CPU_INT32U pulse, CPU_INT32U pause, CPU_INT32U post);
extern void SetSignalPulseParam(CPU_INT32U pulse, CPU_INT32U post);
extern void SetLevelParam(CPU_INT32U level1, CPU_INT32U level2, CPU_INT32U level3, CPU_INT32U post);
extern void SetLevelParam(CPU_INT32U level1, CPU_INT32U level2, CPU_INT32U level3, CPU_INT32U level4, CPU_INT32U post);
#define BIT(bit) (1UL << (bit))
#define SETBIT(Val,bit) ((Val) |= BIT(bit))

View File

@ -14,7 +14,7 @@ Count=0
Enabled=0
ShowSource=1
[DebugChecksum]
Checksum=-59974582
Checksum=1092686877
[Exceptions]
StopOnUncaught=_ 0
StopOnThrow=_ 0
@ -155,7 +155,9 @@ Fmt0={W}0:curr_input 4 0
[Disassemble mode]
mode=0
[Breakpoints2]
Count=0
Bp0=_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\app\app_serv.c}.258.27" 0 0 1 "" 0 "" 0
Bp1=_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\app\app_serv.c}.493.19" 0 0 1 "" 0 "" 0
Count=2
[Log file]
LoggingEnabled=_ 0
LogFile=_ ""

File diff suppressed because one or more lines are too long