]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1_FreedomStudio/freedom-metal/metal/led.h
Update RISCC-V-RV32-SiFive_HiFive1_FreedomStudio project to latest tools and metal...
[freertos] / FreeRTOS / Demo / RISC-V_RV32_SiFive_HiFive1_FreedomStudio / freedom-metal / metal / led.h
1 /* Copyright 2018 SiFive, Inc */
2 /* SPDX-License-Identifier: Apache-2.0 */
3
4 #ifndef METAL__LED_H
5 #define METAL__LED_H
6
7 /*!
8  * @file led.h
9  * @brief API for manipulating LEDs
10  */
11
12 struct metal_led;
13
14 struct metal_led_vtable {
15     int (*led_exist)(struct metal_led *led, char *label);
16     void (*led_enable)(struct metal_led *led);
17     void (*led_on)(struct metal_led *led);
18     void (*led_off)(struct metal_led *led);
19     void (*led_toggle)(struct metal_led *led);
20 };
21
22 /*!
23  * @brief A handle for an LED
24  */
25 struct metal_led {
26     const struct metal_led_vtable *vtable;
27 };
28
29 /*!
30  * @brief Get a handle for an LED
31  * @param label The DeviceTree label for the desired LED
32  * @return A handle to the LED, or NULL if none is found for the requested label
33  */
34 struct metal_led* metal_led_get(char *label);
35
36 /*!
37  * @brief Get a handle for a channel of an RGB LED
38  * @param label The DeviceTree label for the desired LED
39  * @param color The color for the LED in the DeviceTree
40  * @return A handle to the LED, or NULL if none is found for the requested label and color
41  */
42 struct metal_led* metal_led_get_rgb(char *label, char *color);
43
44 /*!
45  * @brief Enable an LED
46  * @param led The handle for the LED
47  */
48 __inline__ void metal_led_enable(struct metal_led *led) { led->vtable->led_enable(led); }
49
50 /*!
51  * @brief Turn an LED on
52  * @param led The handle for the LED
53  */
54 __inline__ void metal_led_on(struct metal_led *led) { led->vtable->led_on(led); }
55
56 /*!
57  * @brief Turn an LED off
58  * @param led The handle for the LED
59  */
60 __inline__ void metal_led_off(struct metal_led *led) { led->vtable->led_off(led); }
61
62 /*!
63  * @brief Toggle the on/off state of an LED
64  * @param led The handle for the LED
65  */
66 __inline__ void metal_led_toggle(struct metal_led *led) { led->vtable->led_toggle(led); }
67
68 #endif