diff options
author | gornekich <n.gorbadey@gmail.com> | 2021-07-16 00:39:21 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-16 00:39:21 +0300 |
commit | a837bc5d008c4333df4aded72880fb5689a8a000 (patch) | |
tree | 9395a34feaa6035acad2e8cf7b07b66920757e3c /applications/nfc | |
parent | 851a44dc59ea614a767ea4e031752e9537a1f9ca (diff) |
[FL-1537] NFC launch from archive (#580)
* archive: pass full file path as App argument
* nfc: add starting emulation from Archive
* nfc, ibutton: rework setting key name with path lib
* archive: revert launching app with full file path
Co-authored-by: あく <alleteam@gmail.com>
Diffstat (limited to 'applications/nfc')
-rwxr-xr-x | applications/nfc/nfc.c | 10 | ||||
-rwxr-xr-x | applications/nfc/nfc_device.c | 20 | ||||
-rw-r--r-- | applications/nfc/nfc_device.h | 2 |
3 files changed, 26 insertions, 6 deletions
diff --git a/applications/nfc/nfc.c b/applications/nfc/nfc.c index 47760d4f..d970eb33 100755 --- a/applications/nfc/nfc.c +++ b/applications/nfc/nfc.c @@ -95,9 +95,6 @@ Nfc* nfc_alloc() { NfcViewMifareUl, nfc_mifare_ul_get_view(nfc->nfc_mifare_ul)); - // Run first scene - scene_manager_next_scene(nfc->scene_manager, NfcSceneStart); - return nfc; } @@ -169,6 +166,13 @@ void nfc_free(Nfc* nfc) { int32_t nfc_task(void* p) { Nfc* nfc = nfc_alloc(); + // Check argument and run corresponding scene + if(p && nfc_device_load(&nfc->device, p)) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateUid); + } else { + scene_manager_next_scene(nfc->scene_manager, NfcSceneStart); + } + view_dispatcher_run(nfc->nfc_common.view_dispatcher); nfc_free(nfc); diff --git a/applications/nfc/nfc_device.c b/applications/nfc/nfc_device.c index ad143e80..d92d0c3d 100755 --- a/applications/nfc/nfc_device.c +++ b/applications/nfc/nfc_device.c @@ -1,6 +1,7 @@ #include "nfc_device.h" #include <file-worker.h> +#include <path.h> #define NFC_DEVICE_MAX_DATA_LEN 14 @@ -86,10 +87,25 @@ static bool nfc_device_load_data(FileWorker* file_worker, string_t path, NfcDevi return true; } -bool nfc_device_load(NfcDevice* dev, const char* dev_name) { +bool nfc_device_load(NfcDevice* dev, const char* file_path) { furi_assert(dev); + furi_assert(file_path); - return true; + FileWorker* file_worker = file_worker_alloc(false); + // Load device data + string_t path; + string_init_set_str(path, file_path); + bool dev_load = nfc_device_load_data(file_worker, path, dev); + if(dev_load) { + // Set device name + path_extract_filename_no_ext(file_path, path); + nfc_device_set_name(dev, string_get_cstr(path)); + } + string_clear(path); + file_worker_close(file_worker); + file_worker_free(file_worker); + + return dev_load; } bool nfc_file_select(NfcDevice* dev) { diff --git a/applications/nfc/nfc_device.h b/applications/nfc/nfc_device.h index ac922320..6d6486c6 100644 --- a/applications/nfc/nfc_device.h +++ b/applications/nfc/nfc_device.h @@ -55,6 +55,6 @@ void nfc_device_set_name(NfcDevice* dev, const char* name); bool nfc_device_save(NfcDevice* dev, const char* dev_name); -bool nfc_device_load(NfcDevice* dev, const char* dev_name); +bool nfc_device_load(NfcDevice* dev, const char* file_path); bool nfc_file_select(NfcDevice* dev); |