This commit is contained in:
Willy-JL
2023-08-27 22:14:33 +02:00
229 changed files with 1352 additions and 894 deletions

View File

@@ -3,6 +3,7 @@ ADD_SCENE(nfc, read, Read)
ADD_SCENE(nfc, saved_menu, SavedMenu)
ADD_SCENE(nfc, extra_actions, ExtraActions)
ADD_SCENE(nfc, set_type, SetType)
ADD_SCENE(nfc, set_type_mf_uid, SetTypeMfUid)
ADD_SCENE(nfc, set_sak, SetSak)
ADD_SCENE(nfc, set_atqa, SetAtqa)
ADD_SCENE(nfc, set_uid, SetUid)

View File

@@ -3,6 +3,8 @@
void nfc_scene_file_select_on_enter(void* context) {
Nfc* nfc = context;
nfc_device_data_clear(&nfc->dev->dev_data);
// Process file_select return
nfc_device_set_loading_callback(nfc->dev, nfc_show_loading_popup, nfc);
if(!furi_string_size(nfc->dev->load_path)) {

View File

@@ -58,7 +58,8 @@ bool nfc_scene_save_name_on_event(void* context, SceneManagerEvent event) {
if(strcmp(nfc->dev->dev_name, "") != 0) {
nfc_device_delete(nfc->dev, true);
}
if(scene_manager_has_previous_scene(nfc->scene_manager, NfcSceneSetUid)) {
if(scene_manager_has_previous_scene(nfc->scene_manager, NfcSceneSetUid) &&
(!scene_manager_has_previous_scene(nfc->scene_manager, NfcSceneSetTypeMfUid))) {
nfc->dev->dev_data.nfc_data = nfc->dev_edit_data;
}
strlcpy(nfc->dev->dev_name, nfc->text_store, strlen(nfc->text_store) + 1);

View File

@@ -4,6 +4,7 @@
enum SubmenuIndex {
SubmenuIndexNFCA4,
SubmenuIndexNFCA7,
SubmenuIndexMFClassicCustomUID,
SubmenuIndexGeneratorsStart,
};
@@ -23,6 +24,12 @@ void nfc_scene_set_type_on_enter(void* context) {
submenu, "NFC-A 7-bytes UID", SubmenuIndexNFCA7, nfc_scene_set_type_submenu_callback, nfc);
submenu_add_item(
submenu, "NFC-A 4-bytes UID", SubmenuIndexNFCA4, nfc_scene_set_type_submenu_callback, nfc);
submenu_add_item(
submenu,
"Mifare Classic Custom UID",
SubmenuIndexMFClassicCustomUID,
nfc_scene_set_type_submenu_callback,
nfc);
// Generators
int i = SubmenuIndexGeneratorsStart;
@@ -49,6 +56,10 @@ bool nfc_scene_set_type_on_event(void* context, SceneManagerEvent event) {
nfc->dev->format = NfcDeviceSaveFormatUid;
scene_manager_next_scene(nfc->scene_manager, NfcSceneSetSak);
consumed = true;
} else if(event.event == SubmenuIndexMFClassicCustomUID) {
nfc_device_clear(nfc->dev);
scene_manager_next_scene(nfc->scene_manager, NfcSceneSetTypeMfUid);
consumed = true;
} else {
nfc_device_clear(nfc->dev);
nfc->generator = nfc_generators[event.event - SubmenuIndexGeneratorsStart];

View File

@@ -0,0 +1,103 @@
#include "../nfc_i.h"
#include "lib/nfc/helpers/nfc_generators.h"
enum SubmenuIndex {
SubmenuIndexMFC1k4b,
SubmenuIndexMFC4k4b,
SubmenuIndexMFC1k7b,
SubmenuIndexMFC4k7b,
SubmenuIndexMFCMini,
};
static const NfcGenerator ganeator_gag = {
.name = "Mifare Classic Custom UID",
.generator_func = NULL,
};
void nfc_scene_set_type_mf_uid_submenu_callback(void* context, uint32_t index) {
Nfc* nfc = context;
view_dispatcher_send_custom_event(nfc->view_dispatcher, index);
}
void nfc_scene_set_type_mf_uid_on_enter(void* context) {
Nfc* nfc = context;
Submenu* submenu = nfc->submenu;
submenu_add_item(
submenu,
"Mifare Classic 1k 4byte UID",
SubmenuIndexMFC1k4b,
nfc_scene_set_type_mf_uid_submenu_callback,
nfc);
submenu_add_item(
submenu,
"Mifare Classic 4k 4byte UID",
SubmenuIndexMFC4k4b,
nfc_scene_set_type_mf_uid_submenu_callback,
nfc);
submenu_add_item(
submenu,
"Mifare Classic 1k 7byte UID",
SubmenuIndexMFC1k7b,
nfc_scene_set_type_mf_uid_submenu_callback,
nfc);
submenu_add_item(
submenu,
"Mifare Classic 4k 7byte UID",
SubmenuIndexMFC4k7b,
nfc_scene_set_type_mf_uid_submenu_callback,
nfc);
submenu_add_item(
submenu,
"Mifare Classic Mini",
SubmenuIndexMFCMini,
nfc_scene_set_type_mf_uid_submenu_callback,
nfc);
view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewMenu);
}
bool nfc_scene_set_type_mf_uid_on_event(void* context, SceneManagerEvent event) {
Nfc* nfc = context;
bool consumed = false;
bool correct_index = false;
MfClassicType mf_type = MfClassicType1k;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SubmenuIndexMFC1k4b) {
nfc->dev->dev_data.nfc_data.uid_len = 4;
mf_type = MfClassicType1k;
correct_index = true;
} else if(event.event == SubmenuIndexMFC1k7b) {
nfc->dev->dev_data.nfc_data.uid_len = 7;
mf_type = MfClassicType1k;
correct_index = true;
} else if(event.event == SubmenuIndexMFC4k4b) {
nfc->dev->dev_data.nfc_data.uid_len = 4;
mf_type = MfClassicType4k;
correct_index = true;
} else if(event.event == SubmenuIndexMFC4k7b) {
nfc->dev->dev_data.nfc_data.uid_len = 7;
mf_type = MfClassicType4k;
correct_index = true;
} else if(event.event == SubmenuIndexMFCMini) {
nfc->dev->dev_data.nfc_data.uid_len = 4;
mf_type = MfClassicTypeMini;
correct_index = true;
}
if(correct_index) {
nfc->generator = &ganeator_gag;
scene_manager_set_scene_state(nfc->scene_manager, NfcSceneSetTypeMfUid, mf_type);
scene_manager_next_scene(nfc->scene_manager, NfcSceneSetUid);
consumed = true;
}
}
return consumed;
}
void nfc_scene_set_type_mf_uid_on_exit(void* context) {
Nfc* nfc = context;
submenu_reset(nfc->submenu);
}

View File

@@ -35,6 +35,21 @@ bool nfc_scene_set_uid_on_event(void* context, SceneManagerEvent event) {
scene_manager_next_scene(nfc->scene_manager, NfcSceneSaveSuccess);
consumed = true;
}
} else if(scene_manager_has_previous_scene(nfc->scene_manager, NfcSceneSetTypeMfUid)) {
MfClassicType mf_type =
scene_manager_get_scene_state(nfc->scene_manager, NfcSceneSetTypeMfUid);
if(mf_type > MfClassicTypeMini) {
furi_crash("Nfc unknown type");
}
nfc_generate_mf_classic_ext(
&nfc->dev->dev_data,
nfc->dev_edit_data.uid_len,
mf_type,
false,
nfc->dev_edit_data.uid);
scene_manager_next_scene(nfc->scene_manager, NfcSceneGenerateInfo);
consumed = true;
} else {
scene_manager_next_scene(nfc->scene_manager, NfcSceneSaveName);
consumed = true;