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

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_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

View File

@ -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;

View File

@ -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, "Íà÷.ðàáîòû ");

View File

@ -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;

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);
}
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);

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