| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #include "../nfc_magic_i.h"
- static bool nfc_magic_scene_file_select_is_file_suitable(NfcMagic* nfc_magic) {
- NfcDevice* nfc_dev = nfc_magic->source_dev;
- if(nfc_dev->format == NfcDeviceSaveFormatMifareClassic) {
- switch(nfc_magic->dev->type) {
- case MagicTypeClassicGen1:
- case MagicTypeClassicDirectWrite:
- case MagicTypeClassicAPDU:
- if((nfc_dev->dev_data.mf_classic_data.type != MfClassicType1k) ||
- (nfc_dev->dev_data.nfc_data.uid_len != nfc_magic->dev->uid_len)) {
- return false;
- }
- return true;
- case MagicTypeGen4:
- return true;
- default:
- return false;
- }
- } else if(
- (nfc_dev->format == NfcDeviceSaveFormatMifareUl) &&
- (nfc_dev->dev_data.nfc_data.uid_len == 7)) {
- switch(nfc_magic->dev->type) {
- case MagicTypeUltralightGen1:
- case MagicTypeUltralightDirectWrite:
- case MagicTypeUltralightC_Gen1:
- case MagicTypeUltralightC_DirectWrite:
- case MagicTypeGen4:
- switch(nfc_dev->dev_data.mf_ul_data.type) {
- case MfUltralightTypeNTAGI2C1K:
- case MfUltralightTypeNTAGI2C2K:
- case MfUltralightTypeNTAGI2CPlus1K:
- case MfUltralightTypeNTAGI2CPlus2K:
- return false;
- default:
- return true;
- }
- default:
- return false;
- }
- }
- return false;
- }
- void nfc_magic_scene_file_select_on_enter(void* context) {
- NfcMagic* nfc_magic = context;
- // Process file_select return
- nfc_device_set_loading_callback(
- nfc_magic->source_dev, nfc_magic_show_loading_popup, nfc_magic);
- if(!furi_string_size(nfc_magic->source_dev->load_path)) {
- furi_string_set_str(nfc_magic->source_dev->load_path, NFC_APP_FOLDER);
- }
- if(nfc_file_select(nfc_magic->source_dev)) {
- if(nfc_magic_scene_file_select_is_file_suitable(nfc_magic)) {
- scene_manager_next_scene(nfc_magic->scene_manager, NfcMagicSceneWriteConfirm);
- } else {
- scene_manager_next_scene(nfc_magic->scene_manager, NfcMagicSceneWrongCard);
- }
- } else {
- scene_manager_previous_scene(nfc_magic->scene_manager);
- }
- }
- bool nfc_magic_scene_file_select_on_event(void* context, SceneManagerEvent event) {
- UNUSED(context);
- UNUSED(event);
- return false;
- }
- void nfc_magic_scene_file_select_on_exit(void* context) {
- NfcMagic* nfc_magic = context;
- nfc_device_set_loading_callback(nfc_magic->source_dev, NULL, nfc_magic);
- }
|