MX 2 лет назад
Родитель
Сommit
7929507b57

+ 3 - 0
README.md

@@ -0,0 +1,3 @@
+ # T5577 multivriter fap for flipper zero
+
+ PoC of https://forum.dangerousthings.com/t/hack-store-2-to-3-different-em41xx-on-a-single-t5577/12116

+ 2 - 2
application.fam

@@ -1,6 +1,6 @@
 App(
     appid="t5577_multiwriter",
-    name="T5577 Multiwriter",
+    name="T5577 multiwriter",
     apptype=FlipperAppType.EXTERNAL,
     targets=["f7"],
     entry_point="t5577_multiwriter_app",
@@ -8,7 +8,7 @@ App(
     stack_size=2 * 1024,
     order=20,
     fap_description="Application for writing several keys to one t5577",
-    fap_version="0.1",
+    fap_version="0.2",
     fap_icon="icon.png",
     fap_category="RFID",
 )

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
assets/assets_icons.c


+ 1 - 228
assets/assets_icons.h

@@ -2,234 +2,7 @@
 
 #include <gui/icon.h>
 
-extern const Icon I_Certification1_103x56;
-extern const Icon I_Certification2_46x33;
-extern const Icon A_Levelup1_128x64;
-extern const Icon A_Levelup2_128x64;
 extern const Icon I_125_10px;
-extern const Icon I_Apps_10px;
-extern const Icon I_Nfc_10px;
-extern const Icon I_back_10px;
-extern const Icon I_badusb_10px;
-extern const Icon I_dir_10px;
-extern const Icon I_ibutt_10px;
-extern const Icon I_ir_10px;
-extern const Icon I_keyboard_10px;
-extern const Icon I_loading_10px;
-extern const Icon I_music_10px;
-extern const Icon I_sub1_10px;
-extern const Icon I_subrem_10px;
-extern const Icon I_u2f_10px;
-extern const Icon I_unknown_10px;
-extern const Icon I_update_10px;
-extern const Icon I_BLE_Pairing_128x64;
-extern const Icon I_Ble_connected_15x15;
-extern const Icon I_Ble_disconnected_15x15;
-extern const Icon I_Button_18x18;
-extern const Icon I_Circles_47x47;
-extern const Icon I_Left_mouse_icon_9x9;
-extern const Icon I_Ok_btn_9x9;
-extern const Icon I_Ok_btn_pressed_13x13;
-extern const Icon I_Pressed_Button_13x13;
-extern const Icon I_Right_mouse_icon_9x9;
-extern const Icon I_Space_65x18;
-extern const Icon I_Voldwn_6x6;
-extern const Icon I_Volup_8x6;
-extern const Icon I_Clock_18x18;
-extern const Icon I_Error_18x18;
-extern const Icon I_EviSmile1_18x21;
-extern const Icon I_EviSmile2_18x21;
-extern const Icon I_EviWaiting1_18x21;
-extern const Icon I_EviWaiting2_18x21;
-extern const Icon I_Percent_10x14;
-extern const Icon I_Smile_18x18;
-extern const Icon I_UsbTree_48x22;
-extern const Icon I_ActiveConnection_50x64;
-extern const Icon I_ButtonCenter_7x7;
-extern const Icon I_ButtonDown_7x4;
-extern const Icon I_ButtonLeftSmall_3x5;
-extern const Icon I_ButtonLeft_4x7;
-extern const Icon I_ButtonRightSmall_3x5;
-extern const Icon I_ButtonRight_4x7;
-extern const Icon I_ButtonUp_7x4;
-extern const Icon I_DFU_128x50;
-extern const Icon I_Hashmark_7x7;
-extern const Icon I_More_data_placeholder_5x7;
-extern const Icon I_Warning_30x23;
-extern const Icon I_arrow_nano_down;
-extern const Icon I_arrow_nano_up;
-extern const Icon A_Loading_24;
-extern const Icon A_Round_loader_8x8;
-extern const Icon I_DolphinDone_80x58;
-extern const Icon I_DolphinMafia_119x62;
-extern const Icon I_DolphinReadingSuccess_59x63;
-extern const Icon I_DolphinSaved_92x58;
 extern const Icon I_DolphinSuccess_91x55;
-extern const Icon I_DolphinWait_61x59;
 extern const Icon I_WarningDolphinFlip_45x42;
-extern const Icon I_WarningDolphin_45x42;
-extern const Icon I_Erase_pin_128x64;
-extern const Icon I_ArrowUpEmpty_14x15;
-extern const Icon I_ArrowUpFilled_14x15;
-extern const Icon I_InfraredArrowDown_4x8;
-extern const Icon I_InfraredArrowUp_4x8;
-extern const Icon I_InfraredLearnShort_128x31;
-extern const Icon I_celsius_24x23;
-extern const Icon I_celsius_hover_24x23;
-extern const Icon I_ch_down_24x21;
-extern const Icon I_ch_down_hover_24x21;
-extern const Icon I_ch_text_31x34;
-extern const Icon I_ch_up_24x21;
-extern const Icon I_ch_up_hover_24x21;
-extern const Icon I_cool_30x51;
-extern const Icon I_dry_19x20;
-extern const Icon I_dry_hover_19x20;
-extern const Icon I_dry_text_15x5;
-extern const Icon I_fahren_24x23;
-extern const Icon I_fahren_hover_24x23;
-extern const Icon I_heat_30x51;
-extern const Icon I_hourglass0_24x24;
-extern const Icon I_hourglass1_24x24;
-extern const Icon I_hourglass2_24x24;
-extern const Icon I_hourglass3_24x24;
-extern const Icon I_hourglass4_24x24;
-extern const Icon I_hourglass5_24x24;
-extern const Icon I_hourglass6_24x24;
-extern const Icon I_max_24x23;
-extern const Icon I_max_hover_24x23;
-extern const Icon I_mode_19x20;
-extern const Icon I_mode_hover_19x20;
-extern const Icon I_mode_text_20x5;
-extern const Icon I_mute_19x20;
-extern const Icon I_mute_hover_19x20;
-extern const Icon I_mute_text_19x5;
-extern const Icon I_next_19x20;
-extern const Icon I_next_hover_19x20;
-extern const Icon I_next_text_19x6;
-extern const Icon I_off_19x20;
-extern const Icon I_off_hover_19x20;
-extern const Icon I_off_text_12x5;
-extern const Icon I_pause_19x20;
-extern const Icon I_pause_hover_19x20;
-extern const Icon I_pause_text_23x5;
-extern const Icon I_play_19x20;
-extern const Icon I_play_hover_19x20;
-extern const Icon I_play_text_19x5;
-extern const Icon I_power_19x20;
-extern const Icon I_power_hover_19x20;
-extern const Icon I_power_text_24x5;
-extern const Icon I_prev_19x20;
-extern const Icon I_prev_hover_19x20;
-extern const Icon I_prev_text_19x5;
-extern const Icon I_rotate_19x20;
-extern const Icon I_rotate_hover_19x20;
-extern const Icon I_rotate_text_24x5;
-extern const Icon I_speed_text_30x30;
-extern const Icon I_timer_19x20;
-extern const Icon I_timer_hover_19x20;
-extern const Icon I_timer_text_23x5;
-extern const Icon I_vol_ac_text_30x30;
-extern const Icon I_vol_tv_text_29x34;
-extern const Icon I_voldown_24x21;
-extern const Icon I_voldown_hover_24x21;
-extern const Icon I_volup_24x21;
-extern const Icon I_volup_hover_24x21;
-extern const Icon I_DoorLeft_70x55;
-extern const Icon I_DoorRight_70x55;
-extern const Icon I_SmallArrowDown_3x5;
-extern const Icon I_SmallArrowDown_4x7;
-extern const Icon I_SmallArrowUp_3x5;
-extern const Icon I_SmallArrowUp_4x7;
-extern const Icon I_KeyBackspaceSelected_16x9;
-extern const Icon I_KeyBackspace_16x9;
-extern const Icon I_KeySaveSelected_24x11;
-extern const Icon I_KeySave_24x11;
-extern const Icon A_125khz_14;
-extern const Icon A_BadUsb_14;
-extern const Icon A_Clock_14;
-extern const Icon A_Debug_14;
-extern const Icon A_FileManager_14;
-extern const Icon A_GPIO_14;
-extern const Icon A_Infrared_14;
-extern const Icon A_NFC_14;
-extern const Icon A_Plugins_14;
-extern const Icon A_Settings_14;
-extern const Icon A_Sub1ghz_14;
-extern const Icon A_SubGHzRemote_14;
-extern const Icon A_U2F_14;
-extern const Icon A_iButton_14;
-extern const Icon I_ArrowC_1_36x36;
-extern const Icon I_Detailed_chip_17x13;
-extern const Icon I_Keychain_39x36;
-extern const Icon I_Medium_chip_22x21;
-extern const Icon I_Modern_reader_18x34;
-extern const Icon I_Move_flipper_26x39;
-extern const Icon I_NFC_dolphin_emulation_47x61;
-extern const Icon I_NFC_manual_60x50;
-extern const Icon I_Release_arrow_18x15;
-extern const Icon I_check_big_20x17;
-extern const Icon I_Pin_arrow_up_7x9;
-extern const Icon I_Pin_attention_dpad_29x29;
-extern const Icon I_Pin_back_arrow_10x8;
-extern const Icon I_Pin_cell_13x13;
-extern const Icon I_Pin_pointer_5x3;
-extern const Icon I_Pin_star_7x7;
-extern const Icon I_passport_bad1_46x49;
-extern const Icon I_passport_bad2_46x49;
-extern const Icon I_passport_bad3_46x49;
-extern const Icon I_passport_bottom_128x18;
-extern const Icon I_passport_happy1_46x49;
-extern const Icon I_passport_happy2_46x49;
-extern const Icon I_passport_happy3_46x49;
-extern const Icon I_passport_left_6x46;
-extern const Icon I_passport_okay1_46x49;
-extern const Icon I_passport_okay2_46x49;
-extern const Icon I_passport_okay3_46x49;
-extern const Icon I_BatteryBody_52x28;
-extern const Icon I_Battery_16x16;
-extern const Icon I_FaceCharging_29x14;
-extern const Icon I_FaceConfused_29x14;
-extern const Icon I_FaceNopower_29x14;
-extern const Icon I_FaceNormal_29x14;
-extern const Icon I_Health_16x16;
-extern const Icon I_Temperature_16x16;
-extern const Icon I_Unplug_bg_bottom_128x10;
-extern const Icon I_Unplug_bg_top_128x14;
-extern const Icon I_Voltage_16x16;
-extern const Icon I_RFIDDolphinReceive_97x61;
-extern const Icon I_RFIDDolphinSend_97x61;
-extern const Icon I_RFIDSmallChip_14x14;
-extern const Icon I_SDQuestion_35x43;
-extern const Icon I_Cry_dolph_55x52;
-extern const Icon I_Alert_9x8;
-extern const Icon I_Attention_5x8;
-extern const Icon I_Background_128x11;
-extern const Icon I_Battery_26x8;
-extern const Icon I_Bluetooth_Connected_16x8;
-extern const Icon I_Bluetooth_Idle_5x8;
-extern const Icon I_Charging_lightning_9x10;
-extern const Icon I_Charging_lightning_mask_9x10;
-extern const Icon I_GameMode_11x8;
-extern const Icon I_Hidden_window_9x8;
-extern const Icon I_Muted_8x8;
-extern const Icon I_Rpc_active_7x8;
-extern const Icon I_SDcardFail_11x8;
-extern const Icon I_SDcardMounted_11x8;
-extern const Icon I_Cos_9x7;
-extern const Icon I_Dynamic_9x7;
-extern const Icon I_Fishing_123x52;
-extern const Icon I_Lock_7x8;
-extern const Icon I_MHz_25x11;
-extern const Icon I_Quest_7x8;
-extern const Icon I_Raw_9x7;
-extern const Icon I_Scanning_123x52;
-extern const Icon I_Static_9x7;
-extern const Icon I_Unlock_7x8;
-extern const Icon I_Auth_62x31;
-extern const Icon I_Connect_me_62x31;
-extern const Icon I_Connected_62x31;
-extern const Icon I_Drive_112x35;
-extern const Icon I_Error_62x31;
-extern const Icon I_Updating_32x40;
-extern const Icon I_iButtonDolphinVerySuccess_92x55;
-extern const Icon I_iButtonKey_49x44;
+extern const Icon I_RFIDDolphinSend_97x61;

+ 0 - 143
helpers/t5577.c

@@ -1,143 +0,0 @@
-#include "t5577.h"
-#include <furi.h>
-#include <furi_hal_rfid.h>
-#include <stdint.h>
-
-#define T5577_TIMING_WAIT_TIME 400
-#define T5577_TIMING_START_GAP 30
-#define T5577_TIMING_WRITE_GAP 18
-#define T5577_TIMING_DATA_0 24
-#define T5577_TIMING_DATA_1 56
-#define T5577_TIMING_PROGRAM 700
-
-#define T5577_OPCODE_PAGE_0 0b10
-#define T5577_OPCODE_PAGE_1 0b11
-#define T5577_OPCODE_RESET 0b00
-
-static void t5577_start() {
-    furi_hal_rfid_tim_read_start(125000, 0.5);
-
-    // do not ground the antenna
-    furi_hal_rfid_pin_pull_release();
-}
-
-static void t5577_stop() {
-    furi_hal_rfid_tim_read_stop();
-    furi_hal_rfid_pins_reset();
-}
-
-static void t5577_write_gap(uint32_t gap_time) {
-    furi_hal_rfid_tim_read_pause();
-    furi_delay_us(gap_time * 8);
-    furi_hal_rfid_tim_read_continue();
-}
-
-static void t5577_write_bit(bool value) {
-    if(value) {
-        furi_delay_us(T5577_TIMING_DATA_1 * 8);
-    } else {
-        furi_delay_us(T5577_TIMING_DATA_0 * 8);
-    }
-    t5577_write_gap(T5577_TIMING_WRITE_GAP);
-}
-
-static void t5577_write_opcode(uint8_t value) {
-    t5577_write_bit((value >> 1) & 1);
-    t5577_write_bit((value >> 0) & 1);
-}
-
-static void t5577_write_reset() {
-    t5577_write_gap(T5577_TIMING_START_GAP);
-    t5577_write_bit(1);
-    t5577_write_bit(0);
-}
-
-static void t5577_write_block_pass(
-    uint8_t block,
-    bool lock_bit,
-    uint32_t data,
-    bool with_pass,
-    uint32_t password) {
-    furi_delay_us(T5577_TIMING_WAIT_TIME * 8);
-
-    // start gap
-    t5577_write_gap(T5577_TIMING_START_GAP);
-
-    // opcode for page 0
-    t5577_write_opcode(T5577_OPCODE_PAGE_0);
-
-    // password
-    if(with_pass) {
-        for(uint8_t i = 0; i < 32; i++) {
-            t5577_write_bit((password >> (31 - i)) & 1);
-        }
-    }
-
-    // lock bit
-    t5577_write_bit(lock_bit);
-
-    // data
-    for(uint8_t i = 0; i < 32; i++) {
-        t5577_write_bit((data >> (31 - i)) & 1);
-    }
-
-    // block address
-    t5577_write_bit((block >> 2) & 1);
-    t5577_write_bit((block >> 1) & 1);
-    t5577_write_bit((block >> 0) & 1);
-
-    furi_delay_us(T5577_TIMING_PROGRAM * 8);
-
-    furi_delay_us(T5577_TIMING_WAIT_TIME * 8);
-    t5577_write_reset();
-}
-
-static void t5577_write_block_simple(uint8_t block, bool lock_bit, uint32_t data) {
-    t5577_write_block_pass(block, lock_bit, data, false, 0);
-}
-
-void t5577_write(LFRFIDT5577Data* data) {
-    t5577_start();
-    FURI_CRITICAL_ENTER();
-    for(size_t i = 0; i < data->blocks_to_write; i++) {
-        t5577_write_block_simple(i, false, data->block[i]);
-    }
-    t5577_write_reset();
-    FURI_CRITICAL_EXIT();
-    t5577_stop();
-}
-
-void t5577_write_with_maskis(LFRFIDT5577Data* data) {
-    t5577_start();
-    FURI_CRITICAL_ENTER();
-
-    uint8_t mask = data->mask;
-
-    for(size_t i = 0; i < data->blocks_to_write; i++) {
-        bool need_to_write = mask & 1;
-        mask >>= 1;
-        FURI_LOG_D(
-            "WRITIND",
-            "%08lX. i = %u. needtowrite: %u, mask: %u",
-            data->block[i],
-            i,
-            need_to_write,
-            mask);
-        if(!need_to_write) continue;
-        t5577_write_block_simple(i, false, data->block[i]);
-    }
-    t5577_write_reset();
-    FURI_CRITICAL_EXIT();
-    t5577_stop();
-}
-
-void t5577_write_with_passis(LFRFIDT5577Data* data, uint32_t password) {
-    t5577_start();
-    FURI_CRITICAL_ENTER();
-    for(size_t i = 0; i < data->blocks_to_write; i++) {
-        t5577_write_block_pass(i, false, data->block[i], true, password);
-    }
-    t5577_write_reset();
-    FURI_CRITICAL_EXIT();
-    t5577_stop();
-}

+ 0 - 58
helpers/t5577.h

@@ -1,58 +0,0 @@
-#pragma once
-#include <stdint.h>
-#include <stdbool.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define LFRFID_T5577_BLOCK_COUNT 8
-
-// T5577 block 0 definitions, thanks proxmark3!
-#define LFRFID_T5577_POR_DELAY 0x00000001
-#define LFRFID_T5577_ST_TERMINATOR 0x00000008
-#define LFRFID_T5577_PWD 0x00000010
-#define LFRFID_T5577_MAXBLOCK_SHIFT 5
-#define LFRFID_T5577_AOR 0x00000200
-#define LFRFID_T5577_PSKCF_RF_2 0
-#define LFRFID_T5577_PSKCF_RF_4 0x00000400
-#define LFRFID_T5577_PSKCF_RF_8 0x00000800
-#define LFRFID_T5577_MODULATION_DIRECT 0
-#define LFRFID_T5577_MODULATION_PSK1 0x00001000
-#define LFRFID_T5577_MODULATION_PSK2 0x00002000
-#define LFRFID_T5577_MODULATION_PSK3 0x00003000
-#define LFRFID_T5577_MODULATION_FSK1 0x00004000
-#define LFRFID_T5577_MODULATION_FSK2 0x00005000
-#define LFRFID_T5577_MODULATION_FSK1a 0x00006000
-#define LFRFID_T5577_MODULATION_FSK2a 0x00007000
-#define LFRFID_T5577_MODULATION_MANCHESTER 0x00008000
-#define LFRFID_T5577_MODULATION_BIPHASE 0x00010000
-#define LFRFID_T5577_MODULATION_DIPHASE 0x00018000
-#define LFRFID_T5577_X_MODE 0x00020000
-#define LFRFID_T5577_BITRATE_RF_8 0
-#define LFRFID_T5577_BITRATE_RF_16 0x00040000
-#define LFRFID_T5577_BITRATE_RF_32 0x00080000
-#define LFRFID_T5577_BITRATE_RF_40 0x000C0000
-#define LFRFID_T5577_BITRATE_RF_50 0x00100000
-#define LFRFID_T5577_BITRATE_RF_64 0x00140000
-#define LFRFID_T5577_BITRATE_RF_100 0x00180000
-#define LFRFID_T5577_BITRATE_RF_128 0x001C0000
-#define LFRFID_T5577_TESTMODE_DISABLED 0x60000000
-
-typedef struct {
-    uint32_t block[LFRFID_T5577_BLOCK_COUNT];
-    uint32_t blocks_to_write;
-    uint8_t mask;
-} LFRFIDT5577Data;
-
-/**
- * @brief Write T5577 tag data to tag
- * 
- * @param data 
- */
-
-void t5577_write_with_maskis(LFRFIDT5577Data* data);
-
-#ifdef __cplusplus
-}
-#endif

+ 2 - 3
protocols/EM41XX.c

@@ -1,7 +1,6 @@
 #include "EM41XX.h"
 #include "core/check.h"
 #include "core/log.h"
-#include <stdint.h>
 
 #define EM41XX_LINES (10)
 #define EM41XX_COLUMNS (4)
@@ -60,7 +59,7 @@ uint64_t em41xx_encode(uint64_t data) {
     return result;
 }
 
-bool add_em41xx_data(LFRFIDT5577Data* data, uint64_t key, uint8_t from_index) {
+bool add_em41xx_data(LFRFIDT5577* data, uint64_t key, uint8_t from_index) {
     if(from_index + EM41XX_BLOCKS > (T5577_MAX_BLOCKS - 1)) return false;
 
     uint64_t blocks_data = em41xx_encode(key);
@@ -87,7 +86,7 @@ uint32_t get_config(uint8_t keys_count) {
     return result;
 }
 
-bool set_em41xx_config(LFRFIDT5577Data* data, uint8_t keys_count) {
+bool set_em41xx_config(LFRFIDT5577* data, uint8_t keys_count) {
     if(keys_count > 3) return false;
 
     data->block[0] = get_config(keys_count);

+ 3 - 3
protocols/EM41XX.h

@@ -1,7 +1,7 @@
-#include "../helpers/t5577.h"
+#include <lfrfid/tools/t5577.h>
 
-bool add_em41xx_data(LFRFIDT5577Data* data, uint64_t key, uint8_t from_index);
+bool add_em41xx_data(LFRFIDT5577* data, uint64_t key, uint8_t from_index);
 
-bool set_em41xx_config(LFRFIDT5577Data* data, uint8_t keys_count);
+bool set_em41xx_config(LFRFIDT5577* data, uint8_t keys_count);
 
 uint64_t bytes2num(const uint8_t* src, uint8_t len);

+ 2 - 3
scenes/t5577_multiwriter_scene_write_first_key.c

@@ -1,6 +1,5 @@
 #include "../t5577_multiwriter_i.h"
 #include "../protocols/EM41XX.h"
-#include "../t5577_multiwriter/helpers/t5577.h"
 
 static void
     t5577_multiwriter_write_first_key_callback(LFRFIDWorkerWriteResult result, void* context) {
@@ -47,12 +46,12 @@ void t5577_multiwriter_scene_write_first_key_on_enter(void* context) {
     protocol_dict_get_data(app->dict, app->protocol_id, data, size);
 
     uint64_t key = bytes2num(data, size);
-    LFRFIDT5577Data data_to_write = {0};
+    LFRFIDT5577 data_to_write = {0};
 
     add_em41xx_data(&data_to_write, key, 1);
     set_em41xx_config(&data_to_write, 1);
 
-    t5577_write_with_maskis(&data_to_write);
+    t5577_write_with_mask(&data_to_write, 0, 0, 0);
 
     t5577_multiwriter_write_first_key_callback(LFRFIDWorkerWriteOK, context);
 }

+ 2 - 3
scenes/t5577_multiwriter_scene_write_second_key.c

@@ -1,6 +1,5 @@
 #include "../t5577_multiwriter_i.h"
 #include "../protocols/EM41XX.h"
-#include "../t5577_multiwriter/helpers/t5577.h"
 
 static void
     t5577_multiwriter_write_second_key_callback(LFRFIDWorkerWriteResult result, void* context) {
@@ -47,12 +46,12 @@ void t5577_multiwriter_scene_write_second_key_on_enter(void* context) {
     protocol_dict_get_data(app->dict, app->protocol_id, data, size);
 
     uint64_t key = bytes2num(data, size);
-    LFRFIDT5577Data data_to_write = {0};
+    LFRFIDT5577 data_to_write = {0};
 
     add_em41xx_data(&data_to_write, key, 3);
     set_em41xx_config(&data_to_write, 2);
 
-    t5577_write_with_maskis(&data_to_write);
+    t5577_write_with_mask(&data_to_write, 0, 0, 0);
 
     t5577_multiwriter_write_second_key_callback(LFRFIDWorkerWriteOK, context);
 }

+ 2 - 3
scenes/t5577_multiwriter_scene_write_third_key.c

@@ -1,6 +1,5 @@
 #include "../t5577_multiwriter_i.h"
 #include "../protocols/EM41XX.h"
-#include "../t5577_multiwriter/helpers/t5577.h"
 
 static void
     t5577_multiwriter_write_third_key_callback(LFRFIDWorkerWriteResult result, void* context) {
@@ -47,12 +46,12 @@ void t5577_multiwriter_scene_write_third_key_on_enter(void* context) {
     protocol_dict_get_data(app->dict, app->protocol_id, data, size);
 
     uint64_t key = bytes2num(data, size);
-    LFRFIDT5577Data data_to_write = {0};
+    LFRFIDT5577 data_to_write = {0};
 
     add_em41xx_data(&data_to_write, key, 5);
     set_em41xx_config(&data_to_write, 3);
 
-    t5577_write_with_maskis(&data_to_write);
+    t5577_write_with_mask(&data_to_write, 0, 0, 0);
 
     t5577_multiwriter_write_third_key_callback(LFRFIDWorkerWriteOK, context);
 }

+ 1 - 12
t5577_multiwriter.c

@@ -90,13 +90,6 @@ static LfRfid* t5577_multiwriter_alloc() {
         LfRfidViewByteInput,
         byte_input_get_view(t5577_multiwriter->byte_input));
 
-    // Read custom view
-    t5577_multiwriter->read_view = t5577_multiwriter_view_read_alloc();
-    view_dispatcher_add_view(
-        t5577_multiwriter->view_dispatcher,
-        LfRfidViewRead,
-        t5577_multiwriter_view_read_get_view(t5577_multiwriter->read_view));
-
     return t5577_multiwriter;
 } //-V773
 
@@ -136,10 +129,6 @@ static void t5577_multiwriter_free(LfRfid* t5577_multiwriter) {
     view_dispatcher_remove_view(t5577_multiwriter->view_dispatcher, LfRfidViewByteInput);
     byte_input_free(t5577_multiwriter->byte_input);
 
-    // Read custom view
-    view_dispatcher_remove_view(t5577_multiwriter->view_dispatcher, LfRfidViewRead);
-    t5577_multiwriter_view_read_free(t5577_multiwriter->read_view);
-
     // View Dispatcher
     view_dispatcher_free(t5577_multiwriter->view_dispatcher);
 
@@ -211,7 +200,7 @@ bool t5577_multiwriter_load_key_data(LfRfid* app, FuriString* path, bool show_di
     } while(0);
 
     if((!result) && (show_dialog)) {
-        dialog_message_show_storage_error(app->dialogs, "Cannot load\nkey file");
+        dialog_message_show_storage_error(app->dialogs, "Unsupported\nlfrfid protocol!");
     }
 
     return result;

+ 0 - 6
t5577_multiwriter_i.h

@@ -18,8 +18,6 @@
 #include <gui/modules/byte_input.h>
 #include <gui/modules/widget.h>
 
-#include "views/t5577_multiwriter_view_read.h"
-
 #include <notification/notification_messages.h>
 #include <dialogs/dialogs.h>
 #include <storage/storage.h>
@@ -89,9 +87,6 @@ struct LfRfid {
     Popup* popup;
     TextInput* text_input;
     ByteInput* byte_input;
-
-    // Custom views
-    LfRfidReadView* read_view;
 };
 
 typedef enum {
@@ -101,7 +96,6 @@ typedef enum {
     LfRfidViewWidget,
     LfRfidViewTextInput,
     LfRfidViewByteInput,
-    LfRfidViewRead,
 } LfRfidView;
 
 bool t5577_multiwriter_load_key_from_file_select(LfRfid* app);

+ 0 - 113
views/t5577_multiwriter_view_read.c

@@ -1,113 +0,0 @@
-#include "t5577_multiwriter_view_read.h"
-#include <gui/elements.h>
-#include "../assets/assets_icons.h"
-
-#define TEMP_STR_LEN 128
-
-struct LfRfidReadView {
-    View* view;
-};
-
-typedef struct {
-    IconAnimation* icon;
-    LfRfidReadViewMode read_mode;
-} LfRfidReadViewModel;
-
-static void t5577_multiwriter_view_read_draw_callback(Canvas* canvas, void* _model) {
-    LfRfidReadViewModel* model = _model;
-    canvas_set_color(canvas, ColorBlack);
-
-    canvas_draw_icon(canvas, 0, 8, &I_NFC_manual_60x50);
-
-    canvas_set_font(canvas, FontPrimary);
-
-    if(model->read_mode == LfRfidReadAsk) {
-        canvas_draw_str(canvas, 70, 16, "Reading 1/2");
-
-        canvas_draw_str(canvas, 77, 29, "ASK");
-        canvas_draw_icon(canvas, 70, 22, &I_ButtonRight_4x7);
-        canvas_draw_icon_animation(canvas, 102, 21, model->icon);
-
-        canvas_set_font(canvas, FontSecondary);
-        canvas_draw_str(canvas, 77, 43, "PSK");
-    } else if(model->read_mode == LfRfidReadPsk) {
-        canvas_draw_str(canvas, 70, 16, "Reading 2/2");
-
-        canvas_draw_str(canvas, 77, 43, "PSK");
-        canvas_draw_icon(canvas, 70, 36, &I_ButtonRight_4x7);
-        canvas_draw_icon_animation(canvas, 102, 35, model->icon);
-
-        canvas_set_font(canvas, FontSecondary);
-        canvas_draw_str(canvas, 77, 29, "ASK");
-    } else {
-        canvas_draw_str(canvas, 72, 16, "Reading");
-
-        if(model->read_mode == LfRfidReadAskOnly) {
-            canvas_draw_str(canvas, 77, 35, "ASK");
-        } else {
-            canvas_draw_str(canvas, 77, 35, "PSK");
-        }
-        canvas_draw_icon_animation(canvas, 102, 27, model->icon);
-    }
-
-    canvas_set_font(canvas, FontSecondary);
-    canvas_draw_str(canvas, 61, 56, "Don't move card");
-}
-
-void t5577_multiwriter_view_read_enter(void* context) {
-    LfRfidReadView* read_view = context;
-    with_view_model(
-        read_view->view, LfRfidReadViewModel * model, { icon_animation_start(model->icon); }, true);
-}
-
-void t5577_multiwriter_view_read_exit(void* context) {
-    LfRfidReadView* read_view = context;
-    with_view_model(
-        read_view->view, LfRfidReadViewModel * model, { icon_animation_stop(model->icon); }, false);
-}
-
-LfRfidReadView* t5577_multiwriter_view_read_alloc() {
-    LfRfidReadView* read_view = malloc(sizeof(LfRfidReadView));
-    read_view->view = view_alloc();
-    view_set_context(read_view->view, read_view);
-    view_allocate_model(read_view->view, ViewModelTypeLocking, sizeof(LfRfidReadViewModel));
-
-    with_view_model(
-        read_view->view,
-        LfRfidReadViewModel * model,
-        {
-            model->icon = icon_animation_alloc(&A_Round_loader_8x8);
-            view_tie_icon_animation(read_view->view, model->icon);
-        },
-        false);
-
-    view_set_draw_callback(read_view->view, t5577_multiwriter_view_read_draw_callback);
-    view_set_enter_callback(read_view->view, t5577_multiwriter_view_read_enter);
-    view_set_exit_callback(read_view->view, t5577_multiwriter_view_read_exit);
-
-    return read_view;
-}
-
-void t5577_multiwriter_view_read_free(LfRfidReadView* read_view) {
-    with_view_model(
-        read_view->view, LfRfidReadViewModel * model, { icon_animation_free(model->icon); }, false);
-
-    view_free(read_view->view);
-    free(read_view);
-}
-
-View* t5577_multiwriter_view_read_get_view(LfRfidReadView* read_view) {
-    return read_view->view;
-}
-
-void t5577_multiwriter_view_read_set_read_mode(LfRfidReadView* read_view, LfRfidReadViewMode mode) {
-    with_view_model(
-        read_view->view,
-        LfRfidReadViewModel * model,
-        {
-            icon_animation_stop(model->icon);
-            icon_animation_start(model->icon);
-            model->read_mode = mode;
-        },
-        true);
-}

+ 0 - 19
views/t5577_multiwriter_view_read.h

@@ -1,19 +0,0 @@
-#pragma once
-#include <gui/view.h>
-
-typedef enum {
-    LfRfidReadAsk,
-    LfRfidReadPsk,
-    LfRfidReadAskOnly,
-    LfRfidReadPskOnly
-} LfRfidReadViewMode;
-
-typedef struct LfRfidReadView LfRfidReadView;
-
-LfRfidReadView* t5577_multiwriter_view_read_alloc();
-
-void t5577_multiwriter_view_read_free(LfRfidReadView* read_view);
-
-View* t5577_multiwriter_view_read_get_view(LfRfidReadView* read_view);
-
-void t5577_multiwriter_view_read_set_read_mode(LfRfidReadView* read_view, LfRfidReadViewMode mode);

Некоторые файлы не были показаны из-за большого количества измененных файлов