Skip to content

Commit 8405236

Browse files
committed
Tweaks + Icon + File Select
1 parent 3f28da1 commit 8405236

11 files changed

+82
-10
lines changed

application.fam

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ App(
66
stack_size=4 * 1024,
77
fap_category="NFC",
88
fap_version="0.1",
9-
fap_icon="assets/nfc_comparator.png",
9+
fap_icon="assets/Comparator_10px.png",
1010
fap_description="A app to check if a physical NFC card is the same as a saved one",
1111
fap_author="acegoal07",
1212
fap_weburl="https://github.com/acegoal07/FlipperZero_NFC_Comparator",
1313
fap_icon_assets="assets",
1414
fap_private_libs=[
15-
lib(
15+
Lib(
1616
name="reader_worker",
1717
),
1818
],

assets/Comparator_10px.png

388 Bytes
Loading

assets/Nfc_10px.png

304 Bytes
Loading

assets/nfc_comparator.png

-220 Bytes
Binary file not shown.

lib/reader_worker/nfc_comparator_reader_worker.c

-5
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,3 @@ void nfc_comparator_reader_worker_free(NfcComparatorReaderWorker* nfc_comparator
1818
nfc_scanner_free(nfc_comparator_reader_worker->nfc_scanner);
1919
free(nfc_comparator_reader_worker);
2020
}
21-
22-
void nfc_comparator_reader_worker_start(NfcComparatorReaderWorker* nfc_comparator_reader_worker) {
23-
furi_assert(nfc_comparator_reader_worker);
24-
nfc_poller_start(nfc_comparator_reader_worker->nfc_poller);
25-
}

lib/reader_worker/nfc_comparator_reader_worker.h

+3
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,6 @@ typedef struct {
2121
NfcPoller* nfc_poller;
2222
NfcScanner* nfc_scanner;
2323
} NfcComparatorReaderWorker;
24+
25+
NfcComparatorReaderWorker* nfc_comparator_reader_worker_alloc();
26+
void nfc_comparator_reader_worker_free(NfcComparatorReaderWorker* nfc_comparator_reader_worker);

nfc_comparator.c

+12
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@ static NfcComparator* nfc_comparator_alloc() {
1818
nfc_comparator->scene_manager =
1919
scene_manager_alloc(&nfc_comparator_scene_handlers, nfc_comparator);
2020
nfc_comparator->view_dispatcher = view_dispatcher_alloc();
21+
2122
nfc_comparator->submenu = submenu_alloc();
2223

24+
nfc_comparator->file_browser_output = furi_string_alloc();
25+
nfc_comparator->file_browser = file_browser_alloc(nfc_comparator->file_browser_output);
26+
2327
view_dispatcher_set_event_callback_context(nfc_comparator->view_dispatcher, nfc_comparator);
2428
view_dispatcher_set_custom_event_callback(
2529
nfc_comparator->view_dispatcher, nfc_comparator_custom_callback);
@@ -30,6 +34,10 @@ static NfcComparator* nfc_comparator_alloc() {
3034
nfc_comparator->view_dispatcher,
3135
NfcComparatorView_Submenu,
3236
submenu_get_view(nfc_comparator->submenu));
37+
view_dispatcher_add_view(
38+
nfc_comparator->view_dispatcher,
39+
NfcComparatorView_FileBrowser,
40+
file_browser_get_view(nfc_comparator->file_browser));
3341

3442
return nfc_comparator;
3543
}
@@ -38,11 +46,15 @@ static void nfc_comparator_free(NfcComparator* nfc_comparator) {
3846
furi_assert(nfc_comparator);
3947

4048
view_dispatcher_remove_view(nfc_comparator->view_dispatcher, NfcComparatorView_Submenu);
49+
view_dispatcher_remove_view(nfc_comparator->view_dispatcher, NfcComparatorView_FileBrowser);
4150

4251
scene_manager_free(nfc_comparator->scene_manager);
4352
view_dispatcher_free(nfc_comparator->view_dispatcher);
4453

4554
submenu_free(nfc_comparator->submenu);
55+
file_browser_free(nfc_comparator->file_browser);
56+
furi_string_free(nfc_comparator->file_browser_output);
57+
nfc_device_free(nfc_comparator->loaded_nfc_card);
4658

4759
free(nfc_comparator);
4860
}

nfc_comparator.h

+14-1
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,34 @@
1010
#include <gui/view_dispatcher.h>
1111
#include <gui/scene_manager.h>
1212
#include <gui/modules/submenu.h>
13+
#include <gui/modules/file_browser.h>
1314

1415
#include <nfc_device.h>
1516
#include <nfc_listener.h>
1617
#include <nfc_scanner.h>
1718

19+
#include <storage/storage.h>
20+
21+
#include <toolbox/stream/stream.h>
22+
#include <toolbox/stream/file_stream.h>
23+
#include <toolbox/path.h>
24+
1825
#include "scenes/nfc_comparator_scene.h"
1926

2027
#include "lib/reader_worker/nfc_comparator_reader_worker.h"
2128

2229
typedef enum {
23-
NfcComparatorView_Submenu
30+
NfcComparatorView_Submenu,
31+
NfcComparatorView_FileBrowser
2432
} NfcComparatorViews;
2533

2634
typedef struct {
2735
SceneManager* scene_manager;
2836
ViewDispatcher* view_dispatcher;
2937
Submenu* submenu;
38+
FileBrowser* file_browser;
39+
FuriString* file_browser_output;
40+
NfcDevice* loaded_nfc_card;
3041
} NfcComparator;
42+
43+
#define NFC_ITEM_LOCATION "/ext/nfc/"

scenes/nfc_comparator_scene_config.h

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
ADD_SCENE(nfc_comparator, main_menu, MainMenu)
2+
ADD_SCENE(nfc_comparator, select_nfc_card, SelectNfcCard)

scenes/nfc_comparator_scene_main_menu.c

+16-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
#include "../nfc_comparator.h"
33

44
typedef enum {
5-
NfcComparatorMainMenu_Start
5+
NfcComparatorMainMenu_Start,
6+
NfcComparatorMainMenu_SelectNfcCard
67
} NfcComparatorMainMenuMenuSelection;
78

89
void nfc_comparator_main_menu_menu_callback(void* context, uint32_t index) {
@@ -17,11 +18,20 @@ void nfc_comparator_main_menu_scene_on_enter(void* context) {
1718
submenu_set_header(nfc_comparator->submenu, furi_string_get_cstr(header));
1819
furi_string_free(header);
1920

20-
submenu_add_item(
21+
submenu_add_lockable_item(
2122
nfc_comparator->submenu,
2223
"Start",
2324
NfcComparatorMainMenu_Start,
2425
nfc_comparator_main_menu_menu_callback,
26+
nfc_comparator,
27+
!nfc_comparator->loaded_nfc_card,
28+
"No NFC card selected");
29+
30+
submenu_add_item(
31+
nfc_comparator->submenu,
32+
"Select NFC Card",
33+
NfcComparatorMainMenu_SelectNfcCard,
34+
nfc_comparator_main_menu_menu_callback,
2535
nfc_comparator);
2636

2737
view_dispatcher_switch_to_view(nfc_comparator->view_dispatcher, NfcComparatorView_Submenu);
@@ -37,6 +47,10 @@ bool nfc_comparator_main_menu_scene_on_event(void* context, SceneManagerEvent ev
3747
// scene_manager_next_scene(nfc_comparator->scene_manager, NfcComparatorScene_Emulation);
3848
// consumed = true;
3949
// break;
50+
case NfcComparatorMainMenu_SelectNfcCard:
51+
scene_manager_next_scene(nfc_comparator->scene_manager, NfcComparatorScene_SelectNfcCard);
52+
consumed = true;
53+
break;
4054
default:
4155
break;
4256
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include "../nfc_comparator.h"
2+
3+
void nfc_comparator_select_nfc_card_menu_callback(void* context) {
4+
NfcComparator* nfc_comparator = context;
5+
nfc_comparator->loaded_nfc_card = nfc_device_alloc();
6+
nfc_device_load(
7+
nfc_comparator->loaded_nfc_card, furi_string_get_cstr(nfc_comparator->file_browser_output));
8+
furi_string_reset(nfc_comparator->file_browser_output);
9+
scene_manager_previous_scene(nfc_comparator->scene_manager);
10+
}
11+
12+
void nfc_comparator_select_nfc_card_scene_on_enter(void* context) {
13+
NfcComparator* nfc_comparator = context;
14+
file_browser_configure(
15+
nfc_comparator->file_browser, ".nfc", NFC_ITEM_LOCATION, true, true, &I_Nfc_10px, true);
16+
file_browser_set_callback(
17+
nfc_comparator->file_browser, nfc_comparator_select_nfc_card_menu_callback, nfc_comparator);
18+
FuriString* tmp_str = furi_string_alloc_set_str(NFC_ITEM_LOCATION);
19+
file_browser_start(nfc_comparator->file_browser, tmp_str);
20+
furi_string_free(tmp_str);
21+
22+
view_dispatcher_switch_to_view(nfc_comparator->view_dispatcher, NfcComparatorView_FileBrowser);
23+
}
24+
25+
bool nfc_comparator_select_nfc_card_scene_on_event(void* context, SceneManagerEvent event) {
26+
UNUSED(event);
27+
UNUSED(context);
28+
return false;
29+
}
30+
31+
void nfc_comparator_select_nfc_card_scene_on_exit(void* context) {
32+
NfcComparator* nfc_comparator = context;
33+
file_browser_stop(nfc_comparator->file_browser);
34+
}

0 commit comments

Comments
 (0)