Skip to content

Commit 271aeaf

Browse files
jilaypandyanashif
authored andcommitted
tests: drivers: stepper: stepper_api: test cb user_data
This commit does the following: 1. tests set_callback and user_data 2. fixes the api as well as the drivers by passing user_data back to the set callback Signed-off-by: Jilay Pandya <[email protected]>
1 parent fdae4d2 commit 271aeaf

File tree

6 files changed

+29
-15
lines changed

6 files changed

+29
-15
lines changed

drivers/stepper/adi_tmc/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,7 @@
22
# SPDX-License-Identifier: Apache-2.0
33

44
zephyr_library()
5+
zephyr_library_property(ALLOW_EMPTY TRUE)
6+
57
zephyr_library_sources_ifdef(CONFIG_STEPPER_ADI_TMC_SPI adi_tmc_spi.c)
68
zephyr_library_sources_ifdef(CONFIG_STEPPER_ADI_TMC5041 adi_tmc5041_stepper_controller.c)

drivers/stepper/adi_tmc/adi_tmc5041_stepper_controller.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ static void execute_callback(const struct device *dev, const enum stepper_event
185185
LOG_WRN_ONCE("No callback registered");
186186
return;
187187
}
188-
data->callback(dev, event);
188+
data->callback(dev, event, data->event_cb_user_data);
189189
}
190190

191191
static void rampstat_work_handler(struct k_work *work)

drivers/stepper/gpio_stepper_controller.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
#include <zephyr/kernel.h>
1010
#include <zephyr/sys_clock.h>
1111
#include <zephyr/drivers/stepper.h>
12-
#include <zephyr/logging/log.h>
1312
#include <zephyr/sys/__assert.h>
1413

14+
#include <zephyr/logging/log.h>
1515
LOG_MODULE_REGISTER(gpio_stepper_motor_controller, CONFIG_STEPPER_LOG_LEVEL);
1616

1717
#define MAX_MICRO_STEP_RES STEPPER_MICRO_STEP_2
@@ -34,10 +34,10 @@ struct gpio_stepper_data {
3434
uint8_t step_gap;
3535
uint8_t coil_charge;
3636
struct k_work_delayable stepper_dwork;
37-
stepper_event_callback_t callback;
3837
int32_t actual_position;
3938
uint32_t delay_in_us;
4039
int32_t step_count;
40+
stepper_event_callback_t callback;
4141
void *event_cb_user_data;
4242
};
4343

@@ -84,7 +84,7 @@ static void update_remaining_steps(struct gpio_stepper_data *data)
8484
LOG_WRN_ONCE("No callback set");
8585
return;
8686
}
87-
data->callback(data->dev, STEPPER_EVENT_STEPS_COMPLETED);
87+
data->callback(data->dev, STEPPER_EVENT_STEPS_COMPLETED, data->event_cb_user_data);
8888
}
8989
}
9090

drivers/stepper/stepper_shell.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,23 +40,26 @@ struct stepper_direction_map {
4040
.microstep = _microstep, \
4141
}
4242

43-
static void print_callback(const struct device *dev, const enum stepper_event event)
43+
static void print_callback(const struct device *dev, const enum stepper_event event,
44+
void *user_data)
4445
{
46+
const struct shell *sh = user_data;
47+
4548
switch (event) {
4649
case STEPPER_EVENT_STEPS_COMPLETED:
47-
LOG_INF("%s: Steps completed.", dev->name);
50+
shell_info(sh, "%s: Steps completed.", dev->name);
4851
break;
4952
case STEPPER_EVENT_STALL_DETECTED:
50-
LOG_INF("%s: Stall detected.", dev->name);
53+
shell_info(sh, "%s: Stall detected.", dev->name);
5154
break;
5255
case STEPPER_EVENT_LEFT_END_STOP_DETECTED:
53-
LOG_INF("%s: Left limit switch pressed.", dev->name);
56+
shell_info(sh, "%s: Left limit switch pressed.", dev->name);
5457
break;
5558
case STEPPER_EVENT_RIGHT_END_STOP_DETECTED:
56-
LOG_INF("%s: Right limit switch pressed.", dev->name);
59+
shell_info(sh, "%s: Right limit switch pressed.", dev->name);
5760
break;
5861
default:
59-
LOG_INF("%s: Unknown signal received.", dev->name);
62+
shell_info(sh, "%s: Unknown signal received.", dev->name);
6063
break;
6164
}
6265
}
@@ -200,7 +203,7 @@ static int cmd_stepper_move(const struct shell *sh, size_t argc, char **argv)
200203
return err;
201204
}
202205

203-
err = stepper_set_callback(dev, print_callback, NULL);
206+
err = stepper_set_callback(dev, print_callback, (void *)sh);
204207
if (err != 0) {
205208
shell_error(sh, "Failed to set callback: %d", err);
206209
}

include/zephyr/drivers/stepper.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,8 @@ typedef int (*stepper_enable_constant_velocity_mode_t)(const struct device *dev,
174174
/**
175175
* @brief Callback function for stepper events
176176
*/
177-
typedef void (*stepper_event_callback_t)(const struct device *dev, const enum stepper_event event);
177+
typedef void (*stepper_event_callback_t)(const struct device *dev, const enum stepper_event event,
178+
void *user_data);
178179

179180
/**
180181
* @brief Set the callback function to be called when a stepper event occurs

tests/drivers/stepper/stepper_api/src/main.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,12 @@ struct stepper_fixture {
1414

1515
struct k_poll_signal stepper_signal;
1616
struct k_poll_event stepper_event;
17+
void *user_data_received;
1718

18-
static void stepper_print_event_callback(const struct device *dev, enum stepper_event event)
19+
static void stepper_print_event_callback(const struct device *dev, enum stepper_event event,
20+
void *user_data)
1921
{
22+
user_data_received = user_data;
2023
switch (event) {
2124
case STEPPER_EVENT_STEPS_COMPLETED:
2225
k_poll_signal_raise(&stepper_signal, STEPPER_EVENT_STEPS_COMPLETED);
@@ -45,7 +48,7 @@ static void *stepper_setup(void)
4548
k_poll_signal_init(&stepper_signal);
4649
k_poll_event_init(&stepper_event, K_POLL_TYPE_SIGNAL, K_POLL_MODE_NOTIFY_ONLY,
4750
&stepper_signal);
48-
51+
user_data_received = NULL;
4952
zassert_not_null(fixture.dev);
5053
return &fixture;
5154
}
@@ -80,8 +83,12 @@ ZTEST_F(stepper, test_target_position)
8083
int32_t pos = 100u;
8184

8285
(void)stepper_set_max_velocity(fixture->dev, 100u);
83-
(void)stepper_set_callback(fixture->dev, fixture->callback, NULL);
86+
87+
/* Pass the function name as user data */
88+
(void)stepper_set_callback(fixture->dev, fixture->callback, &fixture);
89+
8490
(void)stepper_set_target_position(fixture->dev, pos);
91+
8592
(void)k_poll(&stepper_event, 1, K_SECONDS(5));
8693
unsigned int signaled;
8794
int result;
@@ -91,4 +98,5 @@ ZTEST_F(stepper, test_target_position)
9198
zassert_equal(result, STEPPER_EVENT_STEPS_COMPLETED, "Signal not set");
9299
(void)stepper_get_actual_position(fixture->dev, &pos);
93100
zassert_equal(pos, 100u, "Target position should be %d but is %d", 100u, pos);
101+
zassert_equal(user_data_received, &fixture, "User data not received");
94102
}

0 commit comments

Comments
 (0)