Исправление ошибок

This commit is contained in:
Dmitriy 2025-05-22 23:29:20 +03:00
parent 5618e12235
commit b12e01fc3e
10 changed files with 2240 additions and 2178 deletions

View File

@ -74,6 +74,7 @@ typedef struct
#define USER_MENU_FINISH_PAY_BONUS_CARD 42 #define USER_MENU_FINISH_PAY_BONUS_CARD 42
#define USER_MENU_ABONENT_PROCESSING 43 #define USER_MENU_ABONENT_PROCESSING 43
#define USER_MENU_ABONENT_WRONG 44
/// ///
#define USER_MENU_ERROR 255 #define USER_MENU_ERROR 255
@ -127,6 +128,7 @@ typedef struct
CPU_INT32U last_card_manipulation_time; CPU_INT32U last_card_manipulation_time;
#define MENU_CARD_MANIPULATION_TIMEOUT_MS 10000 #define MENU_CARD_MANIPULATION_TIMEOUT_MS 10000
#define MENU_CARD_WRONG_TIMEOUT_MS 3000
CPU_INT08U current_abonement; CPU_INT08U current_abonement;
#define SILVER_ABONEMENT 0 #define SILVER_ABONEMENT 0

View File

@ -54,6 +54,7 @@ void PrintAnotherCardMenu(void);
void PrintSelectMethodPayCardMenu(CPU_INT08U blink); void PrintSelectMethodPayCardMenu(CPU_INT08U blink);
void PrintWarning1Menu(void); void PrintWarning1Menu(void);
void PrintWarning2Menu(void); void PrintWarning2Menu(void);
void PrintWrongAbonementMenu(void);
void PrintSelectChMenu(CPU_INT08U blink); void PrintSelectChMenu(CPU_INT08U blink);
void PrintSelectModeMenu(CPU_INT08U blink); void PrintSelectModeMenu(CPU_INT08U blink);
void PrintAckModeMenu(void); void PrintAckModeMenu(void);
@ -90,14 +91,44 @@ void app_1ms_callback(void)
SolarCounters counters; 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; //SolarCounters counters;
ReadArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters); ReadArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters);
counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].money += money; if (card == 2)
counters.solar_m[mode].money += money; {
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) if (worktime > 0)
{ {
counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].runs += 1; counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].runs += 1;
@ -751,7 +782,7 @@ void AppVladEventProcess(CPU_INT32U event)
if (GetMode() != MODE_WORK) if (GetMode() != MODE_WORK)
{ {
// Look for new cards // Look for new cards
if (picc_is_new_card_present() ) { /*if (picc_is_new_card_present() ) {
// Select one of the cards // Select one of the cards
if (picc_read_card_serial()) { if (picc_read_card_serial()) {
if(read_mifare_card() != NULL) { if(read_mifare_card() != NULL) {
@ -768,7 +799,7 @@ void AppVladEventProcess(CPU_INT32U event)
stop_card_working(); stop_card_working();
} }
} }
} }*/
break; break;
} }
@ -803,7 +834,15 @@ void AppVladEventProcess(CPU_INT32U event)
GetData(&PassDescAdmin, &password, 0, DATA_FLAG_SYSTEM_INDEX); GetData(&PassDescAdmin, &password, 0, DATA_FLAG_SYSTEM_INDEX);
if(get_abonement_data()->uid[0] != password) 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(); stop_card_working();
SaveEventRecord(get_abonement_data()->number_abonement, JOURNAL_EVENT_ABONEMENT_WRONG, password);
break; break;
} }
@ -846,41 +885,12 @@ void AppVladEventProcess(CPU_INT32U event)
if(data->uid[0] == password) if(data->uid[0] == password)
{ {
uint32_t pay = 0, bonus = 0, best_before = 0; 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(&AbonementMoneyDesc, &pay, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX);
GetData(&AbonementBonusDesc, &bonus, 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(&AbonementBestBeforeDesc, &best_before, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX);
GetData(&CounterMoneyAbonementDesc, &counter_money, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX); IncAbonentCounters(app_state.current_abonement, pay, bonus);
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);
uint32_t SystemTime = GetTimeSec() + best_before * 24L * 60L * 60L; uint32_t SystemTime = GetTimeSec() + best_before * 24L * 60L * 60L;
@ -903,6 +913,16 @@ void AppVladEventProcess(CPU_INT32U event)
PlayMusicFile(52); 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(); stop_card_working();
@ -918,7 +938,7 @@ void AppVladEventProcess(CPU_INT32U event)
&& data->money + data->bonus > app_state.moneytopay && data->money + data->bonus > app_state.moneytopay
&& data->uid[0] == password) && 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->bonus -= (delta < 0) ? delta : 0;
data->money -= (delta < 0) ? data->money : app_state.moneytopay; data->money -= (delta < 0) ? data->money : app_state.moneytopay;
@ -938,6 +958,16 @@ void AppVladEventProcess(CPU_INT32U event)
PostUserEvent(EVENT_FINISH_PAYMENT_ABONEMENT_SOLARIUM); 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 else
{ {
SaveEventRecord(app_state.ch_index, JOURNAL_EVENT_ABONEMENT_REJECTED, 0); SaveEventRecord(app_state.ch_index, JOURNAL_EVENT_ABONEMENT_REJECTED, 0);
@ -992,6 +1022,15 @@ void AppVladEventProcess(CPU_INT32U event)
PlayMusicFile(42); 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) else if(app_state.user_menu == USER_MENU_ALL_PRICE)
{ {
//PrintMenuAllPrice(app_state.blink_ctr >= 500); //PrintMenuAllPrice(app_state.blink_ctr >= 500);
@ -1652,7 +1691,7 @@ void AppVladEventProcess(CPU_INT32U event)
ChannelsPayedTime[app_state.ch_index] = (accmoney * 60) / price; ChannelsPayedTime[app_state.ch_index] = (accmoney * 60) / price;
IncCounter(app_state.ch_index, ChannelsPayedTime[app_state.ch_index], accmoney, 2); 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); 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); 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); SetAcceptedMoney(0);
// ñîõðàíèì îïëà÷åííîå âðåìÿ è äåíüãè // ñîõðàíèì îïëà÷åííîå âðåìÿ è äåíüãè
@ -2707,10 +2746,18 @@ void PrintWarning2Menu(void)
{ {
PrintUserMenuStrUnalign("Ïåðåä èñïîëüçîâàíèåì", 0); PrintUserMenuStrUnalign("Ïåðåä èñïîëüçîâàíèåì", 0);
PrintUserMenuStrUnalign("ÀÂÒÎÌÀÒÀ íåîáõîäèìî", 1); PrintUserMenuStrUnalign("ÀÂÒÎÌÀÒÀ íåîáõîäèìî", 1);
PrintUserMenuStrUnalign(" îçíàêîìèòüñÿ", 2); PrintUserMenuStrUnalign(" èñïîëüçîâàíà ", 2);
PrintUserMenuStrUnalign(" ñ åãî èíñòðóêöèåé", 3); PrintUserMenuStrUnalign(" ñ åãî èíñòðóêöèåé", 3);
} }
void PrintWrongAbonementMenu(void)
{
PrintUserMenuStrUnalign(" Âàøà ÊÀÐÒÀ ÇÀÃÀÐÀ ", 0);
PrintUserMenuStrUnalign(" íå ìîæåò áûòü ", 1);
PrintUserMenuStrUnalign(" îçíàêîìèòüñÿ ", 2);
PrintUserMenuStrUnalign(" íà ýòîì ÀÂÒÎÌÀÒÅ ", 3);
}
void PrintSelectChMenu(CPU_INT08U blink) void PrintSelectChMenu(CPU_INT08U blink)
{ {
CPU_INT08U i; CPU_INT08U i;

View File

@ -209,6 +209,9 @@ void GetEventStr(char* str, char event)
case JOURNAL_EVENT_ABONEMENT_BALANCE: case JOURNAL_EVENT_ABONEMENT_BALANCE:
sprintf(str, "ÁÊÇ.áàëàíñ "); sprintf(str, "ÁÊÇ.áàëàíñ ");
break; break;
case JOURNAL_EVENT_ABONEMENT_WRONG:
sprintf(str, "ÁÊÇ.êàðòà ");
break;
case JOURNAL_EVENT_START_SESSION: case JOURNAL_EVENT_START_SESSION:
#if defined(BOARD_CENTRAL_CARWASH) #if defined(BOARD_CENTRAL_CARWASH)
sprintf(str, "Íà÷.ðàáîòû "); sprintf(str, "Íà÷.ðàáîòû ");

View File

@ -109,8 +109,9 @@ typedef struct{
#define JOURNAL_EVENT_ABONEMENT_PAY_REJECTED 57 // ïîêóïêà àáîíåìåíòà îòêëîíåíà #define JOURNAL_EVENT_ABONEMENT_PAY_REJECTED 57 // ïîêóïêà àáîíåìåíòà îòêëîíåíà
#define JOURNAL_EVENT_ABONEMENT_BALANCE 58 // ÷òåíèå áàëàíñà #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; CPU_INT08U channel;

View File

@ -2371,6 +2371,11 @@ void PrintEventJournalRecord(TEventRecord *record, char *str_event, char *str_da
{ {
sprintf(str_data, "%dðóá %dÁ", record->data, record->channel); 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) else if (record->event == JOURNAL_EVENT_CARD_REJECTED)
{ {
sprintf(&str_event[strlen(str_event)], "Ïîñò %d", record->channel+1); sprintf(&str_event[strlen(str_event)], "Ïîñò %d", record->channel+1);

View File

@ -25,7 +25,7 @@ if not "%~1" == "" goto debugFile
@echo on @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 @echo off
goto end goto end
@ -34,7 +34,7 @@ goto end
@echo on @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 @echo off
:end :end

View File

@ -23,9 +23,9 @@
if ($debugfile -eq "") 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 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:\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" --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