mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-20 04:54:45 -07:00
clean up digital_signal.c and fix remainder calculation
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user