mirror of
https://github.com/dimoniche/solarium.vlad.git
synced 2026-01-30 04:53:30 +03:00
Исправление ошибок
This commit is contained in:
parent
5618e12235
commit
b12e01fc3e
@ -74,6 +74,7 @@ typedef struct
|
||||
#define USER_MENU_FINISH_PAY_BONUS_CARD 42
|
||||
|
||||
#define USER_MENU_ABONENT_PROCESSING 43
|
||||
#define USER_MENU_ABONENT_WRONG 44
|
||||
|
||||
///
|
||||
#define USER_MENU_ERROR 255
|
||||
@ -127,6 +128,7 @@ typedef struct
|
||||
|
||||
CPU_INT32U last_card_manipulation_time;
|
||||
#define MENU_CARD_MANIPULATION_TIMEOUT_MS 10000
|
||||
#define MENU_CARD_WRONG_TIMEOUT_MS 3000
|
||||
|
||||
CPU_INT08U current_abonement;
|
||||
#define SILVER_ABONEMENT 0
|
||||
|
||||
@ -54,6 +54,7 @@ void PrintAnotherCardMenu(void);
|
||||
void PrintSelectMethodPayCardMenu(CPU_INT08U blink);
|
||||
void PrintWarning1Menu(void);
|
||||
void PrintWarning2Menu(void);
|
||||
void PrintWrongAbonementMenu(void);
|
||||
void PrintSelectChMenu(CPU_INT08U blink);
|
||||
void PrintSelectModeMenu(CPU_INT08U blink);
|
||||
void PrintAckModeMenu(void);
|
||||
@ -90,14 +91,44 @@ void app_1ms_callback(void)
|
||||
|
||||
SolarCounters counters;
|
||||
|
||||
void IncAbonentCounters(CPU_INT08U abonement, CPU_INT32U money, CPU_INT32U bonus)
|
||||
{
|
||||
ReadArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters);
|
||||
|
||||
counters.abonement[abonement].card_money += money;
|
||||
counters.abonement[abonement].card_bonus += bonus;
|
||||
counters.abonement[abonement].runs++;
|
||||
|
||||
counters.abonement[4].card_money += money;
|
||||
counters.abonement[4].card_bonus += bonus;
|
||||
counters.abonement[4].runs++;
|
||||
|
||||
counters.abonement_money += money;
|
||||
|
||||
counters.checksum = crc16((unsigned char*)&counters, offsetof(SolarCounters, checksum));
|
||||
WriteArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters);
|
||||
}
|
||||
|
||||
///
|
||||
void IncSolarCounters(CPU_INT08U ch, CPU_INT08U mode, CPU_INT32U worktime, CPU_INT32U money, CPU_INT08U card)
|
||||
void IncSolarCounters(CPU_INT08U ch, CPU_INT08U mode, CPU_INT32U worktime, CPU_INT32U money, CPU_INT08U card, CPU_INT32U bonus)
|
||||
{
|
||||
//SolarCounters counters;
|
||||
ReadArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters);
|
||||
|
||||
counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].money += money;
|
||||
counters.solar_m[mode].money += money;
|
||||
if (card == 2)
|
||||
{
|
||||
counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].card_money += money;
|
||||
counters.solar_m[mode].card_money += money;
|
||||
|
||||
counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].card_bonus += bonus;
|
||||
counters.solar_m[mode].card_bonus += bonus;
|
||||
}
|
||||
else
|
||||
{
|
||||
counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].money += money;
|
||||
counters.solar_m[mode].money += money;
|
||||
}
|
||||
|
||||
if (worktime > 0)
|
||||
{
|
||||
counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].runs += 1;
|
||||
@ -751,7 +782,7 @@ void AppVladEventProcess(CPU_INT32U event)
|
||||
if (GetMode() != MODE_WORK)
|
||||
{
|
||||
// Look for new cards
|
||||
if (picc_is_new_card_present() ) {
|
||||
/*if (picc_is_new_card_present() ) {
|
||||
// Select one of the cards
|
||||
if (picc_read_card_serial()) {
|
||||
if(read_mifare_card() != NULL) {
|
||||
@ -768,7 +799,7 @@ void AppVladEventProcess(CPU_INT32U event)
|
||||
stop_card_working();
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
break;
|
||||
}
|
||||
@ -803,7 +834,15 @@ void AppVladEventProcess(CPU_INT32U event)
|
||||
GetData(&PassDescAdmin, &password, 0, DATA_FLAG_SYSTEM_INDEX);
|
||||
if(get_abonement_data()->uid[0] != password)
|
||||
{
|
||||
app_state.last_card_manipulation_time = OSTimeGet();
|
||||
|
||||
app_state.user_menu = USER_MENU_ABONENT_WRONG;
|
||||
PrintWrongAbonementMenu();
|
||||
RefreshMenu();
|
||||
|
||||
stop_card_working();
|
||||
|
||||
SaveEventRecord(get_abonement_data()->number_abonement, JOURNAL_EVENT_ABONEMENT_WRONG, password);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -846,41 +885,12 @@ void AppVladEventProcess(CPU_INT32U event)
|
||||
if(data->uid[0] == password)
|
||||
{
|
||||
uint32_t pay = 0, bonus = 0, best_before = 0;
|
||||
uint32_t counter_money = 0, counter_bonus = 0, counter_runs = 0;
|
||||
uint32_t counter_money_sum = 0, counter_bonus_sum = 0, counter_runs_sum = 0;
|
||||
uint32_t all_counter_money = 0;
|
||||
|
||||
GetData(&AbonementMoneyDesc, &pay, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX);
|
||||
GetData(&AbonementBonusDesc, &bonus, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX);
|
||||
GetData(&AbonementBestBeforeDesc, &best_before, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX);
|
||||
|
||||
GetData(&CounterMoneyAbonementDesc, &counter_money, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX);
|
||||
GetData(&CounterBonusAbonementDesc, &counter_bonus, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX);
|
||||
GetData(&CounterRunsAbonementDesc, &counter_runs, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX);
|
||||
|
||||
GetData(&CounterMoneyAbonementDesc, &counter_money_sum, 4, DATA_FLAG_DIRECT_INDEX);
|
||||
GetData(&CounterBonusAbonementDesc, &counter_bonus_sum, 4, DATA_FLAG_DIRECT_INDEX);
|
||||
GetData(&CounterRunsAbonementDesc, &counter_runs_sum, 4, DATA_FLAG_DIRECT_INDEX);
|
||||
|
||||
GetData(&CounterAbonementMoneyDesc, &all_counter_money, 0, DATA_FLAG_DIRECT_INDEX);
|
||||
|
||||
counter_money += pay;
|
||||
counter_bonus += bonus;
|
||||
counter_runs++;
|
||||
counter_money_sum += pay;
|
||||
counter_bonus_sum += bonus;
|
||||
counter_runs_sum++;
|
||||
all_counter_money += pay;
|
||||
|
||||
SetData(&CounterMoneyAbonementDesc, &counter_money, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX);
|
||||
SetData(&CounterBonusAbonementDesc, &counter_bonus, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX);
|
||||
SetData(&CounterRunsAbonementDesc, &counter_runs, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX);
|
||||
|
||||
SetData(&CounterMoneyAbonementDesc, &counter_money_sum, 4, DATA_FLAG_DIRECT_INDEX);
|
||||
SetData(&CounterBonusAbonementDesc, &counter_bonus_sum, 4, DATA_FLAG_DIRECT_INDEX);
|
||||
SetData(&CounterRunsAbonementDesc, &counter_runs_sum, 4, DATA_FLAG_DIRECT_INDEX);
|
||||
|
||||
SetData(&CounterAbonementMoneyDesc, &all_counter_money, 0, DATA_FLAG_DIRECT_INDEX);
|
||||
IncAbonentCounters(app_state.current_abonement, pay, bonus);
|
||||
|
||||
uint32_t SystemTime = GetTimeSec() + best_before * 24L * 60L * 60L;
|
||||
|
||||
@ -903,6 +913,16 @@ void AppVladEventProcess(CPU_INT32U event)
|
||||
PlayMusicFile(52);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
app_state.last_card_manipulation_time = OSTimeGet();
|
||||
|
||||
app_state.user_menu = USER_MENU_ABONENT_WRONG;
|
||||
PrintWrongAbonementMenu();
|
||||
RefreshMenu();
|
||||
|
||||
SaveEventRecord(get_abonement_data()->number_abonement, JOURNAL_EVENT_ABONEMENT_WRONG, password);
|
||||
}
|
||||
}
|
||||
|
||||
stop_card_working();
|
||||
@ -918,7 +938,7 @@ void AppVladEventProcess(CPU_INT32U event)
|
||||
&& data->money + data->bonus > app_state.moneytopay
|
||||
&& data->uid[0] == password)
|
||||
{
|
||||
int delta = data->money - app_state.moneytopay;
|
||||
int32_t delta = data->money - app_state.moneytopay;
|
||||
data->bonus -= (delta < 0) ? delta : 0;
|
||||
data->money -= (delta < 0) ? data->money : app_state.moneytopay;
|
||||
|
||||
@ -938,6 +958,16 @@ void AppVladEventProcess(CPU_INT32U event)
|
||||
PostUserEvent(EVENT_FINISH_PAYMENT_ABONEMENT_SOLARIUM);
|
||||
}
|
||||
}
|
||||
else if(data->uid[0] != password)
|
||||
{
|
||||
app_state.last_card_manipulation_time = OSTimeGet();
|
||||
|
||||
app_state.user_menu = USER_MENU_ABONENT_WRONG;
|
||||
PrintWrongAbonementMenu();
|
||||
RefreshMenu();
|
||||
|
||||
SaveEventRecord(get_abonement_data()->number_abonement, JOURNAL_EVENT_ABONEMENT_WRONG, password);
|
||||
}
|
||||
else
|
||||
{
|
||||
SaveEventRecord(app_state.ch_index, JOURNAL_EVENT_ABONEMENT_REJECTED, 0);
|
||||
@ -992,6 +1022,15 @@ void AppVladEventProcess(CPU_INT32U event)
|
||||
PlayMusicFile(42);
|
||||
}
|
||||
}
|
||||
else if(app_state.user_menu == USER_MENU_ABONENT_WRONG)
|
||||
{
|
||||
if (OSTimeGet() - app_state.last_card_manipulation_time > MENU_CARD_WRONG_TIMEOUT_MS)
|
||||
{
|
||||
app_state.user_menu = USER_MENU_IDLE;
|
||||
PrintHelloMenu();
|
||||
RefreshMenu();
|
||||
}
|
||||
}
|
||||
else if(app_state.user_menu == USER_MENU_ALL_PRICE)
|
||||
{
|
||||
//PrintMenuAllPrice(app_state.blink_ctr >= 500);
|
||||
@ -1652,7 +1691,7 @@ void AppVladEventProcess(CPU_INT32U event)
|
||||
ChannelsPayedTime[app_state.ch_index] = (accmoney * 60) / price;
|
||||
|
||||
IncCounter(app_state.ch_index, ChannelsPayedTime[app_state.ch_index], accmoney, 2);
|
||||
IncSolarCounters(app_state.ch_index, app_state.mode_index, ChannelsPayedTime[app_state.ch_index], accmoney, 2);
|
||||
IncSolarCounters(app_state.ch_index, app_state.mode_index, ChannelsPayedTime[app_state.ch_index], accmoney, 2, 0);
|
||||
SetAcceptedMoney(0);
|
||||
|
||||
// ñîõðàíèì îïëà÷åííîå âðåìÿ è äåíüãè
|
||||
@ -1733,7 +1772,7 @@ void AppVladEventProcess(CPU_INT32U event)
|
||||
}*/
|
||||
|
||||
IncCounter(app_state.ch_index, ChannelsPayedTime[app_state.ch_index], accmoney, app_state.user_menu == USER_MENU_CARD_OK);
|
||||
IncSolarCounters(app_state.ch_index, app_state.mode_index, ChannelsPayedTime[app_state.ch_index], accmoney, app_state.user_menu == USER_MENU_CARD_OK);
|
||||
IncSolarCounters(app_state.ch_index, app_state.mode_index, ChannelsPayedTime[app_state.ch_index], accmoney, app_state.user_menu == USER_MENU_CARD_OK, 0);
|
||||
SetAcceptedMoney(0);
|
||||
|
||||
// ñîõðàíèì îïëà÷åííîå âðåìÿ è äåíüãè
|
||||
@ -2707,10 +2746,18 @@ void PrintWarning2Menu(void)
|
||||
{
|
||||
PrintUserMenuStrUnalign("Ïåðåä èñïîëüçîâàíèåì", 0);
|
||||
PrintUserMenuStrUnalign("ÀÂÒÎÌÀÒÀ íåîáõîäèìî", 1);
|
||||
PrintUserMenuStrUnalign(" îçíàêîìèòüñÿ", 2);
|
||||
PrintUserMenuStrUnalign(" èñïîëüçîâàíà ", 2);
|
||||
PrintUserMenuStrUnalign(" ñ åãî èíñòðóêöèåé", 3);
|
||||
}
|
||||
|
||||
void PrintWrongAbonementMenu(void)
|
||||
{
|
||||
PrintUserMenuStrUnalign(" Âàøà ÊÀÐÒÀ ÇÀÃÀÐÀ ", 0);
|
||||
PrintUserMenuStrUnalign(" íå ìîæåò áûòü ", 1);
|
||||
PrintUserMenuStrUnalign(" îçíàêîìèòüñÿ ", 2);
|
||||
PrintUserMenuStrUnalign(" íà ýòîì ÀÂÒÎÌÀÒÅ ", 3);
|
||||
}
|
||||
|
||||
void PrintSelectChMenu(CPU_INT08U blink)
|
||||
{
|
||||
CPU_INT08U i;
|
||||
|
||||
@ -209,6 +209,9 @@ void GetEventStr(char* str, char event)
|
||||
case JOURNAL_EVENT_ABONEMENT_BALANCE:
|
||||
sprintf(str, "ÁÊÇ.áàëàíñ ");
|
||||
break;
|
||||
case JOURNAL_EVENT_ABONEMENT_WRONG:
|
||||
sprintf(str, "ÁÊÇ.êàðòà ");
|
||||
break;
|
||||
case JOURNAL_EVENT_START_SESSION:
|
||||
#if defined(BOARD_CENTRAL_CARWASH)
|
||||
sprintf(str, "Íà÷.ðàáîòû ");
|
||||
|
||||
@ -109,8 +109,9 @@ typedef struct{
|
||||
#define JOURNAL_EVENT_ABONEMENT_PAY_REJECTED 57 // ïîêóïêà àáîíåìåíòà îòêëîíåíà
|
||||
|
||||
#define JOURNAL_EVENT_ABONEMENT_BALANCE 58 // ÷òåíèå áàëàíñà
|
||||
#define JOURNAL_EVENT_ABONEMENT_WRONG 59 // íå âåðíàÿ êàðòà
|
||||
|
||||
#define JOURNAL_EVENTS_COUNT (JOURNAL_EVENT_ABONEMENT_BALANCE+FR_ERROR_NUMBER) // ÷èñëî ñîáûòèé
|
||||
#define JOURNAL_EVENTS_COUNT (JOURNAL_EVENT_ABONEMENT_WRONG+FR_ERROR_NUMBER) // ÷èñëî ñîáûòèé
|
||||
|
||||
// êàíàë
|
||||
CPU_INT08U channel;
|
||||
|
||||
@ -2371,6 +2371,11 @@ void PrintEventJournalRecord(TEventRecord *record, char *str_event, char *str_da
|
||||
{
|
||||
sprintf(str_data, "%dðóá %dÁ", record->data, record->channel);
|
||||
}
|
||||
else if (record->event == JOURNAL_EVENT_ABONEMENT_WRONG)
|
||||
{
|
||||
sprintf(str_data, "id %d. Êîä îøèáêè %d", record->channel, record->data);
|
||||
}
|
||||
|
||||
else if (record->event == JOURNAL_EVENT_CARD_REJECTED)
|
||||
{
|
||||
sprintf(&str_event[strlen(str_event)], "Ïîñò %d", record->channel+1);
|
||||
|
||||
@ -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
|
||||
@ -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"
|
||||
}
|
||||
|
||||
@ -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
4230
sk-mlpc2368.dep
4230
sk-mlpc2368.dep
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user