mirror of
https://github.com/dimoniche/solarium.vlad.git
synced 2026-01-30 04:53:30 +03:00
Исправляем ошибки
This commit is contained in:
parent
0e6ab22246
commit
e59c6054b6
@ -799,6 +799,10 @@ void AppVladEventProcess(CPU_INT32U event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CPU_INT32U password;
|
||||||
|
GetData(&PassDescAdmin, &password, 0, DATA_FLAG_SYSTEM_INDEX);
|
||||||
|
if(get_abonement_data()->uid[0] != password) break;
|
||||||
|
|
||||||
if(app_state.user_menu == USER_MENU_IDLE)
|
if(app_state.user_menu == USER_MENU_IDLE)
|
||||||
{
|
{
|
||||||
// ïðîâåðèì - íå íàäî ëè áîíóñû î÷èñòèòü
|
// ïðîâåðèì - íå íàäî ëè áîíóñû î÷èñòèòü
|
||||||
@ -827,73 +831,82 @@ void AppVladEventProcess(CPU_INT32U event)
|
|||||||
if(read_mifare_card() != NULL)
|
if(read_mifare_card() != NULL)
|
||||||
{
|
{
|
||||||
// ïîïîëíÿåì êàðòó
|
// ïîïîëíÿåì êàðòó
|
||||||
mifaredata_t* data = get_mifare_data();
|
abonement_data* data = get_abonement_data();
|
||||||
|
|
||||||
uint32_t pay = 0, bonus = 0, best_before = 0;
|
CPU_INT32U password;
|
||||||
uint32_t counter_money = 0, counter_bonus = 0, counter_runs = 0;
|
GetData(&PassDescAdmin, &password, 0, DATA_FLAG_SYSTEM_INDEX);
|
||||||
uint32_t counter_money_sum = 0, counter_bonus_sum = 0, counter_runs_sum = 0;
|
if(data->uid[0] == password)
|
||||||
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);
|
|
||||||
|
|
||||||
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;
|
uint32_t pay = 0, bonus = 0, best_before = 0;
|
||||||
}
|
uint32_t counter_money = 0, counter_bonus = 0, counter_runs = 0;
|
||||||
else
|
uint32_t counter_money_sum = 0, counter_bonus_sum = 0, counter_runs_sum = 0;
|
||||||
{
|
uint32_t all_counter_money = 0;
|
||||||
app_state.user_menu = USER_MENU_FINISH_PAY_BONUS_CARD;
|
|
||||||
PrintFinishPayMenu();
|
GetData(&AbonementMoneyDesc, &pay, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX);
|
||||||
RefreshMenu();
|
GetData(&AbonementBonusDesc, &bonus, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX);
|
||||||
PlayMusicFile(52);
|
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);
|
||||||
|
|
||||||
|
uint32_t SystemTime = GetTimeSec() + best_before * 24L * 60L;
|
||||||
|
|
||||||
|
data->money += pay;
|
||||||
|
data->bonus = bonus;
|
||||||
|
data->best_before = SystemTime;
|
||||||
|
data->type_abonement = app_state.current_abonement;
|
||||||
|
|
||||||
|
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();
|
stop_card_working();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(app_state.user_menu == USER_MENU_ABONENT_PROCESSING)
|
if(app_state.user_menu == USER_MENU_ABONENT_PROCESSING)
|
||||||
{
|
{
|
||||||
mifaredata_t* data = get_mifare_data();
|
abonement_data* data = get_abonement_data();
|
||||||
|
CPU_INT32U password;
|
||||||
|
GetData(&PassDescAdmin, &password, 0, DATA_FLAG_SYSTEM_INDEX);
|
||||||
|
|
||||||
if(data->money + data->bonus > app_state.moneytopay
|
if(read_mifare_card() != NULL
|
||||||
&& read_mifare_card() != NULL)
|
&& data->money + data->bonus > app_state.moneytopay
|
||||||
|
&& data->uid[0] == password)
|
||||||
{
|
{
|
||||||
int delta = data->money - app_state.moneytopay;
|
int delta = data->money - app_state.moneytopay;
|
||||||
data->bonus -= (delta < 0) ? delta : 0;
|
data->bonus -= (delta < 0) ? delta : 0;
|
||||||
@ -901,7 +914,7 @@ void AppVladEventProcess(CPU_INT32U event)
|
|||||||
|
|
||||||
if(!write_mifare_card())
|
if(!write_mifare_card())
|
||||||
{
|
{
|
||||||
SaveEventRecord(app_state.ch_index, JOURNAL_EVENT_CARD_REJECTED, 0);
|
SaveEventRecord(app_state.ch_index, JOURNAL_EVENT_ABONEMENT_REJECTED, 0);
|
||||||
UserPrintPaymentErrorMenu();
|
UserPrintPaymentErrorMenu();
|
||||||
RefreshMenu();
|
RefreshMenu();
|
||||||
app_state.user_menu = USER_MENU_CARD_FAIL;
|
app_state.user_menu = USER_MENU_CARD_FAIL;
|
||||||
@ -910,14 +923,14 @@ void AppVladEventProcess(CPU_INT32U event)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetAcceptedMoney(app_state.moneytopay);
|
SetAcceptedMoney(app_state.moneytopay);
|
||||||
SaveEventRecord(app_state.ch_index, JOURNAL_EVENT_CARD_ACCEPTED, app_state.moneytopay);
|
SaveEventRecord(app_state.ch_index, JOURNAL_EVENT_ABONEMENT_ACCEPTED, app_state.moneytopay);
|
||||||
app_state.user_menu = USER_MENU_CARD_OK;
|
app_state.user_menu = USER_MENU_CARD_OK;
|
||||||
PostUserEvent(EVENT_FINISH_PAYMENT_ABONEMENT_SOLARIUM);
|
PostUserEvent(EVENT_FINISH_PAYMENT_ABONEMENT_SOLARIUM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SaveEventRecord(app_state.ch_index, JOURNAL_EVENT_CARD_REJECTED, 0);
|
SaveEventRecord(app_state.ch_index, JOURNAL_EVENT_ABONEMENT_REJECTED, 0);
|
||||||
UserPrintPaymentErrorMenu();
|
UserPrintPaymentErrorMenu();
|
||||||
RefreshMenu();
|
RefreshMenu();
|
||||||
app_state.user_menu = USER_MENU_CARD_FAIL;
|
app_state.user_menu = USER_MENU_CARD_FAIL;
|
||||||
@ -2418,7 +2431,7 @@ void PrintStartReadCardMenu(void)
|
|||||||
void PrintBalanceMenu(void)
|
void PrintBalanceMenu(void)
|
||||||
{
|
{
|
||||||
char str[32];
|
char str[32];
|
||||||
mifaredata_t* data = get_mifare_data();
|
abonement_data* data = get_abonement_data();
|
||||||
|
|
||||||
PrintUserMenuStr(" Âàøà êàðòà çàãàðà: ", 0);
|
PrintUserMenuStr(" Âàøà êàðòà çàãàðà: ", 0);
|
||||||
|
|
||||||
|
|||||||
@ -194,6 +194,12 @@ void GetEventStr(char* str, char event)
|
|||||||
case JOURNAL_EVENT_CARD_REJECTED:
|
case JOURNAL_EVENT_CARD_REJECTED:
|
||||||
sprintf(str, "Áàíê.îïëàòà ");
|
sprintf(str, "Áàíê.îïëàòà ");
|
||||||
break;
|
break;
|
||||||
|
case JOURNAL_EVENT_ABONEMENT_ACCEPTED:
|
||||||
|
sprintf(str, "ÁÊÇ.îïëàòà ");
|
||||||
|
break;
|
||||||
|
case JOURNAL_EVENT_ABONEMENT_REJECTED:
|
||||||
|
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, "Íà÷.ðàáîòû ");
|
||||||
|
|||||||
@ -102,7 +102,10 @@ typedef struct{
|
|||||||
// ÂÑÅ ÎØÈÁÊÈ ÔÐ ÔÀÒÀËÜÍÛÅ
|
// ÂÑÅ ÎØÈÁÊÈ ÔÐ ÔÀÒÀËÜÍÛÅ
|
||||||
#define ERROR_FR 53
|
#define ERROR_FR 53
|
||||||
|
|
||||||
#define JOURNAL_EVENTS_COUNT (ERROR_FR+FR_ERROR_NUMBER) // ÷èñëî ñîáûòèé
|
#define JOURNAL_EVENT_ABONEMENT_ACCEPTED 54 // ïðèíÿò àáîíåìåíò, ñóììà áåçíàëà
|
||||||
|
#define JOURNAL_EVENT_ABONEMENT_REJECTED 55 // àáîíåìåíò îòêëîíåíà
|
||||||
|
|
||||||
|
#define JOURNAL_EVENTS_COUNT (JOURNAL_EVENT_ABONEMENT_REJECTED+FR_ERROR_NUMBER) // ÷èñëî ñîáûòèé
|
||||||
|
|
||||||
// êàíàë
|
// êàíàë
|
||||||
CPU_INT08U channel;
|
CPU_INT08U channel;
|
||||||
|
|||||||
@ -5119,7 +5119,7 @@ CPU_INT08U const AbonementIndexHour_str0[] = "
|
|||||||
CPU_INT08U const AbonementIndexHour_str1[] = "ÇÎËÎÒÎé";
|
CPU_INT08U const AbonementIndexHour_str1[] = "ÇÎËÎÒÎé";
|
||||||
CPU_INT08U const AbonementIndexHour_str2[] = "ÏËÀÒÈÍÎÂÛé";
|
CPU_INT08U const AbonementIndexHour_str2[] = "ÏËÀÒÈÍÎÂÛé";
|
||||||
CPU_INT08U const AbonementIndexHour_str3[] = "ÀËÌÀÇÍÛé";
|
CPU_INT08U const AbonementIndexHour_str3[] = "ÀËÌÀÇÍÛé";
|
||||||
CPU_INT08U const *AbonementIndexHourList[] = {AbonementIndexHour_str0, AbonementIndexHour_str1/*, AbonementIndexHour_str2, AbonementIndexHour_str3*/};
|
CPU_INT08U const *AbonementIndexHourList[] = {AbonementIndexHour_str0, AbonementIndexHour_str1, AbonementIndexHour_str2, AbonementIndexHour_str3};
|
||||||
|
|
||||||
CPU_INT32U abonement_index;
|
CPU_INT32U abonement_index;
|
||||||
|
|
||||||
@ -5305,9 +5305,9 @@ CPU_INT08U const AbonementBestBeforeName[] = "
|
|||||||
TDataDescStruct const AbonementBestBeforeDesc = {
|
TDataDescStruct const AbonementBestBeforeDesc = {
|
||||||
DATA_DESC_EDIT, // òèï äåñêðèïòîðà
|
DATA_DESC_EDIT, // òèï äåñêðèïòîðà
|
||||||
DATA_TYPE_ULONG, // òèï ïàðàìåòðà
|
DATA_TYPE_ULONG, // òèï ïàðàìåòðà
|
||||||
DATA_LOC_FRAM, // ðàñïîëîæåíèå ïàðàìåòðà
|
DATA_LOC_FRAM, // ðàñïîëîæåíèå ïàðàìåòðà
|
||||||
DATA_IS_ARRAY, // ïðèçíàê ìàññèâà
|
DATA_IS_ARRAY, // ïðèçíàê ìàññèâà
|
||||||
2, // ðàçìåð ìàññèâà
|
4, // ðàçìåð ìàññèâà
|
||||||
&AbonementIndexDesc, // óêàçàòåëü íà äåñêðèïòîð èíäåêñà ìàññèâà
|
&AbonementIndexDesc, // óêàçàòåëü íà äåñêðèïòîð èíäåêñà ìàññèâà
|
||||||
(void*)offsetof(TFramMap, AbonementBestBefore), // óêàçàòåëü íà ïåðåìåííóþ èëè àäðåñ FRAM
|
(void*)offsetof(TFramMap, AbonementBestBefore), // óêàçàòåëü íà ïåðåìåííóþ èëè àäðåñ FRAM
|
||||||
(void*)&AbonementBestBeforeRange, // óêàçàòåëü íà ãðàíèöû ïàðàìåòðà
|
(void*)&AbonementBestBeforeRange, // óêàçàòåëü íà ãðàíèöû ïàðàìåòðà
|
||||||
|
|||||||
@ -3,8 +3,13 @@
|
|||||||
|
|
||||||
#include "rfid-spi.h"
|
#include "rfid-spi.h"
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
|
#include "CRC16.h"
|
||||||
|
#include "datadesc.h"
|
||||||
|
|
||||||
|
// äàííûå ñ÷èòàííûå ñ êàðòû
|
||||||
mifaredata_t mifare_card_data;
|
mifaredata_t mifare_card_data;
|
||||||
|
// âàëèäíûå äàííûå àáîíåìåíòà
|
||||||
|
abonement_data abonement;
|
||||||
|
|
||||||
#define START_BLOCK 12
|
#define START_BLOCK 12
|
||||||
#define NR_KNOWN_KEYS 2
|
#define NR_KNOWN_KEYS 2
|
||||||
@ -24,6 +29,16 @@ void set_mifare_data(mifaredata_t* data)
|
|||||||
memcpy(&mifare_card_data, &data, sizeof(mifaredata_t));
|
memcpy(&mifare_card_data, &data, sizeof(mifaredata_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abonement_data* get_abonement_data()
|
||||||
|
{
|
||||||
|
return &abonement;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_abonement_data(abonement_data* data)
|
||||||
|
{
|
||||||
|
memcpy(&abonement, &data, sizeof(abonement_data));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates the bit pattern needed for the specified access bits. In the [C1 C2 C3] tuples C1 is MSB (=4) and C3 is LSB (=1).
|
* Calculates the bit pattern needed for the specified access bits. In the [C1 C2 C3] tuples C1 is MSB (=4) and C3 is LSB (=1).
|
||||||
*/
|
*/
|
||||||
@ -143,6 +158,29 @@ mifaredata_t* read_mifare_card()
|
|||||||
if(block%4 == 3) block++;
|
if(block%4 == 3) block++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CPU_INT32U crc1;
|
||||||
|
crc1 = crc16((unsigned char*)&mifare_card_data.abonement_data_copy1.init, sizeof(abonement_data) - sizeof(CPU_INT32U));
|
||||||
|
|
||||||
|
if(crc1 == mifare_card_data.abonement_data_copy1.crc)
|
||||||
|
{
|
||||||
|
memcpy(&abonement, &mifare_card_data.abonement_data_copy1.init, sizeof(abonement_data));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CPU_INT32U crc2 = crc16((unsigned char*)&mifare_card_data.abonement_data_copy2.init, sizeof(abonement_data) - sizeof(CPU_INT32U));
|
||||||
|
if(crc2 == mifare_card_data.abonement_data_copy2.crc)
|
||||||
|
{
|
||||||
|
memcpy(&abonement, &mifare_card_data.abonement_data_copy2.init, sizeof(abonement_data));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(uint8_t i = 0; i < sizeof(abonement_data); i++)
|
||||||
|
{
|
||||||
|
((uint8_t *)&abonement)[i] = 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return &mifare_card_data;
|
return &mifare_card_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -184,7 +222,17 @@ bool write_mifare_card()
|
|||||||
stop_card_working();
|
stop_card_working();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CPU_INT32U crc;
|
||||||
|
|
||||||
|
memcpy(&mifare_card_data.abonement_data_copy1.init, &abonement, sizeof(abonement_data) - sizeof(CPU_INT32U));
|
||||||
|
crc = crc16((unsigned char*)&mifare_card_data.abonement_data_copy1.init, sizeof(abonement_data) - sizeof(CPU_INT32U));
|
||||||
|
mifare_card_data.abonement_data_copy1.crc = crc;
|
||||||
|
|
||||||
|
memcpy(&mifare_card_data.abonement_data_copy2.init, &abonement, sizeof(abonement_data) - sizeof(CPU_INT32U));
|
||||||
|
crc = crc16((unsigned char*)&mifare_card_data.abonement_data_copy2.init, sizeof(abonement_data) - sizeof(CPU_INT32U));
|
||||||
|
mifare_card_data.abonement_data_copy2.crc = crc;
|
||||||
|
|
||||||
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());
|
||||||
@ -224,28 +272,50 @@ void stop_card_working()
|
|||||||
|
|
||||||
mifaredata_t* init_mifare_card_data()
|
mifaredata_t* init_mifare_card_data()
|
||||||
{
|
{
|
||||||
for(uint8_t i = 0; i < sizeof(mifare_card_data); i++)
|
for(uint8_t i = 0; i < sizeof(mifaredata_t); i++)
|
||||||
{
|
{
|
||||||
((uint8_t *)&mifare_card_data)[i] = 0x00;
|
((uint8_t *)&mifare_card_data)[i] = 0x00;
|
||||||
}
|
}
|
||||||
|
|
||||||
mifare_card_data.init = 0xDEADBEEF;
|
for(uint8_t i = 0; i < sizeof(abonement_data); i++)
|
||||||
|
{
|
||||||
|
((uint8_t *)&abonement)[i] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
abonement.init = 0xDEADBEEF;
|
||||||
|
|
||||||
|
CPU_INT32U password;
|
||||||
|
GetData(&PassDescAdmin, &password, 0, DATA_FLAG_SYSTEM_INDEX);
|
||||||
|
abonement.uid[0] = password;
|
||||||
|
|
||||||
return &mifare_card_data;
|
return &mifare_card_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_empty_mifare_card()
|
bool is_empty_mifare_card()
|
||||||
{
|
{
|
||||||
return mifare_card_data.init != 0xDEADBEEF;
|
bool empty = false;
|
||||||
|
|
||||||
|
CPU_INT32U crc1, crc2;
|
||||||
|
crc1 = crc16((unsigned char*)&mifare_card_data.abonement_data_copy1.init, sizeof(abonement_data) - sizeof(CPU_INT32U));
|
||||||
|
crc2 = crc16((unsigned char*)&mifare_card_data.abonement_data_copy2.init, sizeof(abonement_data) - sizeof(CPU_INT32U));
|
||||||
|
|
||||||
|
if((mifare_card_data.abonement_data_copy1.init != 0xDEADBEEF || crc1 != mifare_card_data.abonement_data_copy1.crc)
|
||||||
|
&& (mifare_card_data.abonement_data_copy2.init != 0xDEADBEEF || crc2 != mifare_card_data.abonement_data_copy2.crc)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
empty = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool need_clear_bonus()
|
bool need_clear_bonus()
|
||||||
{
|
{
|
||||||
uint32_t SystemTime = GetTimeSec();
|
uint32_t SystemTime = GetTimeSec();
|
||||||
|
|
||||||
if(SystemTime > mifare_card_data.best_before)
|
if(SystemTime > abonement.best_before)
|
||||||
{
|
{
|
||||||
mifare_card_data.bonus = 0;
|
abonement.bonus = 0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -5,22 +5,35 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
uint32_t init; // 4 - îáÿçàòåëüíî äîëæíà áûòü â íà÷àëå
|
||||||
uint32_t init; // 4
|
uint32_t uid[5]; // 20
|
||||||
uint32_t uid[10]; // 40
|
|
||||||
uint32_t money; // 4
|
uint32_t money; // 4
|
||||||
uint32_t bonus; // 4
|
uint32_t bonus; // 4
|
||||||
uint32_t type_abonement; // 4
|
uint32_t type_abonement; // 4
|
||||||
uint32_t number_abonement; // 4
|
uint32_t number_abonement; // 4
|
||||||
uint32_t best_before; // 4
|
uint32_t best_before; // 4
|
||||||
|
uint32_t crc; // 4
|
||||||
uint8_t reserv[32]; // 32
|
|
||||||
|
} abonement_data; // 48
|
||||||
} mifaredata_t; // 96
|
|
||||||
|
typedef struct {
|
||||||
|
abonement_data abonement_data_copy1; // 48
|
||||||
|
abonement_data abonement_data_copy2; // 48
|
||||||
|
|
||||||
|
} mifaredata_t; // 96
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
|
/// @brief Óñòàíîâêà äàííûõ àáîíåìåíòà
|
||||||
|
/// @param data
|
||||||
|
extern void set_abonement_data(abonement_data* data);
|
||||||
|
|
||||||
|
/// @brief Äàííûå àáîíåìåíòà, ïîëó÷åíèå
|
||||||
|
/// @return
|
||||||
|
extern abonement_data* get_abonement_data();
|
||||||
|
|
||||||
extern mifaredata_t* read_mifare_card();
|
extern mifaredata_t* read_mifare_card();
|
||||||
extern bool write_mifare_card();
|
extern bool write_mifare_card();
|
||||||
extern mifaredata_t* init_mifare_card_data();
|
extern mifaredata_t* init_mifare_card_data();
|
||||||
|
|||||||
@ -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"
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
4078
sk-mlpc2368.dep
4078
sk-mlpc2368.dep
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user