diff --git a/applications/ibutton/ibutton-app.cpp b/applications/ibutton/ibutton-app.cpp index cf29d884..a154b762 100644 --- a/applications/ibutton/ibutton-app.cpp +++ b/applications/ibutton/ibutton-app.cpp @@ -3,6 +3,7 @@ #include #include #include +#include const char* iButtonApp::app_folder = "ibutton"; const char* iButtonApp::app_extension = ".ibtn"; @@ -325,17 +326,10 @@ bool iButtonApp::load_key(const char* key_name) { string_t key_path; string_init_set_str(key_path, key_name); - if(!string_start_with_str_p(key_path, app_folder) || - !string_end_with_str_p(key_path, app_extension)) { - string_clear(key_path); - return false; - } result = load_key_data(key_path); if(result) { - uint8_t folder_end = strlen(app_folder) + 1; - uint8_t extension_start = string_size(key_path) - strlen(app_extension); - string_mid(key_path, folder_end, extension_start - folder_end); + path_extract_filename_no_ext(key_name, key_path); get_key()->set_name(string_get_cstr(key_path)); } string_clear(key_path); 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 +#include #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);