Skip to content

Commit 312355e

Browse files
committed
Fixed zero playback bug, initial wiggling tests
1 parent 474b29a commit 312355e

File tree

1 file changed

+35
-4
lines changed

1 file changed

+35
-4
lines changed

helpers/mag_helpers.c

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,44 @@ void play_halfbit(bool value, MagSetting* setting) {
2222
switch(setting->tx) {
2323
case MagTxStateRFID:
2424
furi_hal_gpio_write(RFID_PIN_OUT, value);
25+
/*furi_hal_gpio_write(RFID_PIN_OUT, !value);
26+
furi_hal_gpio_write(RFID_PIN_OUT, value);
27+
furi_hal_gpio_write(RFID_PIN_OUT, !value);
28+
furi_hal_gpio_write(RFID_PIN_OUT, value);*/
2529
break;
2630
case MagTxStateGPIO:
2731
furi_hal_gpio_write(GPIO_PIN_A, value);
2832
furi_hal_gpio_write(GPIO_PIN_B, !value);
2933
break;
3034
case MagTxStatePiezo:
3135
furi_hal_gpio_write(&gpio_speaker, value);
36+
/*furi_hal_gpio_write(&gpio_speaker, !value);
37+
furi_hal_gpio_write(&gpio_speaker, value);
38+
furi_hal_gpio_write(&gpio_speaker, !value);
39+
furi_hal_gpio_write(&gpio_speaker, value);*/
40+
3241
break;
3342
case MagTxStateLF_P:
3443
furi_hal_gpio_write(RFID_PIN_OUT, value);
3544
furi_hal_gpio_write(&gpio_speaker, value);
45+
46+
/* // Weaker but cleaner signal
47+
if(value) {
48+
furi_hal_gpio_write(RFID_PIN_OUT, value);
49+
furi_hal_gpio_write(&gpio_speaker, value);
50+
furi_delay_us(10);
51+
furi_hal_gpio_write(RFID_PIN_OUT, !value);
52+
furi_hal_gpio_write(&gpio_speaker, !value);
53+
} else {
54+
furi_delay_us(10);
55+
}*/
56+
57+
/*furi_hal_gpio_write(RFID_PIN_OUT, value);
58+
furi_hal_gpio_write(&gpio_speaker, value);
59+
furi_hal_gpio_write(RFID_PIN_OUT, !value);
60+
furi_hal_gpio_write(&gpio_speaker, !value);
61+
furi_hal_gpio_write(RFID_PIN_OUT, value);
62+
furi_hal_gpio_write(&gpio_speaker, value);*/
3663
break;
3764
case MagTxStateNFC:
3865
// turn on for duration of half-bit? or "blip" the field on / off?
@@ -269,7 +296,11 @@ void mag_spoof(Mag* mag) {
269296
data3, (uint8_t*)bits_t3_manchester, (uint8_t*)bits_t3_raw, bitlen[2], sublen[2]);
270297

271298
if(furi_log_get_level() >= FuriLogLevelDebug) {
272-
printf("Manchester bitcount: T1: %d, T2: %d\r\n", bits_t1_count, bits_t2_count);
299+
printf(
300+
"Manchester bitcount: T1: %d, T2: %d, T3: %d\r\n",
301+
bits_t1_count,
302+
bits_t2_count,
303+
bits_t3_count);
273304
printf("T1 raw: ");
274305
for(int i = 0; i < bits_t1_count / 16; i++) printf("%02x ", bits_t1_raw[i]);
275306
printf("\r\nT1 manchester: ");
@@ -293,7 +324,7 @@ void mag_spoof(Mag* mag) {
293324
FURI_CRITICAL_ENTER();
294325
for(uint16_t i = 0; i < (ZERO_PREFIX * 2); i++) {
295326
// is this right?
296-
bit ^= 0xFF;
327+
if(!!(i % 2)) bit ^= 1;
297328
play_halfbit(bit, setting);
298329
furi_delay_us(setting->us_clock);
299330
}
@@ -303,7 +334,7 @@ void mag_spoof(Mag* mag) {
303334

304335
if((setting->track == MagTrackStateOneAndTwo))
305336
for(uint16_t i = 0; i < (ZERO_BETWEEN * 2); i++) {
306-
bit ^= 0xFF;
337+
if(!!(i % 2)) bit ^= 1;
307338
play_halfbit(bit, setting);
308339
furi_delay_us(setting->us_clock);
309340
}
@@ -319,7 +350,7 @@ void mag_spoof(Mag* mag) {
319350
play_track((uint8_t*)bits_t3_manchester, bits_t3_count, setting, false);
320351

321352
for(uint16_t i = 0; i < (ZERO_SUFFIX * 2); i++) {
322-
bit ^= 0xFF;
353+
if(!!(i % 2)) bit ^= 1;
323354
play_halfbit(bit, setting);
324355
furi_delay_us(setting->us_clock);
325356
}

0 commit comments

Comments
 (0)