fbd-dev-led-multicolor: Make it a derivable type

This will allow hw-pattern classes to derive from it.
This commit is contained in:
Guido Günther
2024-04-09 15:43:03 +00:00
committed by Guido Günther
parent aa96b064b1
commit 0dbbc93adc
2 changed files with 30 additions and 22 deletions
+25 -21
View File
@@ -21,23 +21,26 @@
#define LED_MULTI_INDEX_BLUE "blue"
#define LED_MULTI_INTENSITY_ATTR "multi_intensity"
typedef struct _FbdDevLedMulticolor {
FbdDevLed parent;
/**
* fbd-dev-led-multicolor:
*
* A multicolor led using the kernels "multi_intensitiy"
*/
typedef struct _FbdDevLedMulticolorPrivate {
guint red_index;
guint green_index;
guint blue_index;
} FbdDevLedMulticolor;
} FbdDevLedMulticolorPrivate;
G_DEFINE_TYPE (FbdDevLedMulticolor, fbd_dev_led_multicolor, FBD_TYPE_DEV_LED)
G_DEFINE_TYPE_WITH_PRIVATE (FbdDevLedMulticolor, fbd_dev_led_multicolor, FBD_TYPE_DEV_LED)
static gboolean
fbd_dev_led_probe_multicolor (FbdDevLed *led, GError **error)
{
FbdDevLedMulticolor *self = FBD_DEV_LED_MULTICOLOR (led);
FbdDevLedMulticolorPrivate *priv = fbd_dev_led_multicolor_get_instance_private (self);
GUdevDevice *dev = fbd_dev_led_get_device (led);
const gchar *name, *path;
const gchar * const *index;
@@ -67,13 +70,13 @@ fbd_dev_led_probe_multicolor (FbdDevLed *led, GError **error)
for (int i = 0; index[i] != NULL; i++) {
g_debug ("Index: %s", index[i]);
if (g_strcmp0 (index[i], LED_MULTI_INDEX_RED) == 0) {
self->red_index = counter;
priv->red_index = counter;
counter++;
} else if (g_strcmp0 (index[i], LED_MULTI_INDEX_GREEN) == 0) {
self->green_index = counter;
priv->green_index = counter;
counter++;
} else if (g_strcmp0 (index[i], LED_MULTI_INDEX_BLUE) == 0) {
self->blue_index = counter;
priv->blue_index = counter;
counter++;
} else {
g_warning ("Unsupport LED color index: %d %s", counter, index[i]);
@@ -93,6 +96,7 @@ fbd_dev_led_start_periodic_multicolor (FbdDevLed *led,
guint freq)
{
FbdDevLedMulticolor *self = FBD_DEV_LED_MULTICOLOR (led);
FbdDevLedMulticolorPrivate *priv = fbd_dev_led_multicolor_get_instance_private (self);
GUdevDevice *dev = fbd_dev_led_get_device (led);
g_autofree char *intensity = NULL;
g_autoptr (GError) err = NULL;
@@ -104,24 +108,24 @@ fbd_dev_led_start_periodic_multicolor (FbdDevLed *led,
max_brightness = fbd_dev_led_get_max_brightness (led);
switch (color) {
case FBD_FEEDBACK_LED_COLOR_WHITE:
colors[self->red_index] = max_brightness;
colors[self->green_index] = max_brightness;
colors[self->blue_index] = max_brightness;
colors[priv->red_index] = max_brightness;
colors[priv->green_index] = max_brightness;
colors[priv->blue_index] = max_brightness;
break;
case FBD_FEEDBACK_LED_COLOR_RED:
colors[self->red_index] = max_brightness;
colors[self->green_index] = 0;
colors[self->blue_index] = 0;
colors[priv->red_index] = max_brightness;
colors[priv->green_index] = 0;
colors[priv->blue_index] = 0;
break;
case FBD_FEEDBACK_LED_COLOR_GREEN:
colors[self->red_index] = 0;
colors[self->green_index] = max_brightness;
colors[self->blue_index] = 0;
colors[priv->red_index] = 0;
colors[priv->green_index] = max_brightness;
colors[priv->blue_index] = 0;
break;
case FBD_FEEDBACK_LED_COLOR_BLUE:
colors[self->red_index] = 0;
colors[self->green_index] = 0;
colors[self->blue_index] = max_brightness;
colors[priv->red_index] = 0;
colors[priv->green_index] = 0;
colors[priv->blue_index] = max_brightness;
break;
default:
g_warning("Unhandled color: %d\n", color);
+5 -1
View File
@@ -11,8 +11,12 @@ G_BEGIN_DECLS
#define FBD_TYPE_DEV_LED_MULTICOLOR fbd_dev_led_multicolor_get_type()
G_DECLARE_FINAL_TYPE (FbdDevLedMulticolor, fbd_dev_led_multicolor, FBD, DEV_LED_MULTICOLOR, FbdDevLed)
G_DECLARE_DERIVABLE_TYPE (FbdDevLedMulticolor, fbd_dev_led_multicolor, FBD, DEV_LED_MULTICOLOR, FbdDevLed)
FbdDevLed *fbd_dev_led_multicolor_new (GUdevDevice *dev, GError **err);
struct _FbdDevLedMulticolorClass {
FbdDevLedClass parent_class;
};
G_END_DECLS