Логику пополнения сделал - нужно отлаживать

This commit is contained in:
Dmitriy 2025-04-14 23:43:31 +03:00
parent df80c00425
commit 87c92d65e0
12 changed files with 2458 additions and 1998 deletions

View File

@ -58,6 +58,7 @@ typedef struct
///
#define USER_MENU_SELECT_SERVICE_TIME 21
// ìåíþ äëÿ êàðòî÷íîé ñèñòåìû
#define USER_MENU_WAIT_CARD 30
#define USER_MENU_BALANCE_CARD 31
#define USER_MENU_START_INSERT_CARD_MONEY 32
@ -68,8 +69,9 @@ typedef struct
#define USER_MENU_BRILLANCE_BONUS 37
#define USER_MENU_START_PAY_CARD 38
#define USER_MENU_INSERT_BANK_CARD 39
#define USER_MENU_INSERT_BONUS_CARD 40
#define USER_MENU_FINISH_PAY_BONUS_CARD 41
#define USER_MENU_ERROR_BANK_CARD 40
#define USER_MENU_INSERT_BONUS_CARD 41
#define USER_MENU_FINISH_PAY_BONUS_CARD 42
///
#define USER_MENU_ERROR 255
@ -120,6 +122,17 @@ typedef struct
#define SOLAR_IN_SERVICE 1
#define SOLAR_IN_TEST 2
CPU_INT32U last_card_manipulation_time;
#define MENU_CARD_MANIPULATION_TIMEOUT_MS 10000
CPU_INT08U current_abonement;
#define SILVER_ABONEMENT 0
#define GOLD_ABONEMENT 1
#define PLATINUM_ABONEMENT 2
#define DIAMOND_ABONEMENT 3
CPU_INT32U abonementtopay;
} ApplicationState;
extern ApplicationState app_state;
#endif
@ -279,6 +292,10 @@ enum{
#elif defined(BOARD_CENTRAL_CARWASH)
EVENT_REREAD_SIGNAL_LEVEL,
#endif
#if defined(BOARD_SOLARIUM_VLAD)
EVENT_FINISH_PAYMENT_ABONEMENT,
#endif
};
#define EVENT_KEY_LEFT EVENT_KEY_POST2

View File

@ -41,7 +41,7 @@ void PrintHelloMenu(void);
void PrintStartReadCardMenu(void);
void PrintBalanceMenu(void);
void PrintMenuStartPay(void);
void PrintMenuAllPrice(void);
void PrintMenuAllPrice(CPU_INT08U blink);
void PrintSilverMenu(void);
void PrintGoldMenu(void);
void PrintPlatMenu(void);
@ -749,7 +749,7 @@ void AppVladEventProcess(CPU_INT32U event)
if (picc_is_new_card_present() ) {
// Select one of the cards
if (picc_read_card_serial()) {
if(read_mifare_card() != NULL) {
if(is_empty_mifare_card()) {
init_mifare_card_data();
@ -758,9 +758,6 @@ void AppVladEventProcess(CPU_INT32U event)
break;
}
}
if(read_mifare_card() != NULL) {
}
}
}
@ -771,11 +768,14 @@ void AppVladEventProcess(CPU_INT32U event)
// Look for new cards
if (picc_is_new_card_present() ) {
// ìåíþ ñòàðòà ÷òåíèÿ êàðòû
PrintStartReadCardMenu();
RefreshMenu();
PlayMusicFile(40);
// Select one of the cards
if (picc_read_card_serial()) {
if(read_mifare_card() != NULL) {
if(is_empty_mifare_card()) {
init_mifare_card_data();
@ -785,10 +785,41 @@ void AppVladEventProcess(CPU_INT32U event)
break;
}
}
if(read_mifare_card() != NULL) {
if(app_state.user_menu == USER_MENU_IDLE)
{
// íóæíî ïîêàçàòü áàëàíñ
app_state.last_card_manipulation_time = OSTimeGet();
app_state.user_menu = USER_MENU_BALANCE_CARD;
PrintBalanceMenu();
RefreshMenu();
PlayMusicFile(41);
}
} else {
app_state.user_menu = USER_MENU_IDLE;
break;
}
if(app_state.user_menu == USER_MENU_INSERT_BONUS_CARD) {
// ïîïîëíÿåì êàðòó
mifaredata_t* data = get_mifare_data();
//data->money =
//data->bonus =
//data->best_before =
if(!write_mifare_card())
{
app_state.user_menu = USER_MENU_IDLE;
}
else
{
app_state.user_menu = USER_MENU_FINISH_PAY_BONUS_CARD;
PrintFinishPayMenu();
RefreshMenu();
PlayMusicFile(52);
}
}
} else {
app_state.user_menu = USER_MENU_IDLE;
@ -825,7 +856,24 @@ void AppVladEventProcess(CPU_INT32U event)
}
else if(app_state.user_menu == USER_MENU_BALANCE_CARD)
{
PrintBalanceMenu();
if (OSTimeGet() - app_state.last_card_manipulation_time > MENU_KEY_PRESS_TIMEOUT_MS)
{
app_state.user_menu = USER_MENU_IDLE;
app_state.ch_index = 0;
app_state.mode_index = 0;
app_state.pay_index = 0;
app_state.current_abonement = 0;
PrintHelloMenu();
RefreshMenu();
}
}
else if(app_state.user_menu == USER_MENU_START_INSERT_CARD_MONEY)
{
//PrintMenuStartPay();
}
else if(app_state.user_menu == USER_MENU_ALL_PRICE)
{
//PrintMenuAllPrice(app_state.blink_ctr >= 500);
}
else if (app_state.user_menu == USER_MENU_WARNING_1)
{
@ -853,6 +901,7 @@ void AppVladEventProcess(CPU_INT32U event)
app_state.ch_index = 0;
app_state.mode_index = 0;
app_state.pay_index = 0;
app_state.current_abonement = 0;
PrintHelloMenu();
RefreshMenu();
}
@ -910,6 +959,34 @@ void AppVladEventProcess(CPU_INT32U event)
RefreshMenu();
}
}
else if (app_state.user_menu == USER_MENU_INSERT_BANK_CARD) // åñëè â ìåíþ ïðèåìà áàíêîâñêîé êàðòû äëÿ àáîíåìåíòà
{
CheckFiscalStatus();
if (GetTermState() == TERM_STATE_DONE_PUR)
{
/// ïå÷àòü ÷åêà òåðìèíàëà
SetTermCommand(TERM_COMMAND_CLEAR_STATE, NULL);
SetAcceptedMoney(app_state.abonementtopay);
SaveEventRecord(app_state.current_abonement, JOURNAL_EVENT_CARD_ACCEPTED, app_state.abonementtopay);
if (term_protocol() == TERMINAL_PROTOCOL_TTK2) PrintCardBill();
app_state.user_menu = USER_MENU_INSERT_BONUS_CARD;
PostUserEvent(EVENT_FINISH_PAYMENT_ABONEMENT);
}
else if (GetTermState() == TERM_STATE_ERR_PUR)
{
SetTermCommand(TERM_COMMAND_CLEAR_STATE, NULL);
SaveEventRecord(app_state.current_abonement, JOURNAL_EVENT_CARD_REJECTED, 0);
PrintAnotherCardMenu();
RefreshMenu();
app_state.user_menu = USER_MENU_ERROR_BANK_CARD;
app_state.menu_timeout = MENU_CARD_FAIL_TIMEOUT;
}
else
{
PrintInsertBankCardMenu();
RefreshMenu();
}
}
else if (app_state.user_menu == USER_MENU_SHOW_THANKS)
{
if (!app_state.menu_timeout)
@ -983,6 +1060,18 @@ void AppVladEventProcess(CPU_INT32U event)
app_state.menu_timeout--;
}
}
else if (app_state.user_menu == USER_MENU_ERROR_BANK_CARD)
{
if (!app_state.menu_timeout)
{
PostUserEvent(EVENT_KEY_CANSEL);
}
else
{
PrintAnotherCardMenu();
app_state.menu_timeout--;
}
}
}
break;
case EVENT_KEY_START:
@ -1051,6 +1140,67 @@ void AppVladEventProcess(CPU_INT32U event)
RefreshMenu();
PlayMusicFile(2);
}
else if(app_state.user_menu == USER_MENU_BALANCE_CARD)
{
// ïðåäëîæèì ïîïîëíèòü êàðòó
app_state.user_menu = USER_MENU_START_INSERT_CARD_MONEY;
PrintMenuStartPay();
RefreshMenu();
PlayMusicFile(42);
}
else if(app_state.user_menu == USER_MENU_START_INSERT_CARD_MONEY)
{
// ïîêàæåì ïîëíûé ïðàéñ
app_state.user_menu = USER_MENU_ALL_PRICE;
PrintMenuAllPrice(app_state.blink_ctr >= 500);
RefreshMenu();
PlayMusicFile(43);
}
else if(app_state.user_menu == USER_MENU_START_INSERT_CARD_MONEY)
{
app_state.user_menu = USER_MENU_SILVER_BONUS + app_state.current_abonement;
// ïîëó÷èì ñóììó îïëàòû
// app_state.abonementtopay =
// âûáðàëè àáîíåìåíò
if(app_state.current_abonement == SILVER_ABONEMENT) {
PrintSilverMenu();
} else if(app_state.current_abonement == GOLD_ABONEMENT) {
PrintGoldMenu();
} else if(app_state.current_abonement == PLATINUM_ABONEMENT) {
PrintPlatMenu();
} else if(app_state.current_abonement == DIAMOND_ABONEMENT) {
PrintDiamondMenu();
}
RefreshMenu();
PlayMusicFile(44 + app_state.current_abonement);
}
else if(app_state.user_menu == USER_MENU_SILVER_BONUS
|| app_state.user_menu == USER_MENU_GOLD_BONUS
|| app_state.user_menu == USER_MENU_PLATINUM_BONUS
|| app_state.user_menu == USER_MENU_BRILLANCE_BONUS
)
{
app_state.user_menu = USER_MENU_START_PAY_CARD;
PrintStartPayCardMenu();
RefreshMenu();
PlayMusicFile(48);
}
else if(app_state.user_menu == USER_MENU_START_PAY_CARD)
{
uint32_t param[TERM_PARAM_COUNT];
param[0] = app_state.abonementtopay;
SetTermCommand(TERM_COMMAND_PEND_PUR, param);
app_state.user_menu = USER_MENU_INSERT_BANK_CARD;
PrintInsertBankCardMenu();
RefreshMenu();
//PlayMusicFile(49);
}
else if (app_state.user_menu == USER_MENU_WARNING_1)
{
app_state.user_menu = USER_MENU_WARNING_2;
@ -1306,6 +1456,21 @@ void AppVladEventProcess(CPU_INT32U event)
GoToPreviousMenu();
}
break;
case EVENT_FINISH_PAYMENT_ABONEMENT:
{
CPU_INT32U price, accmoney;
CPU_INT32U min_time;
if (app_state.user_menu != USER_MENU_INSERT_BONUS_CARD)
{
break;
}
// ïîïîëíåíèå êàðòû çàêîí÷èëè - ñîîáùèì îá ýòîì
PrintInsertBonusCardMenu();
RefreshMenu();
}
break;
case EVENT_FINISH_PAYMENT:
{
CPU_INT32U price, accmoney;
@ -1416,6 +1581,15 @@ void AppVladEventProcess(CPU_INT32U event)
RefreshMenu();
}
}
else if (app_state.user_menu == USER_MENU_ALL_PRICE)
{
if (AppCanStart())
{
app_state.current_abonement = (app_state.current_abonement + 1) & 0x02;
PrintMenuAllPrice(app_state.blink_ctr >= 500);
RefreshMenu();
}
}
else if (app_state.user_menu == USER_MENU_CARD_PAYING)
{
if (AppCanStart())
@ -1467,6 +1641,15 @@ void AppVladEventProcess(CPU_INT32U event)
RefreshMenu();
}
}
else if (app_state.user_menu == USER_MENU_ALL_PRICE)
{
if (AppCanStart())
{
app_state.current_abonement = (app_state.current_abonement + 1) & 0x02;
PrintMenuAllPrice(app_state.blink_ctr >= 500);
RefreshMenu();
}
}
else if (app_state.user_menu == USER_MENU_CARD_PAYING)
{
if (AppCanStart())
@ -1516,6 +1699,10 @@ void AppVladEventProcess(CPU_INT32U event)
{
PrintSelectModeMenu(app_state.blink_ctr >= 500);
}
else if (app_state.user_menu == USER_MENU_ALL_PRICE)
{
PrintMenuAllPrice(app_state.blink_ctr >= 500);
}
else if (app_state.user_menu == USER_MENU_SELECT_PAY_TYPE)
{
PrintSelectPayTypeMenu(app_state.blink_ctr >= 500);
@ -1746,6 +1933,18 @@ void AppVladEventProcess(CPU_INT32U event)
|| (app_state.user_menu == USER_MENU_SELECT_CH)
|| (app_state.user_menu == USER_MENU_SERVICE_PASS)
|| (app_state.user_menu == USER_MENU_SELECT_CH_CLEANING)
|| (app_state.user_menu == USER_MENU_BALANCE_CARD)
|| (app_state.user_menu == USER_MENU_START_INSERT_CARD_MONEY)
|| (app_state.user_menu == USER_MENU_ALL_PRICE)
|| (app_state.user_menu == USER_MENU_SILVER_BONUS)
|| (app_state.user_menu == USER_MENU_GOLD_BONUS)
|| (app_state.user_menu == USER_MENU_PLATINUM_BONUS)
|| (app_state.user_menu == USER_MENU_BRILLANCE_BONUS)
|| app_state.user_menu == USER_MENU_SILVER_BONUS
|| app_state.user_menu == USER_MENU_GOLD_BONUS
|| app_state.user_menu == USER_MENU_PLATINUM_BONUS
|| app_state.user_menu == USER_MENU_BRILLANCE_BONUS
|| app_state.user_menu == USER_MENU_ERROR_BANK_CARD
)
{
app_state.user_menu = USER_MENU_IDLE;
@ -2029,7 +2228,7 @@ void PrintMenuStartPay(void)
PrintUserMenuStr(" àáîíåìåíò?) ", 3);
}
void PrintMenuAllPrice(void)
void PrintMenuAllPrice(CPU_INT08U blink)
{
char str[32];
uint32_t pay_silver = 0, bonus_silver = 0;
@ -2037,6 +2236,17 @@ void PrintMenuAllPrice(void)
uint32_t pay_plat = 0, bonus_plat = 0;
uint32_t pay_diamond = 0, bonus_diamond = 0;
if(app_state.current_abonement == SILVER_ABONEMENT)
{
if(blink) {
PrintUserMenuStr(" ", 0);
sprintf(str, "ÇÎËÎÒ-%d ð %d áîí", pay_gold, bonus_gold);
PrintUserMenuStr(str, 1);
sprintf(str, "ÏËÀÒ.-%d ð %d áîí", pay_plat, bonus_plat);
PrintUserMenuStr(str, 2);
sprintf(str, "ÀËÌÀÇ-%d ð %d áîí", pay_diamond, bonus_diamond);
PrintUserMenuStr(str, 3);
} else {
sprintf(str, "ÑÅÐÅÁ-%d ð %d áîí", pay_silver, bonus_silver);
PrintUserMenuStr(str, 0);
sprintf(str, "ÇÎËÎÒ-%d ð %d áîí", pay_gold, bonus_gold);
@ -2045,6 +2255,74 @@ void PrintMenuAllPrice(void)
PrintUserMenuStr(str, 2);
sprintf(str, "ÀËÌÀÇ-%d ð %d áîí", pay_diamond, bonus_diamond);
PrintUserMenuStr(str, 3);
}
}
else if(app_state.current_abonement == GOLD_ABONEMENT)
{
if(blink) {
sprintf(str, "ÑÅÐÅÁ-%d ð %d áîí", pay_silver, bonus_silver);
PrintUserMenuStr(str, 0);
PrintUserMenuStr(" ", 1);
sprintf(str, "ÏËÀÒ.-%d ð %d áîí", pay_plat, bonus_plat);
PrintUserMenuStr(str, 2);
sprintf(str, "ÀËÌÀÇ-%d ð %d áîí", pay_diamond, bonus_diamond);
PrintUserMenuStr(str, 3);
} else {
sprintf(str, "ÑÅÐÅÁ-%d ð %d áîí", pay_silver, bonus_silver);
PrintUserMenuStr(str, 0);
sprintf(str, "ÇÎËÎÒ-%d ð %d áîí", pay_gold, bonus_gold);
PrintUserMenuStr(str, 1);
sprintf(str, "ÏËÀÒ.-%d ð %d áîí", pay_plat, bonus_plat);
PrintUserMenuStr(str, 2);
sprintf(str, "ÀËÌÀÇ-%d ð %d áîí", pay_diamond, bonus_diamond);
PrintUserMenuStr(str, 3);
}
}
else if(app_state.current_abonement == PLATINUM_ABONEMENT)
{
if(blink) {
sprintf(str, "ÑÅÐÅÁ-%d ð %d áîí", pay_silver, bonus_silver);
PrintUserMenuStr(str, 0);
sprintf(str, "ÇÎËÎÒ-%d ð %d áîí", pay_gold, bonus_gold);
PrintUserMenuStr(str, 1);
PrintUserMenuStr(" ", 2);
sprintf(str, "ÀËÌÀÇ-%d ð %d áîí", pay_diamond, bonus_diamond);
PrintUserMenuStr(str, 3);
} else {
sprintf(str, "ÑÅÐÅÁ-%d ð %d áîí", pay_silver, bonus_silver);
PrintUserMenuStr(str, 0);
sprintf(str, "ÇÎËÎÒ-%d ð %d áîí", pay_gold, bonus_gold);
PrintUserMenuStr(str, 1);
sprintf(str, "ÏËÀÒ.-%d ð %d áîí", pay_plat, bonus_plat);
PrintUserMenuStr(str, 2);
sprintf(str, "ÀËÌÀÇ-%d ð %d áîí", pay_diamond, bonus_diamond);
PrintUserMenuStr(str, 3);
}
}
else if(app_state.current_abonement == DIAMOND_ABONEMENT)
{
if(blink) {
sprintf(str, "ÑÅÐÅÁ-%d ð %d áîí", pay_silver, bonus_silver);
PrintUserMenuStr(str, 0);
sprintf(str, "ÇÎËÎÒ-%d ð %d áîí", pay_gold, bonus_gold);
PrintUserMenuStr(str, 1);
sprintf(str, "ÏËÀÒ.-%d ð %d áîí", pay_plat, bonus_plat);
PrintUserMenuStr(str, 2);
PrintUserMenuStr(" ", 3);
} else {
sprintf(str, "ÑÅÐÅÁ-%d ð %d áîí", pay_silver, bonus_silver);
PrintUserMenuStr(str, 0);
sprintf(str, "ÇÎËÎÒ-%d ð %d áîí", pay_gold, bonus_gold);
PrintUserMenuStr(str, 1);
sprintf(str, "ÏËÀÒ.-%d ð %d áîí", pay_plat, bonus_plat);
PrintUserMenuStr(str, 2);
sprintf(str, "ÀËÌÀÇ-%d ð %d áîí", pay_diamond, bonus_diamond);
PrintUserMenuStr(str, 3);
}
}
}
void PrintSilverMenu(void)

View File

@ -4970,6 +4970,110 @@ TDataDescStruct const SolarCleaningTimeoutMinutesDesc = {
};
char const SolarCleaningTimeoutMinutesDescId[] = "SolarCleaningTimeoutMinutesDesc";
/*************************************
Èíäåêñ àáîíåìåíòà
*************************************/
CPU_INT08U const AbonementIndexName[] = "";
TRangeValueULONG const AbonementIndexHourRange = {0, 3};
CPU_INT08U const AbonementIndexHour_str0[] = "ÑÅÐÅÁÐßÍÍÛÉ";
CPU_INT08U const AbonementIndexHour_str1[] = "ÇÎËÎÒÎÉ";
CPU_INT08U const AbonementIndexHour_str2[] = "ÏËÀÒÈÍÎÂÛÉ";
CPU_INT08U const AbonementIndexHour_str3[] = "ÀËÌÀÇÍÛÉ";
CPU_INT08U const *AbonementIndexHourList[] = {AbonementIndexHour_str0, AbonementIndexHour_str1, AbonementIndexHour_str2, AbonementIndexHour_str3};
CPU_INT32U abonement_index;
TDataDescStruct const AbonementIndexDesc = {
DATA_DESC_EDIT, // òèï äåñêðèïòîðà
DATA_TYPE_ULONG, // òèï ïàðàìåòðà
DATA_LOC_RAM, // ðàñïîëîæåíèå ïàðàìåòðà
DATA_NO_ARRAY, // ïðèçíàê ìàññèâà
0, // ðàçìåð ìàññèâà
0, // óêàçàòåëü íà äåñêðèïòîð èíäåêñà ìàññèâà
&abonement_index, // óêàçàòåëü íà ïåðåìåííóþ èëè àäðåñ FRAM
(void*)&AbonementIndexHourRange, // óêàçàòåëü íà ãðàíèöû ïàðàìåòðà
NULL, // ôóíêöèÿ ïî èçìåíåíèþ
0, // ñìåùåíèå ìåæäó ýëåìåíòàìè â ìàññèâå
AbonementIndexName, // óêàçàòåëü íà ñòðîêó íàçâàíèÿ ïàðàìåòðà
DATA_IS_INDEX, // ïðèçíàê èíäåêñíîãî ïàðàìåòðà (ñïèñîê ñòðîê)
AbonementIndexHourList, // óêàçàòåëü íà ñïèñîê ñòðîê äëÿ èíäåêñíîãî ïàðàìåòðà
DATA_INIT_ENABLE,
0
};
char const AbonementIndexDescId[] = "AbonementIndexDesc";
/*************************************
Äåíüãè
*************************************/
TRangeValueULONG const AbonementMoneyRange = {0, 99999};
CPU_INT08U const AbonementMoneyName[] = "Äåíüãè";
TDataDescStruct const AbonementMoneyDesc = {
DATA_DESC_EDIT, // òèï äåñêðèïòîðà
DATA_TYPE_ULONG, // òèï ïàðàìåòðà
DATA_LOC_FRAM, // ðàñïîëîæåíèå ïàðàìåòðà
DATA_IS_ARRAY, // ïðèçíàê ìàññèâà
4, // ðàçìåð ìàññèâà
&AbonementIndexDesc, // óêàçàòåëü íà äåñêðèïòîð èíäåêñà ìàññèâà
(void*)offsetof(TFramMap, AbonementMoney), // óêàçàòåëü íà ïåðåìåííóþ èëè àäðåñ FRAM
(void*)&AbonementMoneyRange, // óêàçàòåëü íà ãðàíèöû ïàðàìåòðà
NULL, // ôóíêöèÿ ïî èçìåíåíèþ
sizeof(CPU_INT32U), // ñìåùåíèå ìåæäó ýëåìåíòàìè â ìàññèâå
AbonementMoneyName, // óêàçàòåëü íà ñòðîêó íàçâàíèÿ ïàðàìåòðà
DATA_NO_INDEX, // ïðèçíàê èíäåêñíîãî ïàðàìåòðà (ñïèñîê ñòðîê)
NULL, // óêàçàòåëü íà ñïèñîê ñòðîê äëÿ èíäåêñíîãî ïàðàìåòðà
DATA_INIT_DISABLE,
3000
};
/*************************************
Áîíóñû
*************************************/
TRangeValueULONG const AbonementBonusRange = {0, 99999};
CPU_INT08U const AbonementBonusName[] = "Áîíóñû";
TDataDescStruct const AbonementBonusDesc = {
DATA_DESC_EDIT, // òèï äåñêðèïòîðà
DATA_TYPE_ULONG, // òèï ïàðàìåòðà
DATA_LOC_FRAM, // ðàñïîëîæåíèå ïàðàìåòðà
DATA_IS_ARRAY, // ïðèçíàê ìàññèâà
4, // ðàçìåð ìàññèâà
&AbonementIndexDesc, // óêàçàòåëü íà äåñêðèïòîð èíäåêñà ìàññèâà
(void*)offsetof(TFramMap, AbonementBonus), // óêàçàòåëü íà ïåðåìåííóþ èëè àäðåñ FRAM
(void*)&AbonementBonusRange, // óêàçàòåëü íà ãðàíèöû ïàðàìåòðà
NULL, // ôóíêöèÿ ïî èçìåíåíèþ
sizeof(CPU_INT32U), // ñìåùåíèå ìåæäó ýëåìåíòàìè â ìàññèâå
AbonementBonusName, // óêàçàòåëü íà ñòðîêó íàçâàíèÿ ïàðàìåòðà
DATA_NO_INDEX, // ïðèçíàê èíäåêñíîãî ïàðàìåòðà (ñïèñîê ñòðîê)
NULL, // óêàçàòåëü íà ñïèñîê ñòðîê äëÿ èíäåêñíîãî ïàðàìåòðà
DATA_INIT_DISABLE,
600
};
/*************************************
Ñðîê äåéñòâèÿ
*************************************/
TRangeValueULONG const AbonementBestBeforeRange = {0, 1000};
CPU_INT08U const AbonementBestBeforeName[] = "Ñðîê äåéñòâèÿ,äí.";
TDataDescStruct const AbonementBestBeforeDesc = {
DATA_DESC_EDIT, // òèï äåñêðèïòîðà
DATA_TYPE_ULONG, // òèï ïàðàìåòðà
DATA_LOC_FRAM, // ðàñïîëîæåíèå ïàðàìåòðà
DATA_IS_ARRAY, // ïðèçíàê ìàññèâà
4, // ðàçìåð ìàññèâà
&AbonementIndexDesc, // óêàçàòåëü íà äåñêðèïòîð èíäåêñà ìàññèâà
(void*)offsetof(TFramMap, AbonementBestBefore), // óêàçàòåëü íà ïåðåìåííóþ èëè àäðåñ FRAM
(void*)&AbonementBestBeforeRange, // óêàçàòåëü íà ãðàíèöû ïàðàìåòðà
NULL, // ôóíêöèÿ ïî èçìåíåíèþ
sizeof(CPU_INT32U), // ñìåùåíèå ìåæäó ýëåìåíòàìè â ìàññèâå
AbonementBestBeforeName, // óêàçàòåëü íà ñòðîêó íàçâàíèÿ ïàðàìåòðà
DATA_NO_INDEX, // ïðèçíàê èíäåêñíîãî ïàðàìåòðà (ñïèñîê ñòðîê)
NULL, // óêàçàòåëü íà ñïèñîê ñòðîê äëÿ èíäåêñíîãî ïàðàìåòðà
DATA_INIT_DISABLE,
180
};
/*************************************
Èíäåêñ ñêèäêè ïî ÷àñàì

View File

@ -23,35 +23,35 @@
#define MONEY_KEY_COUNT 8
// структура конфигурации каналов
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct{
// включение канала
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPU_INT32U Enable[CHANNELS_NUM];
// тайм-аут перед включением, сек.
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>.
CPU_INT32U TimeOutBefore[CHANNELS_NUM];
// тайм-аут после выключения, мин.
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>.
CPU_INT32U TimeOutAfter[CHANNELS_NUM];
// максимальное время работы, мин.
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>.
CPU_INT32U MaxWorkTime[CHANNELS_NUM];
// минимальное время работы, мин.
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>.
CPU_INT32U MinWorkTime[CHANNELS_NUM];
// настройка уикенда, индекс
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPU_INT32U WeekEnd[CHANNELS_NUM];
#define WEEKEND_NO 0
#define WEEKEND_FRIDAY_SUNDAY 1
#define WEEKEND_SATURDAY_SUNDAY 2
#define WEEKEND_FRIDAY_SATURDAY 3
#define WEEKEND_FRIDAY_MONDAY 4
// название канала
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPU_INT32U Name[CHANNELS_NUM];
// периоды
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PRICE_PERIODS_NUM 4
CPU_INT32U T_Start_Weekdays[CHANNELS_NUM][PRICE_PERIODS_NUM];
CPU_INT32U T_End_Weekdays[CHANNELS_NUM][PRICE_PERIODS_NUM];
CPU_INT32U T_Start_Weekend[CHANNELS_NUM][PRICE_PERIODS_NUM];
CPU_INT32U T_End_Weekend[CHANNELS_NUM][PRICE_PERIODS_NUM];
// цены
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPU_INT32U Price_Weekdays[CHANNELS_NUM][PRICE_PERIODS_NUM];
CPU_INT32U Price_Weekend[CHANNELS_NUM][PRICE_PERIODS_NUM];
CPU_INT32U PriceTime_Weekdays[CHANNELS_NUM][PRICE_PERIODS_NUM];
@ -72,7 +72,7 @@ typedef struct{
// структура конфигурации аппаратуры
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct{
CPU_INT32U EnableValidator;
CPU_INT32U EnableCoinAcceptor;
@ -81,10 +81,10 @@ typedef struct{
CPU_INT32U EnableFiscalDayClear;
CPU_INT32U ServiceName;
CPU_INT32U CoinPerPulse; // цена импульса монетоприемника
CPU_INT32U CoinPerPulse; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPU_INT32U BillFormat;
CPU_INT32U DisableFiscalErrors; // отключение реакции на ошибки ФР
CPU_INT32U DisableFiscalErrors; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
CPU_INT32U EnableEmailErrorSend;
CPU_INT32U EnableEmailStatSend;
@ -358,11 +358,16 @@ extern TDataDescStruct const CounterAllTestTimeDesc;
extern TDataDescStruct const CounterAllTestCountDesc;
extern TDataDescStruct const CounterTestMeanTimeDesc;
extern TDataDescStruct const SolarCleaningTimeoutMinutesDesc;
extern TDataDescStruct const AbonementIndexDesc;
extern TDataDescStruct const AbonementMoneyDesc;
extern TDataDescStruct const AbonementBonusDesc;
extern TDataDescStruct const AbonementBestBeforeDesc;
extern void CheckVladPasswords(void);
extern CPU_INT32U solar_modes_index;
extern CPU_INT32U discount_index;
extern CPU_INT32U abonement_index;
extern CPU_INT32U current_discount;
extern CPU_INT32U score_cmd;
extern CPU_INT32U relay_cmd;

View File

@ -112,6 +112,10 @@ typedef struct
CPU_INT32U SkinUFMaxTime[4];
CPU_INT32U SkinMaximalMaxTime[4];
CPU_INT32U AbonementMoney[4];
CPU_INT32U AbonementBonus[4];
CPU_INT32U AbonementBestBefore[4];
#endif
#if defined(CONFIG_RELAY_ENABLE)

View File

@ -612,6 +612,7 @@ const CPU_INT08U str_SettingsMenu_7[] = "
#if defined(BOARD_SOLARIUM_VLAD)
const CPU_INT08U str_SettingsMenu_1[] = "Ñîëÿðèè";
const CPU_INT08U str_SettingsMenu_7[] = "Ñêèäêè";
const CPU_INT08U str_SettingsMenu_10[] = "Àáîíåìåíòû";
const CPU_INT08U str_SettingsMenu_8[] = "Òèïû êîæè";
#else
const CPU_INT08U str_SettingsMenu_1[] = "Ïîñòû";
@ -676,6 +677,13 @@ const TMenuLine line_SettingsMenu_10 = {
(void*)str_SettingsMenu_8, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
(void*)&SkinTypeSettingsMenuPanel // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_SettingsMenu_12 = {
MENU_LINE_GOTO_MENU, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)str_SettingsMenu_10, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
(void*)&AbonementMenuPanel // ïàíåëü äëÿ ïåðåõîäà
};
#endif
const TMenuLine line_SettingsMenu_8 = {
@ -2857,6 +2865,45 @@ const TMenuLine line_DiscountMainMenu_5 = {
const TMenuLineArray arr_DiscountMainArray[] = {&line_DiscountMainMenu_0, &line_DiscountMainMenu_1, &line_DiscountMainMenu_2, &line_DiscountMainMenu_3, &line_DiscountMainMenu_4, &line_DiscountMainMenu_5, NULL};
const TMenuPanel DiscountMainMenuPanel[] = {arr_DiscountMainArray, NULL, 6, MENU_PANEL_STANDARD};
/***********************************
ÌÅÍÞ ÀÁÎÍÅÌÅÍÒÛ
***********************************/
const TMenuLine line_AbonementMenu_0 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
MENU_FIXED_LINE|MENU_INDEX_LINE, // äîï. ôëàãè
(void*)&AbonementIndexDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_AbonementMenu_1 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&AbonementMoneyDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_AbonementMenu_2 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&AbonementBonusDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_AbonementMenu_3 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&AbonementBestBeforeDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
void OnEnterAbonementMenu(void)
{
abonement_index = 0;
}
const TMenuLineArray arr_AbonementArray[] = {&line_AbonementMenu_0, &line_AbonementMenu_1, &line_AbonementMenu_2, &line_AbonementMenu_3, NULL};
const TMenuPanel AbonementMenuPanel[] = {arr_AbonementArray, OnEnterAbonementMenu, 3, MENU_PANEL_STANDARD};
/***********************************
ÌÅÍÞ ÑÊÈÄÊÈ ÏÎ ×ÀÑÀÌ
***********************************/

View File

@ -78,6 +78,7 @@ extern const TMenuPanel FtpUploadInProgressMenu[];
extern const TMenuPanel FtpOKMenu[];
extern const TMenuPanel FtpFAILMenu[];
extern const TMenuPanel CanselCheckMenuPanel[];
extern const TMenuPanel AbonementMenuPanel[];
extern int PrintUserMenuStr(char* str, CPU_INT08U n);
extern int PrintUserMenuStrUnalign(char* str, CPU_INT08U n);

View File

@ -25,7 +25,7 @@ if not "%~1" == "" goto debugFile
@echo on
"C:\Program Files\IAR Systems\Embedded Workbench 9.0\common\bin\cspybat" -f "C:\work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.general.xcl" --backend -f "C:\work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.driver.xcl"
"C:\Program Files\IAR Systems\Embedded Workbench 9.0\common\bin\cspybat" -f "C:\git_work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.general.xcl" --backend -f "C:\git_work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.driver.xcl"
@echo off
goto end
@ -34,7 +34,7 @@ goto end
@echo on
"C:\Program Files\IAR Systems\Embedded Workbench 9.0\common\bin\cspybat" -f "C:\work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.general.xcl" "--debug_file=%~1" --backend -f "C:\work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.driver.xcl"
"C:\Program Files\IAR Systems\Embedded Workbench 9.0\common\bin\cspybat" -f "C:\git_work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.general.xcl" "--debug_file=%~1" --backend -f "C:\git_work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.driver.xcl"
@echo off
:end

View File

@ -23,9 +23,9 @@
if ($debugfile -eq "")
{
& "C:\Program Files\IAR Systems\Embedded Workbench 9.0\common\bin\cspybat" -f "C:\work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.general.xcl" --backend -f "C:\work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.driver.xcl"
& "C:\Program Files\IAR Systems\Embedded Workbench 9.0\common\bin\cspybat" -f "C:\git_work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.general.xcl" --backend -f "C:\git_work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.driver.xcl"
}
else
{
& "C:\Program Files\IAR Systems\Embedded Workbench 9.0\common\bin\cspybat" -f "C:\work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.general.xcl" --debug_file=$debugfile --backend -f "C:\work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.driver.xcl"
& "C:\Program Files\IAR Systems\Embedded Workbench 9.0\common\bin\cspybat" -f "C:\git_work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.general.xcl" --debug_file=$debugfile --backend -f "C:\git_work\solarium.vlad\settings\sk-mlpc2368.Solarium_Vlad.driver.xcl"
}

View File

@ -2,7 +2,7 @@
"C:\Program Files\IAR Systems\Embedded Workbench 9.0\arm\bin\armJLINK.dll"
"C:\work\solarium.vlad\Solarium Vlad\Exe\sk_mlpc2368.out"
"C:\git_work\solarium.vlad\Solarium Vlad\Exe\sk_mlpc2368.out"
--plugin="C:\Program Files\IAR Systems\Embedded Workbench 9.0\arm\bin\armbat.dll"

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff