4 * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the License);
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
21 * @file display-dbus.c
22 * @brief dbus interface
29 #include <device-node.h>
35 #include "core/common.h"
36 #include "core/devices.h"
37 #include "dd-display.h"
39 #define TELEPHONY_PATH "/org/tizen/telephony/SAMSUNG_QMI"
40 #define TELEPHONY_INTERFACE_SIM "org.tizen.telephony.Sim"
41 #define SIGNAL_SIM_STATUS "Status"
42 #define SIM_CARD_NOT_PRESENT (0x01)
44 #define VCONFKEY_LCD_BRIGHTNESS_INIT "db/private/deviced/lcd_brightness_init"
46 #define SIGNAL_HOMESCREEN "HomeScreen"
47 #define SIGNAL_EXTREME "Extreme"
48 #define SIGNAL_NOTEXTREME "NotExtreme"
50 #define BLIND_MASK(val) ((val) & 0xFFFF)
51 #define BLIND_RED(val) BLIND_MASK((val) >> 32)
52 #define BLIND_GREEN(val) BLIND_MASK((val) >> 16)
53 #define BLIND_BLUE(val) BLIND_MASK((val))
55 #define DISPLAY_DIM_BRIGHTNESS 0
56 #define DUMP_MODE_WATING_TIME 600000
58 static DBusMessage *edbus_start(E_DBus_Object *obj, DBusMessage *msg)
60 static const struct device_ops *display_device_ops;
62 if (!display_device_ops) {
63 display_device_ops = find_device("display");
64 if (!display_device_ops)
65 return dbus_message_new_method_return(msg);
68 display_device_ops->start();
69 return dbus_message_new_method_return(msg);
72 static DBusMessage *edbus_stop(E_DBus_Object *obj, DBusMessage *msg)
74 static const struct device_ops *display_device_ops;
76 if (!display_device_ops) {
77 display_device_ops = find_device("display");
78 if (!display_device_ops)
79 return dbus_message_new_method_return(msg);
82 display_device_ops->stop();
83 return dbus_message_new_method_return(msg);
86 static DBusMessage *edbus_lockstate(E_DBus_Object *obj, DBusMessage *msg)
100 dbus_error_init(&err);
102 if (!dbus_message_get_args(msg, &err,
103 DBUS_TYPE_STRING, &state_str,
104 DBUS_TYPE_STRING, &option1_str,
105 DBUS_TYPE_STRING, &option2_str,
106 DBUS_TYPE_INT32, &timeout, DBUS_TYPE_INVALID)) {
107 _E("there is no message");
112 if (!state_str || timeout < 0) {
113 _E("message is invalid!");
118 pid = get_edbus_sender_pid(msg);
119 if (kill(pid, 0) == -1) {
120 _E("%d process does not exist, dbus ignored!", pid);
125 if (!strcmp(state_str, PM_LCDON_STR))
127 else if (!strcmp(state_str, PM_LCDDIM_STR))
129 else if (!strcmp(state_str, PM_LCDOFF_STR))
132 _E("%s state is invalid, dbus ignored!", state_str);
137 if (!strcmp(option1_str, STAYCURSTATE_STR))
138 flag = STAY_CUR_STATE;
139 else if (!strcmp(option1_str, GOTOSTATENOW_STR))
140 flag = GOTO_STATE_NOW;
142 _E("%s option is invalid. set default option!", option1_str);
143 flag = STAY_CUR_STATE;
146 if (!strcmp(option2_str, HOLDKEYBLOCK_STR))
147 flag |= HOLD_KEY_BLOCK;
148 else if (!strcmp(option2_str, STANDBYMODE_STR))
149 flag |= STANDBY_MODE;
151 if (check_dimstay(state, flag) == true) {
152 _E("LCD state can not be changed to OFF state now!");
153 flag &= ~GOTO_STATE_NOW;
154 flag |= STAY_CUR_STATE;
157 ret = pm_lock_internal(pid, state, flag, timeout);
159 reply = dbus_message_new_method_return(msg);
160 dbus_message_iter_init_append(reply, &iter);
161 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
166 static DBusMessage *edbus_unlockstate(E_DBus_Object *obj, DBusMessage *msg)
169 DBusMessageIter iter;
178 dbus_error_init(&err);
180 if (!dbus_message_get_args(msg, &err,
181 DBUS_TYPE_STRING, &state_str,
182 DBUS_TYPE_STRING, &option_str, DBUS_TYPE_INVALID)) {
183 _E("there is no message");
189 _E("message is invalid!");
194 pid = get_edbus_sender_pid(msg);
195 if (kill(pid, 0) == -1) {
196 _E("%d process does not exist, dbus ignored!", pid);
201 if (!strcmp(state_str, PM_LCDON_STR))
203 else if (!strcmp(state_str, PM_LCDDIM_STR))
205 else if (!strcmp(state_str, PM_LCDOFF_STR))
208 _E("%s state is invalid, dbus ignored!", state_str);
213 if (!strcmp(option_str, SLEEP_MARGIN_STR))
214 flag = PM_SLEEP_MARGIN;
215 else if (!strcmp(option_str, RESET_TIMER_STR))
216 flag = PM_RESET_TIMER;
217 else if (!strcmp(option_str, KEEP_TIMER_STR))
218 flag = PM_KEEP_TIMER;
220 _E("%s option is invalid. set default option!", option_str);
221 flag = PM_RESET_TIMER;
224 ret = pm_unlock_internal(pid, state, flag);
226 reply = dbus_message_new_method_return(msg);
227 dbus_message_iter_init_append(reply, &iter);
228 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
233 static DBusMessage *edbus_changestate(E_DBus_Object *obj, DBusMessage *msg)
236 DBusMessageIter iter;
243 dbus_error_init(&err);
245 if (!dbus_message_get_args(msg, &err,
246 DBUS_TYPE_STRING, &state_str, DBUS_TYPE_INVALID)) {
247 _E("there is no message");
253 _E("message is invalid!");
258 pid = get_edbus_sender_pid(msg);
259 if (kill(pid, 0) == -1) {
260 _E("%d process does not exist, dbus ignored!", pid);
265 if (!strcmp(state_str, PM_LCDON_STR))
267 else if (!strcmp(state_str, PM_LCDDIM_STR))
269 else if (!strcmp(state_str, PM_LCDOFF_STR))
271 else if (!strcmp(state_str, PM_SUSPEND_STR))
274 _E("%s state is invalid, dbus ignored!", state_str);
279 if (check_dimstay(state, GOTO_STATE_NOW) == true) {
280 _E("LCD state can not be changed to OFF state!");
285 ret = pm_change_internal(pid, state);
287 if (!ret && state == LCD_OFF)
288 update_lcdoff_source(VCONFKEY_PM_LCDOFF_BY_TIMEOUT);
290 reply = dbus_message_new_method_return(msg);
291 dbus_message_iter_init_append(reply, &iter);
292 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
297 static DBusMessage *edbus_getdisplaycount(E_DBus_Object *obj, DBusMessage *msg)
299 DBusMessageIter iter;
303 cmd = DISP_CMD(PROP_DISPLAY_DISPLAY_COUNT, DEFAULT_DISPLAY);
304 ret = device_get_property(DEVICE_TYPE_DISPLAY, cmd, &cnt);
308 reply = dbus_message_new_method_return(msg);
309 dbus_message_iter_init_append(reply, &iter);
310 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
314 static DBusMessage *edbus_getmaxbrightness(E_DBus_Object *obj, DBusMessage *msg)
316 DBusMessageIter iter;
320 cmd = DISP_CMD(PROP_DISPLAY_MAX_BRIGHTNESS, DEFAULT_DISPLAY);
321 ret = device_get_property(DEVICE_TYPE_DISPLAY, cmd, &brt);
325 reply = dbus_message_new_method_return(msg);
326 dbus_message_iter_init_append(reply, &iter);
327 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
331 static DBusMessage *edbus_setmaxbrightness(E_DBus_Object *obj, DBusMessage *msg)
333 DBusMessageIter iter;
337 dbus_message_iter_init(msg, &iter);
338 dbus_message_iter_get_basic(&iter, &brt);
340 cmd = DISP_CMD(PROP_DISPLAY_MAX_BRIGHTNESS, DEFAULT_DISPLAY);
341 ret = device_set_property(DEVICE_TYPE_DISPLAY, cmd, brt);
343 reply = dbus_message_new_method_return(msg);
344 dbus_message_iter_init_append(reply, &iter);
345 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
349 static DBusMessage *edbus_getbrightness(E_DBus_Object *obj, DBusMessage *msg)
351 DBusMessageIter iter;
355 cmd = DISP_CMD(PROP_DISPLAY_BRIGHTNESS, DEFAULT_DISPLAY);
356 ret = device_get_property(DEVICE_TYPE_DISPLAY, cmd, &brt);
360 _I("get brightness %d, %d", brt, ret);
362 reply = dbus_message_new_method_return(msg);
363 dbus_message_iter_init_append(reply, &iter);
364 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &brt);
368 static DBusMessage *edbus_setbrightness(E_DBus_Object *obj, DBusMessage *msg)
370 DBusMessageIter iter;
372 int cmd, brt, powersaver, autobrt, ret;
374 dbus_message_iter_init(msg, &iter);
375 dbus_message_iter_get_basic(&iter, &brt);
377 if (brt == DISPLAY_DIM_BRIGHTNESS) {
378 _E("application can not set this value(DIM VALUE:%d)", brt);
383 if (vconf_get_int(VCONFKEY_SETAPPL_PSMODE, &powersaver) != 0) {
384 _E("Failed to get VCONFKEY_SETAPPL_PSMODE value");
385 powersaver = SETTING_PSMODE_NORMAL;
388 if (powersaver == SETTING_PSMODE_WEARABLE) {
389 _D("brightness is changed in powersaver mode!");
390 backlight_ops.set_force_brightness(0);
393 if (vconf_get_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, &autobrt) != 0) {
394 _E("Failed to get VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT value");
395 autobrt = SETTING_BRIGHTNESS_AUTOMATIC_OFF;
398 if (autobrt == SETTING_BRIGHTNESS_AUTOMATIC_ON) {
399 _D("auto_brightness state is ON, can not change the brightness value");
404 cmd = DISP_CMD(PROP_DISPLAY_BRIGHTNESS, DEFAULT_DISPLAY);
405 ret = device_set_property(DEVICE_TYPE_DISPLAY, cmd, brt);
408 if (vconf_set_int(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, brt) != 0)
409 _E("Failed to set VCONFKEY_SETAPPL_LCD_BRIGHTNESS value");
411 if (vconf_set_int(VCONFKEY_PM_CURRENT_BRIGHTNESS, brt) != 0)
412 _E("Failed to set VCONFKEY_PM_CURRENT_BRIGHTNESS value");
414 _I("set brightness %d, %d", brt, ret);
417 reply = dbus_message_new_method_return(msg);
418 dbus_message_iter_init_append(reply, &iter);
419 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
423 static DBusMessage *edbus_holdbrightness(E_DBus_Object *obj, DBusMessage *msg)
425 DBusMessageIter iter;
427 int cmd, brt, powersaver, autobrt, ret;
429 dbus_message_iter_init(msg, &iter);
430 dbus_message_iter_get_basic(&iter, &brt);
432 if (brt == DISPLAY_DIM_BRIGHTNESS) {
433 _E("application can not set this value(DIM VALUE:%d)", brt);
438 if (vconf_get_int(VCONFKEY_SETAPPL_PSMODE, &powersaver) != 0) {
439 _E("Failed to get VCONFKEY_SETAPPL_PSMODE value");
440 powersaver = SETTING_PSMODE_NORMAL;
443 if (powersaver == SETTING_PSMODE_WEARABLE) {
444 _D("Powersaver mode! brightness can not be changed!");
449 if (vconf_get_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, &autobrt) != 0) {
450 _E("Failed to get VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT value");
451 autobrt = SETTING_BRIGHTNESS_AUTOMATIC_OFF;
454 vconf_set_int(VCONFKEY_PM_CUSTOM_BRIGHTNESS_STATUS, VCONFKEY_PM_CUSTOM_BRIGHTNESS_ON);
456 cmd = DISP_CMD(PROP_DISPLAY_BRIGHTNESS, DEFAULT_DISPLAY);
457 ret = device_set_property(DEVICE_TYPE_DISPLAY, cmd, brt);
461 if (autobrt == SETTING_BRIGHTNESS_AUTOMATIC_ON) {
462 _D("Auto brightness will be paused");
463 vconf_set_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, SETTING_BRIGHTNESS_AUTOMATIC_PAUSE);
466 if (vconf_set_int(VCONFKEY_PM_CURRENT_BRIGHTNESS, brt) != 0)
467 _E("Failed to set VCONFKEY_PM_CURRENT_BRIGHTNESS value");
469 _I("hold brightness %d, %d", brt, ret);
472 reply = dbus_message_new_method_return(msg);
473 dbus_message_iter_init_append(reply, &iter);
474 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
479 static DBusMessage *edbus_releasebrightness(E_DBus_Object *obj, DBusMessage *msg)
481 DBusMessageIter iter;
483 int cmd, bat, charger, changed, setting, brt, autobrt, ret = 0;
485 if (vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat) != 0) {
486 _E("Failed to get VCONFKEY_SYSMAN_BATTERY_STATUS_LOW value");
491 if (vconf_get_int(VCONFKEY_SYSMAN_CHARGER_STATUS, &charger) != 0) {
492 _E("Failed to get VCONFKEY_SYSMAN_CHARGER_STATUS value");
497 if (vconf_get_bool(VCONFKEY_PM_BRIGHTNESS_CHANGED_IN_LPM, &changed) != 0) {
498 _E("Failed to get VCONFKEY_PM_BRIGHTNESS_CHANGED_IN_LPM value");
503 if (vconf_get_int(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, &setting) != 0) {
504 _E("Failed to get VCONFKEY_SETAPPL_LCD_BRIGHTNESS value");
509 if (vconf_get_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, &autobrt) != 0) {
510 _E("Failed to get VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT value");
515 vconf_set_int(VCONFKEY_PM_CUSTOM_BRIGHTNESS_STATUS, VCONFKEY_PM_CUSTOM_BRIGHTNESS_OFF);
517 cmd = DISP_CMD(PROP_DISPLAY_BRIGHTNESS, DEFAULT_DISPLAY);
518 ret = device_get_property(DEVICE_TYPE_DISPLAY, cmd, &brt);
523 if (low_battery_state(bat) &&
524 charger == VCONFKEY_SYSMAN_CHARGER_DISCONNECTED && !changed) {
525 _D("batt warning low : brightness is not changed!");
527 device_set_property(DEVICE_TYPE_DISPLAY, PROP_DISPLAY_BRIGHTNESS, 0);
532 if (autobrt == SETTING_BRIGHTNESS_AUTOMATIC_OFF) {
533 if (brt != setting) {
534 device_set_property(DEVICE_TYPE_DISPLAY, PROP_DISPLAY_BRIGHTNESS, setting);
535 if (vconf_set_int(VCONFKEY_PM_CURRENT_BRIGHTNESS, setting) != 0) {
536 _E("Failed to set VCONFKEY_PM_CURRENT_BRIGHTNESS value");
539 } else if (autobrt == SETTING_BRIGHTNESS_AUTOMATIC_PAUSE) {
540 _D("Auto brightness will be enable");
541 vconf_set_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, SETTING_BRIGHTNESS_AUTOMATIC_ON);
545 reply = dbus_message_new_method_return(msg);
546 dbus_message_iter_init_append(reply, &iter);
547 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
551 static DBusMessage *edbus_getaclstatus(E_DBus_Object *obj, DBusMessage *msg)
553 DBusMessageIter iter;
557 cmd = DISP_CMD(PROP_DISPLAY_ACL_CONTROL, DEFAULT_DISPLAY);
558 ret = device_get_property(DEVICE_TYPE_DISPLAY, cmd, &st);
562 _I("get acl status %d, %d", st, ret);
564 reply = dbus_message_new_method_return(msg);
565 dbus_message_iter_init_append(reply, &iter);
566 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
570 static DBusMessage *edbus_setaclstatus(E_DBus_Object *ob, DBusMessage *msg)
572 DBusMessageIter iter;
576 dbus_message_iter_init(msg, &iter);
577 dbus_message_iter_get_basic(&iter, &st);
579 cmd = DISP_CMD(PROP_DISPLAY_ACL_CONTROL, DEFAULT_DISPLAY);
580 ret = device_set_property(DEVICE_TYPE_DISPLAY, cmd, st);
582 _I("set acl status %d, %d", st, ret);
584 reply = dbus_message_new_method_return(msg);
585 dbus_message_iter_init_append(reply, &iter);
586 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
590 static DBusMessage *edbus_getautotone(E_DBus_Object *obj, DBusMessage *msg)
592 DBusMessageIter iter;
596 cmd = DISP_CMD(PROP_DISPLAY_AUTO_SCREEN_TONE, DEFAULT_DISPLAY);
597 ret = device_get_property(DEVICE_TYPE_DISPLAY, cmd, &tone);
601 _I("get auto screen tone %d, %d", tone, ret);
603 reply = dbus_message_new_method_return(msg);
604 dbus_message_iter_init_append(reply, &iter);
605 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
609 static DBusMessage *edbus_setautotone(E_DBus_Object *obj, DBusMessage *msg)
611 DBusMessageIter iter;
615 dbus_message_iter_init(msg, &iter);
616 dbus_message_iter_get_basic(&iter, &tone);
618 cmd = DISP_CMD(PROP_DISPLAY_AUTO_SCREEN_TONE, DEFAULT_DISPLAY);
619 ret = device_set_property(DEVICE_TYPE_DISPLAY, cmd, tone);
621 _I("set auto screen tone %d, %d", tone, ret);
623 reply = dbus_message_new_method_return(msg);
624 dbus_message_iter_init_append(reply, &iter);
625 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
629 static DBusMessage *edbus_setautotoneforce(E_DBus_Object *obj, DBusMessage *msg)
631 DBusMessageIter iter;
635 dbus_message_iter_init(msg, &iter);
636 dbus_message_iter_get_basic(&iter, &tone);
638 cmd = DISP_CMD(PROP_DISPLAY_AUTO_SCREEN_TONE_FORCE, DEFAULT_DISPLAY);
639 ret = device_set_property(DEVICE_TYPE_DISPLAY, cmd, tone);
641 _I("set auto screen tone force %d, %d", tone, ret);
643 reply = dbus_message_new_method_return(msg);
644 dbus_message_iter_init_append(reply, &iter);
645 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
649 static DBusMessage *edbus_setrefreshrate(E_DBus_Object *obj, DBusMessage *msg)
651 DBusMessageIter iter;
653 int app, val, cmd, ret, control;
655 ret = dbus_message_get_args(msg, NULL,
656 DBUS_TYPE_INT32, &app,
657 DBUS_TYPE_INT32, &val, DBUS_TYPE_INVALID);
659 _I("there is no message");
664 if (app < 0 || app >= ARRAY_SIZE(display_conf.framerate_app) || val < 0) {
669 if (!display_conf.framerate_app[app]) {
670 _I("This case(%d) is not support in this target", app);
675 control = display_conf.control_display;
680 _D("app : %d, value : %d", app, val);
681 cmd = DISP_CMD(PROP_DISPLAY_FRAME_RATE, DEFAULT_DISPLAY);
682 ret = device_set_property(DEVICE_TYPE_DISPLAY, cmd, val);
688 reply = dbus_message_new_method_return(msg);
689 dbus_message_iter_init_append(reply, &iter);
690 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
694 static DBusMessage *edbus_getcolorblind(E_DBus_Object *obj, DBusMessage *msg)
696 DBusMessageIter iter;
700 cmd = DISP_CMD(PROP_DISPLAY_IMAGE_ENHANCE_COLOR_BLIND, DEFAULT_DISPLAY);
701 ret = device_get_property(DEVICE_TYPE_DISPLAY, cmd, &val);
705 _I("get color blind %d", val);
707 reply = dbus_message_new_method_return(msg);
708 dbus_message_iter_init_append(reply, &iter);
709 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
713 static DBusMessage *edbus_setcolorblind(E_DBus_Object *obj, DBusMessage *msg)
715 DBusMessageIter iter;
719 uint64_t red, grn, blu;
720 struct color_blind_info info;
722 ret = dbus_message_get_args(msg, NULL, DBUS_TYPE_UINT32, &power,
723 DBUS_TYPE_UINT64, &red, DBUS_TYPE_UINT64, &grn,
724 DBUS_TYPE_UINT64, &blu, DBUS_TYPE_INVALID);
726 _I("there is no message");
732 info.RrCr = BLIND_RED(red);
733 info.RgCg = BLIND_GREEN(red);
734 info.RbCb = BLIND_BLUE(red);
735 info.GrMr = BLIND_RED(grn);
736 info.GgMg = BLIND_GREEN(grn);
737 info.GbMb = BLIND_BLUE(grn);
738 info.BrYr = BLIND_RED(blu);
739 info.BgYg = BLIND_GREEN(blu);
740 info.BbYb = BLIND_BLUE(blu);
742 cmd = DISP_CMD(PROP_DISPLAY_IMAGE_ENHANCE_COLOR_BLIND, DEFAULT_DISPLAY);
743 ret = device_set_property(DEVICE_TYPE_DISPLAY, cmd, (int)&info);
745 _I("set color blind %d, %hu, %hu, %hu, %hu, %hu, %hu, %hu, %hu, %hu, %d",
746 info.power, info.RrCr, info.RgCg, info.RbCb, info.GrMr, info.GgMg,
747 info.GbMb, info.BrYr, info.BgYg, info.BbYb, ret);
750 reply = dbus_message_new_method_return(msg);
751 dbus_message_iter_init_append(reply, &iter);
752 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
756 static DBusMessage *edbus_gethbm(E_DBus_Object *obj, DBusMessage *msg)
758 DBusMessageIter iter;
767 /* check weak function symbol */
768 if (!hbm_get_state) {
773 hbm = hbm_get_state();
776 _E("failed to get high brightness mode %d", hbm);
778 _D("get high brightness mode %d", hbm);
780 reply = dbus_message_new_method_return(msg);
781 dbus_message_iter_init_append(reply, &iter);
782 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &hbm);
786 static DBusMessage *edbus_sethbm(E_DBus_Object *obj, DBusMessage *msg)
788 DBusMessageIter iter;
797 if (!dbus_message_get_args(msg, NULL,
798 DBUS_TYPE_INT32, &hbm,
799 DBUS_TYPE_INVALID)) {
800 _E("there is no message");
805 /* check weak function symbol */
806 if (!hbm_set_state) {
811 ret = hbm_set_state(hbm);
814 _E("failed to set high brightness mode (%d,%d)", ret, hbm);
816 _I("set high brightness mode (%d,%d)", ret, hbm);
818 reply = dbus_message_new_method_return(msg);
819 dbus_message_iter_init_append(reply, &iter);
820 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
824 static DBusMessage *edbus_sethbm_timeout(E_DBus_Object *obj, DBusMessage *msg)
826 DBusMessageIter iter;
828 int hbm, timeout, ret;
835 if (!dbus_message_get_args(msg, NULL,
836 DBUS_TYPE_INT32, &hbm,
837 DBUS_TYPE_INT32, &timeout, DBUS_TYPE_INVALID)) {
838 _E("there is no message");
843 /* check weak function symbol */
844 if (!hbm_set_state_with_timeout) {
849 ret = hbm_set_state_with_timeout(hbm, timeout);
852 _E("failed to set high brightness mode (%d,%d,%d)",
855 _I("set high brightness mode (%d,%d,%d)",
858 reply = dbus_message_new_method_return(msg);
859 dbus_message_iter_init_append(reply, &iter);
860 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
864 static DBusMessage *edbus_setautobrightnessmin(E_DBus_Object *obj, DBusMessage *msg)
866 DBusMessageIter iter;
872 sender = dbus_message_get_sender(msg);
874 _E("invalid sender name!");
878 if (!display_info.set_autobrightness_min) {
882 dbus_message_iter_init(msg, &iter);
883 dbus_message_iter_get_basic(&iter, &val);
885 pid = get_edbus_sender_pid(msg);
886 ret = display_info.set_autobrightness_min(val, (char *)sender);
888 _W("fail to set autobrightness min %d, %d by %d", val, ret, pid);
891 if (display_info.reset_autobrightness_min) {
892 register_edbus_watch(msg, WATCH_DISPLAY_AUTOBRIGHTNESS_MIN,
893 display_info.reset_autobrightness_min);
894 _I("set autobrightness min %d by %d", val, pid);
897 reply = dbus_message_new_method_return(msg);
898 dbus_message_iter_init_append(reply, &iter);
899 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
904 static DBusMessage *edbus_setlcdtimeout(E_DBus_Object *obj, DBusMessage *msg)
906 DBusMessageIter iter;
908 int on, dim, holdkey_block, ret;
912 sender = dbus_message_get_sender(msg);
914 _E("invalid sender name!");
919 ret = dbus_message_get_args(msg, NULL, DBUS_TYPE_INT32, &on,
920 DBUS_TYPE_INT32, &dim, DBUS_TYPE_INT32, &holdkey_block,
923 pid = get_edbus_sender_pid(msg);
924 ret = set_lcd_timeout(on, dim, holdkey_block, sender);
926 _W("fail to set lcd timeout %d by %d", ret, pid);
928 register_edbus_watch(msg, WATCH_DISPLAY_LCD_TIMEOUT,
930 _I("set lcd timeout on %d, dim %d, holdblock %d by %d",
931 on, dim, holdkey_block, pid);
934 reply = dbus_message_new_method_return(msg);
935 dbus_message_iter_init_append(reply, &iter);
936 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
941 static DBusMessage *edbus_lockscreenbgon(E_DBus_Object *obj, DBusMessage *msg)
943 DBusMessageIter iter;
948 ret = dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &on,
952 _E("fail to update lcdscreen bg on state %d", ret);
957 if (!strcmp(on, "true"))
958 update_pm_setting(SETTING_LOCK_SCREEN_BG, true);
959 else if (!strcmp(on, "false"))
960 update_pm_setting(SETTING_LOCK_SCREEN_BG, false);
965 reply = dbus_message_new_method_return(msg);
966 dbus_message_iter_init_append(reply, &iter);
967 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
972 static DBusMessage *edbus_dumpmode(E_DBus_Object *obj, DBusMessage *msg)
974 DBusMessageIter iter;
979 ret = dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &on,
983 _E("fail to get dumpmode state %d", ret);
988 if (!strcmp(on, "on"))
989 pm_lock_internal(INTERNAL_LOCK_DUMPMODE, LCD_OFF,
990 STAY_CUR_STATE, DUMP_MODE_WATING_TIME);
991 else if (!strcmp(on, "off"))
992 pm_unlock_internal(INTERNAL_LOCK_DUMPMODE, LCD_OFF,
998 reply = dbus_message_new_method_return(msg);
999 dbus_message_iter_init_append(reply, &iter);
1000 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
1005 static DBusMessage *edbus_savelog(E_DBus_Object *obj, DBusMessage *msg)
1008 return dbus_message_new_method_return(msg);
1011 static DBusMessage *edbus_powerkeyignore(E_DBus_Object *obj, DBusMessage *msg)
1013 DBusMessageIter iter;
1018 ret = dbus_message_get_args(msg, NULL, DBUS_TYPE_INT32, &on,
1022 _E("fail to get powerkey ignore %d", ret);
1027 if (CHECK_OPS(keyfilter_ops, set_powerkey_ignore))
1028 keyfilter_ops->set_powerkey_ignore(on == 1 ? true : false);
1030 reply = dbus_message_new_method_return(msg);
1031 dbus_message_iter_init_append(reply, &iter);
1032 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
1037 static DBusMessage *edbus_powerkeylcdoff(E_DBus_Object *obj, DBusMessage *msg)
1039 DBusMessageIter iter;
1043 if (CHECK_OPS(keyfilter_ops, powerkey_lcdoff))
1044 ret = keyfilter_ops->powerkey_lcdoff();
1048 reply = dbus_message_new_method_return(msg);
1049 dbus_message_iter_init_append(reply, &iter);
1050 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
1055 static DBusMessage *edbus_customlcdon(E_DBus_Object *obj, DBusMessage *msg)
1057 DBusMessageIter iter;
1062 ret = dbus_message_get_args(msg, NULL, DBUS_TYPE_INT32, &timeout,
1066 _E("fail to get custom lcd timeout %d", ret);
1071 ret = custom_lcdon(timeout);
1074 reply = dbus_message_new_method_return(msg);
1075 dbus_message_iter_init_append(reply, &iter);
1076 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
1081 static const struct edbus_method edbus_methods[] = {
1082 { "start", NULL, NULL, edbus_start },
1083 { "stop", NULL, NULL, edbus_stop },
1084 { "lockstate", "sssi", "i", edbus_lockstate },
1085 { "unlockstate", "ss", "i", edbus_unlockstate },
1086 { "changestate", "s", "i", edbus_changestate },
1087 { "getbrightness", NULL, "i", edbus_getbrightness }, /* deprecated */
1088 { "setbrightness", "i", "i", edbus_setbrightness }, /* deprecated */
1089 { "getautotone", NULL, "i", edbus_getautotone }, /* deprecated */
1090 { "setautotone", "i", "i", edbus_setautotone }, /* deprecated */
1091 { "setframerate", "ii", "i", edbus_setrefreshrate }, /* deprecated */
1092 { "getcolorblind", NULL, "i", edbus_getcolorblind }, /* deprecated */
1093 { "setcolorblind", "uttt", "i", edbus_setcolorblind }, /* deprecated */
1094 { "setautobrightnessmin", "i", "i", edbus_setautobrightnessmin },
1095 { "setlcdtimeout", "iii", "i", edbus_setlcdtimeout },
1096 { "LockScreenBgOn", "s", "i", edbus_lockscreenbgon },
1097 { "GetDisplayCount", NULL, "i", edbus_getdisplaycount },
1098 { "GetMaxBrightness",NULL, "i", edbus_getmaxbrightness },
1099 { "SetMaxBrightness", "i", "i", edbus_setmaxbrightness },
1100 { "GetBrightness", NULL, "i", edbus_getbrightness },
1101 { "SetBrightness", "i", "i", edbus_setbrightness },
1102 { "HoldBrightness", "i", "i", edbus_holdbrightness },
1103 { "ReleaseBrightness", NULL, "i", edbus_releasebrightness },
1104 { "GetAclStatus", NULL, "i", edbus_getaclstatus },
1105 { "SetAclStatus", NULL, "i", edbus_setaclstatus },
1106 { "GetAutoTone", NULL, "i", edbus_getautotone },
1107 { "SetAutoTone", "i", "i", edbus_setautotone },
1108 { "SetAutoToneForce", "i", "i", edbus_setautotoneforce },
1109 { "SetRefreshRate", "ii", "i", edbus_setrefreshrate },
1110 { "GetColorBlind", NULL, "i", edbus_getcolorblind },
1111 { "SetColorBlind", "uttt", "i", edbus_setcolorblind },
1112 { "GetHBM", NULL, "i", edbus_gethbm },
1113 { "SetHBM", "i", "i", edbus_sethbm },
1114 { "SetHBMTimeout" ,"ii", "i", edbus_sethbm_timeout },
1115 { "Dumpmode", "s", "i", edbus_dumpmode },
1116 { "SaveLog", NULL, NULL, edbus_savelog },
1117 { "PowerKeyIgnore", "i", NULL, edbus_powerkeyignore },
1118 { "PowerKeyLCDOff", NULL, "i", edbus_powerkeylcdoff },
1119 { "CustomLCDOn", "i", "i", edbus_customlcdon },
1120 /* Add methods here */
1123 static void sim_signal_handler(void *data, DBusMessage *msg)
1127 static int state = false;
1132 ret = dbus_message_is_signal(msg, TELEPHONY_INTERFACE_SIM,
1135 _E("there is no power off popup signal");
1139 ret = vconf_get_bool(VCONFKEY_LCD_BRIGHTNESS_INIT, &state);
1140 if (ret < 0 || state)
1143 dbus_error_init(&err);
1145 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &val,
1148 _E("no message : [%s:%s]", err.name, err.message);
1149 dbus_error_free(&err);
1152 if (val != SIM_CARD_NOT_PRESENT) {
1153 /* change setting : autobrightness on */
1155 vconf_set_bool(VCONFKEY_LCD_BRIGHTNESS_INIT, state);
1156 vconf_set_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT,
1157 SETTING_BRIGHTNESS_AUTOMATIC_ON);
1158 vconf_set_int(VCONFKEY_SETAPPL_LCD_BRIGHTNESS,
1159 PM_DEFAULT_BRIGHTNESS);
1160 _I("SIM card is inserted at first!");
1164 static void homescreen_signal_handler(void *data, DBusMessage *msg)
1171 ret = dbus_message_is_signal(msg, DEVICED_INTERFACE_NAME,
1174 _E("there is no homescreen signal");
1178 dbus_error_init(&err);
1180 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &screen,
1183 _E("no message : [%s:%s]", err.name, err.message);
1184 dbus_error_free(&err);
1187 _D("screen : %s", screen);
1189 if (set_alpm_screen)
1190 set_alpm_screen(screen);
1192 _E("alpm screen mode is not supported!");
1195 static void extreme_signal_handler(void *data, DBusMessage *msg)
1199 ret = dbus_message_is_signal(msg, POPUP_INTERFACE_LOWBAT,
1202 _E("there is no extreme signal");
1206 pm_status_flag &= ~BRTCH_FLAG;
1207 if (hbm_get_state != NULL && hbm_get_state() == true)
1208 hbm_set_state_with_timeout(false, 0);
1209 backlight_ops.update();
1210 _D("extreme mode : enter dim state!");
1211 if (vconf_set_int(VCONFKEY_PM_KEY_IGNORE, TRUE) != 0)
1212 _E("failed to set vconf status");
1215 static void not_extreme_signal_handler(void *data, DBusMessage *msg)
1219 ret = dbus_message_is_signal(msg, POPUP_INTERFACE_LOWBAT,
1222 _E("there is no extreme signal");
1226 _D("release extreme mode");
1227 if (vconf_set_int(VCONFKEY_PM_KEY_IGNORE, FALSE) != 0)
1228 _E("failed to set vconf status");
1231 int init_pm_dbus(void)
1235 ret = register_edbus_method(DEVICED_PATH_DISPLAY,
1236 edbus_methods, ARRAY_SIZE(edbus_methods));
1238 _E("Failed to register edbus method! %d", ret);
1242 ret = register_edbus_signal_handler(TELEPHONY_PATH,
1243 TELEPHONY_INTERFACE_SIM, SIGNAL_SIM_STATUS,
1244 sim_signal_handler);
1245 if (ret < 0 && ret != -EEXIST) {
1246 _E("Failed to register signal handler! %d", ret);
1250 ret = register_edbus_signal_handler(DEVICED_OBJECT_PATH,
1251 DEVICED_INTERFACE_NAME, SIGNAL_HOMESCREEN,
1252 homescreen_signal_handler);
1253 if (ret < 0 && ret != -EEXIST) {
1254 _E("Failed to register signal handler! %d", ret);
1258 ret = register_edbus_signal_handler(POPUP_PATH_LOWBAT,
1259 POPUP_INTERFACE_LOWBAT, SIGNAL_EXTREME,
1260 extreme_signal_handler);
1261 if (ret < 0 && ret != -EEXIST) {
1262 _E("Failed to register signal handler! %d", ret);
1265 ret = register_edbus_signal_handler(POPUP_PATH_LOWBAT,
1266 POPUP_INTERFACE_LOWBAT, SIGNAL_NOTEXTREME,
1267 not_extreme_signal_handler);
1268 if (ret < 0 && ret != -EEXIST) {
1269 _E("Failed to register signal handler! %d", ret);