|  | /* | 
|  | * QEMU single LED device | 
|  | * | 
|  | * Copyright (C) 2020 Philippe Mathieu-Daudé <f4bug@amsat.org> | 
|  | * | 
|  | * SPDX-License-Identifier: GPL-2.0-or-later | 
|  | */ | 
|  | #ifndef HW_MISC_LED_H | 
|  | #define HW_MISC_LED_H | 
|  |  | 
|  | #include "qom/object.h" | 
|  | #include "hw/qdev-core.h" | 
|  |  | 
|  | #define TYPE_LED "led" | 
|  |  | 
|  | /** | 
|  | * LEDColor: Color of a LED | 
|  | * | 
|  | * This set is restricted to physically available LED colors. | 
|  | * | 
|  | * LED colors from 'Table 1. Product performance of LUXEON Rebel Color | 
|  | * Line' of the 'DS68 LUXEON Rebel Color Line' datasheet available at: | 
|  | * https://www.lumileds.com/products/color-leds/luxeon-rebel-color/ | 
|  | */ | 
|  | typedef enum {          /* Coarse wavelength range */ | 
|  | LED_COLOR_VIOLET,   /* 425 nm */ | 
|  | LED_COLOR_BLUE,     /* 475 nm */ | 
|  | LED_COLOR_CYAN,     /* 500 nm */ | 
|  | LED_COLOR_GREEN,    /* 535 nm */ | 
|  | LED_COLOR_YELLOW,   /* 567 nm */ | 
|  | LED_COLOR_AMBER,    /* 590 nm */ | 
|  | LED_COLOR_ORANGE,   /* 615 nm */ | 
|  | LED_COLOR_RED,      /* 630 nm */ | 
|  | } LEDColor; | 
|  |  | 
|  | struct LEDState { | 
|  | /* Private */ | 
|  | DeviceState parent_obj; | 
|  | /* Public */ | 
|  |  | 
|  | uint8_t intensity_percent; | 
|  | qemu_irq irq; | 
|  |  | 
|  | /* Properties */ | 
|  | char *description; | 
|  | char *color; | 
|  | /* | 
|  | * Determines whether a GPIO is using a positive (active-high) | 
|  | * logic (when used with GPIO, the intensity at reset is related | 
|  | * to the GPIO polarity). | 
|  | */ | 
|  | bool gpio_active_high; | 
|  | }; | 
|  | typedef struct LEDState LEDState; | 
|  | DECLARE_INSTANCE_CHECKER(LEDState, LED, TYPE_LED) | 
|  |  | 
|  | /** | 
|  | * led_set_intensity: Set the intensity of a LED device | 
|  | * @s: the LED object | 
|  | * @intensity_percent: intensity as percentage in range 0 to 100. | 
|  | */ | 
|  | void led_set_intensity(LEDState *s, unsigned intensity_percent); | 
|  |  | 
|  | /** | 
|  | * led_get_intensity: | 
|  | * @s: the LED object | 
|  | * | 
|  | * Returns: The LED intensity as percentage in range 0 to 100. | 
|  | */ | 
|  | unsigned led_get_intensity(LEDState *s); | 
|  |  | 
|  | /** | 
|  | * led_set_state: Set the state of a LED device | 
|  | * @s: the LED object | 
|  | * @is_emitting: boolean indicating whether the LED is emitting | 
|  | * | 
|  | * This utility is meant for LED connected to GPIO. | 
|  | */ | 
|  | void led_set_state(LEDState *s, bool is_emitting); | 
|  |  | 
|  | /** | 
|  | * led_create_simple: Create and realize a LED device | 
|  | * @parentobj: the parent object | 
|  | * @gpio_polarity: GPIO polarity | 
|  | * @color: color of the LED | 
|  | * @description: description of the LED (optional) | 
|  | * | 
|  | * Create the device state structure, initialize it, and | 
|  | * drop the reference to it (the device is realized). | 
|  | * | 
|  | * Returns: The newly allocated and instantiated LED object. | 
|  | */ | 
|  | LEDState *led_create_simple(Object *parentobj, | 
|  | GpioPolarity gpio_polarity, | 
|  | LEDColor color, | 
|  | const char *description); | 
|  |  | 
|  | #endif /* HW_MISC_LED_H */ |