-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'ofw_dev' into dev [ci skip]
- Loading branch information
Showing
11 changed files
with
486 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
119 changes: 119 additions & 0 deletions
119
applications/main/nfc/scenes/nfc_scene_mf_ultralight_write.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
#include "../nfc_app_i.h" | ||
|
||
#include <nfc/protocols/mf_ultralight/mf_ultralight_poller.h> | ||
|
||
enum { | ||
NfcSceneMfUltralightWriteStateCardSearch, | ||
NfcSceneMfUltralightWriteStateCardFound, | ||
}; | ||
|
||
NfcCommand nfc_scene_mf_ultralight_write_worker_callback(NfcGenericEvent event, void* context) { | ||
furi_assert(context); | ||
furi_assert(event.event_data); | ||
furi_assert(event.protocol == NfcProtocolMfUltralight); | ||
|
||
NfcCommand command = NfcCommandContinue; | ||
NfcApp* instance = context; | ||
MfUltralightPollerEvent* mfu_event = event.event_data; | ||
|
||
if(mfu_event->type == MfUltralightPollerEventTypeRequestMode) { | ||
mfu_event->data->poller_mode = MfUltralightPollerModeWrite; | ||
view_dispatcher_send_custom_event(instance->view_dispatcher, NfcCustomEventCardDetected); | ||
} else if(mfu_event->type == MfUltralightPollerEventTypeAuthRequest) { | ||
mfu_event->data->auth_context.skip_auth = true; | ||
} else if(mfu_event->type == MfUltralightPollerEventTypeRequestWriteData) { | ||
mfu_event->data->write_data = | ||
nfc_device_get_data(instance->nfc_device, NfcProtocolMfUltralight); | ||
} else if(mfu_event->type == MfUltralightPollerEventTypeCardMismatch) { | ||
view_dispatcher_send_custom_event(instance->view_dispatcher, NfcCustomEventWrongCard); | ||
command = NfcCommandStop; | ||
} else if(mfu_event->type == MfUltralightPollerEventTypeCardLocked) { | ||
view_dispatcher_send_custom_event(instance->view_dispatcher, NfcCustomEventPollerFailure); | ||
command = NfcCommandStop; | ||
} else if(mfu_event->type == MfUltralightPollerEventTypeWriteFail) { | ||
command = NfcCommandStop; | ||
} else if(mfu_event->type == MfUltralightPollerEventTypeWriteSuccess) { | ||
view_dispatcher_send_custom_event(instance->view_dispatcher, NfcCustomEventPollerSuccess); | ||
command = NfcCommandStop; | ||
} | ||
return command; | ||
} | ||
|
||
static void nfc_scene_mf_ultralight_write_setup_view(NfcApp* instance) { | ||
Popup* popup = instance->popup; | ||
popup_reset(popup); | ||
uint32_t state = | ||
scene_manager_get_scene_state(instance->scene_manager, NfcSceneMfUltralightWrite); | ||
|
||
if(state == NfcSceneMfUltralightWriteStateCardSearch) { | ||
popup_set_text( | ||
instance->popup, "Apply the initial\ncard only", 128, 32, AlignRight, AlignCenter); | ||
popup_set_icon(instance->popup, 0, 8, &I_NFC_manual_60x50); | ||
} else { | ||
popup_set_header(popup, "Writing\nDon't move...", 52, 32, AlignLeft, AlignCenter); | ||
popup_set_icon(popup, 12, 23, &A_Loading_24); | ||
} | ||
|
||
view_dispatcher_switch_to_view(instance->view_dispatcher, NfcViewPopup); | ||
} | ||
|
||
void nfc_scene_mf_ultralight_write_on_enter(void* context) { | ||
NfcApp* instance = context; | ||
dolphin_deed(DolphinDeedNfcEmulate); | ||
|
||
scene_manager_set_scene_state( | ||
instance->scene_manager, | ||
NfcSceneMfUltralightWrite, | ||
NfcSceneMfUltralightWriteStateCardSearch); | ||
nfc_scene_mf_ultralight_write_setup_view(instance); | ||
|
||
// Setup and start worker | ||
FURI_LOG_D("WMFU", "Card searching..."); | ||
instance->poller = nfc_poller_alloc(instance->nfc, NfcProtocolMfUltralight); | ||
nfc_poller_start(instance->poller, nfc_scene_mf_ultralight_write_worker_callback, instance); | ||
|
||
nfc_blink_emulate_start(instance); | ||
} | ||
|
||
bool nfc_scene_mf_ultralight_write_on_event(void* context, SceneManagerEvent event) { | ||
NfcApp* instance = context; | ||
bool consumed = false; | ||
|
||
if(event.type == SceneManagerEventTypeCustom) { | ||
if(event.event == NfcCustomEventCardDetected) { | ||
scene_manager_set_scene_state( | ||
instance->scene_manager, | ||
NfcSceneMfUltralightWrite, | ||
NfcSceneMfUltralightWriteStateCardFound); | ||
nfc_scene_mf_ultralight_write_setup_view(instance); | ||
consumed = true; | ||
} else if(event.event == NfcCustomEventWrongCard) { | ||
scene_manager_next_scene(instance->scene_manager, NfcSceneMfUltralightWrongCard); | ||
consumed = true; | ||
} else if(event.event == NfcCustomEventPollerSuccess) { | ||
scene_manager_next_scene(instance->scene_manager, NfcSceneMfUltralightWriteSuccess); | ||
consumed = true; | ||
} else if(event.event == NfcCustomEventPollerFailure) { | ||
scene_manager_next_scene(instance->scene_manager, NfcSceneMfUltralightWriteFail); | ||
consumed = true; | ||
} | ||
} | ||
|
||
return consumed; | ||
} | ||
|
||
void nfc_scene_mf_ultralight_write_on_exit(void* context) { | ||
NfcApp* instance = context; | ||
|
||
nfc_poller_stop(instance->poller); | ||
nfc_poller_free(instance->poller); | ||
|
||
scene_manager_set_scene_state( | ||
instance->scene_manager, | ||
NfcSceneMfUltralightWrite, | ||
NfcSceneMfUltralightWriteStateCardSearch); | ||
// Clear view | ||
popup_reset(instance->popup); | ||
|
||
nfc_blink_stop(instance); | ||
} |
67 changes: 67 additions & 0 deletions
67
applications/main/nfc/scenes/nfc_scene_mf_ultralight_write_fail.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
#include "../nfc_app_i.h" | ||
|
||
void nfc_scene_mf_ultralight_write_fail_widget_callback( | ||
GuiButtonType result, | ||
InputType type, | ||
void* context) { | ||
NfcApp* instance = context; | ||
if(type == InputTypeShort) { | ||
view_dispatcher_send_custom_event(instance->view_dispatcher, result); | ||
} | ||
} | ||
|
||
void nfc_scene_mf_ultralight_write_fail_on_enter(void* context) { | ||
NfcApp* instance = context; | ||
Widget* widget = instance->widget; | ||
|
||
notification_message(instance->notifications, &sequence_error); | ||
|
||
widget_add_icon_element(widget, 72, 17, &I_DolphinCommon_56x48); | ||
widget_add_string_element( | ||
widget, 7, 4, AlignLeft, AlignTop, FontPrimary, "Writing gone wrong!"); | ||
widget_add_string_multiline_element( | ||
widget, | ||
7, | ||
17, | ||
AlignLeft, | ||
AlignTop, | ||
FontSecondary, | ||
"Card protected by\npassword, AUTH0\nor lock bits"); | ||
|
||
widget_add_button_element( | ||
widget, | ||
GuiButtonTypeLeft, | ||
"Finish", | ||
nfc_scene_mf_ultralight_write_fail_widget_callback, | ||
instance); | ||
|
||
// Setup and start worker | ||
view_dispatcher_switch_to_view(instance->view_dispatcher, NfcViewWidget); | ||
} | ||
|
||
static bool nfc_scene_mf_ultralight_write_fail_move_to_back_scene(const NfcApp* const instance) { | ||
bool was_saved = scene_manager_has_previous_scene(instance->scene_manager, NfcSceneSavedMenu); | ||
uint32_t scene_id = was_saved ? NfcSceneSavedMenu : NfcSceneReadMenu; | ||
|
||
return scene_manager_search_and_switch_to_previous_scene(instance->scene_manager, scene_id); | ||
} | ||
|
||
bool nfc_scene_mf_ultralight_write_fail_on_event(void* context, SceneManagerEvent event) { | ||
NfcApp* instance = context; | ||
bool consumed = false; | ||
|
||
if(event.type == SceneManagerEventTypeCustom) { | ||
if(event.event == GuiButtonTypeLeft) { | ||
consumed = nfc_scene_mf_ultralight_write_fail_move_to_back_scene(instance); | ||
} | ||
} else if(event.type == SceneManagerEventTypeBack) { | ||
consumed = nfc_scene_mf_ultralight_write_fail_move_to_back_scene(instance); | ||
} | ||
return consumed; | ||
} | ||
|
||
void nfc_scene_mf_ultralight_write_fail_on_exit(void* context) { | ||
NfcApp* instance = context; | ||
|
||
widget_reset(instance->widget); | ||
} |
43 changes: 43 additions & 0 deletions
43
applications/main/nfc/scenes/nfc_scene_mf_ultralight_write_success.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
#include "../nfc_app_i.h" | ||
|
||
void nfc_scene_mf_ultralight_write_success_popup_callback(void* context) { | ||
NfcApp* instance = context; | ||
view_dispatcher_send_custom_event(instance->view_dispatcher, NfcCustomEventViewExit); | ||
} | ||
|
||
void nfc_scene_mf_ultralight_write_success_on_enter(void* context) { | ||
NfcApp* instance = context; | ||
dolphin_deed(DolphinDeedNfcSave); | ||
|
||
notification_message(instance->notifications, &sequence_success); | ||
|
||
Popup* popup = instance->popup; | ||
popup_set_icon(popup, 32, 5, &I_DolphinNice_96x59); | ||
popup_set_header(popup, "Successfully\nwritten", 13, 22, AlignLeft, AlignBottom); | ||
popup_set_timeout(popup, 1500); | ||
popup_set_context(popup, instance); | ||
popup_set_callback(popup, nfc_scene_mf_ultralight_write_success_popup_callback); | ||
popup_enable_timeout(popup); | ||
|
||
view_dispatcher_switch_to_view(instance->view_dispatcher, NfcViewPopup); | ||
} | ||
|
||
bool nfc_scene_mf_ultralight_write_success_on_event(void* context, SceneManagerEvent event) { | ||
NfcApp* instance = context; | ||
bool consumed = false; | ||
|
||
if(event.type == SceneManagerEventTypeCustom) { | ||
if(event.event == NfcCustomEventViewExit) { | ||
consumed = scene_manager_search_and_switch_to_previous_scene( | ||
instance->scene_manager, NfcSceneSavedMenu); | ||
} | ||
} | ||
return consumed; | ||
} | ||
|
||
void nfc_scene_mf_ultralight_write_success_on_exit(void* context) { | ||
NfcApp* instance = context; | ||
|
||
// Clear view | ||
popup_reset(instance->popup); | ||
} |
58 changes: 58 additions & 0 deletions
58
applications/main/nfc/scenes/nfc_scene_mf_ultralight_wrong_card.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
#include "../nfc_app_i.h" | ||
|
||
void nfc_scene_mf_ultralight_wrong_card_widget_callback( | ||
GuiButtonType result, | ||
InputType type, | ||
void* context) { | ||
NfcApp* instance = context; | ||
if(type == InputTypeShort) { | ||
view_dispatcher_send_custom_event(instance->view_dispatcher, result); | ||
} | ||
} | ||
|
||
void nfc_scene_mf_ultralight_wrong_card_on_enter(void* context) { | ||
NfcApp* instance = context; | ||
Widget* widget = instance->widget; | ||
|
||
notification_message(instance->notifications, &sequence_error); | ||
|
||
widget_add_icon_element(widget, 73, 17, &I_DolphinCommon_56x48); | ||
widget_add_string_element( | ||
widget, 3, 4, AlignLeft, AlignTop, FontPrimary, "This is wrong card"); | ||
widget_add_string_multiline_element( | ||
widget, | ||
4, | ||
17, | ||
AlignLeft, | ||
AlignTop, | ||
FontSecondary, | ||
"Card of the same\ntype should be\n presented"); | ||
//"Data management\nis only possible\nwith card of same type"); | ||
widget_add_button_element( | ||
widget, | ||
GuiButtonTypeLeft, | ||
"Retry", | ||
nfc_scene_mf_ultralight_wrong_card_widget_callback, | ||
instance); | ||
|
||
// Setup and start worker | ||
view_dispatcher_switch_to_view(instance->view_dispatcher, NfcViewWidget); | ||
} | ||
|
||
bool nfc_scene_mf_ultralight_wrong_card_on_event(void* context, SceneManagerEvent event) { | ||
NfcApp* instance = context; | ||
bool consumed = false; | ||
|
||
if(event.type == SceneManagerEventTypeCustom) { | ||
if(event.event == GuiButtonTypeLeft) { | ||
consumed = scene_manager_previous_scene(instance->scene_manager); | ||
} | ||
} | ||
return consumed; | ||
} | ||
|
||
void nfc_scene_mf_ultralight_wrong_card_on_exit(void* context) { | ||
NfcApp* instance = context; | ||
|
||
widget_reset(instance->widget); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.