clean up digital_signal.c and fix remainder calculation

This commit is contained in:
g3gg0
2022-11-21 18:02:34 +01:00
parent 8b4e6de56e
commit fe9bc3e581
2 changed files with 3 additions and 10 deletions

View File

@@ -225,16 +225,13 @@ void digital_signal_start_timer() {
void digital_signal_send(DigitalSignal* signal, const GpioPin* gpio) { void digital_signal_send(DigitalSignal* signal, const GpioPin* gpio) {
furi_assert(signal); furi_assert(signal);
/* if selected GPIO changed, force reconfiguration of buffers */
if(gpio && (signal->gpio != gpio)) {
signal->gpio = gpio;
}
/* Configure gpio as output */ /* Configure gpio as output */
furi_hal_gpio_init(signal->gpio, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); furi_hal_gpio_init(signal->gpio, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh);
/* single signal, add a temporary, terminating edge at the end */ /* single signal, add a temporary, terminating edge at the end */
signal->edge_timings[signal->edge_cnt++] = 10; signal->edge_timings[signal->edge_cnt++] = 10;
signal->gpio = gpio;
digital_signal_prepare(signal); digital_signal_prepare(signal);
digital_signal_setup_dma(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; sequence->signals[signal_index] = signal;
/* all signals will use the sequence's GPIO */
signal->gpio = sequence->gpio;
digital_signal_prepare(signal); digital_signal_prepare(signal);
} }
@@ -331,14 +325,14 @@ bool digital_sequence_send(DigitalSequence* sequence, const GpioPin* gpio) {
uint32_t remainder = 0; uint32_t remainder = 0;
sequence->gpio = gpio;
for(uint32_t pos = 0; pos < sequence->sequence_used; pos++) { for(uint32_t pos = 0; pos < sequence->sequence_used; pos++) {
DigitalSignal *sig = sequence->signals[sequence->sequence[pos]]; DigitalSignal *sig = sequence->signals[sequence->sequence[pos]];
/* take over previous remainder */ /* take over previous remainder */
sig->reload_reg_remainder = remainder; sig->reload_reg_remainder = remainder;
sig->gpio = gpio;
digital_signal_prepare(sig); digital_signal_prepare(sig);
remainder = sig->reload_reg_remainder;
if(!digital_sequence_send_signal(sig)) { if(!digital_sequence_send_signal(sig)) {
digital_signal_stop_timer(); digital_signal_stop_timer();

View File

@@ -33,7 +33,6 @@ typedef struct {
uint8_t signals_size; uint8_t signals_size;
uint32_t sequence_used; uint32_t sequence_used;
uint32_t sequence_size; uint32_t sequence_size;
const GpioPin* gpio;
DigitalSignal** signals; DigitalSignal** signals;
uint8_t* sequence; uint8_t* sequence;
} DigitalSequence; } DigitalSequence;