функции работы с картами

This commit is contained in:
Dmitriy 2025-04-10 22:48:25 +03:00
parent 2aab75693e
commit 3fd567f951
10 changed files with 2204 additions and 2138 deletions

View File

@ -728,49 +728,38 @@ void AppVladEventProcess(CPU_INT32U event)
} }
} }
// äàëüøå òîëüêî â ðàáî÷åì ðåæèìå
if (GetMode() != MODE_WORK)
{
// Look for new cards
if (picc_is_new_card_present() ) {
// Select one of the cards
if (picc_read_card_serial()) {
if(is_empty_mifare_card()) {
init_mifare_card_data();
if(!write_mifare_card())
{
break;
}
}
if(read_mifare_card() != NULL) {
}
}
}
break;
}
// 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()) {
MIFARE_Key key;
for (uint8_t i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
uint8_t block = 4;
uint8_t len = 18;
uint8_t buffer1[18]= {
0x01, 0x02, 0x03, 0x04, // 1, 2, 3, 4,
0x05, 0x06, 0x07, 0x08, // 5, 6, 7, 8,
0x09, 0x0a, 0xff, 0x0b, // 9, 10, 255, 11,
0x0c, 0x0d, 0x0e, 0x0f // 12, 13, 14, 15
};
uint8_t buffer2[18];
status_code status = pcd_authenticate(PICC_CMD_MF_AUTH_KEY_A, 4, &key, get_uid());
if (status != STATUS_OK) {
return;
}
status = (status_code)mifare_write(block, buffer1, 16);
if (status != STATUS_OK) {
return;
}
status = mifare_read(block, buffer2, &len);
if (status != STATUS_OK) {
return;
}
picc_halt_a();
pcd_stop_cryptol();
} }
} }
// äàëüøå òîëüêî â ðàáî÷åì ðåæèìå
if (GetMode() != MODE_WORK)
{
break;
}
// åñëè èíêàññàöèÿ, íå ðàáîòàåì // åñëè èíêàññàöèÿ, íå ðàáîòàåì
if (incassation) if (incassation)
@ -903,7 +892,10 @@ void AppVladEventProcess(CPU_INT32U event)
app_state.menu_timeout--; app_state.menu_timeout--;
} }
} }
else if ((app_state.user_menu == USER_MENU_SKIN_ATTENTION_1) || (app_state.user_menu == USER_MENU_SKIN_ATTENTION_2) || (app_state.user_menu == USER_MENU_SKIN_ATTENTION_3) || (app_state.user_menu == USER_MENU_SKIN_ATTENTION_4)) else if ((app_state.user_menu == USER_MENU_SKIN_ATTENTION_1)
|| (app_state.user_menu == USER_MENU_SKIN_ATTENTION_2)
|| (app_state.user_menu == USER_MENU_SKIN_ATTENTION_3)
|| (app_state.user_menu == USER_MENU_SKIN_ATTENTION_4))
{ {
if (!app_state.menu_timeout) if (!app_state.menu_timeout)
{ {
@ -2394,4 +2386,3 @@ void PlayMusicFile(int file_index)
} }
} }
} }

View File

@ -1,6 +1,8 @@
#include "mfrc522data.h" #include "mfrc522data.h"
#include <includes.h> #include <includes.h>
#include "rfid-spi.h"
mifaredata_t mifare_card_data; mifaredata_t mifare_card_data;
mifaredata_t* get_mifare_data() mifaredata_t* get_mifare_data()
@ -12,3 +14,85 @@ void set_mifare_data(mifaredata_t* data)
{ {
memcpy(&mifare_card_data, &data, sizeof(mifaredata_t)); memcpy(&mifare_card_data, &data, sizeof(mifaredata_t));
} }
mifaredata_t* read_mifare_card()
{
status_code status;
uint8_t block = 1;
uint8_t len = 18;
uint8_t buffer[18];
MIFARE_Key key;
for (uint8_t i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
for(uint8_t i = 0; i < sizeof(mifare_card_data); i += 16)
{
status = pcd_authenticate(PICC_CMD_MF_AUTH_KEY_A, block, &key, get_uid());
if (status != STATUS_OK) {
return NULL;
}
status = mifare_read(block, buffer, &len);
if (status != STATUS_OK) {
return NULL;
}
block++;
len = 18;
for (uint8_t j = 0; j < 16; j++) {
((uint8_t *)&mifare_card_data)[i] = buffer[j];
}
}
picc_halt_a();
pcd_stop_cryptol();
return &mifare_card_data;
}
bool write_mifare_card()
{
status_code status;
uint8_t block = 1;
MIFARE_Key key;
for (uint8_t i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
for(uint8_t i = 0; i < sizeof(mifare_card_data); i += 16)
{
status = pcd_authenticate(PICC_CMD_MF_AUTH_KEY_A, block, &key, get_uid());
if (status != STATUS_OK) {
return false;
}
status = mifare_write(block, &(((uint8_t *)&mifare_card_data)[i]), 16);
if (status != STATUS_OK) {
return false;
}
block++;
}
picc_halt_a();
pcd_stop_cryptol();
return true;
}
mifaredata_t* init_mifare_card_data()
{
for(uint8_t i = 0; i < sizeof(mifare_card_data); i++)
{
((uint8_t *)&mifare_card_data)[i] = 0x00;
}
mifare_card_data.init = 0xDEADBEEF;
return &mifare_card_data;
}
bool is_empty_mifare_card()
{
return mifare_card_data.init != 0xDEADBEEF;
}

View File

@ -2,19 +2,28 @@
#define _RFID_DATA_H_ #define _RFID_DATA_H_
#include <stdint.h> #include <stdint.h>
#include <stdbool.h>
typedef struct { typedef struct {
uint32_t uid[10]; uint32_t init; // 4
uint32_t money; uint32_t uid[10]; // 40
uint32_t bonus; uint32_t money; // 4
uint32_t type_abonement; uint32_t bonus; // 4
uint32_t number_abonement; uint32_t type_abonement; // 4
uint32_t best_before; uint32_t number_abonement; // 4
uint32_t best_before; // 4
} mifaredata_t; uint8_t reserv[16]; // 16
} mifaredata_t; // 80
extern mifaredata_t* get_mifare_data(); extern mifaredata_t* get_mifare_data();
extern void set_mifare_data(mifaredata_t* data); extern void set_mifare_data(mifaredata_t* data);
extern mifaredata_t* read_mifare_card();
extern bool write_mifare_card();
extern mifaredata_t* init_mifare_card_data();
extern bool is_empty_mifare_card();
#endif #endif

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"

View File

@ -258,7 +258,7 @@
<item>buffer[7]</item> <item>buffer[7]</item>
<item>buffer[8]</item> <item>buffer[8]</item>
<item>uid</item> <item>uid</item>
<item></item> <item />
</expressions> </expressions>
<col-names> <col-names>
<item>Expression</item> <item>Expression</item>

View File

@ -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>
@ -79,17 +79,6 @@
<Enabled>0</Enabled> <Enabled>0</Enabled>
<ShowSource>0</ShowSource> <ShowSource>0</ShowSource>
</Trace2> </Trace2>
<DisassembleMode>
<mode>0</mode>
</DisassembleMode>
<Breakpoints2>
<Bp0>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.c}.263.5" 0 0 1 "" 0 "" 0</Bp0>
<Bp1>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.c}.321.7" 0 0 1 "" 0 "" 0</Bp1>
<Bp2>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.c}.190.3" 0 0 1 "" 0 "" 0</Bp2>
<Bp3>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\app\app_vlad.c}.738.31" 0 0 1 "" 0 "" 0</Bp3>
<Bp4>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\app\app_vlad.c}.763.23" 0 0 1 "" 0 "" 0</Bp4>
<Count>5</Count>
</Breakpoints2>
<TermIOLog> <TermIOLog>
<LoggingEnabled>_ 0</LoggingEnabled> <LoggingEnabled>_ 0</LoggingEnabled>
<LogFile>_ ""</LogFile> <LogFile>_ ""</LogFile>
@ -99,10 +88,6 @@
<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>
@ -115,4 +100,17 @@
<CallStackStripe> <CallStackStripe>
<ShowTiming>1</ShowTiming> <ShowTiming>1</ShowTiming>
</CallStackStripe> </CallStackStripe>
<DisassembleMode>
<mode>0</mode>
</DisassembleMode>
<Breakpoints2>
<Bp0>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.c}.263.5" 0 0 1 "" 0 "" 0</Bp0>
<Bp1>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.c}.321.7" 0 0 1 "" 0 "" 0</Bp1>
<Bp2>_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.c}.190.3" 0 0 1 "" 0 "" 0</Bp2>
<Count>3</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