Zephyr API Documentation 4.1.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
led.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018 Linaro Limited
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12#ifndef ZEPHYR_INCLUDE_DRIVERS_LED_H_
13#define ZEPHYR_INCLUDE_DRIVERS_LED_H_
14
24#include <errno.h>
25
26#include <zephyr/types.h>
27#include <zephyr/device.h>
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
36#define LED_BRIGTHNESS_MAX 100u
37
53
60typedef int (*led_api_blink)(const struct device *dev, uint32_t led,
61 uint32_t delay_on, uint32_t delay_off);
62
69typedef int (*led_api_get_info)(const struct device *dev, uint32_t led,
70 const struct led_info **info);
71
78typedef int (*led_api_set_brightness)(const struct device *dev, uint32_t led,
79 uint8_t value);
86typedef int (*led_api_set_color)(const struct device *dev, uint32_t led,
87 uint8_t num_colors, const uint8_t *color);
88
95typedef int (*led_api_on)(const struct device *dev, uint32_t led);
96
103typedef int (*led_api_off)(const struct device *dev, uint32_t led);
104
111typedef int (*led_api_write_channels)(const struct device *dev,
112 uint32_t start_channel,
113 uint32_t num_channels,
114 const uint8_t *buf);
115
130
143__syscall int led_blink(const struct device *dev, uint32_t led,
144 uint32_t delay_on, uint32_t delay_off);
145
146static inline int z_impl_led_blink(const struct device *dev, uint32_t led,
147 uint32_t delay_on, uint32_t delay_off)
148{
149 const struct led_driver_api *api =
150 (const struct led_driver_api *)dev->api;
151
152 if (api->blink == NULL) {
153 return -ENOSYS;
154 }
155 return api->blink(dev, led, delay_on, delay_off);
156}
157
168__syscall int led_get_info(const struct device *dev, uint32_t led,
169 const struct led_info **info);
170
171static inline int z_impl_led_get_info(const struct device *dev, uint32_t led,
172 const struct led_info **info)
173{
174 const struct led_driver_api *api =
175 (const struct led_driver_api *)dev->api;
176
177 if (api->get_info == NULL) {
178 *info = NULL;
179 return -ENOSYS;
180 }
181 return api->get_info(dev, led, info);
182}
183
200__syscall int led_set_brightness(const struct device *dev, uint32_t led,
201 uint8_t value);
202
203static inline int z_impl_led_set_brightness(const struct device *dev,
204 uint32_t led,
205 uint8_t value)
206{
207 const struct led_driver_api *api =
208 (const struct led_driver_api *)dev->api;
209
210 if (api->set_brightness == NULL &&
211 api->on == NULL && api->off == NULL) {
212 return -ENOSYS;
213 }
214
215 if (value > LED_BRIGTHNESS_MAX) {
216 return -EINVAL;
217 }
218
219 if (api->set_brightness == NULL) {
220 if (value) {
221 return api->on(dev, led);
222 } else {
223 return api->off(dev, led);
224 }
225 }
226
227 return api->set_brightness(dev, led, value);
228}
229
246__syscall int led_write_channels(const struct device *dev,
247 uint32_t start_channel,
248 uint32_t num_channels, const uint8_t *buf);
249
250static inline int
251z_impl_led_write_channels(const struct device *dev, uint32_t start_channel,
252 uint32_t num_channels, const uint8_t *buf)
253{
254 const struct led_driver_api *api =
255 (const struct led_driver_api *)dev->api;
256
257 if (api->write_channels == NULL) {
258 return -ENOSYS;
259 }
260 return api->write_channels(dev, start_channel, num_channels, buf);
261}
262
275__syscall int led_set_channel(const struct device *dev,
276 uint32_t channel, uint8_t value);
277
278static inline int z_impl_led_set_channel(const struct device *dev,
279 uint32_t channel, uint8_t value)
280{
281 return z_impl_led_write_channels(dev, channel, 1, &value);
282}
283
300__syscall int led_set_color(const struct device *dev, uint32_t led,
301 uint8_t num_colors, const uint8_t *color);
302
303static inline int z_impl_led_set_color(const struct device *dev, uint32_t led,
304 uint8_t num_colors, const uint8_t *color)
305{
306 const struct led_driver_api *api =
307 (const struct led_driver_api *)dev->api;
308
309 if (api->set_color == NULL) {
310 return -ENOSYS;
311 }
312 return api->set_color(dev, led, num_colors, color);
313}
314
327__syscall int led_on(const struct device *dev, uint32_t led);
328
329static inline int z_impl_led_on(const struct device *dev, uint32_t led)
330{
331 const struct led_driver_api *api =
332 (const struct led_driver_api *)dev->api;
333
334 if (api->set_brightness == NULL && api->on == NULL) {
335 return -ENOSYS;
336 }
337
338 if (api->on == NULL) {
339 return api->set_brightness(dev, led, LED_BRIGTHNESS_MAX);
340 }
341
342 return api->on(dev, led);
343}
344
357__syscall int led_off(const struct device *dev, uint32_t led);
358
359static inline int z_impl_led_off(const struct device *dev, uint32_t led)
360{
361 const struct led_driver_api *api =
362 (const struct led_driver_api *)dev->api;
363
364 if (api->set_brightness == NULL && api->off == NULL) {
365 return -ENOSYS;
366 }
367
368 if (api->off == NULL) {
369 return api->set_brightness(dev, led, 0);
370 }
371
372 return api->off(dev, led);
373}
374
375/*
376 * LED DT helpers.
377 */
378
389 const struct device *dev;
392};
393
403static inline int led_set_brightness_dt(const struct led_dt_spec *spec,
404 uint8_t value)
405{
406 return led_set_brightness(spec->dev, spec->index, value);
407}
408
417static inline int led_on_dt(const struct led_dt_spec *spec)
418{
419 return led_on(spec->dev, spec->index);
420}
421
430static inline int led_off_dt(const struct led_dt_spec *spec)
431{
432 return led_off(spec->dev, spec->index);
433}
434
443static inline bool led_is_ready_dt(const struct led_dt_spec *spec)
444{
445 return device_is_ready(spec->dev);
446}
447
484#define LED_DT_SPEC_GET(node_id) \
485 { \
486 .dev = DEVICE_DT_GET(DT_PARENT(node_id)), \
487 .index = DT_NODE_CHILD_IDX(node_id), \
488 }
489
499#define LED_DT_SPEC_GET_OR(node_id, default_value) \
500 COND_CODE_1(DT_NODE_EXISTS(node_id), \
501 (LED_DT_SPEC_GET(node_id)), \
502 (default_value))
503
508#ifdef __cplusplus
509}
510#endif
511
512#include <zephyr/syscalls/led.h>
513
514#endif /* ZEPHYR_INCLUDE_DRIVERS_LED_H_ */
System error numbers.
bool device_is_ready(const struct device *dev)
Verify that a device is ready for use.
int led_off(const struct device *dev, uint32_t led)
Turn off an LED.
int led_write_channels(const struct device *dev, uint32_t start_channel, uint32_t num_channels, const uint8_t *buf)
Write/update a strip of LED channels.
#define LED_BRIGTHNESS_MAX
Maximum brightness level, range is 0 to 100.
Definition led.h:36
int(* led_api_get_info)(const struct device *dev, uint32_t led, const struct led_info **info)
Optional API callback to get LED information.
Definition led.h:69
int led_blink(const struct device *dev, uint32_t led, uint32_t delay_on, uint32_t delay_off)
Blink an LED.
int(* led_api_off)(const struct device *dev, uint32_t led)
Callback API for turning off an LED.
Definition led.h:103
int(* led_api_write_channels)(const struct device *dev, uint32_t start_channel, uint32_t num_channels, const uint8_t *buf)
Callback API for writing a strip of LED channels.
Definition led.h:111
int led_set_channel(const struct device *dev, uint32_t channel, uint8_t value)
Set a single LED channel.
static int led_off_dt(const struct led_dt_spec *spec)
Turn off an LED from a struct led_dt_spec.
Definition led.h:430
int led_set_color(const struct device *dev, uint32_t led, uint8_t num_colors, const uint8_t *color)
Set LED color.
int(* led_api_set_color)(const struct device *dev, uint32_t led, uint8_t num_colors, const uint8_t *color)
Optional API callback to set the colors of a LED.
Definition led.h:86
int led_get_info(const struct device *dev, uint32_t led, const struct led_info **info)
Get LED information.
static bool led_is_ready_dt(const struct led_dt_spec *spec)
Validate that the LED device is ready.
Definition led.h:443
static int led_on_dt(const struct led_dt_spec *spec)
Turn on an LED from a struct led_dt_spec.
Definition led.h:417
int led_set_brightness(const struct device *dev, uint32_t led, uint8_t value)
Set LED brightness.
int(* led_api_on)(const struct device *dev, uint32_t led)
Callback API for turning on an LED.
Definition led.h:95
int(* led_api_blink)(const struct device *dev, uint32_t led, uint32_t delay_on, uint32_t delay_off)
Callback API for blinking an LED.
Definition led.h:60
int led_on(const struct device *dev, uint32_t led)
Turn on an LED.
int(* led_api_set_brightness)(const struct device *dev, uint32_t led, uint8_t value)
Callback API for setting brightness of an LED.
Definition led.h:78
static int led_set_brightness_dt(const struct led_dt_spec *spec, uint8_t value)
Set LED brightness from a led_dt_spec.
Definition led.h:403
#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
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
Runtime device structure (in ROM) per driver instance.
Definition device.h:504
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:510
LED driver API.
Definition led.h:119
led_api_off off
Definition led.h:122
led_api_set_color set_color
Definition led.h:127
led_api_get_info get_info
Definition led.h:125
led_api_set_brightness set_brightness
Definition led.h:126
led_api_on on
Definition led.h:121
led_api_write_channels write_channels
Definition led.h:128
led_api_blink blink
Definition led.h:124
Container for an LED information specified in devicetree.
Definition led.h:387
uint32_t index
Index of the LED on the controller.
Definition led.h:391
const struct device * dev
LED device instance.
Definition led.h:389
LED information structure.
Definition led.h:43
const char * label
LED label.
Definition led.h:45
uint32_t index
Index of the LED on the controller.
Definition led.h:47
const uint8_t * color_mapping
Mapping of the LED colors.
Definition led.h:51
uint8_t num_colors
Number of colors per LED.
Definition led.h:49