1 /*
2  * Copyright (c) 2006-2022, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2022-3-08      GuEe-GUI     the first version
9  */
10 
11 #ifndef __LED_H__
12 #define __LED_H__
13 
14 #include <rthw.h>
15 #include <rtdef.h>
16 
17 struct rt_led_ops;
18 
19 enum rt_led_state
20 {
21     RT_LED_S_OFF,
22     RT_LED_S_ON,
23     RT_LED_S_TOGGLE,
24     RT_LED_S_BLINK,
25 
26     RT_LED_STATE_NR,
27 };
28 
29 struct rt_led_device
30 {
31     struct rt_device parent;
32 
33     const struct rt_led_ops *ops;
34 
35     struct rt_spinlock spinlock;
36 
37     void *sysdata;
38     void *priv;
39 };
40 
41 struct rt_led_ops
42 {
43     rt_err_t (*set_state)(struct rt_led_device *led, enum rt_led_state state);
44     rt_err_t (*get_state)(struct rt_led_device *led, enum rt_led_state *out_state);
45     rt_err_t (*set_period)(struct rt_led_device *led, rt_uint32_t period_ms);
46     rt_err_t (*set_brightness)(struct rt_led_device *led, rt_uint32_t brightness);
47 };
48 
49 rt_err_t rt_led_register(struct rt_led_device *led);
50 rt_err_t rt_led_unregister(struct rt_led_device *led);
51 
52 rt_err_t rt_led_set_state(struct rt_led_device *led, enum rt_led_state state);
53 rt_err_t rt_led_get_state(struct rt_led_device *led, enum rt_led_state *out_state);
54 rt_err_t rt_led_set_period(struct rt_led_device *led, rt_uint32_t period_ms);
55 rt_err_t rt_led_set_brightness(struct rt_led_device *led, rt_uint32_t brightness);
56 
57 #endif /* __LED_H__ */
58