Zephyr API Documentation 4.3.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
stepper.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: Copyright (c) 2024 Carl Zeiss Meditec AG
3 * SPDX-FileCopyrightText: Copyright (c) 2024 Jilay Sandeep Pandya
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12
13#ifndef ZEPHYR_INCLUDE_DRIVERS_STEPPER_H_
14#define ZEPHYR_INCLUDE_DRIVERS_STEPPER_H_
15
16#include <zephyr/kernel.h>
17#include <zephyr/device.h>
18#include <errno.h>
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
36
60
65#define MICRO_STEP_RES_INDEX(res) LOG2(res)
66
67#define VALID_MICRO_STEP_RES(res) \
68 ((res) == STEPPER_MICRO_STEP_1 || (res) == STEPPER_MICRO_STEP_2 || \
69 (res) == STEPPER_MICRO_STEP_4 || (res) == STEPPER_MICRO_STEP_8 || \
70 (res) == STEPPER_MICRO_STEP_16 || (res) == STEPPER_MICRO_STEP_32 || \
71 (res) == STEPPER_MICRO_STEP_64 || (res) == STEPPER_MICRO_STEP_128 || \
72 (res) == STEPPER_MICRO_STEP_256)
73
83
90
96typedef int (*stepper_enable_t)(const struct device *dev);
97
103typedef int (*stepper_disable_t)(const struct device *dev);
104
110typedef int (*stepper_set_micro_step_res_t)(
111 const struct device *dev, const enum stepper_micro_step_resolution resolution);
112
118typedef int (*stepper_get_micro_step_res_t)(const struct device *dev,
119 enum stepper_micro_step_resolution *resolution);
120
124typedef void (*stepper_event_cb_t)(const struct device *dev, const enum stepper_event event,
125 void *user_data);
126
132typedef int (*stepper_set_event_cb_t)(const struct device *dev,
133 stepper_event_cb_t callback, void *user_data);
134
138__subsystem struct stepper_driver_api {
139 stepper_enable_t enable;
140 stepper_disable_t disable;
141 stepper_set_micro_step_res_t set_micro_step_res;
142 stepper_get_micro_step_res_t get_micro_step_res;
143 stepper_set_event_cb_t set_event_cb;
144};
145
149
160__syscall int stepper_enable(const struct device *dev);
161
162static inline int z_impl_stepper_enable(const struct device *dev)
163{
164 __ASSERT_NO_MSG(dev != NULL);
165 const struct stepper_driver_api *api = (const struct stepper_driver_api *)dev->api;
166
167 return api->enable(dev);
168}
169
181__syscall int stepper_disable(const struct device *dev);
182
183static inline int z_impl_stepper_disable(const struct device *dev)
184{
185 __ASSERT_NO_MSG(dev != NULL);
186 const struct stepper_driver_api *api = (const struct stepper_driver_api *)dev->api;
187
188 return api->disable(dev);
189}
190
202__syscall int stepper_set_micro_step_res(const struct device *dev,
204
205static inline int z_impl_stepper_set_micro_step_res(const struct device *dev,
207{
208 __ASSERT_NO_MSG(dev != NULL);
209 const struct stepper_driver_api *api = (const struct stepper_driver_api *)dev->api;
210
211 if (!VALID_MICRO_STEP_RES(res)) {
212 return -EINVAL;
213 }
214 return api->set_micro_step_res(dev, res);
215}
216
226__syscall int stepper_get_micro_step_res(const struct device *dev,
228
229static inline int z_impl_stepper_get_micro_step_res(const struct device *dev,
231{
232 __ASSERT_NO_MSG(dev != NULL);
233 __ASSERT_NO_MSG(res != NULL);
234 const struct stepper_driver_api *api = (const struct stepper_driver_api *)dev->api;
235
236 return api->get_micro_step_res(dev, res);
237}
238
250__syscall int stepper_set_event_cb(const struct device *dev, stepper_event_cb_t callback,
251 void *user_data);
252
253static inline int z_impl_stepper_set_event_cb(const struct device *dev,
254 stepper_event_cb_t cb, void *user_data)
255{
256 __ASSERT_NO_MSG(dev != NULL);
257 const struct stepper_driver_api *api = (const struct stepper_driver_api *)dev->api;
258
259 if (api->set_event_cb == NULL) {
260 return -ENOSYS;
261 }
262
263 return api->set_event_cb(dev, cb, user_data);
264}
265
269
270#ifdef __cplusplus
271}
272#endif
273
274#include <zephyr/syscalls/stepper.h>
275
276#endif /* ZEPHYR_INCLUDE_DRIVERS_STEPPER_H_ */
System error numbers.
#define VALID_MICRO_STEP_RES(res)
Definition stepper.h:67
int stepper_enable(const struct device *dev)
Enable stepper hardware driver.
int stepper_set_micro_step_res(const struct device *dev, enum stepper_micro_step_resolution res)
Set the micro-step resolution in stepper hardware driver.
int stepper_get_micro_step_res(const struct device *dev, enum stepper_micro_step_resolution *res)
Get the micro-step resolution in stepper hardware driver.
stepper_event
Stepper Hardware Driver Events.
Definition stepper.h:77
int stepper_disable(const struct device *dev)
Disable stepper hardware driver.
stepper_micro_step_resolution
Stepper Motor micro-step resolution options.
Definition stepper.h:40
int stepper_set_event_cb(const struct device *dev, stepper_event_cb_t callback, void *user_data)
Set the callback function to be called when a stepper_event occurs.
@ STEPPER_EVENT_STALL_DETECTED
Stepper driver stall detected.
Definition stepper.h:79
@ STEPPER_EVENT_FAULT_DETECTED
Stepper driver fault detected.
Definition stepper.h:81
@ STEPPER_MICRO_STEP_64
64 micro-steps per full step
Definition stepper.h:54
@ STEPPER_MICRO_STEP_4
4 micro-steps per full step
Definition stepper.h:46
@ STEPPER_MICRO_STEP_1
Full step resolution.
Definition stepper.h:42
@ STEPPER_MICRO_STEP_2
2 micro-steps per full step
Definition stepper.h:44
@ STEPPER_MICRO_STEP_256
256 micro-steps per full step
Definition stepper.h:58
@ STEPPER_MICRO_STEP_8
8 micro-steps per full step
Definition stepper.h:48
@ STEPPER_MICRO_STEP_16
16 micro-steps per full step
Definition stepper.h:50
@ STEPPER_MICRO_STEP_32
32 micro-steps per full step
Definition stepper.h:52
@ STEPPER_MICRO_STEP_128
128 micro-steps per full step
Definition stepper.h:56
#define EINVAL
Invalid argument.
Definition errno.h:60
#define ENOSYS
Function not implemented.
Definition errno.h:82
#define NULL
Definition iar_missing_defs.h:20
Public kernel APIs.
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:519