libnfc 1.3.9
|
00001 00024 #ifndef _LIBNFC_MIFARE_H_ 00025 # define _LIBNFC_MIFARE_H_ 00026 00027 # include <nfc/nfc-types.h> 00028 00029 // Compiler directive, set struct alignment to 1 byte_t for compatibility 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 // MIFARE command params 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 // Reset struct alignment to default 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 // Compiler directive, set struct alignment to 1 byte_t for compatibility 00069 # pragma pack(1) 00070 00071 // MIFARE Classic 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 // MIFARE Ultralight 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 // Reset struct alignment to default 00125 # pragma pack() 00126 00127 #endif // _LIBNFC_MIFARE_H_