qemu/include/hw/misc/led.h
Philippe Mathieu-Daudé c1b2982627 hw/misc/led: Add a LED device
Add a LED device which can be connected to a GPIO output.
They can also be dimmed with PWM devices. For now we do
not implement the dimmed mode, but in preparation of a
future implementation, we start using the LED intensity.

LEDs are limited to a fixed set of colors.

Reviewed-by: Luc Michel <luc.michel@greensocs.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20200912134041.946260-2-f4bug@amsat.org>
2020-10-26 13:44:58 +01:00

88 lines
2.2 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"
#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_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;
/* Properties */
char *description;
char *color;
};
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
* @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,
LEDColor color,
const char *description);
#endif /* HW_MISC_LED_H */