diff --git a/firmware/controllers/system/pwm_generator_logic.cpp b/firmware/controllers/system/pwm_generator_logic.cpp index 65d8cf6131..4a464e41f0 100644 --- a/firmware/controllers/system/pwm_generator_logic.cpp +++ b/firmware/controllers/system/pwm_generator_logic.cpp @@ -226,3 +226,30 @@ void PwmConfig::weComplexInit(const char *msg, int phaseCount, float *switchTime // let's start the indefinite callback loop of PWM generation timerCallback(this); } + +void startSimplePwm(PwmConfig *state, const char *msg, OutputPin *output, float frequency, float dutyCycle, pwm_gen_callback *stateChangeCallback) { + efiAssertVoid(CUSTOM_ERR_6665, dutyCycle >= 0 && dutyCycle <= 1, "dutyCycle"); + if (frequency < 1) { + warning(CUSTOM_OBD_LOW_FREQUENCY, "low frequency %.2f", frequency); + return; + } + + float switchTimes[] = { dutyCycle, 1 }; + pin_state_t pinStates0[] = { 0, 1 }; + + pin_state_t *pinStates[1] = { pinStates0 }; + + state->outputPins[0] = output; + + state->setFrequency(frequency); + state->weComplexInit(msg, 2, switchTimes, 1, pinStates, NULL, stateChangeCallback); +} + +void startSimplePwmExt(PwmConfig *state, const char *msg, brain_pin_e brainPin, OutputPin *output, float frequency, + float dutyCycle, pwm_gen_callback *stateChangeCallback) { + + output->initPin(msg, brainPin); + + startSimplePwm(state, msg, output, frequency, dutyCycle, stateChangeCallback); +} + diff --git a/firmware/controllers/system/pwm_generator_logic.h b/firmware/controllers/system/pwm_generator_logic.h index 06f8c65b0e..344670e064 100644 --- a/firmware/controllers/system/pwm_generator_logic.h +++ b/firmware/controllers/system/pwm_generator_logic.h @@ -101,6 +101,22 @@ private: single_wave_s waveInstance; }; +/** + * Start a one-channel software PWM driver. + * + * This method should be called after scheduling layer is started by initSignalExecutor() + */ +void startSimplePwm(PwmConfig *state, const char *msg, OutputPin *output, + float dutyCycle, float frequency, pwm_gen_callback *stateChangeCallback); + +/** + * initialize GPIO pin and start a one-channel software PWM driver. + * + * This method should be called after scheduling layer is started by initSignalExecutor() + */ +void startSimplePwmExt(PwmConfig *state, const char *msg, brain_pin_e brainPin, OutputPin *output, + float frequency, float dutyCycle, pwm_gen_callback *stateChangeCallback); + void copyPwmParameters(PwmConfig *state, int phaseCount, float *switchTimes, int waveCount, pin_state_t **pinStates); diff --git a/firmware/hw_layer/pwm_generator.cpp b/firmware/hw_layer/pwm_generator.cpp index a7562cb796..0cde941615 100644 --- a/firmware/hw_layer/pwm_generator.cpp +++ b/firmware/hw_layer/pwm_generator.cpp @@ -32,32 +32,6 @@ void applyPinState(PwmConfig *state, int stateIndex) { } } -void startSimplePwm(PwmConfig *state, const char *msg, OutputPin *output, float frequency, float dutyCycle, pwm_gen_callback *stateChangeCallback) { - efiAssertVoid(CUSTOM_ERR_6665, dutyCycle >= 0 && dutyCycle <= 1, "dutyCycle"); - if (frequency < 1) { - warning(CUSTOM_OBD_LOW_FREQUENCY, "low frequency %.2f", frequency); - return; - } - - float switchTimes[] = { dutyCycle, 1 }; - pin_state_t pinStates0[] = { 0, 1 }; - - pin_state_t *pinStates[1] = { pinStates0 }; - - state->outputPins[0] = output; - - state->setFrequency(frequency); - state->weComplexInit(msg, 2, switchTimes, 1, pinStates, NULL, stateChangeCallback); -} - -void startSimplePwmExt(PwmConfig *state, const char *msg, brain_pin_e brainPin, OutputPin *output, float frequency, - float dutyCycle, pwm_gen_callback *stateChangeCallback) { - - output->initPin(msg, brainPin); - - startSimplePwm(state, msg, output, frequency, dutyCycle, stateChangeCallback); -} - void initPwmGenerator(void) { } diff --git a/firmware/hw_layer/pwm_generator.h b/firmware/hw_layer/pwm_generator.h index f758c2543f..5c01279ef5 100644 --- a/firmware/hw_layer/pwm_generator.h +++ b/firmware/hw_layer/pwm_generator.h @@ -17,22 +17,6 @@ void initPwmGenerator(void); -/** - * Start a one-channel software PWM driver. - * - * This method should be called after scheduling layer is started by initSignalExecutor() - */ -void startSimplePwm(PwmConfig *state, const char *msg, OutputPin *output, - float dutyCycle, float frequency, pwm_gen_callback *stateChangeCallback); - -/** - * initialize GPIO pin and start a one-channel software PWM driver. - * - * This method should be called after scheduling layer is started by initSignalExecutor() - */ -void startSimplePwmExt(PwmConfig *state, const char *msg, brain_pin_e brainPin, OutputPin *output, - float frequency, float dutyCycle, pwm_gen_callback *stateChangeCallback); - /** * default implementation of pwm_gen_callback which simply toggles the pins */