diff --git a/PROJECT/app/app_serv.c b/PROJECT/app/app_serv.c
index 1cffc4b..ac1d2ad 100644
--- a/PROJECT/app/app_serv.c
+++ b/PROJECT/app/app_serv.c
@@ -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)
{
diff --git a/PROJECT/app/app_serv.h b/PROJECT/app/app_serv.h
index 552c4c6..16fe869 100644
--- a/PROJECT/app/app_serv.h
+++ b/PROJECT/app/app_serv.h
@@ -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,
diff --git a/PROJECT/app/journal.h b/PROJECT/app/journal.h
index 86de1fa..c7a27b2 100644
--- a/PROJECT/app/journal.h
+++ b/PROJECT/app/journal.h
@@ -3,7 +3,7 @@
#include "fiscal.h"
-#define EVENT_RECORDS_COUNT 512 // число записей в журнале
+#define EVENT_RECORDS_COUNT 384 // число записей в журнале
#pragma pack(push, 1)
/// структура записи журнала рабочих событий
diff --git a/PROJECT/data/datadesc.c b/PROJECT/data/datadesc.c
index bb29bcb..26da3e4 100644
--- a/PROJECT/data/datadesc.c
+++ b/PROJECT/data/datadesc.c
@@ -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, ""}
};
diff --git a/PROJECT/data/datadesc.h b/PROJECT/data/datadesc.h
index 6546835..dc67cb6 100644
--- a/PROJECT/data/datadesc.h
+++ b/PROJECT/data/datadesc.h
@@ -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_
diff --git a/PROJECT/data/fram_map.h b/PROJECT/data/fram_map.h
index 0793264..d20bdb0 100644
--- a/PROJECT/data/fram_map.h
+++ b/PROJECT/data/fram_map.h
@@ -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;
diff --git a/PROJECT/menu/menudesc.c b/PROJECT/menu/menudesc.c
index 3331e1e..40266ea 100644
--- a/PROJECT/menu/menudesc.c
+++ b/PROJECT/menu/menudesc.c
@@ -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};
+
/***********************************
ЗАСТАВКА ДЛЯ КЛИЕНТА
***********************************/
diff --git a/PROJECT/menu/menudesc.h b/PROJECT/menu/menudesc.h
index 8d5e6c8..46068cc 100644
--- a/PROJECT/menu/menudesc.h
+++ b/PROJECT/menu/menudesc.h
@@ -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);
diff --git a/PROJECT/services/coin.c b/PROJECT/services/coin.c
index adc83e3..9399182 100644
--- a/PROJECT/services/coin.c
+++ b/PROJECT/services/coin.c
@@ -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;
diff --git a/PROJECT/services/coin.h b/PROJECT/services/coin.h
index e6c749b..6364829 100644
--- a/PROJECT/services/coin.h
+++ b/PROJECT/services/coin.h
@@ -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))
diff --git a/settings/sk-mlpc2368.dni b/settings/sk-mlpc2368.dni
index 692feb9..0673baf 100644
--- a/settings/sk-mlpc2368.dni
+++ b/settings/sk-mlpc2368.dni
@@ -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=_ ""
diff --git a/settings/sk-mlpc2368.wsdt b/settings/sk-mlpc2368.wsdt
index 65b5ccd..7d37961 100644
--- a/settings/sk-mlpc2368.wsdt
+++ b/settings/sk-mlpc2368.wsdt
@@ -34,7 +34,7 @@
TabID-28963-15244Find in FilesFind-in-FilesTabID-3677-8150Debug LogDebug-Log
- 0
+ 1
TabID-1122-24249
@@ -52,7 +52,7 @@
- TextEditor$WS_DIR$\OS\app\app_cfg.h005858TextEditor$WS_DIR$\..\..\8\positive_6_24\OS\app\app.c02614311431TextEditor$WS_DIR$\PROJECT\services\console.c010933323332TextEditor$WS_DIR$\OS\uc\lib\lib_def.h011159735981TextEditor$WS_DIR$\PROJECT\data\fram_map.h020665665TextEditor$WS_DIR$\PROJECT\app\journal.c03901170811708TextEditor$WS_DIR$\PROJECT\services\time.c081625625TextEditor$WS_DIR$\PROJECT\app\journal.h03930573070TextEditor$WS_DIR$\PROJECT\data\data.h027688702TextEditor$WS_DIR$\PROJECT\data\datadesc.c05882625226268TextEditor$WS_DIR$\PROJECT\data\data.c034494269426TextEditor$WS_DIR$\PROJECT\menu\menudesc.c08403419934199TextEditor$WS_DIR$\PROJECT\services\coin.h00697697TextEditor$WS_DIR$\PROJECT\services\coin.c04621202120TextEditor$WS_DIR$\PROJECT\app\app_serv.c0455159871598714TextEditor$WS_DIR$\PROJECT\data\datadesc.h01214641464TextEditor$WS_DIR$\OS\app\app.c02716591659TextEditor$WS_DIR$\PROJECT\drivers\fiscal\fiscal.h012575157517TextEditor$WS_DIR$\PROJECT\services\mode.c028763763TextEditor$WS_DIR$\PROJECT\drivers\keyboard\keyboard.h00470470TextEditor$WS_DIR$\OS\uc\os_ii\source\os_core.c013595689856898TextEditor$WS_DIR$\PROJECT\app\app_serv.h06122392239TextEditor$WS_DIR$\PROJECT\menu\menu.c016245484548TextEditor$WS_DIR$\PROJECT\drivers\lcd\lcd.c028669536953TextEditor$WS_DIR$\PROJECT\menu\menu.h062922920100000010000001
+ TextEditor$WS_DIR$\OS\app\app_cfg.h005858TextEditor$WS_DIR$\..\..\8\positive_6_24\OS\app\app.c02614311431TextEditor$WS_DIR$\PROJECT\services\console.c010933323332TextEditor$WS_DIR$\OS\uc\lib\lib_def.h011159735981TextEditor$WS_DIR$\PROJECT\app\journal.c03901170811708TextEditor$WS_DIR$\PROJECT\services\time.c081625625TextEditor$WS_DIR$\PROJECT\data\data.c034494269426TextEditor$WS_DIR$\PROJECT\services\coin.h00882882TextEditor$WS_DIR$\PROJECT\menu\menudesc.c08833568335683TextEditor$WS_DIR$\PROJECT\drivers\fiscal\fiscal.h02114471464TextEditor$WS_DIR$\PROJECT\services\mode.c028763763TextEditor$WS_DIR$\PROJECT\drivers\keyboard\keyboard.h00470470TextEditor$WS_DIR$\OS\uc\os_ii\source\os_core.c013595689856898TextEditor$WS_DIR$\PROJECT\app\app_serv.h05020882088TextEditor$WS_DIR$\PROJECT\menu\menu.c016245484548TextEditor$WS_DIR$\PROJECT\drivers\lcd\lcd.c028669536953TextEditor$WS_DIR$\PROJECT\menu\menu.h06292292TextEditor$WS_DIR$\PROJECT\data\fram_map.h00815815TextEditor$WS_DIR$\PROJECT\menu\menudesc.h03622922292TextEditor$WS_DIR$\PROJECT\app\journal.h06740654065TextEditor$WS_DIR$\PROJECT\services\fr.c06161629616311TextEditor$WS_DIR$\PROJECT\drivers\fiscal\fiscal.c07581951719517TextEditor$WS_DIR$\OS\app\app.c02711311131TextEditor$WS_DIR$\OS\uc\os_ii\source\os_q.c04342250222502TextEditor$WS_DIR$\PROJECT\services\coin.c05920442044TextEditor$WS_DIR$\PROJECT\data\data.h04011851185TextEditor$WS_DIR$\PROJECT\data\datadesc.c0831372023720226TextEditor$WS_DIR$\OS\uc\os_ii\source\os_time.c02171031110311TextEditor$WS_DIR$\PROJECT\app\app_serv.c02451685016850TextEditor$WS_DIR$\PROJECT\data\datadesc.h002362480100000010000001