fbd-dev-led-multicolor: Make it a derivable type
This will allow hw-pattern classes to derive from it.
This commit is contained in:
committed by
Guido Günther
parent
aa96b064b1
commit
0dbbc93adc
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user