Skip to content

Commit 173c941

Browse files
gornekichskotopes
andauthored
NFC: Add Skylanders support (#1553)
* nfc: add skylanders support * nfc: format sources Co-authored-by: あく <alleteam@gmail.com>
1 parent f3d7d7d commit 173c941

File tree

4 files changed

+10
-19
lines changed

4 files changed

+10
-19
lines changed

lib/nfc/parsers/troyka_parser.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ bool troyka_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) {
3939

4040
MfClassicReader reader = {};
4141
FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data;
42-
mf_classic_get_type(nfc_data->atqa[0], nfc_data->atqa[1], nfc_data->sak, &reader);
42+
reader.type = mf_classic_get_classic_type(nfc_data->atqa[0], nfc_data->atqa[1], nfc_data->sak);
43+
4344
for(size_t i = 0; i < COUNT_OF(troyka_keys); i++) {
4445
mf_classic_reader_add_sector(
4546
&reader, troyka_keys[i].sector, troyka_keys[i].key_a, troyka_keys[i].key_b);

lib/nfc/protocols/mifare_classic.c

+6-15
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,9 @@ bool mf_classic_check_card_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK) {
324324
UNUSED(ATQA1);
325325
if((ATQA0 == 0x44 || ATQA0 == 0x04) && (SAK == 0x08 || SAK == 0x88 || SAK == 0x09)) {
326326
return true;
327+
} else if((ATQA0 == 0x01) && (ATQA1 == 0x0F) && (SAK == 0x01)) {
328+
//skylanders support
329+
return true;
327330
} else if((ATQA0 == 0x42 || ATQA0 == 0x02) && (SAK == 0x18)) {
328331
return true;
329332
} else {
@@ -335,27 +338,15 @@ MfClassicType mf_classic_get_classic_type(int8_t ATQA0, uint8_t ATQA1, uint8_t S
335338
UNUSED(ATQA1);
336339
if((ATQA0 == 0x44 || ATQA0 == 0x04) && (SAK == 0x08 || SAK == 0x88 || SAK == 0x09)) {
337340
return MfClassicType1k;
341+
} else if((ATQA0 == 0x01) && (ATQA1 == 0x0F) && (SAK == 0x01)) {
342+
//skylanders support
343+
return MfClassicType1k;
338344
} else if((ATQA0 == 0x42 || ATQA0 == 0x02) && (SAK == 0x18)) {
339345
return MfClassicType4k;
340346
}
341347
return MfClassicType1k;
342348
}
343349

344-
bool mf_classic_get_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK, MfClassicReader* reader) {
345-
UNUSED(ATQA1);
346-
furi_assert(reader);
347-
memset(reader, 0, sizeof(MfClassicReader));
348-
349-
if((ATQA0 == 0x44 || ATQA0 == 0x04) && (SAK == 0x08 || SAK == 0x88 || SAK == 0x09)) {
350-
reader->type = MfClassicType1k;
351-
} else if((ATQA0 == 0x42 || ATQA0 == 0x02) && (SAK == 0x18)) {
352-
reader->type = MfClassicType4k;
353-
} else {
354-
return false;
355-
}
356-
return true;
357-
}
358-
359350
void mf_classic_reader_add_sector(
360351
MfClassicReader* reader,
361352
uint8_t sector,

lib/nfc/protocols/mifare_classic.h

-2
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,6 @@ bool mf_classic_check_card_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK);
8282

8383
MfClassicType mf_classic_get_classic_type(int8_t ATQA0, uint8_t ATQA1, uint8_t SAK);
8484

85-
bool mf_classic_get_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK, MfClassicReader* reader);
86-
8785
uint8_t mf_classic_get_total_sectors_num(MfClassicType type);
8886

8987
uint8_t mf_classic_get_sector_trailer_block_num_by_sector(uint8_t sector);

lib/nfc/protocols/mifare_common.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ MifareType mifare_common_get_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK) {
77
type = MifareTypeUltralight;
88
} else if(
99
((ATQA0 == 0x44 || ATQA0 == 0x04) && (SAK == 0x08 || SAK == 0x88 || SAK == 0x09)) ||
10-
((ATQA0 == 0x42 || ATQA0 == 0x02) && (SAK == 0x18))) {
10+
((ATQA0 == 0x42 || ATQA0 == 0x02) && (SAK == 0x18)) ||
11+
((ATQA0 == 0x01) && (ATQA1 == 0x0F) && (SAK == 0x01))) {
1112
type = MifareTypeClassic;
1213
} else if(ATQA0 == 0x44 && ATQA1 == 0x03 && SAK == 0x20) {
1314
type = MifareTypeDesfire;

0 commit comments

Comments
 (0)