mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-16 04:24:45 -07:00
nfc: Add reader password capture scene
This commit is contained in:
@@ -21,6 +21,7 @@ ADD_SCENE(nfc, mf_ultralight_emulate, MfUltralightEmulate)
|
|||||||
ADD_SCENE(nfc, mf_ultralight_read_auth, MfUltralightReadAuth)
|
ADD_SCENE(nfc, mf_ultralight_read_auth, MfUltralightReadAuth)
|
||||||
ADD_SCENE(nfc, mf_ultralight_read_auth_result, MfUltralightReadAuthResult)
|
ADD_SCENE(nfc, mf_ultralight_read_auth_result, MfUltralightReadAuthResult)
|
||||||
ADD_SCENE(nfc, mf_ultralight_key_input, MfUltralightKeyInput)
|
ADD_SCENE(nfc, mf_ultralight_key_input, MfUltralightKeyInput)
|
||||||
|
ADD_SCENE(nfc, mf_ultralight_unlock_auto, MfUltralightUnlockAuto)
|
||||||
ADD_SCENE(nfc, mf_ultralight_unlock_menu, MfUltralightUnlockMenu)
|
ADD_SCENE(nfc, mf_ultralight_unlock_menu, MfUltralightUnlockMenu)
|
||||||
ADD_SCENE(nfc, mf_ultralight_unlock_warn, MfUltralightUnlockWarn)
|
ADD_SCENE(nfc, mf_ultralight_unlock_warn, MfUltralightUnlockWarn)
|
||||||
ADD_SCENE(nfc, mf_desfire_read_success, MfDesfireReadSuccess)
|
ADD_SCENE(nfc, mf_desfire_read_success, MfDesfireReadSuccess)
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
|
#include <lib/nfc/protocols/mifare_ultralight.h>
|
||||||
#include "../nfc_i.h"
|
#include "../nfc_i.h"
|
||||||
|
|
||||||
enum SubmenuIndex {
|
enum SubmenuIndex {
|
||||||
SubmenuIndexUnlock,
|
SubmenuIndexUnlockByReader,
|
||||||
|
SubmenuIndexUnlockByPassword,
|
||||||
SubmenuIndexSave,
|
SubmenuIndexSave,
|
||||||
SubmenuIndexEmulate,
|
SubmenuIndexEmulate,
|
||||||
SubmenuIndexInfo,
|
SubmenuIndexInfo,
|
||||||
@@ -18,11 +20,17 @@ void nfc_scene_mf_ultralight_menu_on_enter(void* context) {
|
|||||||
Submenu* submenu = nfc->submenu;
|
Submenu* submenu = nfc->submenu;
|
||||||
MfUltralightData* data = &nfc->dev->dev_data.mf_ul_data;
|
MfUltralightData* data = &nfc->dev->dev_data.mf_ul_data;
|
||||||
|
|
||||||
if(data->data_read != data->data_size) {
|
if(!mf_ul_is_full_capture(data)) {
|
||||||
|
submenu_add_item(
|
||||||
|
submenu,
|
||||||
|
"Unlock With Reader",
|
||||||
|
SubmenuIndexUnlockByReader,
|
||||||
|
nfc_scene_mf_ultralight_menu_submenu_callback,
|
||||||
|
nfc);
|
||||||
submenu_add_item(
|
submenu_add_item(
|
||||||
submenu,
|
submenu,
|
||||||
"Unlock With Password",
|
"Unlock With Password",
|
||||||
SubmenuIndexUnlock,
|
SubmenuIndexUnlockByPassword,
|
||||||
nfc_scene_mf_ultralight_menu_submenu_callback,
|
nfc_scene_mf_ultralight_menu_submenu_callback,
|
||||||
nfc);
|
nfc);
|
||||||
}
|
}
|
||||||
@@ -57,7 +65,10 @@ bool nfc_scene_mf_ultralight_menu_on_event(void* context, SceneManagerEvent even
|
|||||||
} else if(event.event == SubmenuIndexEmulate) {
|
} else if(event.event == SubmenuIndexEmulate) {
|
||||||
scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightEmulate);
|
scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightEmulate);
|
||||||
consumed = true;
|
consumed = true;
|
||||||
} else if(event.event == SubmenuIndexUnlock) {
|
} else if(event.event == SubmenuIndexUnlockByReader) {
|
||||||
|
scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightUnlockAuto);
|
||||||
|
consumed = true;
|
||||||
|
} else if(event.event == SubmenuIndexUnlockByPassword) {
|
||||||
scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightUnlockMenu);
|
scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightUnlockMenu);
|
||||||
consumed = true;
|
consumed = true;
|
||||||
} else if(event.event == SubmenuIndexInfo) {
|
} else if(event.event == SubmenuIndexInfo) {
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
#include "../nfc_i.h"
|
||||||
|
|
||||||
|
bool nfc_scene_mf_ultralight_unlock_auto_worker_callback(NfcWorkerEvent event, void* context) {
|
||||||
|
Nfc* nfc = context;
|
||||||
|
|
||||||
|
if(event == NfcWorkerEventMfUltralightPwdAuth) {
|
||||||
|
MfUltralightAuth* auth = nfc_worker_get_event_data(nfc->worker);
|
||||||
|
memcpy(nfc->byte_input_store, auth->pwd.raw, sizeof(auth->pwd.raw));
|
||||||
|
}
|
||||||
|
|
||||||
|
view_dispatcher_send_custom_event(nfc->view_dispatcher, event);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void nfc_scene_mf_ultralight_unlock_auto_on_enter(void* context) {
|
||||||
|
Nfc* nfc = context;
|
||||||
|
|
||||||
|
// Setup view
|
||||||
|
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(
|
||||||
|
nfc->worker,
|
||||||
|
NfcWorkerStateMfUltralightEmulate,
|
||||||
|
&nfc->dev->dev_data,
|
||||||
|
nfc_scene_mf_ultralight_unlock_auto_worker_callback,
|
||||||
|
nfc);
|
||||||
|
|
||||||
|
nfc_blink_emulate_start(nfc);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool nfc_scene_mf_ultralight_unlock_auto_on_event(void* context, SceneManagerEvent event) {
|
||||||
|
Nfc* nfc = context;
|
||||||
|
bool consumed = false;
|
||||||
|
|
||||||
|
if(event.type == SceneManagerEventTypeCustom) {
|
||||||
|
if((event.event == NfcWorkerEventMfUltralightPwdAuth)) {
|
||||||
|
notification_message(nfc->notifications, &sequence_success);
|
||||||
|
scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightUnlockWarn);
|
||||||
|
consumed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return consumed;
|
||||||
|
}
|
||||||
|
|
||||||
|
void nfc_scene_mf_ultralight_unlock_auto_on_exit(void* context) {
|
||||||
|
Nfc* nfc = context;
|
||||||
|
|
||||||
|
// Stop worker
|
||||||
|
nfc_worker_stop(nfc->worker);
|
||||||
|
// Clear view
|
||||||
|
popup_reset(nfc->popup);
|
||||||
|
|
||||||
|
nfc_blink_stop(nfc);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user