From fc057d9a04c6f66a52a36e9b4cb21900297c1b05 Mon Sep 17 00:00:00 2001 From: RogueMaster Date: Sat, 19 Nov 2022 02:12:53 -0500 Subject: [PATCH] Revert "Merge branch 'pr/420' into 420" This reverts commit 386cef08314725eccee7cf942ead0d5e23953ee7, reversing changes made to 0cddd8008aa7f5219654538776d0a15212d06a9c. --- .../nfc/scenes/nfc_scene_mf_ultralight_menu.c | 10 ++- .../nfc_scene_mf_ultralight_read_auth.c | 25 ++----- ...nfc_scene_mf_ultralight_read_auth_result.c | 19 +---- .../nfc_scene_mf_ultralight_unlock_auto.c | 20 ++---- .../nfc_scene_mf_ultralight_unlock_menu.c | 28 +++----- .../nfc_scene_mf_ultralight_unlock_warn.c | 71 +++---------------- lib/nfc/nfc_worker.c | 3 +- lib/nfc/nfc_worker.h | 1 + lib/nfc/protocols/mifare_ultralight.h | 1 - 9 files changed, 43 insertions(+), 135 deletions(-) diff --git a/applications/main/nfc/scenes/nfc_scene_mf_ultralight_menu.c b/applications/main/nfc/scenes/nfc_scene_mf_ultralight_menu.c index d7b5f0758..ddf30c54a 100644 --- a/applications/main/nfc/scenes/nfc_scene_mf_ultralight_menu.c +++ b/applications/main/nfc/scenes/nfc_scene_mf_ultralight_menu.c @@ -23,8 +23,14 @@ void nfc_scene_mf_ultralight_menu_on_enter(void* context) { if(!mf_ul_is_full_capture(data)) { submenu_add_item( submenu, - "Unlock", - SubmenuIndexUnlock, + "Unlock With Reader", + SubmenuIndexUnlockByReader, + nfc_scene_mf_ultralight_menu_submenu_callback, + nfc); + submenu_add_item( + submenu, + "Unlock With Password", + SubmenuIndexUnlockByPassword, nfc_scene_mf_ultralight_menu_submenu_callback, nfc); } diff --git a/applications/main/nfc/scenes/nfc_scene_mf_ultralight_read_auth.c b/applications/main/nfc/scenes/nfc_scene_mf_ultralight_read_auth.c index ae6652071..22a9d51b5 100644 --- a/applications/main/nfc/scenes/nfc_scene_mf_ultralight_read_auth.c +++ b/applications/main/nfc/scenes/nfc_scene_mf_ultralight_read_auth.c @@ -24,29 +24,25 @@ void nfc_scene_mf_ultralight_read_auth_set_state(Nfc* nfc, NfcSceneMfUlReadState if(curr_state != state) { if(state == NfcSceneMfUlReadStateDetecting) { popup_reset(nfc->popup); - popup_set_text(nfc->popup, "Apply the\ntarget card", 97, 24, AlignCenter, AlignTop); + popup_set_text( + nfc->popup, "Apply Card To\nFlipper's Back", 97, 24, AlignCenter, AlignTop); popup_set_icon(nfc->popup, 0, 8, &I_NFC_manual_60x50); - nfc_blink_read_start(nfc); } else if(state == NfcSceneMfUlReadStateReading) { popup_reset(nfc->popup); popup_set_header( nfc->popup, "Reading Card\nDon't Move...", 85, 24, AlignCenter, AlignTop); popup_set_icon(nfc->popup, 12, 23, &A_Loading_24); - nfc_blink_detect_start(nfc); } else if(state == NfcSceneMfUlReadStateNotSupportedCard) { popup_reset(nfc->popup); popup_set_header(nfc->popup, "Wrong Type Of Card!", 64, 3, AlignCenter, AlignTop); popup_set_text( nfc->popup, - "Only MIFARE\nUltralight & NTAG\nare supported", + "Only MIFARE\nUltralight & NTAG\n Are Supported", 4, 22, AlignLeft, AlignTop); popup_set_icon(nfc->popup, 73, 20, &I_DolphinCommon_56x48); - nfc_blink_stop(nfc); - notification_message(nfc->notifications, &sequence_error); - notification_message(nfc->notifications, &sequence_set_red_255); } scene_manager_set_scene_state(nfc->scene_manager, NfcSceneMfUltralightReadAuth, state); } @@ -66,6 +62,8 @@ void nfc_scene_mf_ultralight_read_auth_on_enter(void* context) { &nfc->dev->dev_data, nfc_scene_mf_ultralight_read_auth_worker_callback, nfc); + + nfc_blink_read_start(nfc); } bool nfc_scene_mf_ultralight_read_auth_on_event(void* context, SceneManagerEvent event) { @@ -88,17 +86,8 @@ bool nfc_scene_mf_ultralight_read_auth_on_event(void* context, SceneManagerEvent nfc, NfcSceneMfUlReadStateNotSupportedCard); } } else if(event.type == SceneManagerEventTypeBack) { - MfUltralightData* mf_ul_data = &nfc->dev->dev_data.mf_ul_data; - NfcScene next_scene; - if(mf_ul_data->auth_method == MfUltralightAuthMethodManual) { - next_scene = NfcSceneMfUltralightKeyInput; - } else if(mf_ul_data->auth_method == MfUltralightAuthMethodAuto) { - next_scene = NfcSceneMfUltralightUnlockAuto; - } else { - next_scene = NfcSceneMfUltralightUnlockMenu; - } - consumed = - scene_manager_search_and_switch_to_previous_scene(nfc->scene_manager, next_scene); + consumed = scene_manager_search_and_switch_to_previous_scene( + nfc->scene_manager, NfcSceneMfUltralightUnlockMenu); } return consumed; } diff --git a/applications/main/nfc/scenes/nfc_scene_mf_ultralight_read_auth_result.c b/applications/main/nfc/scenes/nfc_scene_mf_ultralight_read_auth_result.c index 86d670cbf..ac2eea182 100644 --- a/applications/main/nfc/scenes/nfc_scene_mf_ultralight_read_auth_result.c +++ b/applications/main/nfc/scenes/nfc_scene_mf_ultralight_read_auth_result.c @@ -68,7 +68,6 @@ void nfc_scene_mf_ultralight_read_auth_result_on_enter(void* context) { nfc); furi_string_free(temp_str); - notification_message(nfc->notifications, &sequence_set_green_255); view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); } @@ -85,20 +84,8 @@ bool nfc_scene_mf_ultralight_read_auth_result_on_event(void* context, SceneManag consumed = true; } } else if(event.type == SceneManagerEventTypeBack) { - MfUltralightData* mf_ul_data = &nfc->dev->dev_data.mf_ul_data; - if(mf_ul_data->auth_method == MfUltralightAuthMethodManual || - mf_ul_data->auth_method == MfUltralightAuthMethodAuto) { - consumed = scene_manager_previous_scene(nfc->scene_manager); - } else { - NfcScene next_scene; - if((mf_ul_data->data_read == mf_ul_data->data_size) && (mf_ul_data->data_read > 0)) - next_scene = NfcSceneMfUltralightMenu; - else - next_scene = NfcSceneMfUltralightUnlockMenu; - - consumed = - scene_manager_search_and_switch_to_previous_scene(nfc->scene_manager, next_scene); - } + consumed = scene_manager_search_and_switch_to_previous_scene( + nfc->scene_manager, NfcSceneMfUltralightUnlockMenu); } return consumed; @@ -109,6 +96,4 @@ void nfc_scene_mf_ultralight_read_auth_result_on_exit(void* context) { // Clean views widget_reset(nfc->widget); - - notification_message_block(nfc->notifications, &sequence_reset_green); } diff --git a/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_auto.c b/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_auto.c index c59fe3a7d..70a06091f 100644 --- a/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_auto.c +++ b/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_auto.c @@ -11,17 +11,9 @@ void nfc_scene_mf_ultralight_unlock_auto_on_enter(void* context) { Nfc* nfc = context; // Setup view - widget_add_string_multiline_element( - nfc->widget, - 54, - 30, - AlignLeft, - AlignCenter, - FontPrimary, - "Touch the\nreader to get\npassword..."); - widget_add_icon_element(nfc->widget, 0, 15, &I_Modern_reader_18x34); - widget_add_icon_element(nfc->widget, 20, 12, &I_Move_flipper_26x39); - view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); + popup_set_text(nfc->popup, "Touch the reader", 44, 31, AlignLeft, AlignCenter); + popup_set_icon(nfc->popup, 0, 16, &I_Tap_reader_36x38); + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewPopup); // Start worker nfc_worker_start( @@ -31,7 +23,7 @@ void nfc_scene_mf_ultralight_unlock_auto_on_enter(void* context) { nfc_scene_mf_ultralight_unlock_auto_worker_callback, nfc); - nfc_blink_read_start(nfc); + nfc_blink_emulate_start(nfc); } bool nfc_scene_mf_ultralight_unlock_auto_on_event(void* context, SceneManagerEvent event) { @@ -42,7 +34,7 @@ bool nfc_scene_mf_ultralight_unlock_auto_on_event(void* context, SceneManagerEve if((event.event == NfcWorkerEventMfUltralightPwdAuth)) { MfUltralightAuth* auth = &nfc->dev->dev_data.mf_ul_auth; memcpy(nfc->byte_input_store, auth->pwd.raw, sizeof(auth->pwd.raw)); - nfc->dev->dev_data.mf_ul_data.auth_method = MfUltralightAuthMethodAuto; + nfc->dev->dev_data.mf_ul_data.auth_method = MfUltralightAuthMethodManual; nfc_worker_stop(nfc->worker); notification_message(nfc->notifications, &sequence_success); scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightUnlockWarn); @@ -58,7 +50,7 @@ void nfc_scene_mf_ultralight_unlock_auto_on_exit(void* context) { // Stop worker nfc_worker_stop(nfc->worker); // Clear view - widget_reset(nfc->widget); + popup_reset(nfc->popup); nfc_blink_stop(nfc); } diff --git a/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_menu.c b/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_menu.c index 484629b0b..979aa8eda 100644 --- a/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_menu.c +++ b/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_menu.c @@ -1,10 +1,9 @@ #include "../nfc_i.h" enum SubmenuIndex { - SubmenuIndexMfUlUnlockMenuAuto, + SubmenuIndexMfUlUnlockMenuManual, SubmenuIndexMfUlUnlockMenuAmeebo, SubmenuIndexMfUlUnlockMenuXiaomi, - SubmenuIndexMfUlUnlockMenuManual, }; void nfc_scene_mf_ultralight_unlock_menu_submenu_callback(void* context, uint32_t index) { @@ -19,14 +18,12 @@ void nfc_scene_mf_ultralight_unlock_menu_on_enter(void* context) { uint32_t state = scene_manager_get_scene_state(nfc->scene_manager, NfcSceneMfUltralightUnlockMenu); - if(nfc->dev->dev_data.protocol == NfcDeviceProtocolMifareUl) { - submenu_add_item( - submenu, - "Unlock With Reader", - SubmenuIndexMfUlUnlockMenuAuto, - nfc_scene_mf_ultralight_unlock_menu_submenu_callback, - nfc); - } + submenu_add_item( + submenu, + "Enter PWD Manually", + SubmenuIndexMfUlUnlockMenuManual, + nfc_scene_mf_ultralight_unlock_menu_submenu_callback, + nfc); submenu_add_item( submenu, "Auth As Ameebo", @@ -35,16 +32,10 @@ void nfc_scene_mf_ultralight_unlock_menu_on_enter(void* context) { nfc); submenu_add_item( submenu, - "Auth As Xiaomi Air Purifier", + "Auth As Xiaomi", SubmenuIndexMfUlUnlockMenuXiaomi, nfc_scene_mf_ultralight_unlock_menu_submenu_callback, nfc); - submenu_add_item( - submenu, - "Enter Password Manually", - SubmenuIndexMfUlUnlockMenuManual, - nfc_scene_mf_ultralight_unlock_menu_submenu_callback, - nfc); submenu_set_selected_item(submenu, state); view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewMenu); } @@ -66,9 +57,6 @@ bool nfc_scene_mf_ultralight_unlock_menu_on_event(void* context, SceneManagerEve nfc->dev->dev_data.mf_ul_data.auth_method = MfUltralightAuthMethodXiaomi; scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightUnlockWarn); consumed = true; - } else if(event.event == SubmenuIndexMfUlUnlockMenuAuto) { - scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightUnlockAuto); - consumed = true; } scene_manager_set_scene_state( nfc->scene_manager, NfcSceneMfUltralightUnlockMenu, event.event); diff --git a/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_warn.c b/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_warn.c index 16efae9de..0b88043e6 100644 --- a/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_warn.c +++ b/applications/main/nfc/scenes/nfc_scene_mf_ultralight_unlock_warn.c @@ -10,43 +10,15 @@ void nfc_scene_mf_ultralight_unlock_warn_dialog_callback(DialogExResult result, void nfc_scene_mf_ultralight_unlock_warn_on_enter(void* context) { Nfc* nfc = context; DialogEx* dialog_ex = nfc->dialog_ex; - MfUltralightAuthMethod auth_method = nfc->dev->dev_data.mf_ul_data.auth_method; dialog_ex_set_context(dialog_ex, nfc); dialog_ex_set_result_callback(dialog_ex, nfc_scene_mf_ultralight_unlock_warn_dialog_callback); - if(auth_method == MfUltralightAuthMethodManual || auth_method == MfUltralightAuthMethodAuto) { - // Build dialog text - MfUltralightAuth* auth = &nfc->dev->dev_data.mf_ul_auth; - FuriString* password_str = - furi_string_alloc_set_str("Try to unlock the card with\npassword: "); - for(size_t i = 0; i < sizeof(auth->pwd.raw); ++i) { - furi_string_cat_printf(password_str, "%02X ", nfc->byte_input_store[i]); - } - furi_string_cat_str(password_str, "?\nCaution, a wrong password\ncan block the card!"); - nfc_text_store_set(nfc, furi_string_get_cstr(password_str)); - furi_string_free(password_str); - - dialog_ex_set_header( - dialog_ex, - auth_method == MfUltralightAuthMethodAuto ? "Password captured!" : "Risky function!", - 64, - 0, - AlignCenter, - AlignTop); - dialog_ex_set_text(dialog_ex, nfc->text_store, 64, 12, AlignCenter, AlignTop); - dialog_ex_set_left_button_text(dialog_ex, "Cancel"); - dialog_ex_set_right_button_text(dialog_ex, "Continue"); - - if(auth_method == MfUltralightAuthMethodAuto) - notification_message(nfc->notifications, &sequence_set_green_255); - } else { - dialog_ex_set_header(dialog_ex, "Risky function!", 64, 4, AlignCenter, AlignTop); - dialog_ex_set_text( - dialog_ex, "Wrong password\ncan block your\ncard.", 4, 18, AlignLeft, AlignTop); - dialog_ex_set_icon(dialog_ex, 73, 20, &I_DolphinCommon_56x48); - dialog_ex_set_center_button_text(dialog_ex, "OK"); - } + dialog_ex_set_header(dialog_ex, "Risky Function!", 64, 4, AlignCenter, AlignTop); + dialog_ex_set_text( + dialog_ex, "Wrong password\ncan block your\ncard.", 4, 18, AlignLeft, AlignTop); + dialog_ex_set_icon(dialog_ex, 73, 20, &I_DolphinCommon_56x48); + dialog_ex_set_center_button_text(dialog_ex, "OK"); view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewDialogEx); } @@ -56,33 +28,12 @@ bool nfc_scene_mf_ultralight_unlock_warn_on_event(void* context, SceneManagerEve bool consumed = false; - MfUltralightAuthMethod auth_method = nfc->dev->dev_data.mf_ul_data.auth_method; - if(auth_method == MfUltralightAuthMethodManual || auth_method == MfUltralightAuthMethodAuto) { - if(event.type == SceneManagerEventTypeCustom) { - if(event.event == DialogExResultRight) { - scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightReadAuth); - DOLPHIN_DEED(DolphinDeedNfcRead); - consumed = true; - } else if(event.event == DialogExResultLeft) { - if(auth_method == MfUltralightAuthMethodAuto) { - consumed = scene_manager_search_and_switch_to_previous_scene( - nfc->scene_manager, NfcSceneMfUltralightUnlockMenu); - } else { - consumed = scene_manager_previous_scene(nfc->scene_manager); - } - } - } else if(event.type == SceneManagerEventTypeBack) { - // Cannot press back + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == DialogExResultCenter) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightReadAuth); + DOLPHIN_DEED(DolphinDeedNfcRead); consumed = true; } - } else { - if(event.type == SceneManagerEventTypeCustom) { - if(event.event == DialogExResultCenter) { - scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightReadAuth); - DOLPHIN_DEED(DolphinDeedNfcRead); - consumed = true; - } - } } return consumed; @@ -92,7 +43,5 @@ void nfc_scene_mf_ultralight_unlock_warn_on_exit(void* context) { Nfc* nfc = context; dialog_ex_reset(nfc->dialog_ex); - nfc_text_store_clear(nfc); - - notification_message_block(nfc->notifications, &sequence_reset_green); + submenu_reset(nfc->submenu); } diff --git a/lib/nfc/nfc_worker.c b/lib/nfc/nfc_worker.c index f7ad3605e..02ef9268d 100644 --- a/lib/nfc/nfc_worker.c +++ b/lib/nfc/nfc_worker.c @@ -1031,8 +1031,7 @@ void nfc_worker_mf_ultralight_read_auth(NfcWorker* nfc_worker) { if(furi_hal_nfc_detect(nfc_data, 300) && nfc_data->type == FuriHalNfcTypeA) { if(mf_ul_check_card_type(nfc_data->atqa[0], nfc_data->atqa[1], nfc_data->sak)) { nfc_worker->callback(NfcWorkerEventCardDetected, nfc_worker->context); - if(data->auth_method == MfUltralightAuthMethodManual || - data->auth_method == MfUltralightAuthMethodAuto) { + if(data->auth_method == MfUltralightAuthMethodManual) { nfc_worker->callback(NfcWorkerEventMfUltralightPassKey, nfc_worker->context); key = nfc_util_bytes2num(data->auth_key, 4); } else if(data->auth_method == MfUltralightAuthMethodAmeebo) { diff --git a/lib/nfc/nfc_worker.h b/lib/nfc/nfc_worker.h index 41fa7da27..7d8264ef5 100644 --- a/lib/nfc/nfc_worker.h +++ b/lib/nfc/nfc_worker.h @@ -68,6 +68,7 @@ typedef enum { // Mifare Ultralight events NfcWorkerEventMfUltralightPassKey, // NFC worker requesting manual key NfcWorkerEventMfUltralightPwdAuth, // Reader sent auth command + } NfcWorkerEvent; typedef bool (*NfcWorkerCallback)(NfcWorkerEvent event, void* context); diff --git a/lib/nfc/protocols/mifare_ultralight.h b/lib/nfc/protocols/mifare_ultralight.h index 4ab22e89c..8f5c80fff 100644 --- a/lib/nfc/protocols/mifare_ultralight.h +++ b/lib/nfc/protocols/mifare_ultralight.h @@ -34,7 +34,6 @@ typedef enum { MfUltralightAuthMethodManual, MfUltralightAuthMethodAmeebo, MfUltralightAuthMethodXiaomi, - MfUltralightAuthMethodAuto, } MfUltralightAuthMethod; // Important: order matters; some features are based on positioning in this enum