dev-vibra: Allow full magnitude in rumble

Lets not artificially cap the magnitude in the device specific
implementation.

Since the default magnitude for the common rumble feedback was set to
0.5 in the previous commit the effective magnitude in existing themes
remains unchanged for that event.

The pattern feedbacks didn't make it into a release yet so there's
nothing that could get broken.

The change doubles the effective when using the Vibra DBus API but as it
seems that libmanette didn't land support yet lets just ignore that
here.

Periodic feedback is unaffected as it uses a different internal API.

Signed-off-by: Guido Günther <agx@sigxcpu.org>
This commit is contained in:
Guido Günther
2025-03-20 07:48:42 +00:00
committed by Guido Günther
parent f089ad2fd0
commit 7b026b40cc
2 changed files with 12 additions and 6 deletions
+1 -1
View File
@@ -243,7 +243,7 @@ fbd_dev_vibra_rumble (FbdDevVibra *self, double magnitude, guint duration, gbool
memset(&effect, 0, sizeof(effect));
effect.type = FF_RUMBLE;
effect.id = -1;
effect.u.rumble.strong_magnitude = (0x8000 * magnitude);
effect.u.rumble.strong_magnitude = 0xFFFF * magnitude;
effect.u.rumble.weak_magnitude = 0;
effect.replay.length = duration;
effect.replay.delay = 0;
+11 -5
View File
@@ -103,7 +103,11 @@ on_period_ended (FbdFeedbackVibraRumble *self)
g_return_val_if_fail (FBD_IS_FEEDBACK_VIBRA_RUMBLE (self), G_SOURCE_REMOVE);
if (self->periods) {
fbd_dev_vibra_rumble (dev, 1.0, self->rumble, FALSE);
double max_strength = fbd_feedback_vibra_get_max_strength (FBD_FEEDBACK_VIBRA (self));
double magnitude;
magnitude = MIN (self->magnitude, max_strength);
fbd_dev_vibra_rumble (dev, magnitude, self->rumble, FALSE);
self->periods--;
return G_SOURCE_CONTINUE;
}
@@ -128,7 +132,8 @@ fbd_feedback_vibra_rumble_start_vibra (FbdFeedbackVibra *vibra)
FbdFeedbackManager *manager = fbd_feedback_manager_get_default ();
FbdDevVibra *dev = fbd_feedback_manager_get_dev_vibra (manager);
guint duration = fbd_feedback_vibra_get_duration (vibra);
double strength = fbd_feedback_vibra_get_max_strength (FBD_FEEDBACK_VIBRA (self));
double max_strength = fbd_feedback_vibra_get_max_strength (FBD_FEEDBACK_VIBRA (self));
double magnitude;
guint period;
self->rumble = (duration / self->count) - self->pause;
@@ -140,9 +145,10 @@ fbd_feedback_vibra_rumble_start_vibra (FbdFeedbackVibra *vibra)
period = self->rumble + self->pause;
self->periods = self->count;
g_debug ("Rumble Vibra event: duration %d, rumble: %d, pause: %d, period: %d, strength %f",
duration, self->rumble, self->pause, period, strength);
fbd_dev_vibra_rumble (dev, strength, self->rumble, TRUE);
magnitude = MIN (self->magnitude, max_strength);
g_debug ("Rumble Vibra event: magnitude: %f, duration %d, rumble: %d, pause: %d, period: %d",
magnitude, duration, self->rumble, self->pause, period);
fbd_dev_vibra_rumble (dev, magnitude, self->rumble, TRUE);
self->periods--;
if (self->periods) {
self->timer_id = g_timeout_add (period, (GSourceFunc) on_period_ended, self);