Add the yellow "lime" LED. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Michael Rolnik <mrolnik@gmail.com> Message-Id: <20210313165445.2113938-2-f4bug@amsat.org>
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * 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 */
 |