mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2025-02-17 05:48:33 +00:00
Removing duplicate code in t5577 passwd clear
This commit is contained in:
parent
18a895310c
commit
a4c1ad22ef
6 changed files with 42 additions and 147 deletions
|
@ -1,96 +0,0 @@
|
||||||
#include "rfid_writer.h"
|
|
||||||
#include <furi_hal.h>
|
|
||||||
|
|
||||||
void writer_start() {
|
|
||||||
furi_hal_rfid_tim_read(125000, 0.5);
|
|
||||||
furi_hal_rfid_pins_read();
|
|
||||||
furi_hal_rfid_tim_read_start();
|
|
||||||
|
|
||||||
// do not ground the antenna
|
|
||||||
furi_hal_rfid_pin_pull_release();
|
|
||||||
}
|
|
||||||
|
|
||||||
void writer_stop() {
|
|
||||||
furi_hal_rfid_tim_read_stop();
|
|
||||||
furi_hal_rfid_tim_reset();
|
|
||||||
furi_hal_rfid_pins_reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
void write_gap(uint32_t gap_time) {
|
|
||||||
furi_hal_rfid_tim_read_stop();
|
|
||||||
furi_delay_us(gap_time * 8);
|
|
||||||
furi_hal_rfid_tim_read_start();
|
|
||||||
}
|
|
||||||
|
|
||||||
void write_bit(T55xxTiming* t55xxtiming, bool value) {
|
|
||||||
if(value) {
|
|
||||||
furi_delay_us(t55xxtiming->data_1 * 8);
|
|
||||||
} else {
|
|
||||||
furi_delay_us(t55xxtiming->data_0 * 8);
|
|
||||||
}
|
|
||||||
write_gap(t55xxtiming->write_gap);
|
|
||||||
}
|
|
||||||
|
|
||||||
void write_block(
|
|
||||||
T55xxTiming* t55xxtiming,
|
|
||||||
uint8_t page,
|
|
||||||
uint8_t block,
|
|
||||||
bool lock_bit,
|
|
||||||
uint32_t data,
|
|
||||||
bool password_enable,
|
|
||||||
uint32_t password) {
|
|
||||||
furi_delay_us(t55xxtiming->wait_time * 8);
|
|
||||||
|
|
||||||
//client: https://github.com/Proxmark/proxmark3/blob/6116334485ca77343eda51c557cdc81032afcf38/client/cmdlft55xx.c#L944
|
|
||||||
//hardware: https://github.com/Proxmark/proxmark3/blob/555fa197730c061bbf0ab01334e99bc47fb3dc06/armsrc/lfops.c#L1465
|
|
||||||
//hardware: https://github.com/Proxmark/proxmark3/blob/555fa197730c061bbf0ab01334e99bc47fb3dc06/armsrc/lfops.c#L1396
|
|
||||||
|
|
||||||
// start gap
|
|
||||||
write_gap(t55xxtiming->start_gap);
|
|
||||||
|
|
||||||
// opcode
|
|
||||||
switch(page) {
|
|
||||||
case 0:
|
|
||||||
write_bit(t55xxtiming, 1);
|
|
||||||
write_bit(t55xxtiming, 0);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
write_bit(t55xxtiming, 1);
|
|
||||||
write_bit(t55xxtiming, 1);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
furi_check(false);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// password
|
|
||||||
if(password_enable) {
|
|
||||||
for(uint8_t i = 0; i < 32; i++) {
|
|
||||||
write_bit(t55xxtiming, (password >> (31 - i)) & 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// lock bit
|
|
||||||
write_bit(t55xxtiming, lock_bit);
|
|
||||||
|
|
||||||
// data
|
|
||||||
for(uint8_t i = 0; i < 32; i++) {
|
|
||||||
write_bit(t55xxtiming, (data >> (31 - i)) & 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// block address
|
|
||||||
write_bit(t55xxtiming, (block >> 2) & 1);
|
|
||||||
write_bit(t55xxtiming, (block >> 1) & 1);
|
|
||||||
write_bit(t55xxtiming, (block >> 0) & 1);
|
|
||||||
|
|
||||||
furi_delay_us(t55xxtiming->program * 8);
|
|
||||||
|
|
||||||
furi_delay_us(t55xxtiming->wait_time * 8);
|
|
||||||
write_reset(t55xxtiming);
|
|
||||||
}
|
|
||||||
|
|
||||||
void write_reset(T55xxTiming* t55xxtiming) {
|
|
||||||
write_gap(t55xxtiming->start_gap);
|
|
||||||
write_bit(t55xxtiming, 1);
|
|
||||||
write_bit(t55xxtiming, 0);
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint16_t wait_time;
|
|
||||||
uint8_t start_gap;
|
|
||||||
uint8_t write_gap;
|
|
||||||
uint8_t data_0;
|
|
||||||
uint8_t data_1;
|
|
||||||
uint16_t program;
|
|
||||||
} T55xxTiming;
|
|
||||||
|
|
||||||
void writer_start();
|
|
||||||
void writer_stop();
|
|
||||||
void write_gap(uint32_t gap_time);
|
|
||||||
void write_bit(T55xxTiming* t55xxtiming, bool value);
|
|
||||||
void write_block(
|
|
||||||
T55xxTiming* t55xxtiming,
|
|
||||||
uint8_t page,
|
|
||||||
uint8_t block,
|
|
||||||
bool lock_bit,
|
|
||||||
uint32_t data,
|
|
||||||
bool password_enable,
|
|
||||||
uint32_t password);
|
|
||||||
|
|
||||||
void write_reset(T55xxTiming* t55xxtiming);
|
|
|
@ -1,17 +1,7 @@
|
||||||
#include "../lfrfid_i.h"
|
#include "../lfrfid_i.h"
|
||||||
#include "../helpers/rfid_writer.h"
|
#define TAG "Clear T5577"
|
||||||
|
|
||||||
static void writer_initialize(T55xxTiming* t55xxtiming) {
|
|
||||||
t55xxtiming->wait_time = 400;
|
|
||||||
t55xxtiming->start_gap = 30;
|
|
||||||
t55xxtiming->write_gap = 18;
|
|
||||||
t55xxtiming->data_0 = 24;
|
|
||||||
t55xxtiming->data_1 = 56;
|
|
||||||
t55xxtiming->program = 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void lfrfid_clear_t5577_password_and_config_to_EM(LfRfid* app) {
|
static void lfrfid_clear_t5577_password_and_config_to_EM(LfRfid* app) {
|
||||||
T55xxTiming* t55xxtiming = malloc(sizeof(T55xxTiming));
|
|
||||||
Popup* popup = app->popup;
|
Popup* popup = app->popup;
|
||||||
char curr_buf[32] = {};
|
char curr_buf[32] = {};
|
||||||
//TODO: use .txt file in resources for passwords.
|
//TODO: use .txt file in resources for passwords.
|
||||||
|
@ -35,30 +25,27 @@ static void lfrfid_clear_t5577_password_and_config_to_EM(LfRfid* app) {
|
||||||
0x07d7bb0b, 0x9636ef8f, 0xb5f44686, 0x9E3779B9, 0xC6EF3720, 0x7854794A, 0xF1EA5EED,
|
0x07d7bb0b, 0x9636ef8f, 0xb5f44686, 0x9E3779B9, 0xC6EF3720, 0x7854794A, 0xF1EA5EED,
|
||||||
0x69314718, 0x57721566, 0x93C467E3, 0x27182818, 0x50415353};
|
0x69314718, 0x57721566, 0x93C467E3, 0x27182818, 0x50415353};
|
||||||
const uint8_t default_passwords_len = sizeof(default_passwords) / sizeof(uint32_t);
|
const uint8_t default_passwords_len = sizeof(default_passwords) / sizeof(uint32_t);
|
||||||
const uint32_t em_config_block_data =
|
|
||||||
0b00000000000101001000000001000000; //no pwd&aor config block
|
|
||||||
|
|
||||||
writer_initialize(t55xxtiming);
|
|
||||||
|
|
||||||
popup_set_header(popup, "Removing\npassword", 90, 36, AlignCenter, AlignCenter);
|
popup_set_header(popup, "Removing\npassword", 90, 36, AlignCenter, AlignCenter);
|
||||||
popup_set_icon(popup, 0, 3, &I_RFIDDolphinSend_97x61);
|
popup_set_icon(popup, 0, 3, &I_RFIDDolphinSend_97x61);
|
||||||
popup_set_text(popup, curr_buf, 90, 56, AlignCenter, AlignCenter);
|
popup_set_text(popup, curr_buf, 90, 56, AlignCenter, AlignCenter);
|
||||||
notification_message(app->notifications, &sequence_blink_start_magenta);
|
notification_message(app->notifications, &sequence_blink_start_magenta);
|
||||||
|
|
||||||
|
LFRFIDT5577 data = {
|
||||||
|
.block[0] = 0b00000000000101001000000001000000,
|
||||||
|
.blocks_to_write = 1,
|
||||||
|
};
|
||||||
|
|
||||||
for(uint8_t i = 0; i < default_passwords_len; i++) {
|
for(uint8_t i = 0; i < default_passwords_len; i++) {
|
||||||
FURI_CRITICAL_ENTER();
|
|
||||||
snprintf(curr_buf, sizeof(curr_buf), "Pass %d of %d", i, default_passwords_len);
|
snprintf(curr_buf, sizeof(curr_buf), "Pass %d of %d", i, default_passwords_len);
|
||||||
view_dispatcher_switch_to_view(app->view_dispatcher, LfRfidViewPopup);
|
view_dispatcher_switch_to_view(app->view_dispatcher, LfRfidViewPopup);
|
||||||
writer_start();
|
|
||||||
write_block(t55xxtiming, 0, 0, false, em_config_block_data, true, default_passwords[i]);
|
t5577_write_with_pass(&data, default_passwords[i]);
|
||||||
write_reset(t55xxtiming);
|
|
||||||
writer_stop();
|
|
||||||
FURI_CRITICAL_EXIT();
|
|
||||||
furi_delay_ms(8);
|
furi_delay_ms(8);
|
||||||
}
|
}
|
||||||
|
|
||||||
notification_message(app->notifications, &sequence_blink_stop);
|
notification_message(app->notifications, &sequence_blink_stop);
|
||||||
popup_reset(app->popup);
|
popup_reset(app->popup);
|
||||||
free(t55xxtiming);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void lfrfid_scene_clear_t5577_on_enter(void* context) {
|
void lfrfid_scene_clear_t5577_on_enter(void* context) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
entry,status,name,type,params
|
entry,status,name,type,params
|
||||||
Version,+,27.0,,
|
Version,+,27.1,,
|
||||||
Header,+,applications/services/bt/bt_service/bt.h,,
|
Header,+,applications/services/bt/bt_service/bt.h,,
|
||||||
Header,+,applications/services/cli/cli.h,,
|
Header,+,applications/services/cli/cli.h,,
|
||||||
Header,+,applications/services/cli/cli_vcp.h,,
|
Header,+,applications/services/cli/cli_vcp.h,,
|
||||||
|
@ -3367,6 +3367,7 @@ Function,+,submenu_set_header,void,"Submenu*, const char*"
|
||||||
Function,+,submenu_set_selected_item,void,"Submenu*, uint32_t"
|
Function,+,submenu_set_selected_item,void,"Submenu*, uint32_t"
|
||||||
Function,-,system,int,const char*
|
Function,-,system,int,const char*
|
||||||
Function,+,t5577_write,void,LFRFIDT5577*
|
Function,+,t5577_write,void,LFRFIDT5577*
|
||||||
|
Function,-,t5577_write_with_pass,void,"LFRFIDT5577*, uint32_t"
|
||||||
Function,-,tan,double,double
|
Function,-,tan,double,double
|
||||||
Function,-,tanf,float,float
|
Function,-,tanf,float,float
|
||||||
Function,-,tanh,double,double
|
Function,-,tanh,double,double
|
||||||
|
|
|
|
@ -54,7 +54,12 @@ static void t5577_write_reset() {
|
||||||
t5577_write_bit(0);
|
t5577_write_bit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void t5577_write_block(uint8_t block, bool lock_bit, uint32_t data) {
|
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);
|
furi_delay_us(T5577_TIMING_WAIT_TIME * 8);
|
||||||
|
|
||||||
// start gap
|
// start gap
|
||||||
|
@ -63,6 +68,13 @@ static void t5577_write_block(uint8_t block, bool lock_bit, uint32_t data) {
|
||||||
// opcode for page 0
|
// opcode for page 0
|
||||||
t5577_write_opcode(T5577_OPCODE_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
|
// lock bit
|
||||||
t5577_write_bit(lock_bit);
|
t5577_write_bit(lock_bit);
|
||||||
|
|
||||||
|
@ -82,11 +94,26 @@ static void t5577_write_block(uint8_t block, bool lock_bit, uint32_t data) {
|
||||||
t5577_write_reset();
|
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(LFRFIDT5577* data) {
|
void t5577_write(LFRFIDT5577* data) {
|
||||||
t5577_start();
|
t5577_start();
|
||||||
FURI_CRITICAL_ENTER();
|
FURI_CRITICAL_ENTER();
|
||||||
for(size_t i = 0; i < data->blocks_to_write; i++) {
|
for(size_t i = 0; i < data->blocks_to_write; i++) {
|
||||||
t5577_write_block(i, false, data->block[i]);
|
t5577_write_block_simple(i, false, data->block[i]);
|
||||||
|
}
|
||||||
|
t5577_write_reset();
|
||||||
|
FURI_CRITICAL_EXIT();
|
||||||
|
t5577_stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
void t5577_write_with_pass(LFRFIDT5577* data, uint32_t password) {
|
||||||
|
t5577_start();
|
||||||
|
FURI_CRITICAL_ENTER();
|
||||||
|
for(size_t i = 0; i < data->blocks_to_write; i++) {
|
||||||
|
t5577_write_block_pass(0, false, data->block[i], true, password);
|
||||||
}
|
}
|
||||||
t5577_write_reset();
|
t5577_write_reset();
|
||||||
FURI_CRITICAL_EXIT();
|
FURI_CRITICAL_EXIT();
|
||||||
|
|
|
@ -51,6 +51,8 @@ typedef struct {
|
||||||
*/
|
*/
|
||||||
void t5577_write(LFRFIDT5577* data);
|
void t5577_write(LFRFIDT5577* data);
|
||||||
|
|
||||||
|
void t5577_write_with_pass(LFRFIDT5577* data, uint32_t password);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
Loading…
Add table
Reference in a new issue