diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index de79c2962..92e70ddb9 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -225,16 +225,13 @@ void digital_signal_start_timer() { void digital_signal_send(DigitalSignal* signal, const GpioPin* gpio) { furi_assert(signal); - /* if selected GPIO changed, force reconfiguration of buffers */ - if(gpio && (signal->gpio != gpio)) { - signal->gpio = gpio; - } /* Configure gpio as output */ furi_hal_gpio_init(signal->gpio, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); /* single signal, add a temporary, terminating edge at the end */ signal->edge_timings[signal->edge_cnt++] = 10; + signal->gpio = gpio; digital_signal_prepare(signal); digital_signal_setup_dma(signal); @@ -280,9 +277,6 @@ void digital_sequence_set_signal(DigitalSequence* sequence, uint8_t signal_index sequence->signals[signal_index] = signal; - /* all signals will use the sequence's GPIO */ - signal->gpio = sequence->gpio; - digital_signal_prepare(signal); } @@ -331,14 +325,14 @@ bool digital_sequence_send(DigitalSequence* sequence, const GpioPin* gpio) { uint32_t remainder = 0; - sequence->gpio = gpio; - for(uint32_t pos = 0; pos < sequence->sequence_used; pos++) { DigitalSignal *sig = sequence->signals[sequence->sequence[pos]]; /* take over previous remainder */ sig->reload_reg_remainder = remainder; + sig->gpio = gpio; digital_signal_prepare(sig); + remainder = sig->reload_reg_remainder; if(!digital_sequence_send_signal(sig)) { digital_signal_stop_timer(); diff --git a/lib/digital_signal/digital_signal.h b/lib/digital_signal/digital_signal.h index 83ccbad30..88079c8f7 100644 --- a/lib/digital_signal/digital_signal.h +++ b/lib/digital_signal/digital_signal.h @@ -33,7 +33,6 @@ typedef struct { uint8_t signals_size; uint32_t sequence_used; uint32_t sequence_size; - const GpioPin* gpio; DigitalSignal** signals; uint8_t* sequence; } DigitalSequence;