dev-vibra: Allow to check if the device is busy

We accept `NULL` to make the case of no haptic easy to handle.

Signed-off-by: Guido Günther <agx@sigxcpu.org>
This commit is contained in:
Guido Günther
2024-12-15 18:34:28 +01:00
parent 5238d46968
commit 8a11565cc1
2 changed files with 29 additions and 1 deletions
+28
View File
@@ -219,6 +219,7 @@ fbd_dev_vibra_class_init (FbdDevVibraClass *klass)
static void
fbd_dev_vibra_init (FbdDevVibra *self)
{
self->id = -1;
}
FbdDevVibra *
@@ -330,11 +331,16 @@ fbd_dev_vibra_remove_effect (FbdDevVibra *self)
{
g_return_val_if_fail (FBD_IS_DEV_VIBRA (self), FALSE);
if (self->id == -1)
return TRUE;
g_debug("Erasing vibra effect (%d)", self->fd);
if (ioctl(self->fd, EVIOCRMFF, self->id) == -1) {
g_warning ("Failed to erase vibra effect with id %d: %s", self->id, strerror(errno));
self->id = -1;
return FALSE;
}
self->id = -1;
return TRUE;
}
@@ -346,6 +352,9 @@ fbd_dev_vibra_stop (FbdDevVibra *self)
g_return_val_if_fail (FBD_IS_DEV_VIBRA (self), FALSE);
if (self->id == -1)
return TRUE;
stop.type = EV_FF;
stop.code = self->id;
stop.value = 0;
@@ -365,3 +374,22 @@ fbd_dev_vibra_get_device (FbdDevVibra *self)
return self->device;
}
/**
* fbd_dev_vibra_is_busy:
* @self: The vibra device
*
* Check whether the device is currently in used
*
* Returns: `TRUE` when the device is in use, otherwise `FALSE`
*/
gboolean
fbd_dev_vibra_is_busy (FbdDevVibra *self)
{
if (self == NULL)
return FALSE;
g_return_val_if_fail (FBD_IS_DEV_VIBRA (self), TRUE);
return self->id != -1;
}
+1 -1
View File
@@ -21,6 +21,6 @@ gboolean fbd_dev_vibra_periodic (FbdDevVibra *self, guint duration, guint ma
gboolean fbd_dev_vibra_stop (FbdDevVibra *self);
gboolean fbd_dev_vibra_remove_effect (FbdDevVibra *self);
GUdevDevice *fbd_dev_vibra_get_device(FbdDevVibra *self);
gboolean fbd_dev_vibra_is_busy (FbdDevVibra *self);
G_END_DECLS