return g_variant_new("(i)", ret);
}
+static gboolean _cb(void *data)
+{
+ if (duration_timer) {
+ g_source_remove(duration_timer);
+ duration_timer = 0;
+ }
+
+ cur_h_data.handle = INVALID_HANDLE;
+ cur_h_data.priority = PRIORITY_MIN;
+
+ return G_SOURCE_REMOVE;
+}
+
static void vibrate_monotone_idler_cb(void *data)
{
struct vibrate_monotone_info *vibrate_info;
return;
}
+ if (duration_timer) {
+ g_source_remove(duration_timer);
+ duration_timer = 0;
+ }
+
cur_h_data.vibration_data = NULL;
cur_h_data.handle = vibrate_info->handle;
cur_h_data.level = vibrate_info->level;
ret = device_power_request_lock(POWER_LOCK_CPU, vibrate_info->duration);
if (ret != DEVICE_ERROR_NONE)
_E("Failed to request power lock");
+
+ duration_timer = g_timeout_add(vibrate_info->duration, _cb, NULL);
h_ops->vibrate_monotone(cur_h_data.handle, vibrate_info->duration, cur_h_data.level, cur_h_data.priority);
free(vibrate_info);