return g_variant_new("(i)", ret);
}
+static GVariant *dbus_power_change_state(GDBusConnection *conn,
+ const gchar *sender, const gchar *path, const gchar *iface, const gchar *name,
+ GVariant *param, GDBusMethodInvocation *invocation, gpointer user_data)
+{
+ int ret = 0;
+ int index;
+ guint64 next;
+
+ g_variant_get(param, "(t)", &next);
+
+ for (index = POWER_STATE_MIN_INDEX; index < POWER_STATE_MAX_INDEX; ++index)
+ if (next == (1UL << index))
+ break;
+
+ if (index == POWER_STATE_MAX_INDEX) {
+ _E("Invalid next state=%#lx", (long) index);
+ ret = -EINVAL;
+ goto out;
+ }
+
+ power_request_change_state_strict(POWER_STATE_ALL, next, 9000, NULL);
+
+out:
+ return g_variant_new("(i)", ret);
+}
+
static const dbus_method_s dbus_methods[] = {
{ "LockCpu", "i", "i", dbus_power_lock_cpu },
{ "UnlockCpu", NULL, "i", dbus_power_unlock_cpu },
{ "AddChangeStateWait", "t", "i", dbus_power_add_change_state_wait },
{ "RemoveChangeStateWait", "t", NULL, dbus_power_remove_change_state_wait },
{ "ConfirmChangeStateWait", "t", "i", dbus_power_confirm_change_state_wait },
+ { "PowerChangeState", "t", "i", dbus_power_change_state },
/* Add methods here */
};