Оплату соляиев картой сделал вроде)

This commit is contained in:
Dmitriy 2025-05-13 03:14:04 +03:00
parent ae0a42bc74
commit ad89ab9780
7 changed files with 2392 additions and 2343 deletions

View File

@ -73,6 +73,8 @@ typedef struct
#define USER_MENU_INSERT_BONUS_CARD 41 #define USER_MENU_INSERT_BONUS_CARD 41
#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_ERROR 255 #define USER_MENU_ERROR 255

View File

@ -780,7 +780,8 @@ void AppVladEventProcess(CPU_INT32U event)
// Select one of the cards // Select one of the cards
if (picc_read_card_serial()) { if (picc_read_card_serial()) {
if(app_state.user_menu != USER_MENU_INSERT_BONUS_CARD) { if(app_state.user_menu != USER_MENU_INSERT_BONUS_CARD
&& app_state.user_menu != USER_MENU_ABONENT_PROCESSING) {
if(read_mifare_card() != NULL) { if(read_mifare_card() != NULL) {
if(is_empty_mifare_card()) { if(is_empty_mifare_card()) {
init_mifare_card_data(); init_mifare_card_data();
@ -818,32 +819,75 @@ void AppVladEventProcess(CPU_INT32U event)
} }
} }
if(app_state.user_menu == USER_MENU_INSERT_BONUS_CARD) { if(app_state.user_menu == USER_MENU_INSERT_BONUS_CARD)
// ïîïîëíÿåì êàðòó {
if(read_mifare_card() != NULL)
{
// ïîïîëíÿåì êàðòó
mifaredata_t* data = get_mifare_data();
uint32_t pay = 0, bonus = 0, best_before = 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);
uint32_t SystemTime = GetTimeSec() + best_before * 24L * 60L;
data->money += pay;
data->bonus += bonus;
data->best_before = SystemTime;
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);
}
}
stop_card_working();
}
if(app_state.user_menu == USER_MENU_ABONENT_PROCESSING)
{
mifaredata_t* data = get_mifare_data(); mifaredata_t* data = get_mifare_data();
uint32_t pay = 0, bonus = 0, best_before = 0; if(data->money + data->bonus > app_state.moneytopay
&& read_mifare_card() != NULL)
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);
uint32_t SystemTime = GetTimeSec() + best_before * 24L * 60L;
data->money += pay;
data->bonus += bonus;
data->best_before = SystemTime;
if(!write_mifare_card())
{ {
app_state.user_menu = USER_MENU_IDLE; int delta = data->bonus - app_state.moneytopay;
data->money -= (delta < 0) ? delta : 0;
data->bonus -= (delta < 0) ? data->bonus : app_state.moneytopay;
if(!write_mifare_card())
{
SaveEventRecord(app_state.ch_index, JOURNAL_EVENT_CARD_REJECTED, 0);
UserPrintPaymentErrorMenu();
RefreshMenu();
app_state.user_menu = USER_MENU_CARD_FAIL;
app_state.menu_timeout = MENU_CARD_FAIL_TIMEOUT;
}
else
{
SetAcceptedMoney(app_state.moneytopay);
SaveEventRecord(app_state.ch_index, JOURNAL_EVENT_CARD_ACCEPTED, app_state.moneytopay);
app_state.user_menu = USER_MENU_CARD_OK;
PostUserEvent(EVENT_FINISH_PAYMENT);
}
} }
else else
{ {
app_state.user_menu = USER_MENU_FINISH_PAY_BONUS_CARD; SaveEventRecord(app_state.ch_index, JOURNAL_EVENT_CARD_REJECTED, 0);
PrintFinishPayMenu(); UserPrintPaymentErrorMenu();
RefreshMenu(); RefreshMenu();
PlayMusicFile(52); app_state.user_menu = USER_MENU_CARD_FAIL;
app_state.menu_timeout = MENU_CARD_FAIL_TIMEOUT;
} }
stop_card_working(); stop_card_working();
@ -1014,10 +1058,10 @@ void AppVladEventProcess(CPU_INT32U event)
RefreshMenu(); RefreshMenu();
// temporally // temporally
SetAcceptedMoney(app_state.abonementtopay); //SetAcceptedMoney(app_state.abonementtopay);
SaveEventRecord(app_state.current_abonement, JOURNAL_EVENT_CARD_ACCEPTED, app_state.abonementtopay); //SaveEventRecord(app_state.current_abonement, JOURNAL_EVENT_CARD_ACCEPTED, app_state.abonementtopay);
app_state.user_menu = USER_MENU_INSERT_BONUS_CARD; //app_state.user_menu = USER_MENU_INSERT_BONUS_CARD;
PostUserEvent(EVENT_FINISH_PAYMENT_ABONEMENT); //PostUserEvent(EVENT_FINISH_PAYMENT_ABONEMENT);
} }
} }
else if (app_state.user_menu == USER_MENU_SHOW_THANKS) else if (app_state.user_menu == USER_MENU_SHOW_THANKS)
@ -1429,12 +1473,22 @@ void AppVladEventProcess(CPU_INT32U event)
} }
else if (app_state.user_menu == USER_MENU_CARD_PAYING) else if (app_state.user_menu == USER_MENU_CARD_PAYING)
{ {
uint32_t param[TERM_PARAM_COUNT]; if(app_state.pay_index == PAY_TYPE_CARD)
param[0] = app_state.moneytopay; {
SetTermCommand(TERM_COMMAND_PEND_PUR, param); uint32_t param[TERM_PARAM_COUNT];
app_state.user_menu = USER_MENU_CARD_PROCESSING; param[0] = app_state.moneytopay;
PrintTerminalRequestMenu(); SetTermCommand(TERM_COMMAND_PEND_PUR, param);
RefreshMenu(); app_state.user_menu = USER_MENU_CARD_PROCESSING;
PrintTerminalRequestMenu();
RefreshMenu();
}
else if(app_state.pay_index == PAY_TYPE_CARD_ABONEMENT)
{
app_state.user_menu = USER_MENU_ABONENT_PROCESSING;
PrintAnotherCardMenu();
RefreshMenu();
}
} }
else if (app_state.user_menu == USER_MENU_SELECT_SERVICE_TIME) else if (app_state.user_menu == USER_MENU_SELECT_SERVICE_TIME)
{ {

View File

@ -158,13 +158,16 @@ bool write_mifare_card()
0, 0,
255, 255, 255, 255, 255, 255}; // Keep default key B 255, 255, 255, 255, 255, 255}; // Keep default key B
for (uint8_t i = 0; i < MF_KEY_SIZE; i++){
trailerBuffer[i] = knownKeys[1][i];
trailerBuffer[i + 10] = knownKeys[1][i];
}
MIFARE_SetAccessBits(&trailerBuffer[6], 4, 4, 4, 1);
MIFARE_Key key; MIFARE_Key key;
for (uint8_t k = 0; k < NR_KNOWN_KEYS; k++) { for (uint8_t k = 0; k < NR_KNOWN_KEYS; k++) {
for (uint8_t i = 0; i < MF_KEY_SIZE; i++) { for (uint8_t i = 0; i < MF_KEY_SIZE; i++) {
key.keyByte[i] = knownKeys[k][i]; key.keyByte[i] = knownKeys[k][i];
trailerBuffer[i] = knownKeys[k][i];
trailerBuffer[i + 10] = knownKeys[k][i];
} }
if (try_key_b(&key)) { if (try_key_b(&key)) {
@ -182,8 +185,6 @@ bool write_mifare_card()
return false; return false;
} }
MIFARE_SetAccessBits(&trailerBuffer[6], 4, 4, 4, 1);
for(uint8_t i = 0; i < sizeof(mifare_card_data); i += 16) for(uint8_t i = 0; i < sizeof(mifare_card_data); i += 16)
{ {
status = pcd_authenticate(PICC_CMD_MF_AUTH_KEY_B, block, &key, get_uid()); status = pcd_authenticate(PICC_CMD_MF_AUTH_KEY_B, block, &key, get_uid());

File diff suppressed because one or more lines are too long

View File

@ -46,11 +46,11 @@
<MultiCoreRunAll>1</MultiCoreRunAll> <MultiCoreRunAll>1</MultiCoreRunAll>
</Simulator> </Simulator>
<PlDriver> <PlDriver>
<MemConfigValue>C:\Program Files\IAR Systems\Embedded Workbench 9.0\arm\CONFIG\debugger\NXP\LPC2368.ddf</MemConfigValue>
<FirstRun>0</FirstRun> <FirstRun>0</FirstRun>
<MemConfigValue>C:\Program Files\IAR Systems\Embedded Workbench 9.0\arm\CONFIG\debugger\NXP\LPC2368.ddf</MemConfigValue>
</PlDriver> </PlDriver>
<DebugChecksum> <DebugChecksum>
<Checksum>959379000</Checksum> <Checksum>2053374073</Checksum>
</DebugChecksum> </DebugChecksum>
<Exceptions> <Exceptions>
<StopOnUncaught>_ 0</StopOnUncaught> <StopOnUncaught>_ 0</StopOnUncaught>
@ -67,10 +67,10 @@
<WatchCond>_ 0</WatchCond> <WatchCond>_ 0</WatchCond>
<Watch0>_ 0 "0x00000000" 4294967295 "0xFFFFFFFF" 0 "0x00000000" 4294967295 "0xFFFFFFFF" 3 0 0 0</Watch0> <Watch0>_ 0 "0x00000000" 4294967295 "0xFFFFFFFF" 0 "0x00000000" 4294967295 "0xFFFFFFFF" 3 0 0 0</Watch0>
<Watch1>_ 0 "0x00000000" 4294967295 "0xFFFFFFFF" 0 "0x00000000" 4294967295 "0xFFFFFFFF" 3 0 0 0</Watch1> <Watch1>_ 0 "0x00000000" 4294967295 "0xFFFFFFFF" 0 "0x00000000" 4294967295 "0xFFFFFFFF" 3 0 0 0</Watch1>
<LeaveTargetRunning>_ 0</LeaveTargetRunning>
<CStepIntDis>_ 0</CStepIntDis>
<jlinkResetStyle>12</jlinkResetStyle> <jlinkResetStyle>12</jlinkResetStyle>
<jlinkResetStrategy>0</jlinkResetStrategy> <jlinkResetStrategy>0</jlinkResetStrategy>
<LeaveTargetRunning>_ 0</LeaveTargetRunning>
<CStepIntDis>_ 0</CStepIntDis>
</JLinkDriver> </JLinkDriver>
<ArmDriver> <ArmDriver>
<EnableCache>0</EnableCache> <EnableCache>0</EnableCache>
@ -89,29 +89,15 @@
<Enabled>0</Enabled> <Enabled>0</Enabled>
<ShowSource>0</ShowSource> <ShowSource>0</ShowSource>
</Trace2> </Trace2>
<DisassembleMode> <TermIOLog>
<mode>0</mode> <LoggingEnabled>_ 0</LoggingEnabled>
</DisassembleMode> <LogFile>_ ""</LogFile>
<Breakpoints2> </TermIOLog>
<Bp0>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.c}.321.7" 0 0 1 "" 0 "" 0</Bp0>
<Bp1>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.c}.190.3" 0 0 1 "" 0 "" 0</Bp1>
<Bp2>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\mfrc522data.c}.185.5" 0 0 1 "" 0 "" 0</Bp2>
<Bp3>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\mfrc522data.c}.209.15" 0 0 1 "" 0 "" 0</Bp3>
<Bp4>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\mfrc522data.c}.215.5" 0 0 1 "" 0 "" 0</Bp4>
<Bp5>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\app\app_vlad.c}.823.50" 0 0 1 "" 0 "" 0</Bp5>
<Bp6>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\app\app_vlad.c}.783.25" 0 0 1 "" 0 "" 0</Bp6>
<Bp7>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\app\app_vlad.c}.1111.39" 0 0 1 "" 0 "" 0</Bp7>
<Count>8</Count>
</Breakpoints2>
<LogFile> <LogFile>
<LoggingEnabled>_ 0</LoggingEnabled> <LoggingEnabled>_ 0</LoggingEnabled>
<LogFile>_ ""</LogFile> <LogFile>_ ""</LogFile>
<Category>_ 0</Category> <Category>_ 0</Category>
</LogFile> </LogFile>
<Aliases>
<Count>0</Count>
<SuppressDialog>0</SuppressDialog>
</Aliases>
<DriverProfiling> <DriverProfiling>
<Enabled>0</Enabled> <Enabled>0</Enabled>
<Mode>1</Mode> <Mode>1</Mode>
@ -124,8 +110,18 @@
<CallStackStripe> <CallStackStripe>
<ShowTiming>1</ShowTiming> <ShowTiming>1</ShowTiming>
</CallStackStripe> </CallStackStripe>
<TermIOLog> <DisassembleMode>
<LoggingEnabled>_ 0</LoggingEnabled> <mode>0</mode>
<LogFile>_ ""</LogFile> </DisassembleMode>
</TermIOLog> <Breakpoints2>
<Bp0>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.c}.321.7" 0 0 1 "" 0 "" 0</Bp0>
<Bp1>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.c}.190.3" 0 0 1 "" 0 "" 0</Bp1>
<Bp2>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\mfrc522data.c}.210.15" 0 0 1 "" 0 "" 0</Bp2>
<Bp3>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\mfrc522data.c}.216.5" 0 0 1 "" 0 "" 0</Bp3>
<Count>4</Count>
</Breakpoints2>
<Aliases>
<Count>0</Count>
<SuppressDialog>0</SuppressDialog>
</Aliases>
</settings> </settings>

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff