feedback-led: Check if at least one LED is available

So far we didn't create any FbdDevLeds if there wasn't at least one
usable LED. Once we introduce flash LEDs we might probe the LED but the
LED might not be usable as the user hasn't enabled using it. Prepare for
that scenario.
This commit is contained in:
Guido Günther
2024-06-15 11:14:40 +02:00
parent 417b34be89
commit e16dc3cdab
3 changed files with 32 additions and 6 deletions
+26 -3
View File
@@ -48,7 +48,7 @@ find_led_by_color (FbdDevLeds *self, FbdFeedbackLedColor color)
g_return_val_if_fail (self->leds, NULL);
for (GSList *l = self->leds; l != NULL; l = l->next) {
FbdDevLed *led = l->data;
FbdDevLed *led = FBD_DEV_LED (l->data);
if (fbd_dev_led_supports_color (led, color))
return led;
}
@@ -199,7 +199,10 @@ fbd_dev_leds_start_periodic (FbdDevLeds *self,
g_return_val_if_fail (FBD_IS_DEV_LEDS (self), FALSE);
g_return_val_if_fail (max_brightness_percentage <= 100.0, FALSE);
led = find_led_by_color (self, color);
g_return_val_if_fail (led, FALSE);
if (!led) {
g_warning_once ("No usable led found");
return FALSE;
}
fbd_dev_led_set_color (led, color, rgb);
@@ -214,7 +217,27 @@ fbd_dev_leds_stop (FbdDevLeds *self, FbdFeedbackLedColor color)
g_return_val_if_fail (FBD_IS_DEV_LEDS (self), FALSE);
led = find_led_by_color (self, color);
g_return_val_if_fail (led, FALSE);
if (!led) {
g_warning_once ("No usable led found");
return FALSE;
}
return fbd_dev_led_set_brightness (led, 0);
}
/**
* fbd_dev_leds_has_led:
* @self: The FbdDevLeds
* @color: The color type to check
*
* Whether there's a usable LED of the given type
*
* Returns: `TRUE` if there's a at least one usable LED, otherwise `FALSE`
*/
gboolean
fbd_dev_leds_has_led (FbdDevLeds *self, FbdFeedbackLedColor color)
{
g_return_val_if_fail (FBD_IS_DEV_LEDS (self), FALSE);
return !!find_led_by_color (self, color);
}
+2 -2
View File
@@ -22,7 +22,7 @@ gboolean fbd_dev_leds_start_periodic (FbdDevLeds *self,
FbdLedRgbColor *rgb,
guint max_brighness,
guint freq);
gboolean fbd_dev_leds_stop (FbdDevLeds *self,
FbdFeedbackLedColor color);
gboolean fbd_dev_leds_stop (FbdDevLeds *self, FbdFeedbackLedColor color);
gboolean fbd_dev_leds_has_led (FbdDevLeds *self, FbdFeedbackLedColor color);
G_END_DECLS
+4 -1
View File
@@ -250,7 +250,10 @@ fbd_feedback_led_is_available (FbdFeedbackBase *base)
FbdFeedbackManager *manager = fbd_feedback_manager_get_default ();
FbdDevLeds *dev = fbd_feedback_manager_get_dev_leds (manager);
return FBD_IS_DEV_LEDS (dev);
if (!FBD_IS_DEV_LEDS (dev))
return FALSE;
return fbd_dev_leds_has_led (dev, FBD_FEEDBACK_LED_COLOR_WHITE);
}