| /* | |
| * QEMU single LED device | |
| * | |
| * Copyright (C) 2020 Philippe Mathieu-Daudé | |
| * | |
| * SPDX-License-Identifier: GPL-2.0-or-later | |
| */ | |
| #ifndef HW_MISC_LED_H | |
| #define HW_MISC_LED_H | |
| #include "qom/object.h" | |
| #include "hw/core/qdev.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 */ |