1*c1b29826SPhilippe Mathieu-Daudé /* 2*c1b29826SPhilippe Mathieu-Daudé * QEMU single LED device 3*c1b29826SPhilippe Mathieu-Daudé * 4*c1b29826SPhilippe Mathieu-Daudé * Copyright (C) 2020 Philippe Mathieu-Daudé <f4bug@amsat.org> 5*c1b29826SPhilippe Mathieu-Daudé * 6*c1b29826SPhilippe Mathieu-Daudé * SPDX-License-Identifier: GPL-2.0-or-later 7*c1b29826SPhilippe Mathieu-Daudé */ 8*c1b29826SPhilippe Mathieu-Daudé #ifndef HW_MISC_LED_H 9*c1b29826SPhilippe Mathieu-Daudé #define HW_MISC_LED_H 10*c1b29826SPhilippe Mathieu-Daudé 11*c1b29826SPhilippe Mathieu-Daudé #include "qom/object.h" 12*c1b29826SPhilippe Mathieu-Daudé 13*c1b29826SPhilippe Mathieu-Daudé #define TYPE_LED "led" 14*c1b29826SPhilippe Mathieu-Daudé 15*c1b29826SPhilippe Mathieu-Daudé /** 16*c1b29826SPhilippe Mathieu-Daudé * LEDColor: Color of a LED 17*c1b29826SPhilippe Mathieu-Daudé * 18*c1b29826SPhilippe Mathieu-Daudé * This set is restricted to physically available LED colors. 19*c1b29826SPhilippe Mathieu-Daudé * 20*c1b29826SPhilippe Mathieu-Daudé * LED colors from 'Table 1. Product performance of LUXEON Rebel Color 21*c1b29826SPhilippe Mathieu-Daudé * Line' of the 'DS68 LUXEON Rebel Color Line' datasheet available at: 22*c1b29826SPhilippe Mathieu-Daudé * https://www.lumileds.com/products/color-leds/luxeon-rebel-color/ 23*c1b29826SPhilippe Mathieu-Daudé */ 24*c1b29826SPhilippe Mathieu-Daudé typedef enum { /* Coarse wavelength range */ 25*c1b29826SPhilippe Mathieu-Daudé LED_COLOR_VIOLET, /* 425 nm */ 26*c1b29826SPhilippe Mathieu-Daudé LED_COLOR_BLUE, /* 475 nm */ 27*c1b29826SPhilippe Mathieu-Daudé LED_COLOR_CYAN, /* 500 nm */ 28*c1b29826SPhilippe Mathieu-Daudé LED_COLOR_GREEN, /* 535 nm */ 29*c1b29826SPhilippe Mathieu-Daudé LED_COLOR_AMBER, /* 590 nm */ 30*c1b29826SPhilippe Mathieu-Daudé LED_COLOR_ORANGE, /* 615 nm */ 31*c1b29826SPhilippe Mathieu-Daudé LED_COLOR_RED, /* 630 nm */ 32*c1b29826SPhilippe Mathieu-Daudé } LEDColor; 33*c1b29826SPhilippe Mathieu-Daudé 34*c1b29826SPhilippe Mathieu-Daudé struct LEDState { 35*c1b29826SPhilippe Mathieu-Daudé /* Private */ 36*c1b29826SPhilippe Mathieu-Daudé DeviceState parent_obj; 37*c1b29826SPhilippe Mathieu-Daudé /* Public */ 38*c1b29826SPhilippe Mathieu-Daudé 39*c1b29826SPhilippe Mathieu-Daudé uint8_t intensity_percent; 40*c1b29826SPhilippe Mathieu-Daudé 41*c1b29826SPhilippe Mathieu-Daudé /* Properties */ 42*c1b29826SPhilippe Mathieu-Daudé char *description; 43*c1b29826SPhilippe Mathieu-Daudé char *color; 44*c1b29826SPhilippe Mathieu-Daudé }; 45*c1b29826SPhilippe Mathieu-Daudé typedef struct LEDState LEDState; 46*c1b29826SPhilippe Mathieu-Daudé DECLARE_INSTANCE_CHECKER(LEDState, LED, TYPE_LED) 47*c1b29826SPhilippe Mathieu-Daudé 48*c1b29826SPhilippe Mathieu-Daudé /** 49*c1b29826SPhilippe Mathieu-Daudé * led_set_intensity: Set the intensity of a LED device 50*c1b29826SPhilippe Mathieu-Daudé * @s: the LED object 51*c1b29826SPhilippe Mathieu-Daudé * @intensity_percent: intensity as percentage in range 0 to 100. 52*c1b29826SPhilippe Mathieu-Daudé */ 53*c1b29826SPhilippe Mathieu-Daudé void led_set_intensity(LEDState *s, unsigned intensity_percent); 54*c1b29826SPhilippe Mathieu-Daudé 55*c1b29826SPhilippe Mathieu-Daudé /** 56*c1b29826SPhilippe Mathieu-Daudé * led_get_intensity: 57*c1b29826SPhilippe Mathieu-Daudé * @s: the LED object 58*c1b29826SPhilippe Mathieu-Daudé * 59*c1b29826SPhilippe Mathieu-Daudé * Returns: The LED intensity as percentage in range 0 to 100. 60*c1b29826SPhilippe Mathieu-Daudé */ 61*c1b29826SPhilippe Mathieu-Daudé unsigned led_get_intensity(LEDState *s); 62*c1b29826SPhilippe Mathieu-Daudé 63*c1b29826SPhilippe Mathieu-Daudé /** 64*c1b29826SPhilippe Mathieu-Daudé * led_set_state: Set the state of a LED device 65*c1b29826SPhilippe Mathieu-Daudé * @s: the LED object 66*c1b29826SPhilippe Mathieu-Daudé * @is_emitting: boolean indicating whether the LED is emitting 67*c1b29826SPhilippe Mathieu-Daudé * 68*c1b29826SPhilippe Mathieu-Daudé * This utility is meant for LED connected to GPIO. 69*c1b29826SPhilippe Mathieu-Daudé */ 70*c1b29826SPhilippe Mathieu-Daudé void led_set_state(LEDState *s, bool is_emitting); 71*c1b29826SPhilippe Mathieu-Daudé 72*c1b29826SPhilippe Mathieu-Daudé /** 73*c1b29826SPhilippe Mathieu-Daudé * led_create_simple: Create and realize a LED device 74*c1b29826SPhilippe Mathieu-Daudé * @parentobj: the parent object 75*c1b29826SPhilippe Mathieu-Daudé * @color: color of the LED 76*c1b29826SPhilippe Mathieu-Daudé * @description: description of the LED (optional) 77*c1b29826SPhilippe Mathieu-Daudé * 78*c1b29826SPhilippe Mathieu-Daudé * Create the device state structure, initialize it, and 79*c1b29826SPhilippe Mathieu-Daudé * drop the reference to it (the device is realized). 80*c1b29826SPhilippe Mathieu-Daudé * 81*c1b29826SPhilippe Mathieu-Daudé * Returns: The newly allocated and instantiated LED object. 82*c1b29826SPhilippe Mathieu-Daudé */ 83*c1b29826SPhilippe Mathieu-Daudé LEDState *led_create_simple(Object *parentobj, 84*c1b29826SPhilippe Mathieu-Daudé LEDColor color, 85*c1b29826SPhilippe Mathieu-Daudé const char *description); 86*c1b29826SPhilippe Mathieu-Daudé 87*c1b29826SPhilippe Mathieu-Daudé #endif /* HW_MISC_LED_H */ 88