#define DBUS_REPLY_TIMEOUT (120 * 1000)
#define POWEROFF_BUS_NAME "org.tizen.system.popup"
-#define POWEROFF_OBJECT_PATH "/Org/Tizen/System/Popup/Poweroff"
-#define POWEROFF_INTERFACE_NAME POWEROFF_BUS_NAME".Poweroff"
+#define POWEROFF_OBJECT_PATH "/Org/Tizen/System/Popup/Powerkey"
+#define POWEROFF_INTERFACE_NAME POWEROFF_BUS_NAME".Powerkey"
#define METHOD_POWEROFF_NAME "PopupLaunch"
static int _append_variant(DBusMessageIter *iter, const char *sig, char *param[])
-
-static int _invoke_dbus_method_async(const char *dest, const char *path,
+static int _invoke_dbus_method_sync(const char *dest, const char *path,
const char *interface, const char *method,
- const char *sig, char *param[])
+ int size, char *param[])
{
DBusConnection *conn;
- DBusMessage *msg;
- DBusMessageIter iter;
- int r;
+ DBusMessage *msg = NULL;
+ DBusMessage *reply;
+ DBusMessageIter iter, aiter, piter;
+ DBusError err;
+ int ret, result, i;
+ char *key, *value;
conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
if (!conn) {
- _E("dbus_bus_get error");
- return 0;
+ ret = 0;
+ _E("Failed to dbus_bus_get.");
+ return -EPERM;
}
msg = dbus_message_new_method_call(dest, path, interface, method);
if (!msg) {
- _E("dbus_message_new_method_call(%s:%s-%s)", path, interface, method);
- return 0;
+ _E("Failed to dbus_message_new_method_call(%s:%s-%s).", path, interface, method);
+ return -EBADMSG;
}
dbus_message_iter_init_append(msg, &iter);
- r = _append_variant(&iter, sig, param);
- if (r < 0) {
- _E("append_variant error(%d)", r);
- dbus_message_unref(msg);
- return 0;
+ dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "{ss}", &aiter);
+ for (i = 0 ; i < size ; i = i + 2) {
+ key = param[i];
+ value = param[i+1];
+ _I("key=%s value=%s", key, value);
+ dbus_message_iter_open_container(&aiter, DBUS_TYPE_DICT_ENTRY, NULL, &piter);
+ dbus_message_iter_append_basic(&piter, DBUS_TYPE_STRING, &key);
+ dbus_message_iter_append_basic(&piter, DBUS_TYPE_STRING, &value);
+ dbus_message_iter_close_container(&aiter, &piter);
}
- r = dbus_connection_send(conn, msg, NULL);
+ dbus_message_iter_close_container(&iter, &aiter);
+ dbus_error_init(&err);
+
+ reply = dbus_connection_send_with_reply_and_block(conn, msg, DBUS_REPLY_TIMEOUT, &err);
dbus_message_unref(msg);
- if (r != TRUE) {
- _E("dbus_connection_send error(%s:%s:%s-%s)", dest, path, interface, method);
- return 0;
+ if (!reply) {
+ _E("Failed to dbus_connection_send. dest=%s %s:%s-%s. err.name=%s: %s", dest, path, interface, method, err.name, err.message);
+ dbus_error_free(&err);
+ return -ECOMM;
}
- _D("dbus_connection_send, ret=%d", r);
- return 1;
-}
+ ret = dbus_message_get_args(reply, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
+ dbus_message_unref(reply);
+ if (!ret) {
+ _E("No message dest=%s %s:%s-%s. err.name=%s: %s", dest, path, interface, method, err.name, err.message);
+ dbus_error_free(&err);
+ return -ENOMSG;
+ }
+ return result;
+}
void dbus_util_send_poweroff_signal(void)
{
int ret = 0;
+ char *param[2];
+
+ param[0] = "_SYSPOPUP_CONTENT_";
+ param[1] = "powerkey";
- ret = _invoke_dbus_method_async(POWEROFF_BUS_NAME, POWEROFF_OBJECT_PATH, POWEROFF_INTERFACE_NAME,
- METHOD_POWEROFF_NAME, NULL, NULL);
+ ret = _invoke_dbus_method_sync(POWEROFF_BUS_NAME, POWEROFF_OBJECT_PATH, POWEROFF_INTERFACE_NAME,
+ METHOD_POWEROFF_NAME, sizeof(param)/sizeof(param[0]), param);
ret_if(!ret);
_D("%s-%s", POWEROFF_INTERFACE_NAME, METHOD_POWEROFF_NAME);