mirror of
https://github.com/dimoniche/solarium.vlad.git
synced 2026-01-30 04:53:30 +03:00
функции работы с картами
This commit is contained in:
parent
2aab75693e
commit
3fd567f951
@ -728,50 +728,39 @@ 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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
|
|||||||
@ -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
|
||||||
@ -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
|
||||||
@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
|
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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
4054
sk-mlpc2368.dep
4054
sk-mlpc2368.dep
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user