#616 idle for simulator

This commit is contained in:
rusefi 2018-11-02 13:38:31 -04:00
parent 61a39de21e
commit 6d933ceb82
4 changed files with 43 additions and 42 deletions

View File

@ -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);
}

View File

@ -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);

View File

@ -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) {
}

View File

@ -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
*/