mifare.h

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_