Skip to content

Commit 0e3a31c

Browse files
authored
Merge pull request #6 from acegoal07/dev
Dev
2 parents 7e5b504 + 0069794 commit 0e3a31c

5 files changed

+99
-51
lines changed

application.fam

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ App(
55
entry_point="nfc_comparator_main",
66
stack_size=2 * 1024,
77
fap_category="NFC",
8-
fap_version="1.2",
8+
fap_version="1.3",
99
fap_icon="assets/Comparator_10px.png",
1010
fap_description="A tool to check if a physical NFC card is the same as a saved one",
1111
fap_author="acegoal07",

lib/reader_worker/nfc_comparator_reader_worker.c

+7-4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ void nfc_comparator_reader_worker_free(void* context) {
1919
nfc_free(nfc_comparator_reader_worker->nfc);
2020
furi_thread_free(nfc_comparator_reader_worker->thread);
2121
nfc_device_free(nfc_comparator_reader_worker->loaded_nfc_card);
22+
if(nfc_comparator_reader_worker->scanned_nfc_card) {
23+
nfc_device_free(nfc_comparator_reader_worker->scanned_nfc_card);
24+
}
2225
free(nfc_comparator_reader_worker);
2326
}
2427

@@ -125,10 +128,10 @@ int32_t nfc_comparator_reader_worker_task(void* context) {
125128
}
126129

127130
nfc_comparator_reader_worker->compare_checks.uid =
128-
furi_string_cmpi(loaded_uid_str, poller_uid_str) == 0 ? true : false;
131+
(furi_string_cmpi(loaded_uid_str, poller_uid_str) == 0);
129132

130133
nfc_comparator_reader_worker->compare_checks.uid_length =
131-
poller_uid_len == loaded_uid_len ? true : false;
134+
(poller_uid_len == loaded_uid_len);
132135

133136
furi_string_free(poller_uid_str);
134137
furi_string_free(loaded_uid_str);
@@ -143,11 +146,11 @@ int32_t nfc_comparator_reader_worker_task(void* context) {
143146
return 0;
144147
}
145148

146-
void nfc_comparator_reader_worker_set_loaded_nfc_card(void* context, const char* path_to_nfc_card) {
149+
bool nfc_comparator_reader_worker_set_loaded_nfc_card(void* context, const char* path_to_nfc_card) {
147150
NfcComparatorReaderWorker* nfc_comparator_reader_worker = context;
148151
furi_assert(nfc_comparator_reader_worker);
149152
nfc_comparator_reader_worker->loaded_nfc_card = nfc_device_alloc();
150-
nfc_device_load(nfc_comparator_reader_worker->loaded_nfc_card, path_to_nfc_card);
153+
return nfc_device_load(nfc_comparator_reader_worker->loaded_nfc_card, path_to_nfc_card);
151154
}
152155

153156
NfcComparatorReaderWorkerState nfc_comparator_reader_worker_get_state(void* context) {

lib/reader_worker/nfc_comparator_reader_worker.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#pragma once
22

33
#include <furi.h>
4-
54
#include <nfc/nfc.h>
65
#include <nfc/nfc_device.h>
76
#include <nfc/nfc_poller.h>
@@ -41,7 +40,7 @@ NfcCommand nfc_comparator_reader_worker_poller_callback(NfcGenericEvent event, v
4140

4241
int32_t nfc_comparator_reader_worker_task(void* context);
4342

44-
void nfc_comparator_reader_worker_set_loaded_nfc_card(void* context, const char* path_to_nfc_card);
43+
bool nfc_comparator_reader_worker_set_loaded_nfc_card(void* context, const char* path_to_nfc_card);
4544
NfcComparatorReaderWorkerState nfc_comparator_reader_worker_get_state(void* context);
4645
NfcComparatorReaderWorkerCompareChecks
4746
nfc_comparator_reader_worker_get_compare_checks(void* context);

nfc_comparator.h

+2
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,6 @@ typedef struct {
4343
Popup* popup;
4444
NfcComparatorReaderWorker* worker;
4545
NotificationApp* notification_app;
46+
FuriThread* thread;
47+
NfcComparatorReaderWorker* nfc_comparator_reader_worker;
4648
} NfcComparator;
+88-44
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,115 @@
11
#include "../nfc_comparator.h"
22

3-
void nfc_comparator_comparator_scene_on_enter(void* context) {
3+
int32_t nfc_comparator_comparator_task(void* context) {
44
NfcComparator* nfc_comparator = context;
55
furi_assert(nfc_comparator);
66

77
popup_set_context(nfc_comparator->popup, nfc_comparator);
88
view_dispatcher_switch_to_view(nfc_comparator->view_dispatcher, NfcComparatorView_Popup);
99

10-
NfcComparatorReaderWorker* worker = nfc_comparator_reader_worker_alloc();
11-
nfc_comparator_reader_worker_set_loaded_nfc_card(
12-
worker, furi_string_get_cstr(nfc_comparator->file_browser_output));
13-
nfc_comparator_reader_worker_start(worker);
14-
15-
start_led(nfc_comparator->notification_app, NfcComparatorLedState_Running);
16-
17-
while(nfc_comparator_reader_worker_get_state(worker) !=
18-
NfcComparatorReaderWorkerState_Stopped) {
19-
switch(nfc_comparator_reader_worker_get_state(worker)) {
20-
case NfcComparatorReaderWorkerState_Scanning:
21-
popup_set_header(nfc_comparator->popup, "Scanning....", 64, 5, AlignCenter, AlignTop);
22-
break;
23-
case NfcComparatorReaderWorkerState_Polling:
24-
popup_set_header(nfc_comparator->popup, "Polling....", 64, 5, AlignCenter, AlignTop);
25-
break;
26-
case NfcComparatorReaderWorkerState_Comparing:
27-
popup_set_header(nfc_comparator->popup, "Comparing....", 64, 5, AlignCenter, AlignTop);
28-
break;
29-
default:
30-
break;
10+
if(!nfc_comparator_reader_worker_set_loaded_nfc_card(
11+
nfc_comparator->nfc_comparator_reader_worker,
12+
furi_string_get_cstr(nfc_comparator->file_browser_output))) {
13+
popup_set_header(
14+
nfc_comparator->popup, "Failed to load\nselected card", 64, 5, AlignCenter, AlignTop);
15+
} else {
16+
nfc_comparator_reader_worker_start(nfc_comparator->nfc_comparator_reader_worker);
17+
18+
start_led(nfc_comparator->notification_app, NfcComparatorLedState_Running);
19+
20+
while(nfc_comparator_reader_worker_get_state(nfc_comparator->nfc_comparator_reader_worker) !=
21+
NfcComparatorReaderWorkerState_Stopped) {
22+
switch(
23+
nfc_comparator_reader_worker_get_state(nfc_comparator->nfc_comparator_reader_worker)) {
24+
case NfcComparatorReaderWorkerState_Scanning:
25+
popup_set_header(nfc_comparator->popup, "Scanning....", 64, 5, AlignCenter, AlignTop);
26+
break;
27+
case NfcComparatorReaderWorkerState_Polling:
28+
popup_set_header(nfc_comparator->popup, "Polling....", 64, 5, AlignCenter, AlignTop);
29+
break;
30+
case NfcComparatorReaderWorkerState_Comparing:
31+
popup_set_header(nfc_comparator->popup, "Comparing....", 64, 5, AlignCenter, AlignTop);
32+
break;
33+
default:
34+
break;
35+
}
36+
furi_delay_ms(100);
3137
}
32-
furi_delay_ms(100);
33-
}
3438

35-
nfc_comparator_reader_worker_stop(worker);
39+
nfc_comparator_reader_worker_stop(nfc_comparator->nfc_comparator_reader_worker);
40+
41+
start_led(nfc_comparator->notification_app, NfcComparatorLedState_complete);
42+
43+
popup_set_header(nfc_comparator->popup, "Compare Results", 64, 5, AlignCenter, AlignTop);
3644

37-
start_led(nfc_comparator->notification_app, NfcComparatorLedState_complete);
45+
NfcComparatorReaderWorkerCompareChecks checks =
46+
nfc_comparator_reader_worker_get_compare_checks(
47+
nfc_comparator->nfc_comparator_reader_worker);
3848

39-
popup_set_header(nfc_comparator->popup, "Compare Results", 64, 5, AlignCenter, AlignTop);
49+
FuriString* comparator = furi_string_alloc();
50+
furi_string_printf(
51+
comparator,
52+
"UID: %s\nUID length: %s\nProtocol: %s",
53+
checks.uid ? "Match" : "Mismatch",
54+
checks.uid_length ? "Match" : "Mismatch",
55+
checks.protocol ? "Match" : "Mismatch");
4056

41-
NfcComparatorReaderWorkerCompareChecks checks =
42-
nfc_comparator_reader_worker_get_compare_checks(worker);
43-
nfc_comparator_reader_worker_free(worker);
57+
char result_buffer[162];
58+
strncpy(result_buffer, furi_string_get_cstr(comparator), sizeof(result_buffer) - 1);
59+
result_buffer[sizeof(result_buffer) - 1] = '\0';
60+
furi_string_free(comparator);
61+
62+
popup_set_text(nfc_comparator->popup, result_buffer, 64, 35, AlignCenter, AlignCenter);
63+
furi_delay_ms(5);
64+
}
65+
return 0;
66+
}
67+
68+
void nfc_comparator_comparator_setup(void* context) {
69+
NfcComparator* nfc_comparator = context;
70+
nfc_comparator->thread = furi_thread_alloc_ex(
71+
"NfcComparatorComparingWorker", 4096, nfc_comparator_comparator_task, nfc_comparator);
72+
nfc_comparator->nfc_comparator_reader_worker = nfc_comparator_reader_worker_alloc();
73+
}
4474

45-
FuriString* comparator = furi_string_alloc();
46-
furi_string_printf(
47-
comparator,
48-
"UID: %s\nUID length: %s\nProtocol: %s",
49-
checks.uid ? "Match" : "Mismatch",
50-
checks.uid_length ? "Match" : "Mismatch",
51-
checks.protocol ? "Match" : "Mismatch");
75+
void nfc_comparator_comparator_free(void* context) {
76+
NfcComparator* nfc_comparator = context;
77+
furi_thread_free(nfc_comparator->thread);
78+
nfc_comparator_reader_worker_free(nfc_comparator->nfc_comparator_reader_worker);
79+
}
5280

53-
char result_buffer[162];
54-
strncpy(result_buffer, furi_string_get_cstr(comparator), sizeof(result_buffer) - 1);
81+
void nfc_comparator_comparator_start(void* context) {
82+
NfcComparator* nfc_comparator = context;
83+
furi_thread_start(nfc_comparator->thread);
84+
}
5585

56-
furi_string_free(comparator);
86+
void nfc_comparator_comparator_stop(void* context) {
87+
NfcComparator* nfc_comparator = context;
88+
furi_thread_join(nfc_comparator->thread);
89+
}
5790

58-
popup_set_text(nfc_comparator->popup, result_buffer, 64, 35, AlignCenter, AlignCenter);
91+
void nfc_comparator_comparator_scene_on_enter(void* context) {
92+
NfcComparator* nfc_comparator = context;
93+
nfc_comparator_comparator_setup(nfc_comparator);
94+
nfc_comparator_comparator_start(nfc_comparator);
5995
}
6096

6197
bool nfc_comparator_comparator_scene_on_event(void* context, SceneManagerEvent event) {
62-
UNUSED(event);
63-
UNUSED(context);
64-
return false;
98+
NfcComparator* nfc_comparator = context;
99+
bool consumed = false;
100+
if(event.event == 0) {
101+
nfc_comparator_reader_worker_stop(nfc_comparator->nfc_comparator_reader_worker);
102+
scene_manager_search_and_switch_to_previous_scene(
103+
nfc_comparator->scene_manager, NfcComparatorScene_MainMenu);
104+
consumed = true;
105+
}
106+
return consumed;
65107
}
66108

67109
void nfc_comparator_comparator_scene_on_exit(void* context) {
68110
NfcComparator* nfc_comparator = context;
69111
popup_reset(nfc_comparator->popup);
70112
stop_led(nfc_comparator->notification_app);
113+
nfc_comparator_comparator_stop(nfc_comparator);
114+
nfc_comparator_comparator_free(nfc_comparator);
71115
}

0 commit comments

Comments
 (0)