#include "mfrc522data.h" #include #include "rfid-spi.h" mifaredata_t mifare_card_data; mifaredata_t* get_mifare_data() { return &mifare_card_data; } void set_mifare_data(mifaredata_t* data) { 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; }