mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-13 12:18:35 -07:00
return saving of emv
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
#include "../nfc_i.h"
|
#include "../nfc_i.h"
|
||||||
|
|
||||||
enum SubmenuIndex {
|
enum SubmenuIndex {
|
||||||
|
SubmenuIndexSave,
|
||||||
SubmenuIndexInfo,
|
SubmenuIndexInfo,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -14,6 +15,7 @@ void nfc_scene_emv_menu_on_enter(void* context) {
|
|||||||
Nfc* nfc = context;
|
Nfc* nfc = context;
|
||||||
Submenu* submenu = nfc->submenu;
|
Submenu* submenu = nfc->submenu;
|
||||||
|
|
||||||
|
submenu_add_item(submenu, "Save", SubmenuIndexSave, nfc_scene_emv_menu_submenu_callback, nfc);
|
||||||
submenu_add_item(submenu, "Info", SubmenuIndexInfo, nfc_scene_emv_menu_submenu_callback, nfc);
|
submenu_add_item(submenu, "Info", SubmenuIndexInfo, nfc_scene_emv_menu_submenu_callback, nfc);
|
||||||
submenu_set_selected_item(
|
submenu_set_selected_item(
|
||||||
nfc->submenu, scene_manager_get_scene_state(nfc->scene_manager, NfcSceneEmvMenu));
|
nfc->submenu, scene_manager_get_scene_state(nfc->scene_manager, NfcSceneEmvMenu));
|
||||||
@@ -26,7 +28,13 @@ bool nfc_scene_emv_menu_on_event(void* context, SceneManagerEvent event) {
|
|||||||
bool consumed = false;
|
bool consumed = false;
|
||||||
|
|
||||||
if(event.type == SceneManagerEventTypeCustom) {
|
if(event.type == SceneManagerEventTypeCustom) {
|
||||||
if(event.event == SubmenuIndexInfo) {
|
if(event.event == SubmenuIndexSave) {
|
||||||
|
nfc->dev->format = NfcDeviceSaveFormatBankCard;
|
||||||
|
// Clear device name
|
||||||
|
nfc_device_set_name(nfc->dev, "");
|
||||||
|
scene_manager_next_scene(nfc->scene_manager, NfcSceneSaveName);
|
||||||
|
consumed = true;
|
||||||
|
} else if(event.event == SubmenuIndexInfo) {
|
||||||
scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcDataInfo);
|
scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcDataInfo);
|
||||||
consumed = true;
|
consumed = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -636,7 +636,35 @@ bool nfc_device_load_mifare_df_data(FlipperFormat* file, NfcDevice* dev) {
|
|||||||
return parsed;
|
return parsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Leave for backward compatibility
|
static bool nfc_device_save_bank_card_data(FlipperFormat* file, NfcDevice* dev) {
|
||||||
|
bool saved = false;
|
||||||
|
EmvData* data = &dev->dev_data.emv_data;
|
||||||
|
uint32_t data_temp = 0;
|
||||||
|
|
||||||
|
do {
|
||||||
|
// Write Bank card specific data
|
||||||
|
if(!flipper_format_write_comment_cstr(file, "Bank card specific data")) break;
|
||||||
|
if(!flipper_format_write_hex(file, "AID", data->aid, data->aid_len)) break;
|
||||||
|
if(!flipper_format_write_string_cstr(file, "Name", data->name)) break;
|
||||||
|
if(!flipper_format_write_hex(file, "Number", data->number, data->number_len)) break;
|
||||||
|
if(data->exp_mon) {
|
||||||
|
uint8_t exp_data[2] = {data->exp_mon, data->exp_year};
|
||||||
|
if(!flipper_format_write_hex(file, "Exp data", exp_data, sizeof(exp_data))) break;
|
||||||
|
}
|
||||||
|
if(data->country_code) {
|
||||||
|
data_temp = data->country_code;
|
||||||
|
if(!flipper_format_write_uint32(file, "Country code", &data_temp, 1)) break;
|
||||||
|
}
|
||||||
|
if(data->currency_code) {
|
||||||
|
data_temp = data->currency_code;
|
||||||
|
if(!flipper_format_write_uint32(file, "Currency code", &data_temp, 1)) break;
|
||||||
|
}
|
||||||
|
saved = true;
|
||||||
|
} while(false);
|
||||||
|
|
||||||
|
return saved;
|
||||||
|
}
|
||||||
|
|
||||||
bool nfc_device_load_bank_card_data(FlipperFormat* file, NfcDevice* dev) {
|
bool nfc_device_load_bank_card_data(FlipperFormat* file, NfcDevice* dev) {
|
||||||
bool parsed = false;
|
bool parsed = false;
|
||||||
EmvData* data = &dev->dev_data.emv_data;
|
EmvData* data = &dev->dev_data.emv_data;
|
||||||
@@ -1040,7 +1068,7 @@ static bool nfc_device_save_file(
|
|||||||
if(!flipper_format_write_header_cstr(file, nfc_file_header, nfc_file_version)) break;
|
if(!flipper_format_write_header_cstr(file, nfc_file_header, nfc_file_version)) break;
|
||||||
// Write nfc device type
|
// Write nfc device type
|
||||||
if(!flipper_format_write_comment_cstr(
|
if(!flipper_format_write_comment_cstr(
|
||||||
file, "Nfc device type can be UID, Mifare Ultralight, Mifare Classic"))
|
file, "Nfc device type can be UID, Mifare Ultralight, Mifare Classic, Bank card"))
|
||||||
break;
|
break;
|
||||||
nfc_device_prepare_format_string(dev, temp_str);
|
nfc_device_prepare_format_string(dev, temp_str);
|
||||||
if(!flipper_format_write_string(file, "Device type", temp_str)) break;
|
if(!flipper_format_write_string(file, "Device type", temp_str)) break;
|
||||||
@@ -1055,6 +1083,8 @@ static bool nfc_device_save_file(
|
|||||||
if(!nfc_device_save_mifare_ul_data(file, dev)) break;
|
if(!nfc_device_save_mifare_ul_data(file, dev)) break;
|
||||||
} else if(dev->format == NfcDeviceSaveFormatMifareDesfire) {
|
} else if(dev->format == NfcDeviceSaveFormatMifareDesfire) {
|
||||||
if(!nfc_device_save_mifare_df_data(file, dev)) break;
|
if(!nfc_device_save_mifare_df_data(file, dev)) break;
|
||||||
|
} else if(dev->format == NfcDeviceSaveFormatBankCard) {
|
||||||
|
if(!nfc_device_save_bank_card_data(file, dev)) break;
|
||||||
} else if(dev->format == NfcDeviceSaveFormatMifareClassic) {
|
} else if(dev->format == NfcDeviceSaveFormatMifareClassic) {
|
||||||
// Save data
|
// Save data
|
||||||
if(!nfc_device_save_mifare_classic_data(file, dev)) break;
|
if(!nfc_device_save_mifare_classic_data(file, dev)) break;
|
||||||
|
|||||||
Reference in New Issue
Block a user