From 39dbd49874e8dce5272797c2cdf936c68fcc91ae Mon Sep 17 00:00:00 2001 From: Fabian Blatz Date: Sat, 28 Dec 2024 12:17:04 +0100 Subject: [PATCH] drivers: stepper: step_dir: Fix actual position increment Address issue where the timing source is not stopped upon step completion and not adjusting the actual position after performing a step. Signed-off-by: Fabian Blatz --- drivers/stepper/step_dir/step_dir_stepper_common.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/stepper/step_dir/step_dir_stepper_common.c b/drivers/stepper/step_dir/step_dir_stepper_common.c index 9955b140867..86be8d5d3c3 100644 --- a/drivers/stepper/step_dir/step_dir_stepper_common.c +++ b/drivers/stepper/step_dir/step_dir_stepper_common.c @@ -44,6 +44,12 @@ static inline int step_dir_stepper_perform_step(const struct device *dev) } } + if (data->direction == STEPPER_DIRECTION_POSITIVE) { + data->actual_position++; + } else { + data->actual_position--; + } + return 0; } @@ -105,12 +111,15 @@ static void stepper_work_event_handler(struct k_work *work) static void update_remaining_steps(struct step_dir_stepper_common_data *data) { + const struct step_dir_stepper_common_config *config = data->dev->config; + if (data->step_count > 0) { data->step_count--; } else if (data->step_count < 0) { data->step_count++; } else { stepper_trigger_callback(data->dev, STEPPER_EVENT_STEPS_COMPLETED); + config->timing_source->stop(data->dev); } }