summaryrefslogtreecommitdiff
path: root/src/dbus-util_w.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dbus-util_w.c')
-rwxr-xr-xsrc/dbus-util_w.c745
1 files changed, 745 insertions, 0 deletions
diff --git a/src/dbus-util_w.c b/src/dbus-util_w.c
new file mode 100755
index 0000000..751adf2
--- /dev/null
+++ b/src/dbus-util_w.c
@@ -0,0 +1,745 @@
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Ecore.h>
+#include <dd-display.h>
+#include <aul.h>
+
+#include "starter_w.h"
+#include "dbus-util_w.h"
+#include "util.h"
+
+
+#define DEVICED_BUS_NAME "org.tizen.system.deviced"
+#define DEVICED_OBJECT_PATH "/Org/Tizen/System/DeviceD"
+#define DEVICED_INTERFACE_NAME DEVICED_BUS_NAME
+
+#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 METHOD_POWEROFF_NAME "PopupLaunch"
+#define DBUS_REPLY_TIMEOUT (120 * 1000)
+
+#define DISPLAY_OBJECT_PATH DEVICED_OBJECT_PATH"/Display"
+#define DEVICED_INTERFACE_DISPLAY DEVICED_INTERFACE_NAME".display"
+#define MEMBER_ALPM_ON "ALPMOn"
+#define MEMBER_ALPM_OFF "ALPMOff"
+#define MEMBER_LCD_ON "LCDOn"
+#define MEMBER_LCD_OFF "LCDOff"
+#define LCD_ON_BY_GESTURE "gesture"
+
+
+#define CPU_BOOSTER_OBJECT_PATH DEVICED_OBJECT_PATH"/PmQos"
+#define CPU_BOOSTER_INTERFACE DEVICED_BUS_NAME".PmQos"
+#define METHOD_CPU_BOOSTER "AppLaunchHome"
+#define DBUS_CPU_BOOSTER_SEC 200
+
+#define COOL_DOWN_MODE_PATH DEVICED_OBJECT_PATH"/SysNoti"
+#define COOL_DOWN_MODE_INTERFACE DEVICED_BUS_NAME".SysNoti"
+#define SIGNAL_COOL_DOWN_MODE "CoolDownChanged"
+#define METHOD_COOL_DOWN_MODE "GetCoolDownStatus"
+#define COOL_DOWN_MODE_RELEASE "Release"
+#define COOL_DOWN_MODE_LIMITACTION "LimitAction"
+
+#define NIKE_RUNNING_STATUS_PATH "/Com/Nike/Nrunning/RunningMgr"
+#define NIKE_RUNNING_STATUS_INTERFACE "com.nike.nrunning.runningmgr"
+#define NIKE_RUNNING_STATUS_SIGNAL "RunningStatus"
+#define NIKE_RUNNING_STATUS_START "start"
+#define NIKE_RUNNING_STATUS_END "end"
+
+#define DBUS_ALPM_CLOCK_PATH "/Org/Tizen/System/AlpmMgr"
+#define DBUS_ALPM_CLOCK_INTERFACE "org.tizen.system.alpmmgr"
+#define DBUS_ALPM_CLOCK_MEMBER_STATUS "ALPMStatus"
+#define ALPM_CLOCK_SHOW "show"
+
+#define DBUS_STARTER_ALPMCLOCK_PATH "/Org/Tizen/Coreapps/starter"
+#define DBUS_STARTER_ALPMCLOCK_INTERFACE "org.tizen.coreapps.starter.alpmclock"
+#define DBUS_STARTER_ALPMCLOCK_MEMBER "show"
+
+
+static struct _info {
+ DBusConnection *connection;
+} s_info = {
+ .connection = NULL,
+};
+
+static int pid_ALPM_clock = 0;
+
+static int _append_variant(DBusMessageIter *iter, const char *sig, char *param[])
+{
+ char *ch;
+ int i;
+ int int_type;
+ uint64_t int64_type;
+
+ if (!sig || !param)
+ return 0;
+
+ for (ch = (char*)sig, i = 0; *ch != '\0'; ++i, ++ch) {
+ switch (*ch) {
+ case 'i':
+ int_type = atoi(param[i]);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_INT32, &int_type);
+ break;
+ case 'u':
+ int_type = atoi(param[i]);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &int_type);
+ break;
+ case 't':
+ int64_type = atoi(param[i]);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT64, &int64_type);
+ break;
+ case 's':
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &param[i]);
+ break;
+ default:
+ return -EINVAL;
+ }
+ }
+
+ return 0;
+}
+
+DBusConnection *starter_dbus_connection_get(void) {
+ if (s_info.connection == NULL) {
+ _W("no connection for dbus. get dbus connection");
+ DBusError derror;
+ DBusConnection *connection = NULL;
+
+ dbus_error_init(&derror);
+ connection = dbus_bus_get_private(DBUS_BUS_SYSTEM, &derror);
+ if (connection == NULL) {
+ _E("Failed to get dbus connection:%s", derror.message);
+ dbus_error_free(&derror);
+ return NULL;
+ }
+ dbus_connection_setup_with_g_main(connection, NULL);
+ dbus_error_free(&derror);
+
+ s_info.connection = connection;
+ }
+
+ return s_info.connection;
+}
+
+static int _dbus_message_send(const char *path, const char *interface, const char *member)
+{
+ int ret = 0;
+ DBusMessage *msg = NULL;
+ DBusConnection *conn = NULL;
+
+ conn = (DBusConnection *)starter_dbus_connection_get();
+ if (!conn) {
+ _E("dbus_bus_get error");
+ return -1;
+ }
+ _E("dbus_message_new_signal(%s:%s-%s)", path, interface, member);
+
+ msg = dbus_message_new_signal(path, interface, member);
+ if (!msg) {
+ _E("dbus_message_new_signal(%s:%s-%s)", path, interface, member);
+ return -1;
+ }
+
+ ret = dbus_connection_send(conn, msg, NULL); //async call
+ dbus_message_unref(msg);
+ if (ret != TRUE) {
+ _E("dbus_connection_send error(%s:%s-%s)", path, interface, member);
+ return -ECOMM;
+ }
+ _D("dbus_connection_send, ret=%d", ret);
+ return 0;
+}
+
+void starter_dbus_alpm_clock_signal_send(void *data)
+{
+ int ret = 0;
+
+ struct appdata *ad = (struct appdata *)data;
+ if(ad == NULL){
+ _E("app data is NULL");
+ return;
+ }
+#if 0
+ if(ad->lcd_status == 1){
+ _W("LCD is already on. Do not send alpm clock show msg.");
+ return;
+ }
+#endif
+
+ ret = _dbus_message_send(
+ DBUS_STARTER_ALPMCLOCK_PATH,
+ DBUS_STARTER_ALPMCLOCK_INTERFACE,
+ DBUS_STARTER_ALPMCLOCK_MEMBER);
+ _E("Sending alpmclock show signal, result:%d", ret);
+}
+
+
+DBusMessage *_invoke_dbus_method_sync(const char *dest, const char *path,
+ const char *interface, const char *method,
+ const char *sig, char *param[])
+{
+ DBusConnection *conn;
+ DBusMessage *msg;
+ DBusMessageIter iter;
+ DBusMessage *reply;
+ DBusError err;
+ int r;
+
+ conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
+ if (!conn) {
+ _E("dbus_bus_get error");
+ return NULL;
+ }
+
+ 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 NULL;
+ }
+
+ dbus_message_iter_init_append(msg, &iter);
+ r = _append_variant(&iter, sig, param);
+ if (r < 0) {
+ _E("append_variant error(%d)", r);
+ return NULL;
+ }
+
+ dbus_error_init(&err);
+
+ reply = dbus_connection_send_with_reply_and_block(conn, msg, DBUS_REPLY_TIMEOUT, &err);
+
+ if (!reply) {
+ _E("dbus_connection_send error(No reply)");
+ }
+
+ if (dbus_error_is_set(&err)) {
+ _E("dbus_connection_send error(%s:%s)", err.name, err.message);
+ reply = NULL;
+ }
+
+ dbus_message_unref(msg);
+ dbus_error_free(&err);
+
+ return reply;
+}
+
+DBusMessage *_invoke_dbus_method_async(const char *dest, const char *path,
+ const char *interface, const char *method,
+ const char *sig, char *param[])
+{
+ DBusConnection *conn;
+ DBusMessage *msg;
+ DBusMessageIter iter;
+ DBusMessage *reply;
+ DBusError err;
+ int r;
+
+ conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
+ if (!conn) {
+ _E("dbus_bus_get error");
+ return NULL;
+ }
+
+ 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 NULL;
+ }
+
+ dbus_message_iter_init_append(msg, &iter);
+ r = _append_variant(&iter, sig, param);
+ if (r < 0) {
+ _E("append_variant error(%d)", r);
+ return NULL;
+ }
+
+ r = dbus_connection_send(conn, msg, NULL);
+ dbus_message_unref(msg);
+ if (r != TRUE) {
+ _E("dbus_connection_send error(%s:%s:%s-%s)", dest, path, interface, method);
+ return -ECOMM;
+ }
+ _D("dbus_connection_send, ret=%d", r);
+ return NULL;
+}
+
+int get_dbus_cool_down_mode(void *data)
+{
+ _D();
+ struct appdata *ad = (struct appdata *)data;
+ if(ad == NULL){
+ _E("app data is NULL");
+ return -1;
+ }
+ DBusError err;
+ DBusMessage *msg;
+ int ret = 0;
+ char *str = NULL;
+ int ret_val = 0;
+
+ msg = _invoke_dbus_method_sync(DEVICED_BUS_NAME, COOL_DOWN_MODE_PATH, COOL_DOWN_MODE_INTERFACE,
+ METHOD_COOL_DOWN_MODE, NULL, NULL);
+ if (!msg)
+ return -EBADMSG;
+
+ dbus_error_init(&err);
+
+ ret = dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID);
+ if (!ret) {
+ _E("no message : [%s:%s]", err.name, err.message);
+ ret_val = -EBADMSG;
+ }
+
+ dbus_message_unref(msg);
+ dbus_error_free(&err);
+
+ _D("%s-%s : %s", COOL_DOWN_MODE_INTERFACE, METHOD_COOL_DOWN_MODE, str);
+
+ if(!strncmp(str, COOL_DOWN_MODE_RELEASE, strlen(COOL_DOWN_MODE_RELEASE))){
+ _D("%s", COOL_DOWN_MODE_RELEASE);
+ ad->cool_down_mode = 0;
+ return ret_val;
+ }
+ if(!strncmp(str, COOL_DOWN_MODE_LIMITACTION, strlen(COOL_DOWN_MODE_LIMITACTION))){
+ _D("%s", COOL_DOWN_MODE_LIMITACTION);
+ ad->cool_down_mode = 1;
+ return ret_val;
+ }
+}
+
+int request_dbus_cpu_booster(void)
+{
+ DBusError err;
+ DBusMessage *msg;
+ int ret, ret_val;
+ char *arr[1];
+ char val[32];
+
+ snprintf(val, sizeof(val), "%d", DBUS_CPU_BOOSTER_SEC);
+ arr[0] = val;
+
+ msg = _invoke_dbus_method_async(DEVICED_BUS_NAME, CPU_BOOSTER_OBJECT_PATH, CPU_BOOSTER_INTERFACE,
+ METHOD_CPU_BOOSTER, "i", arr);
+ if (!msg)
+ return -EBADMSG;
+
+ dbus_error_init(&err);
+
+ ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
+ if (!ret) {
+ _E("no message : [%s:%s]", err.name, err.message);
+ ret_val = -EBADMSG;
+ }
+
+ dbus_message_unref(msg);
+ dbus_error_free(&err);
+
+ _D("%s-%s : %d", CPU_BOOSTER_INTERFACE, METHOD_CPU_BOOSTER, ret_val);
+ return ret_val;
+}
+
+
+int request_Poweroff(void)
+{
+ DBusError err;
+ DBusMessage *msg;
+ int ret, ret_val;
+
+ msg = _invoke_dbus_method_async(POWEROFF_BUS_NAME, POWEROFF_OBJECT_PATH, POWEROFF_INTERFACE_NAME,
+ METHOD_POWEROFF_NAME, NULL, NULL);
+ if (!msg)
+ return -EBADMSG;
+
+ dbus_error_init(&err);
+
+ ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
+ if (!ret) {
+ _E("no message : [%s:%s]", err.name, err.message);
+ ret_val = -EBADMSG;
+ }
+
+ dbus_message_unref(msg);
+ dbus_error_free(&err);
+
+ _D("%s-%s : %d", POWEROFF_INTERFACE_NAME, METHOD_POWEROFF_NAME, ret_val);
+ return ret_val;
+}
+
+
+#define W_CLOCK_ALPM_PKGNAME "com.samsung.idle-clock-alpm"
+static void _on_ALPM_changed_receive(void *data, DBusMessage *msg)
+{
+ DBusError err;
+ char *str;
+ int response;
+ int r;
+ int alpm_on = 0;
+ int alpm_off = 0;
+
+ _D("ALPM signal is received");
+
+ alpm_on = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_ALPM_ON);
+ alpm_off = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_ALPM_OFF);
+
+ if (alpm_on) {
+ pid_ALPM_clock = w_launch_app(W_CLOCK_ALPM_PKGNAME, NULL);
+ _D("Launch ALPM clock[%s], pid[%d]", W_CLOCK_ALPM_PKGNAME, pid_ALPM_clock);
+ } else if (alpm_off) {
+#if 1
+ aul_terminate_pid(pid_ALPM_clock);
+#else
+ if (!pid_ALPM_clock) {
+ aul_terminate_pid(pid_ALPM_clock);
+ _D("Terminate ALPM clock pid[%d]", pid_ALPM_clock);
+ pid_ALPM_clock = 0;
+ } else {
+ _E(" ALPM clock pid is 0");
+ }
+#endif
+ } else {
+ _E("%s dbus_message_is_signal error", DEVICED_INTERFACE_DISPLAY);
+ }
+}
+
+
+int init_dbus_ALPM_signal(void *data)
+{
+ E_DBus_Connection *conn;
+ E_DBus_Signal_Handler *handler;
+ int r;
+
+ g_type_init();
+ e_dbus_init();
+
+ conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);
+ if (conn == NULL) {
+ _E("e_dbus_bus_get error");
+ return -1;
+ }
+
+ handler = e_dbus_signal_handler_add(conn, NULL, DISPLAY_OBJECT_PATH,
+ DEVICED_INTERFACE_DISPLAY, MEMBER_ALPM_ON,
+ _on_ALPM_changed_receive, NULL);
+ if (handler == NULL) {
+ _E("e_dbus_signal_handler_add error");
+ return -1;
+ }
+
+
+ handler = e_dbus_signal_handler_add(conn, NULL, DISPLAY_OBJECT_PATH,
+ DEVICED_INTERFACE_DISPLAY, MEMBER_ALPM_OFF,
+ _on_ALPM_changed_receive, NULL);
+ if (handler == NULL) {
+ _E("e_dbus_signal_handler_add error");
+ return -1;
+ }
+}
+
+static void _on_COOL_DOWN_MODE_changed_receive(void *data, DBusMessage *msg)
+{
+ struct appdata *ad = (struct appdata *)data;
+ if(ad == NULL){
+ _E("app data is NULL");
+ return;
+ }
+ DBusError err;
+ const char *str = NULL;
+ int response;
+ int r;
+ int mode_release = 0;
+ int mode_limitaction = 0;
+
+ _W("COOL DOWN MODE signal is received");
+ dbus_error_init(&err);
+
+ r = dbus_message_is_signal(msg, COOL_DOWN_MODE_INTERFACE, SIGNAL_COOL_DOWN_MODE);
+
+ r = dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID);
+ if (!r) {
+ _E("no message : [%s:%s]", err.name, err.message);
+ return;
+ }
+
+ _D("received siganl : %s", str);
+
+ if (!strncmp(str, COOL_DOWN_MODE_RELEASE, strlen(COOL_DOWN_MODE_RELEASE))) {
+ _W("%s", COOL_DOWN_MODE_RELEASE);
+ ad->cool_down_mode = 0;
+ } else if (!strncmp(str, COOL_DOWN_MODE_LIMITACTION, strlen(COOL_DOWN_MODE_LIMITACTION))) {
+ _W("%s", COOL_DOWN_MODE_LIMITACTION);
+ ad->cool_down_mode = 1;
+ } else {
+ _E("%s dbus_message_is_signal error", SIGNAL_COOL_DOWN_MODE);
+ }
+}
+
+int init_dbus_COOL_DOWN_MODE_signal(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ if(ad == NULL){
+ _E("app data is NULL");
+ return -1;
+ }
+ E_DBus_Connection *conn;
+ E_DBus_Signal_Handler *handler;
+ int r;
+
+ g_type_init();
+ e_dbus_init();
+
+ conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);
+ if (conn == NULL) {
+ _E("e_dbus_bus_get error");
+ return -1;
+ }
+
+ handler = e_dbus_signal_handler_add(conn, NULL, COOL_DOWN_MODE_PATH,
+ COOL_DOWN_MODE_INTERFACE, SIGNAL_COOL_DOWN_MODE,
+ _on_COOL_DOWN_MODE_changed_receive, ad);
+ if (handler == NULL) {
+ _E("e_dbus_signal_handler_add error");
+ return -1;
+ }
+}
+#if 0
+static void _on_NIKE_RUNNING_STATUS_changed_receive(void *data, DBusMessage *msg)
+{
+ struct appdata *ad = (struct appdata *)data;
+ if(ad == NULL){
+ _E("app data is NULL");
+ return;
+ }
+ DBusError err;
+ const char *str = NULL;
+ int response;
+ int r;
+ int mode_release = 0;
+ int mode_limitaction = 0;
+
+ _W("NIKE RUNNING STATUS signal is received");
+ dbus_error_init(&err);
+
+ r = dbus_message_is_signal(msg, NIKE_RUNNING_STATUS_INTERFACE, NIKE_RUNNING_STATUS_SIGNAL);
+
+ r = dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID);
+ if (!r) {
+ _E("no message : [%s:%s]", err.name, err.message);
+ return;
+ }
+
+ _W("received siganl : %s", str);
+
+ if (!strncmp(str, NIKE_RUNNING_STATUS_START, strlen(NIKE_RUNNING_STATUS_START))) {
+ _W("%s", NIKE_RUNNING_STATUS_START);
+ ad->nike_running_status = 1;
+ } else if (!strncmp(str, NIKE_RUNNING_STATUS_END, strlen(NIKE_RUNNING_STATUS_END))) {
+ _W("%s", NIKE_RUNNING_STATUS_END);
+ ad->nike_running_status = 0;
+ } else {
+ _E("%s dbus_message_is_signal error", NIKE_RUNNING_STATUS_SIGNAL);
+ }
+ clock_mgr_set_reserved_apps_status(ad->nike_running_status, STARTER_RESERVED_APPS_NIKE, ad);
+}
+
+int init_dbus_NIKE_RUNNING_STATUS_signal(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ if(ad == NULL){
+ _E("app data is NULL");
+ return -1;
+ }
+ E_DBus_Connection *conn;
+ E_DBus_Signal_Handler *handler;
+ int r;
+
+ g_type_init();
+ e_dbus_init();
+
+ conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);
+ if (conn == NULL) {
+ _E("e_dbus_bus_get error");
+ return -1;
+ }
+
+ handler = e_dbus_signal_handler_add(conn, NULL, NIKE_RUNNING_STATUS_PATH,
+ NIKE_RUNNING_STATUS_INTERFACE, NIKE_RUNNING_STATUS_SIGNAL,
+ _on_NIKE_RUNNING_STATUS_changed_receive, ad);
+ if (handler == NULL) {
+ _E("e_dbus_signal_handler_add error");
+ return -1;
+ }
+}
+#endif
+
+static void _on_lcd_changed_receive(void *data, DBusMessage *msg)
+{
+ DBusError err;
+ const char *str = NULL;
+ int response;
+ int r;
+ int lcd_on = 0;
+ int lcd_off = 0;
+
+ struct appdata *ad = (struct appdata *)data;
+
+ _D("LCD signal is received");
+
+ lcd_on = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_ON);
+ lcd_off = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_OFF);
+
+
+ if (lcd_on) {
+#if 0
+ dbus_error_init(&err);
+
+ r = dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID);
+
+ if (!r) {
+ _E("no message : [%s:%s]", err.name, err.message);
+ return;
+ }
+
+ _W("%s, %d, str=[%s]", __func__, __LINE__, str);
+
+ if (!strncmp(str, LCD_ON_BY_GESTURE, strlen(LCD_ON_BY_GESTURE))) {
+ _W("LCD ON by [%s], do not terminate ALPM clock", LCD_ON_BY_GESTURE);
+ } else {
+ if (ad->pid_ALPM_clock > 0) {
+ _W("LCD ON by [%s], terminate ALPM clock pid[%d]", str, ad->pid_ALPM_clock);
+ aul_terminate_pid(ad->pid_ALPM_clock);
+ ad->pid_ALPM_clock = 0;
+ }
+ }
+#endif
+ _W("LCD on");
+ ad->lcd_status = 1;
+ }
+ else if(lcd_off){
+ _W("LCD off");
+ ad->lcd_status = 0;
+ } else {
+ _E("%s dbus_message_is_signal error", DEVICED_INTERFACE_DISPLAY);
+ }
+}
+
+
+int init_dbus_lcd_on_off_signal(void *data)
+{
+ E_DBus_Connection *conn;
+ E_DBus_Signal_Handler *handler;
+ int r;
+
+ g_type_init();
+ e_dbus_init();
+
+ conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);
+ if (conn == NULL) {
+ _E("e_dbus_bus_get error");
+ return -1;
+ }
+
+
+ handler = e_dbus_signal_handler_add(conn, NULL, DISPLAY_OBJECT_PATH,
+ DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_ON,
+ _on_lcd_changed_receive, data);
+ if (handler == NULL) {
+ _E("e_dbus_signal_handler_add error");
+ return -1;
+ }
+
+ handler = e_dbus_signal_handler_add(conn, NULL, DISPLAY_OBJECT_PATH,
+ DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_OFF,
+ _on_lcd_changed_receive, data);
+ if (handler == NULL) {
+ _E("e_dbus_signal_handler_add error");
+ return -1;
+ }
+}
+
+
+
+static void _on_ALPM_clock_state_changed_receive(void *data, DBusMessage *msg)
+{
+ DBusError err;
+ const char *str = NULL;
+ int response;
+ int r;
+ int lcd_on = 0;
+
+ struct appdata *ad = (struct appdata *)data;
+
+ _D("ALPM clock state is received");
+
+ lcd_on = dbus_message_is_signal(msg, DBUS_ALPM_CLOCK_INTERFACE, DBUS_ALPM_CLOCK_MEMBER_STATUS);
+
+
+ if (lcd_on) {
+ dbus_error_init(&err);
+
+ r = dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID);
+
+ if (!r) {
+ _E("no message : [%s:%s]", err.name, err.message);
+ return;
+ }
+
+ _D("%s, %d, str=[%s]", __func__, __LINE__, str);
+ if (!strncmp(str, ALPM_CLOCK_SHOW, strlen(ALPM_CLOCK_SHOW))) {
+ _W("ALPM clock state is [%s]", ALPM_CLOCK_SHOW);
+ ad->ALPM_clock_state = 1;
+ } else {
+ ad->ALPM_clock_state = 0;
+ }
+ } else {
+ _E("%s dbus_message_is_signal error", DBUS_ALPM_CLOCK_INTERFACE);
+ }
+}
+
+int init_dbus_ALPM_clock_state_signal(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ if(ad == NULL){
+ _E("app data is NULL");
+ return -1;
+ }
+ E_DBus_Connection *conn;
+ E_DBus_Signal_Handler *handler;
+ int r;
+
+ g_type_init();
+ e_dbus_init();
+
+ ad->ALPM_clock_state = 0;
+ conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);
+ if (conn == NULL) {
+ _E("e_dbus_bus_get error");
+ return -1;
+ }
+
+ handler = e_dbus_signal_handler_add(conn, NULL, DBUS_ALPM_CLOCK_PATH,
+ DBUS_ALPM_CLOCK_INTERFACE, DBUS_ALPM_CLOCK_MEMBER_STATUS,
+ _on_ALPM_clock_state_changed_receive, ad);
+
+ if (handler == NULL) {
+ _E("e_dbus_signal_handler_add error");
+ return -1;
+ }
+
+ return 1;
+}
+
+