Skip to content

Commit 99cce69

Browse files
jilaypandyaaescolar
authored andcommitted
drivers: stepper: gpio: implement stop function
Implement sample stop function and update enable function Signed-off-by: Jilay Pandya <[email protected]>
1 parent 2cd5a37 commit 99cce69

File tree

1 file changed

+32
-15
lines changed

1 file changed

+32
-15
lines changed

drivers/stepper/gpio_stepper_controller.c

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,12 @@ static void decrement_coil_charge(const struct device *dev)
7878
}
7979
}
8080

81-
static int power_down_coils(const struct device *dev)
81+
static int energize_coils(const struct device *dev, const bool energized)
8282
{
8383
const struct gpio_stepper_config *config = dev->config;
8484

8585
for (int i = 0; i < NUM_CONTROL_PINS; i++) {
86-
const int err = gpio_pin_set_dt(&config->control_pins[i], 0u);
86+
const int err = gpio_pin_set_dt(&config->control_pins[i], energized);
8787

8888
if (err != 0) {
8989
LOG_ERR("Failed to power down coil %d", i);
@@ -327,23 +327,39 @@ static int gpio_stepper_set_event_callback(const struct device *dev,
327327
static int gpio_stepper_enable(const struct device *dev, bool enable)
328328
{
329329
struct gpio_stepper_data *data = dev->data;
330+
int err;
330331

331-
K_SPINLOCK(&data->lock) {
332+
if (data->is_enabled == enable) {
333+
return 0;
334+
}
332335

336+
K_SPINLOCK(&data->lock) {
333337
data->is_enabled = enable;
334338

335339
if (enable) {
336-
(void)k_work_reschedule(&data->stepper_dwork, K_NO_WAIT);
340+
err = energize_coils(dev, true);
337341
} else {
338342
(void)k_work_cancel_delayable(&data->stepper_dwork);
339-
const int err = power_down_coils(dev);
343+
err = energize_coils(dev, false);
344+
}
345+
}
346+
return err;
347+
}
340348

341-
if (err != 0) {
342-
return -EIO;
343-
}
349+
static int gpio_stepper_stop(const struct device *dev)
350+
{
351+
struct gpio_stepper_data *data = dev->data;
352+
int err;
353+
354+
K_SPINLOCK(&data->lock) {
355+
(void)k_work_cancel_delayable(&data->stepper_dwork);
356+
err = energize_coils(dev, true);
357+
358+
if (data->callback && !err) {
359+
data->callback(data->dev, STEPPER_EVENT_STOPPED, data->event_cb_user_data);
344360
}
345361
}
346-
return 0;
362+
return err;
347363
}
348364

349365
static int gpio_stepper_init(const struct device *dev)
@@ -362,16 +378,17 @@ static int gpio_stepper_init(const struct device *dev)
362378

363379
static DEVICE_API(stepper, gpio_stepper_api) = {
364380
.enable = gpio_stepper_enable,
365-
.move_by = gpio_stepper_move_by,
366-
.is_moving = gpio_stepper_is_moving,
381+
.set_micro_step_res = gpio_stepper_set_micro_step_res,
382+
.get_micro_step_res = gpio_stepper_get_micro_step_res,
367383
.set_reference_position = gpio_stepper_set_reference_position,
368384
.get_actual_position = gpio_stepper_get_actual_position,
369-
.move_to = gpio_stepper_move_to,
385+
.set_event_callback = gpio_stepper_set_event_callback,
370386
.set_microstep_interval = gpio_stepper_set_microstep_interval,
387+
.move_by = gpio_stepper_move_by,
388+
.move_to = gpio_stepper_move_to,
371389
.run = gpio_stepper_run,
372-
.set_micro_step_res = gpio_stepper_set_micro_step_res,
373-
.get_micro_step_res = gpio_stepper_get_micro_step_res,
374-
.set_event_callback = gpio_stepper_set_event_callback,
390+
.stop = gpio_stepper_stop,
391+
.is_moving = gpio_stepper_is_moving,
375392
};
376393

377394
#define GPIO_STEPPER_DEFINE(inst) \

0 commit comments

Comments
 (0)