Skip to content

Commit ba8919b

Browse files
committed
NFC: Fix CLI with NTAG4xx and Type 4 Tag support
1 parent 72e7713 commit ba8919b

8 files changed

Lines changed: 93 additions & 10 deletions

File tree

applications/main/nfc/application.fam

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,13 +294,15 @@ App(
294294
"cli/commands/dump/protocols/iso14443_4a/nfc_cli_dump_iso14443_4a.c",
295295
"cli/commands/dump/protocols/iso14443_4b/nfc_cli_dump_iso14443_4b.c",
296296
"cli/commands/dump/protocols/iso15693_3/nfc_cli_dump_iso15693_3.c",
297+
"cli/commands/dump/protocols/felica/nfc_cli_dump_felica.c",
297298
"cli/commands/dump/protocols/mf_ultralight/nfc_cli_dump_mf_ultralight.c",
298299
"cli/commands/dump/protocols/mf_classic/nfc_cli_dump_mf_classic.c",
299300
"cli/commands/dump/protocols/mf_plus/nfc_cli_dump_mf_plus.c",
300301
"cli/commands/dump/protocols/mf_desfire/nfc_cli_dump_mf_desfire.c",
301302
"cli/commands/dump/protocols/slix/nfc_cli_dump_slix.c",
302303
"cli/commands/dump/protocols/st25tb/nfc_cli_dump_st25tb.c",
303-
"cli/commands/dump/protocols/felica/nfc_cli_dump_felica.c",
304+
"cli/commands/dump/protocols/ntag4xx/nfc_cli_dump_ntag4xx.c",
305+
"cli/commands/dump/protocols/type_4_tag/nfc_cli_dump_type_4_tag.c",
304306
"cli/commands/mfu/nfc_cli_command_mfu.c",
305307
"cli/commands/mfu/nfc_cli_action_info.c",
306308
"cli/commands/mfu/nfc_cli_action_rdbl.c",

applications/main/nfc/cli/commands/dump/nfc_cli_command_dump.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
#include "protocols/iso14443_4a/nfc_cli_dump_iso14443_4a.h"
1010
#include "protocols/iso14443_4b/nfc_cli_dump_iso14443_4b.h"
1111
#include "protocols/iso15693_3/nfc_cli_dump_iso15693_3.h"
12+
#include "protocols/felica/nfc_cli_dump_felica.h"
13+
#include "protocols/mf_ultralight/nfc_cli_dump_mf_ultralight.h"
1214
#include "protocols/mf_classic/nfc_cli_dump_mf_classic.h"
13-
#include "protocols/mf_desfire/nfc_cli_dump_mf_desfire.h"
1415
#include "protocols/mf_plus/nfc_cli_dump_mf_plus.h"
15-
#include "protocols/mf_ultralight/nfc_cli_dump_mf_ultralight.h"
16+
#include "protocols/mf_desfire/nfc_cli_dump_mf_desfire.h"
1617
#include "protocols/slix/nfc_cli_dump_slix.h"
1718
#include "protocols/st25tb/nfc_cli_dump_st25tb.h"
18-
#include "protocols/felica/nfc_cli_dump_felica.h"
19+
#include "protocols/ntag4xx/nfc_cli_dump_ntag4xx.h"
20+
#include "protocols/type_4_tag/nfc_cli_dump_type_4_tag.h"
1921

2022
#include <datetime.h>
2123
#include <furi_hal_rtc.h>
@@ -81,18 +83,20 @@ static bool nfc_cli_dump_parse_filename_key(FuriString* value, void* output) {
8183
}
8284

8385
NfcGenericCallback protocol_poller_callbacks[NfcProtocolNum] = {
84-
[NfcProtocolMfUltralight] = nfc_cli_dump_poller_callback_mf_ultralight,
85-
[NfcProtocolMfClassic] = nfc_cli_dump_poller_callback_mf_classic,
86-
[NfcProtocolFelica] = nfc_cli_dump_poller_callback_felica,
8786
[NfcProtocolIso14443_3a] = nfc_cli_dump_poller_callback_iso14443_3a,
8887
[NfcProtocolIso14443_3b] = nfc_cli_dump_poller_callback_iso14443_3b,
8988
[NfcProtocolIso14443_4a] = nfc_cli_dump_poller_callback_iso14443_4a,
9089
[NfcProtocolIso14443_4b] = nfc_cli_dump_poller_callback_iso14443_4b,
9190
[NfcProtocolIso15693_3] = nfc_cli_dump_poller_callback_iso15693_3,
92-
[NfcProtocolSlix] = nfc_cli_dump_poller_callback_slix,
93-
[NfcProtocolMfDesfire] = nfc_cli_dump_poller_callback_mf_desfire,
91+
[NfcProtocolFelica] = nfc_cli_dump_poller_callback_felica,
92+
[NfcProtocolMfUltralight] = nfc_cli_dump_poller_callback_mf_ultralight,
93+
[NfcProtocolMfClassic] = nfc_cli_dump_poller_callback_mf_classic,
9494
[NfcProtocolMfPlus] = nfc_cli_dump_poller_callback_mf_plus,
95+
[NfcProtocolMfDesfire] = nfc_cli_dump_poller_callback_mf_desfire,
96+
[NfcProtocolSlix] = nfc_cli_dump_poller_callback_slix,
9597
[NfcProtocolSt25tb] = nfc_cli_dump_poller_callback_st25tb,
98+
[NfcProtocolNtag4xx] = nfc_cli_dump_poller_callback_ntag4xx,
99+
[NfcProtocolType4Tag] = nfc_cli_dump_poller_callback_type_4_tag,
96100
};
97101

98102
static void nfc_cli_dump_generate_filename(FuriString* file_path) {
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#include "nfc_cli_dump_ntag4xx.h"
2+
#include <nfc/protocols/ntag4xx/ntag4xx_poller.h>
3+
4+
#define TAG "NTAG4XX"
5+
6+
NfcCommand nfc_cli_dump_poller_callback_ntag4xx(NfcGenericEvent event, void* context) {
7+
furi_assert(context);
8+
furi_assert(event.protocol == NfcProtocolNtag4xx);
9+
furi_assert(event.event_data);
10+
11+
NfcCliDumpContext* instance = context;
12+
const Ntag4xxPollerEvent* ntag4xx_event = event.event_data;
13+
14+
NfcCommand command = NfcCommandContinue;
15+
16+
if(ntag4xx_event->type == Ntag4xxPollerEventTypeReadSuccess) {
17+
nfc_device_set_data(
18+
instance->nfc_device, NfcProtocolNtag4xx, nfc_poller_get_data(instance->poller));
19+
instance->result = NfcCliDumpErrorNone;
20+
command = NfcCommandStop;
21+
} else if(ntag4xx_event->type == Ntag4xxPollerEventTypeReadFailed) {
22+
instance->result = NfcCliDumpErrorFailedToRead;
23+
command = NfcCommandReset;
24+
}
25+
26+
if(command == NfcCommandStop) {
27+
furi_semaphore_release(instance->sem_done);
28+
}
29+
30+
return command;
31+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#pragma once
2+
3+
#include "../nfc_cli_dump_common_types.h"
4+
5+
NfcCommand nfc_cli_dump_poller_callback_ntag4xx(NfcGenericEvent event, void* context);
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#include "nfc_cli_dump_type_4_tag.h"
2+
#include <nfc/protocols/type_4_tag/type_4_tag_poller.h>
3+
4+
#define TAG "TYPE4TAG"
5+
6+
NfcCommand nfc_cli_dump_poller_callback_type_4_tag(NfcGenericEvent event, void* context) {
7+
furi_assert(context);
8+
furi_assert(event.protocol == NfcProtocolType4Tag);
9+
furi_assert(event.event_data);
10+
11+
NfcCliDumpContext* instance = context;
12+
const Type4TagPollerEvent* type_4_tag_event = event.event_data;
13+
14+
NfcCommand command = NfcCommandContinue;
15+
16+
if(type_4_tag_event->type == Type4TagPollerEventTypeReadSuccess) {
17+
nfc_device_set_data(
18+
instance->nfc_device, NfcProtocolType4Tag, nfc_poller_get_data(instance->poller));
19+
instance->result = NfcCliDumpErrorNone;
20+
command = NfcCommandStop;
21+
} else if(type_4_tag_event->type == Type4TagPollerEventTypeReadFailed) {
22+
instance->result = NfcCliDumpErrorFailedToRead;
23+
command = NfcCommandReset;
24+
}
25+
26+
if(command == NfcCommandStop) {
27+
furi_semaphore_release(instance->sem_done);
28+
}
29+
30+
return command;
31+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#pragma once
2+
3+
#include "../nfc_cli_dump_common_types.h"
4+
5+
NfcCommand nfc_cli_dump_poller_callback_type_4_tag(NfcGenericEvent event, void* context);

applications/main/nfc/cli/commands/helpers/nfc_cli_format.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ static const char* protocol_names[NfcProtocolNum] = {
99
[NfcProtocolFelica] = "FeliCa",
1010
[NfcProtocolMfUltralight] = "Mifare Ultralight",
1111
[NfcProtocolMfClassic] = "Mifare Classic",
12-
[NfcProtocolMfDesfire] = "Mifare DESFire",
1312
[NfcProtocolMfPlus] = "Mifare Plus",
13+
[NfcProtocolMfDesfire] = "Mifare DESFire",
1414
[NfcProtocolSlix] = "Slix",
1515
[NfcProtocolSt25tb] = "St25tb",
16+
[NfcProtocolNtag4xx] = "Ntag4xx",
17+
[NfcProtocolType4Tag] = "Type 4 Tag",
1618
};
1719

1820
const char* nfc_cli_get_protocol_name(NfcProtocol protocol) {

applications/main/nfc/cli/commands/raw/nfc_cli_command_raw.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,12 @@ const NfcCliRawProtocolSpecificHandler nfc_cli_raw_protocol_handlers[] = {
117117
[NfcProtocolFelica] = nfc_cli_raw_felica_handler,
118118
[NfcProtocolMfUltralight] = NULL,
119119
[NfcProtocolMfClassic] = NULL,
120+
[NfcProtocolMfPlus] = NULL,
120121
[NfcProtocolMfDesfire] = NULL,
121122
[NfcProtocolSlix] = NULL,
122123
[NfcProtocolSt25tb] = NULL,
124+
[NfcProtocolNtag4xx] = NULL,
125+
[NfcProtocolType4Tag] = NULL,
123126
};
124127

125128
static NfcCommand nfc_cli_raw_poller_callback(NfcGenericEventEx event, void* context) {

0 commit comments

Comments
 (0)