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