{
struct device_change_state_info info;
struct userdata *ud;
- uint64_t event_id;
- int retval;
ud = (struct userdata *) user_data;
if (!ud || !ud->callback)
return;
- g_variant_get(parameters, "(ttti)", &info.prev_state, &info.next_state, &event_id, &info.reason);
+ g_variant_get(parameters, "(ttti)", &info.prev_state, &info.next_state, &info.id, &info.reason);
- retval = ud->callback(&info, ud->data);
- if (retval == 0) {
- g_dbus_connection_call_sync(connection,
- DEVICED_BUS_NAME,
- DEVICED_PATH_POWER,
- DEVICED_INTERFACE_POWER,
- "ConfirmChangeStateWait",
- g_variant_new("(t)", event_id),
- NULL,
- G_DBUS_CALL_FLAGS_NONE,
- DBUS_METHOD_SYNC_CALL_TIMEOUT_MS,
- NULL,
- NULL);
- }
+ ud->callback(&info, ud->data);
}
static int __device_power_add_change_state_wait_callback(GDBusConnection *connection,
return DEVICE_ERROR_NONE;
}
+int device_power_change_state_wait_done(uint64_t id)
+{
+ GDBusConnection *connection;
+ GVariant *retgv;
+ GError *err;
+ int ret;
+
+ connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &err);
+ if (!connection) {
+ _E("Failed to get dbus connection, %s", err->message);
+ g_clear_error(&err);
+ return DEVICE_ERROR_OPERATION_FAILED;
+ }
+
+ retgv = g_dbus_connection_call_sync(connection,
+ DEVICED_BUS_NAME,
+ DEVICED_PATH_POWER,
+ DEVICED_INTERFACE_POWER,
+ "ConfirmChangeStateWait",
+ g_variant_new("(t)", id),
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ DBUS_METHOD_SYNC_CALL_TIMEOUT_MS,
+ NULL,
+ &err);
+ if (!retgv || err) {
+ _E("Failed to request ConfirmChangeStateWait, %s", err->message);
+ g_error_free(err);
+ return DEVICE_ERROR_OPERATION_FAILED;
+ }
+
+ g_variant_get(retgv, "(i)", &ret);
+ g_variant_unref(retgv);
+ if (ret != 0)
+ return DEVICE_ERROR_OPERATION_FAILED;
+
+ return DEVICE_ERROR_NONE;
+}
+
static void __device_power_remove_change_state_wait_callback(GDBusConnection *connection, int index)
{
if (change_state_signal_id[index] == 0)