1
1
#include < NfcAdapter.h>
2
2
3
- NfcAdapter::NfcAdapter (MFRC522 *interface)
3
+ NfcAdapter::NfcAdapter (MFRC522Extended *interface)
4
4
{
5
5
shield = interface;
6
6
}
@@ -24,13 +24,20 @@ bool NfcAdapter::tagPresent()
24
24
// If tag has already been authenticated nothing else will work until we stop crypto (shouldn't hurt)
25
25
shield->PCD_StopCrypto1 ();
26
26
27
- if (!(shield->PICC_IsNewCardPresent () && shield->PICC_ReadCardSerial ()))
27
+ if (!(shield->PICC_IsNewCardPresent () && shield->PICC_ReadCardSerial ()))
28
28
{
29
29
return false ;
30
30
}
31
31
32
32
MFRC522::PICC_Type piccType = shield->PICC_GetType (shield->uid .sak );
33
- return ((piccType == MFRC522Constants::PICC_TYPE_MIFARE_1K) || (piccType == MFRC522Constants::PICC_TYPE_MIFARE_UL));
33
+ switch (piccType) {
34
+ case PICC_Type::PICC_TYPE_MIFARE_1K:
35
+ case PICC_Type::PICC_TYPE_MIFARE_UL:
36
+ case PICC_Type::PICC_TYPE_ISO_14443_4:
37
+ return true ;
38
+ default :;
39
+ }
40
+ return false ;
34
41
}
35
42
36
43
bool NfcAdapter::erase ()
@@ -43,14 +50,14 @@ bool NfcAdapter::erase()
43
50
bool NfcAdapter::format ()
44
51
{
45
52
#ifdef NDEF_SUPPORT_MIFARE_CLASSIC
46
- if (shield->PICC_GetType (shield->uid .sak ) == MFRC522Constants ::PICC_TYPE_MIFARE_1K)
53
+ if (shield->PICC_GetType (shield->uid .sak ) == PICC_Type ::PICC_TYPE_MIFARE_1K)
47
54
{
48
55
MifareClassic mifareClassic = MifareClassic (shield);
49
56
return mifareClassic.formatNDEF ();
50
57
}
51
58
else
52
59
#endif
53
- if (shield->PICC_GetType (shield->uid .sak ) == MFRC522Constants ::PICC_TYPE_MIFARE_UL)
60
+ if (shield->PICC_GetType (shield->uid .sak ) == PICC_Type ::PICC_TYPE_MIFARE_UL)
54
61
{
55
62
#ifdef NDEF_USE_SERIAL
56
63
Serial.print (F (" No need for formating a UL" ));
@@ -73,30 +80,30 @@ bool NfcAdapter::clean()
73
80
#ifdef NDEF_SUPPORT_MIFARE_CLASSIC
74
81
if (type == NfcTag::TYPE_MIFARE_CLASSIC)
75
82
{
76
- #ifdef NDEF_DEBUG
83
+ #ifdef NDEF_DEBUG
77
84
Serial.println (F (" Cleaning Mifare Classic" ));
78
- #endif
85
+ #endif
79
86
MifareClassic mifareClassic = MifareClassic (shield);
80
87
return mifareClassic.formatMifare ();
81
88
}
82
89
else
83
90
#endif
84
- if (type == NfcTag::TYPE_2)
91
+ if (type == NfcTag::TYPE_2)
85
92
{
86
- #ifdef NDEF_DEBUG
93
+ #ifdef NDEF_DEBUG
87
94
Serial.println (F (" Cleaning Mifare Ultralight" ));
88
- #endif
95
+ #endif
89
96
MifareUltralight ultralight = MifareUltralight (shield);
90
97
return ultralight.clean ();
91
98
}
92
99
else
93
100
{
94
101
#ifdef NDEF_USE_SERIAL
95
- Serial.print (F (" No driver for card type " ));
96
- Serial.println (type);
102
+ Serial.print (F (" No driver for card type " ));Serial.println (type);
97
103
#endif
98
104
return false ;
99
105
}
106
+
100
107
}
101
108
102
109
NfcTag NfcAdapter::read ()
@@ -106,22 +113,31 @@ NfcTag NfcAdapter::read()
106
113
#ifdef NDEF_SUPPORT_MIFARE_CLASSIC
107
114
if (type == NfcTag::TYPE_MIFARE_CLASSIC)
108
115
{
109
- #ifdef NDEF_DEBUG
116
+ #ifdef NDEF_DEBUG
110
117
Serial.println (F (" Reading Mifare Classic" ));
111
- #endif
118
+ #endif
112
119
MifareClassic mifareClassic = MifareClassic (shield);
113
120
return mifareClassic.read ();
114
121
}
115
122
else
116
123
#endif
117
- if (type == NfcTag::TYPE_2)
124
+ if (type == NfcTag::TYPE_2)
118
125
{
119
- #ifdef NDEF_DEBUG
126
+ #ifdef NDEF_DEBUG
120
127
Serial.println (F (" Reading Mifare Ultralight" ));
121
- #endif
128
+ #endif
122
129
MifareUltralight ultralight = MifareUltralight (shield);
123
130
return ultralight.read ();
124
131
}
132
+ else if (type == NfcTag::TYPE_4)
133
+ {
134
+ #ifdef NDEF_DEBUG
135
+ Serial.println (F (" Reading Type4 tag" ));
136
+ #endif
137
+ Type4Tag type4tag = Type4Tag (shield);
138
+ return type4tag.read ();
139
+ // return NfcTag(shield->uid.uidByte, shield->uid.size, NfcTag::TYPE_4);
140
+ }
125
141
else if (type == NfcTag::TYPE_UNKNOWN)
126
142
{
127
143
#ifdef NDEF_USE_SERIAL
@@ -135,28 +151,29 @@ NfcTag NfcAdapter::read()
135
151
// TODO should set type here
136
152
return NfcTag (shield->uid .uidByte , shield->uid .size , NfcTag::TYPE_UNKNOWN);
137
153
}
154
+
138
155
}
139
156
140
- bool NfcAdapter::write (NdefMessage & ndefMessage)
157
+ bool NfcAdapter::write (NdefMessage& ndefMessage)
141
158
{
142
159
uint8_t type = guessTagType ();
143
160
144
161
#ifdef NDEF_SUPPORT_MIFARE_CLASSIC
145
162
if (type == NfcTag::TYPE_MIFARE_CLASSIC)
146
163
{
147
- #ifdef NDEF_DEBUG
164
+ #ifdef NDEF_DEBUG
148
165
Serial.println (F (" Writing Mifare Classic" ));
149
- #endif
166
+ #endif
150
167
MifareClassic mifareClassic = MifareClassic (shield);
151
168
return mifareClassic.write (ndefMessage);
152
169
}
153
170
else
154
171
#endif
155
- if (type == NfcTag::TYPE_2)
172
+ if (type == NfcTag::TYPE_2)
156
173
{
157
- #ifdef NDEF_DEBUG
174
+ #ifdef NDEF_DEBUG
158
175
Serial.println (F (" Writing Mifare Ultralight" ));
159
- #endif
176
+ #endif
160
177
MifareUltralight mifareUltralight = MifareUltralight (shield);
161
178
return mifareUltralight.write (ndefMessage);
162
179
}
@@ -170,16 +187,14 @@ bool NfcAdapter::write(NdefMessage &ndefMessage)
170
187
else
171
188
{
172
189
#ifdef NDEF_USE_SERIAL
173
- Serial.print (F (" No driver for card type " ));
174
- Serial.println (type);
190
+ Serial.print (F (" No driver for card type " ));Serial.println (type);
175
191
#endif
176
192
return false ;
177
193
}
178
194
}
179
195
180
196
// Current tag will not be "visible" until removed from the RFID field
181
- void NfcAdapter::haltTag ()
182
- {
197
+ void NfcAdapter::haltTag () {
183
198
shield->PICC_HaltA ();
184
199
shield->PCD_StopCrypto1 ();
185
200
}
@@ -189,14 +204,18 @@ NfcTag::TagType NfcAdapter::guessTagType()
189
204
190
205
MFRC522::PICC_Type piccType = shield->PICC_GetType (shield->uid .sak );
191
206
192
- if (piccType == MFRC522Constants ::PICC_TYPE_MIFARE_1K)
207
+ if (piccType == PICC_Type ::PICC_TYPE_MIFARE_1K)
193
208
{
194
209
return NfcTag::TYPE_MIFARE_CLASSIC;
195
- }
196
- else if (piccType == MFRC522Constants ::PICC_TYPE_MIFARE_UL)
210
+ }
211
+ else if (piccType == PICC_Type ::PICC_TYPE_MIFARE_UL)
197
212
{
198
213
return NfcTag::TYPE_2;
199
214
}
215
+ else if (piccType == PICC_Type::PICC_TYPE_ISO_14443_4)
216
+ {
217
+ return NfcTag::TYPE_4;
218
+ }
200
219
else
201
220
{
202
221
return NfcTag::TYPE_UNKNOWN;
0 commit comments