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_INDEX_BLUE "blue"
#define LED_MULTI_INTENSITY_ATTR "multi_intensity" #define LED_MULTI_INTENSITY_ATTR "multi_intensity"
/**
typedef struct _FbdDevLedMulticolor { * fbd-dev-led-multicolor:
FbdDevLed parent; *
* A multicolor led using the kernels "multi_intensitiy"
*/
typedef struct _FbdDevLedMulticolorPrivate {
guint red_index; guint red_index;
guint green_index; guint green_index;
guint blue_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 static gboolean
fbd_dev_led_probe_multicolor (FbdDevLed *led, GError **error) fbd_dev_led_probe_multicolor (FbdDevLed *led, GError **error)
{ {
FbdDevLedMulticolor *self = FBD_DEV_LED_MULTICOLOR (led); 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); GUdevDevice *dev = fbd_dev_led_get_device (led);
const gchar *name, *path; const gchar *name, *path;
const gchar * const *index; 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++) { for (int i = 0; index[i] != NULL; i++) {
g_debug ("Index: %s", index[i]); g_debug ("Index: %s", index[i]);
if (g_strcmp0 (index[i], LED_MULTI_INDEX_RED) == 0) { if (g_strcmp0 (index[i], LED_MULTI_INDEX_RED) == 0) {
self->red_index = counter; priv->red_index = counter;
counter++; counter++;
} else if (g_strcmp0 (index[i], LED_MULTI_INDEX_GREEN) == 0) { } else if (g_strcmp0 (index[i], LED_MULTI_INDEX_GREEN) == 0) {
self->green_index = counter; priv->green_index = counter;
counter++; counter++;
} else if (g_strcmp0 (index[i], LED_MULTI_INDEX_BLUE) == 0) { } else if (g_strcmp0 (index[i], LED_MULTI_INDEX_BLUE) == 0) {
self->blue_index = counter; priv->blue_index = counter;
counter++; counter++;
} else { } else {
g_warning ("Unsupport LED color index: %d %s", counter, index[i]); 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) guint freq)
{ {
FbdDevLedMulticolor *self = FBD_DEV_LED_MULTICOLOR (led); 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); GUdevDevice *dev = fbd_dev_led_get_device (led);
g_autofree char *intensity = NULL; g_autofree char *intensity = NULL;
g_autoptr (GError) err = 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); max_brightness = fbd_dev_led_get_max_brightness (led);
switch (color) { switch (color) {
case FBD_FEEDBACK_LED_COLOR_WHITE: case FBD_FEEDBACK_LED_COLOR_WHITE:
colors[self->red_index] = max_brightness; colors[priv->red_index] = max_brightness;
colors[self->green_index] = max_brightness; colors[priv->green_index] = max_brightness;
colors[self->blue_index] = max_brightness; colors[priv->blue_index] = max_brightness;
break; break;
case FBD_FEEDBACK_LED_COLOR_RED: case FBD_FEEDBACK_LED_COLOR_RED:
colors[self->red_index] = max_brightness; colors[priv->red_index] = max_brightness;
colors[self->green_index] = 0; colors[priv->green_index] = 0;
colors[self->blue_index] = 0; colors[priv->blue_index] = 0;
break; break;
case FBD_FEEDBACK_LED_COLOR_GREEN: case FBD_FEEDBACK_LED_COLOR_GREEN:
colors[self->red_index] = 0; colors[priv->red_index] = 0;
colors[self->green_index] = max_brightness; colors[priv->green_index] = max_brightness;
colors[self->blue_index] = 0; colors[priv->blue_index] = 0;
break; break;
case FBD_FEEDBACK_LED_COLOR_BLUE: case FBD_FEEDBACK_LED_COLOR_BLUE:
colors[self->red_index] = 0; colors[priv->red_index] = 0;
colors[self->green_index] = 0; colors[priv->green_index] = 0;
colors[self->blue_index] = max_brightness; colors[priv->blue_index] = max_brightness;
break; break;
default: default:
g_warning("Unhandled color: %d\n", color); 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() #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); FbdDevLed *fbd_dev_led_multicolor_new (GUdevDevice *dev, GError **err);
struct _FbdDevLedMulticolorClass {
FbdDevLedClass parent_class;
};
G_END_DECLS G_END_DECLS