00001
00024 #ifndef _LIBNFC_MIFARE_H_
00025 # define _LIBNFC_MIFARE_H_
00026
00027 # include <nfc/nfc-types.h>
00028
00029
00030 # pragma pack(1)
00031
00032 typedef enum {
00033 MC_AUTH_A = 0x60,
00034 MC_AUTH_B = 0x61,
00035 MC_READ = 0x30,
00036 MC_WRITE = 0xA0,
00037 MC_TRANSFER = 0xB0,
00038 MC_DECREMENT = 0xC0,
00039 MC_INCREMENT = 0xC1,
00040 MC_STORE = 0xC2
00041 } mifare_cmd;
00042
00043
00044 typedef struct {
00045 byte_t abtKey[6];
00046 byte_t abtUid[4];
00047 } mifare_param_auth;
00048
00049 typedef struct {
00050 byte_t abtData[16];
00051 } mifare_param_data;
00052
00053 typedef struct {
00054 byte_t abtValue[4];
00055 } mifare_param_value;
00056
00057 typedef union {
00058 mifare_param_auth mpa;
00059 mifare_param_data mpd;
00060 mifare_param_value mpv;
00061 } mifare_param;
00062
00063
00064 # pragma pack()
00065
00066 bool nfc_initiator_mifare_cmd (nfc_device_t * pnd, const mifare_cmd mc, const uint8_t ui8Block, mifare_param * pmp);
00067
00068
00069 # pragma pack(1)
00070
00071
00072 typedef struct {
00073 byte_t abtUID[4];
00074 byte_t btBCC;
00075 byte_t btUnknown;
00076 byte_t abtATQA[2];
00077 byte_t abtUnknown[8];
00078 } mifare_classic_block_manufacturer;
00079
00080 typedef struct {
00081 byte_t abtData[16];
00082 } mifare_classic_block_data;
00083
00084 typedef struct {
00085 byte_t abtKeyA[6];
00086 byte_t abtAccessBits[4];
00087 byte_t abtKeyB[6];
00088 } mifare_classic_block_trailer;
00089
00090 typedef union {
00091 mifare_classic_block_manufacturer mbm;
00092 mifare_classic_block_data mbd;
00093 mifare_classic_block_trailer mbt;
00094 } mifare_classic_block;
00095
00096 typedef struct {
00097 mifare_classic_block amb[256];
00098 } mifare_classic_tag;
00099
00100
00101 typedef struct {
00102 byte_t sn0[3];
00103 byte_t btBCC0;
00104 byte_t sn1[4];
00105 byte_t btBCC1;
00106 byte_t internal;
00107 byte_t lock[2];
00108 byte_t otp[4];
00109 } mifareul_block_manufacturer;
00110
00111 typedef struct {
00112 byte_t abtData[16];
00113 } mifareul_block_data;
00114
00115 typedef union {
00116 mifareul_block_manufacturer mbm;
00117 mifareul_block_data mbd;
00118 } mifareul_block;
00119
00120 typedef struct {
00121 mifareul_block amb[4];
00122 } mifareul_tag;
00123
00124
00125 # pragma pack()
00126
00127 #endif // _LIBNFC_MIFARE_H_