diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index 2f27c0fb1..ddf0b34f4 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -352,7 +352,7 @@ bool digital_sequence_send(DigitalSequence* sequence, const GpioPin* gpio) { //gpio = &gpio_ext_pb2; furi_hal_gpio_init(gpio, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); - if(true) { + if(sequence->bake) { DigitalSignal* sig = digital_sequence_bake(sequence); digital_signal_send(sig, gpio); diff --git a/lib/digital_signal/digital_signal.h b/lib/digital_signal/digital_signal.h index 88079c8f7..8a48507cf 100644 --- a/lib/digital_signal/digital_signal.h +++ b/lib/digital_signal/digital_signal.h @@ -31,6 +31,7 @@ typedef struct { typedef struct { uint8_t signals_size; + bool bake; uint32_t sequence_used; uint32_t sequence_size; DigitalSignal** signals; diff --git a/lib/nfc/protocols/nfca.c b/lib/nfc/protocols/nfca.c index c0b7d3fd0..9c3a74575 100644 --- a/lib/nfc/protocols/nfca.c +++ b/lib/nfc/protocols/nfca.c @@ -91,7 +91,7 @@ static void nfca_add_modulation(DigitalSignal* signal, size_t phases) { } static void nfca_add_silence(DigitalSignal* signal, size_t phases) { - bool end_level = signal->start_level ^ (signal->edge_cnt % 2); + bool end_level = signal->start_level ^ ((signal->edge_cnt % 2) == 0); if((signal->edge_cnt == 0) || end_level) { signal->edge_timings[signal->edge_cnt++] = DIGITAL_SIGNAL_PS(phases * T_SUB_PHASE); @@ -124,6 +124,9 @@ NfcaSignal* nfca_signal_alloc() { nfca_signal->tx_signal = digital_sequence_alloc(NFCA_SIGNAL_MAX_EDGES); + /* we are dealing with shorter sequences, enable bake-before-sending */ + nfca_signal->tx_signal->bake = true; + digital_sequence_set_signal(nfca_signal->tx_signal, SEQ_SOF, nfca_signal->seq_d); digital_sequence_set_signal(nfca_signal->tx_signal, SEQ_BIT0, nfca_signal->seq_e); digital_sequence_set_signal(nfca_signal->tx_signal, SEQ_BIT1, nfca_signal->seq_d);