1 /* Copyright 2018 SiFive, Inc */
2 /* SPDX-License-Identifier: Apache-2.0 */
9 * @brief API for manipulating LEDs
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);
23 * @brief A handle for an LED
26 const struct metal_led_vtable *vtable;
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
34 struct metal_led* metal_led_get(char *label);
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
42 struct metal_led* metal_led_get_rgb(char *label, char *color);
45 * @brief Enable an LED
46 * @param led The handle for the LED
48 __inline__ void metal_led_enable(struct metal_led *led) { led->vtable->led_enable(led); }
51 * @brief Turn an LED on
52 * @param led The handle for the LED
54 __inline__ void metal_led_on(struct metal_led *led) { led->vtable->led_on(led); }
57 * @brief Turn an LED off
58 * @param led The handle for the LED
60 __inline__ void metal_led_off(struct metal_led *led) { led->vtable->led_off(led); }
63 * @brief Toggle the on/off state of an LED
64 * @param led The handle for the LED
66 __inline__ void metal_led_toggle(struct metal_led *led) { led->vtable->led_toggle(led); }