|
4 | 4 |
|
5 | 5 | #define MF_DESFIRE_PROTOCOL_NAME "Mifare DESFire"
|
6 | 6 |
|
| 7 | +typedef struct { |
| 8 | + uint8_t minor; |
| 9 | + uint8_t major; |
| 10 | + uint8_t storage; |
| 11 | + const char* full_name; |
| 12 | + const char* type_name; |
| 13 | +} MfDesfireNames; |
| 14 | + |
| 15 | +static const MfDesfireNames mf_desfire_names[] = { |
| 16 | + {0x02, 0x00, 0xFF, "Mifare DESFire 4K (MF3ICD40)", "4K (MF3ICD40)"}, |
| 17 | + {0x00, 0x01, 0x16, "Mifare DESFire EV1 2K", "EV1 2K"}, |
| 18 | + {0x00, 0x01, 0x18, "Mifare DESFire EV1 4K", "EV1 4K"}, |
| 19 | + {0x00, 0x01, 0x1A, "Mifare DESFire EV1 8K", "EV1 8K"}, |
| 20 | + {0x00, 0x01, 0xFF, "Mifare DESFire EV1", "EV1"}, |
| 21 | + {0x00, 0x12, 0x16, "Mifare DESFire EV2 2K", "EV2 2K"}, |
| 22 | + {0x00, 0x12, 0x18, "Mifare DESFire EV2 4K", "EV2 4K"}, |
| 23 | + {0x00, 0x12, 0x1A, "Mifare DESFire EV2 8K", "EV2 8K"}, |
| 24 | + {0x00, 0x12, 0xFF, "Mifare DESFire EV2", "EV2"}, |
| 25 | + {0x00, 0x22, 0x1C, "Mifare DESFire EV2 XL 16K", "EV2 XL 16K"}, |
| 26 | + {0x00, 0x22, 0x1E, "Mifare DESFire EV2 XL 32K", "EV2 XL 32K"}, |
| 27 | + {0x00, 0x22, 0xFF, "Mifare DESFire EV2 XL", "EV2 XL"}, |
| 28 | + {0x00, 0x33, 0x16, "Mifare DESFire EV3 2K", "EV3 2K"}, |
| 29 | + {0x00, 0x33, 0x18, "Mifare DESFire EV3 4K", "EV3 4K"}, |
| 30 | + {0x00, 0x33, 0x1A, "Mifare DESFire EV3 8K", "EV3 8K"}, |
| 31 | + {0x00, 0x33, 0xFF, "Mifare DESFire EV3", "EV3"}, |
| 32 | + {0xFF, 0xFF, 0xFF, "Unknown Mifare DESFire", "UNK"}, |
| 33 | +}; |
| 34 | + |
7 | 35 | const NfcDeviceBase nfc_device_mf_desfire = {
|
8 | 36 | .protocol_name = MF_DESFIRE_PROTOCOL_NAME,
|
9 | 37 | .alloc = (NfcDeviceAlloc)mf_desfire_alloc,
|
@@ -229,9 +257,24 @@ bool mf_desfire_is_equal(const MfDesfireData* data, const MfDesfireData* other)
|
229 | 257 | }
|
230 | 258 |
|
231 | 259 | const char* mf_desfire_get_device_name(const MfDesfireData* data, NfcDeviceNameType name_type) {
|
232 |
| - UNUSED(data); |
233 |
| - UNUSED(name_type); |
234 |
| - return MF_DESFIRE_PROTOCOL_NAME; |
| 260 | + furi_check(data); |
| 261 | + |
| 262 | + for(size_t i = 0; i < COUNT_OF(mf_desfire_names); i++) { |
| 263 | + if((mf_desfire_names[i].minor == data->version.hw_minor || |
| 264 | + mf_desfire_names[i].minor == 0xFF) && |
| 265 | + (mf_desfire_names[i].major == data->version.hw_major || |
| 266 | + mf_desfire_names[i].major == 0xFF) && |
| 267 | + (mf_desfire_names[i].storage == data->version.hw_storage || |
| 268 | + mf_desfire_names[i].storage == 0xFF)) { |
| 269 | + if(name_type == NfcDeviceNameTypeFull) { |
| 270 | + return mf_desfire_names[i].full_name; |
| 271 | + } else { |
| 272 | + return mf_desfire_names[i].type_name; |
| 273 | + } |
| 274 | + } |
| 275 | + } |
| 276 | + |
| 277 | + return "Unknown Mifare DESFire"; |
235 | 278 | }
|
236 | 279 |
|
237 | 280 | const uint8_t* mf_desfire_get_uid(const MfDesfireData* data, size_t* uid_len) {
|
|
0 commit comments