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.
26 #include "dd-display.h"
28 #define DISPLAY_MAX_BRIGHTNESS 100
29 #define DISPLAY_MIN_BRIGHTNESS 1
30 #define DISPLAY_DIM_BRIGHTNESS 0
32 #define HOLDKEY_BLOCK_BIT 0x1
33 #define STANDBY_MODE_BIT 0x2
35 #define BLIND_MASK(val) ((val) & 0xFFFF)
36 #define BLIND_COLOR(a,b,c) ((BLIND_MASK((unsigned long long)(a)) << 32) | \
37 (BLIND_MASK(b) << 16) | BLIND_MASK(c))
39 #define METHOD_GET_ENHANCE_SUPPORTED "GetEnhanceSupported"
40 #define METHOD_GET_IMAGE_ENHANCE "GetImageEnhance"
41 #define METHOD_SET_IMAGE_ENHANCE "SetImageEnhance"
42 #define METHOD_SET_REFRESH_RATE "SetRefreshRate"
43 #define METHOD_GET_COLOR_BLIND "GetColorBlind"
44 #define METHOD_SET_COLOR_BLIND "SetColorBlind"
45 #define METHOD_LOCK_STATE "lockstate"
46 #define METHOD_UNLOCK_STATE "unlockstate"
47 #define METHOD_CHANGE_STATE "changestate"
48 #define METHOD_GET_DISPLAY_COUNT "GetDisplayCount"
49 #define METHOD_GET_MAX_BRIGHTNESS "GetMaxBrightness"
50 #define METHOD_GET_BRIGHTNESS "GetBrightness"
51 #define METHOD_SET_BRIGHTNESS "SetBrightness"
52 #define METHOD_HOLD_BRIGHTNESS "HoldBrightness"
53 #define METHOD_RELEASE_BRIGHTNESS "ReleaseBrightness"
54 #define METHOD_GET_ACL_STATUS "GetAclStatus"
55 #define METHOD_SET_ACL_STATUS "SetAclStatus"
56 #define METHOD_GET_AUTO_TONE "GetAutoTone"
57 #define METHOD_SET_AUTO_TONE "SetAutoTone"
58 #define METHOD_GET_ENHANCED_TOUCH "GetEnhancedTouch"
59 #define METHOD_SET_ENHANCED_TOUCH "SetEnhancedTouch"
60 #define METHOD_GET_HBM "GetHBM"
61 #define METHOD_SET_HBM "SetHBM"
62 #define METHOD_SET_HBM_TIMEOUT "SetHBMTimeout"
64 #define STR_LCD_OFF "lcdoff"
65 #define STR_LCD_DIM "lcddim"
66 #define STR_LCD_ON "lcdon"
67 #define STR_SUSPEND "suspend"
69 #define STR_STAYCURSTATE "staycurstate"
70 #define STR_GOTOSTATENOW "gotostatenow"
72 #define STR_HOLDKEYBLOCK "holdkeyblock"
73 #define STR_STANDBYMODE "standbymode"
74 #define STR_NULL "NULL"
76 #define STR_SLEEP_MARGIN "sleepmargin"
77 #define STR_RESET_TIMER "resettimer"
78 #define STR_KEEP_TIMER "keeptimer"
80 API int display_get_count(void)
86 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME,
87 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
88 METHOD_GET_DISPLAY_COUNT, NULL, NULL);
92 dbus_error_init(&err);
94 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
96 _E("no message : [%s:%s]", err.name, err.message);
97 dbus_error_free(&err);
101 dbus_message_unref(msg);
105 API int display_get_max_brightness(void)
109 ret = dbus_method_sync(DEVICED_BUS_NAME,
110 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
111 METHOD_GET_MAX_BRIGHTNESS, NULL, NULL);
113 return DISPLAY_MAX_BRIGHTNESS;
115 _D("get max brightness : %d", ret);
119 API int display_get_min_brightness(void)
121 return DISPLAY_MIN_BRIGHTNESS;
124 API int display_get_brightness(void)
130 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME,
131 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
132 METHOD_GET_BRIGHTNESS, NULL, NULL);
136 dbus_error_init(&err);
138 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
140 _E("no message : [%s:%s]", err.name, err.message);
141 dbus_error_free(&err);
145 dbus_message_unref(msg);
149 API int display_set_brightness_with_setting(int val)
155 if (val < 0 || val > 100)
158 snprintf(str_val, sizeof(str_val), "%d", val);
161 ret = dbus_method_async(DEVICED_BUS_NAME,
162 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
163 METHOD_SET_BRIGHTNESS, "i", arr);
165 _E("no message : failed to setting");
170 API int display_set_brightness(int val)
178 snprintf(str_val, sizeof(str_val), "%d", val);
181 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME,
182 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
183 METHOD_HOLD_BRIGHTNESS, "i", arr);
187 dbus_error_init(&err);
189 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
191 _E("no message : [%s:%s]", err.name, err.message);
192 dbus_error_free(&err);
196 dbus_message_unref(msg);
200 API int display_release_brightness(void)
206 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME,
207 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
208 METHOD_RELEASE_BRIGHTNESS, NULL, NULL);
212 dbus_error_init(&err);
214 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
216 _E("no message : [%s:%s]", err.name, err.message);
217 dbus_error_free(&err);
221 dbus_message_unref(msg);
225 API int display_get_acl_status(void)
231 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME,
232 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
233 METHOD_GET_ACL_STATUS, NULL, NULL);
237 dbus_error_init(&err);
239 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
241 _E("no message : [%s:%s]", err.name, err.message);
242 dbus_error_free(&err);
246 dbus_message_unref(msg);
250 API int display_set_acl_status(int val)
258 snprintf(str_val, sizeof(str_val), "%d", val);
261 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME,
262 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
263 METHOD_SET_ACL_STATUS, "i", arr);
267 dbus_error_init(&err);
269 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
271 _E("no message : [%s:%s]", err.name, err.message);
272 dbus_error_free(&err);
276 dbus_message_unref(msg);
280 API int display_get_auto_screen_tone(void)
286 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME,
287 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
288 METHOD_GET_AUTO_TONE, NULL, NULL);
292 dbus_error_init(&err);
294 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
296 _E("no message : [%s:%s]", err.name, err.message);
297 dbus_error_free(&err);
301 dbus_message_unref(msg);
305 API int display_set_auto_screen_tone(int val)
313 snprintf(str_val, sizeof(str_val), "%d", val);
316 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME,
317 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
318 METHOD_SET_AUTO_TONE, "i", arr);
322 dbus_error_init(&err);
324 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
326 _E("no message : [%s:%s]", err.name, err.message);
327 dbus_error_free(&err);
331 dbus_message_unref(msg);
335 API int display_get_image_enhance_info(void)
341 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME,
342 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
343 METHOD_GET_ENHANCE_SUPPORTED, NULL, NULL);
347 dbus_error_init(&err);
349 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
351 _E("no message : [%s:%s]", err.name, err.message);
352 dbus_error_free(&err);
356 dbus_message_unref(msg);
360 API int display_get_image_enhance(int type)
368 snprintf(str_type, sizeof(str_type), "%d", type);
371 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME,
372 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
373 METHOD_GET_IMAGE_ENHANCE, "i", arr);
377 dbus_error_init(&err);
379 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
381 _E("no message : [%s:%s]", err.name, err.message);
382 dbus_error_free(&err);
386 dbus_message_unref(msg);
390 API int display_set_image_enhance(int type, int val)
399 snprintf(str_type, sizeof(str_type), "%d", type);
401 snprintf(str_val, sizeof(str_val), "%d", val);
404 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME,
405 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
406 METHOD_SET_IMAGE_ENHANCE, "ii", arr);
410 dbus_error_init(&err);
412 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
414 _E("no message : [%s:%s]", err.name, err.message);
415 dbus_error_free(&err);
419 dbus_message_unref(msg);
423 API int display_set_frame_rate(int val)
425 return display_set_refresh_rate(REFRESH_SETTING, val);
428 API int display_set_refresh_rate(enum refresh_app app, int val)
434 snprintf(str_app, sizeof(str_app), "%d", app);
436 snprintf(str_val, sizeof(str_val), "%d", val);
439 return dbus_method_sync(DEVICED_BUS_NAME,
440 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
441 METHOD_SET_REFRESH_RATE, "ii", arr);
444 API int display_get_color_blind(void)
450 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME,
451 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
452 METHOD_GET_COLOR_BLIND, NULL, NULL);
456 dbus_error_init(&err);
458 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
460 _E("no message : [%s:%s]", err.name, err.message);
461 dbus_error_free(&err);
465 dbus_message_unref(msg);
469 API int display_set_color_blind(int enable, struct blind_color_info *info)
483 if (!!enable != enable)
486 snprintf(str_enable, sizeof(str_enable), "%d", enable);
488 snprintf(str_red, sizeof(str_red), "%llu", BLIND_COLOR(info->RrCr, info->RgCg, info->RbCb));
490 snprintf(str_grn, sizeof(str_grn), "%llu", BLIND_COLOR(info->GrMr, info->GgMg, info->GbMb));
492 snprintf(str_blu, sizeof(str_blu), "%llu", BLIND_COLOR(info->BrYr, info->BgYg, info->BbYb));
495 _D("red : %s, grn : %s, blu : %s", str_red, str_grn, str_blu);
497 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME,
498 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
499 METHOD_SET_COLOR_BLIND, "uttt", arr);
503 dbus_error_init(&err);
505 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &ret_val, DBUS_TYPE_INVALID);
507 _E("no message : [%s:%s]", err.name, err.message);
508 dbus_error_free(&err);
512 dbus_message_unref(msg);
516 static inline char *get_lcd_str(unsigned int val)
532 static void display_change_cb(void *data, DBusMessage *msg, DBusError *unused)
540 dbus_error_init(&err);
541 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &val, DBUS_TYPE_INVALID);
543 _E("no message [%s:%s]", err.name, err.message);
544 dbus_error_free(&err);
547 _D("%s-%s : %d", DEVICED_INTERFACE_DISPLAY, METHOD_CHANGE_STATE, val);
550 API int display_change_state(unsigned int s_bits)
555 p = get_lcd_str(s_bits);
560 ret = dbus_method_async_with_reply(DEVICED_BUS_NAME,
561 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
562 METHOD_CHANGE_STATE, "s", pa, display_change_cb, -1, NULL);
564 _E("no message : failed to change state");
566 _D("%s-%s : %d", DEVICED_INTERFACE_DISPLAY, METHOD_CHANGE_STATE, ret);
571 static void display_lock_cb(void *data, DBusMessage *msg, DBusError *unused)
579 dbus_error_init(&err);
580 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &val, DBUS_TYPE_INVALID);
582 _E("no message [%s:%s]", err.name, err.message);
583 dbus_error_free(&err);
586 _D("%s-%s : %d", DEVICED_INTERFACE_DISPLAY, METHOD_LOCK_STATE, val);
589 API int display_lock_state(unsigned int s_bits, unsigned int flag,
590 unsigned int timeout)
593 char str_timeout[32];
596 p = get_lcd_str(s_bits);
601 if (flag & GOTO_STATE_NOW)
602 /* if the flag is true, go to the locking state directly */
603 p = STR_GOTOSTATENOW;
605 p = STR_STAYCURSTATE;
608 if (flag & HOLD_KEY_BLOCK)
609 p = STR_HOLDKEYBLOCK;
610 else if (flag & STANDBY_MODE)
616 snprintf(str_timeout, sizeof(str_timeout), "%d", timeout);
619 ret = dbus_method_async_with_reply(DEVICED_BUS_NAME,
620 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
621 METHOD_LOCK_STATE, "sssi", pa, display_lock_cb, -1, NULL);
623 _E("no message : failed to lock state");
625 _D("%s-%s : %d", DEVICED_INTERFACE_DISPLAY, METHOD_LOCK_STATE, ret);
630 static void display_unlock_cb(void *data, DBusMessage *msg, DBusError *unused)
638 dbus_error_init(&err);
639 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &val, DBUS_TYPE_INVALID);
641 _E("no message [%s:%s]", err.name, err.message);
642 dbus_error_free(&err);
645 _D("%s-%s : %d", DEVICED_INTERFACE_DISPLAY, METHOD_UNLOCK_STATE, val);
648 API int display_unlock_state(unsigned int s_bits, unsigned int flag)
653 p = get_lcd_str(s_bits);
659 case PM_SLEEP_MARGIN:
660 p = STR_SLEEP_MARGIN;
673 ret = dbus_method_async_with_reply(DEVICED_BUS_NAME,
674 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
675 METHOD_UNLOCK_STATE, "ss", pa, display_unlock_cb, -1, NULL);
677 _E("no message : failed to unlock state");
679 _D("%s-%s : %d", DEVICED_INTERFACE_DISPLAY, METHOD_UNLOCK_STATE, ret);
684 API int display_get_enhanced_touch(void)
686 return dbus_method_sync(DEVICED_BUS_NAME,
687 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
688 METHOD_GET_ENHANCED_TOUCH, NULL, NULL);
691 API int display_set_enhanced_touch(int enable)
696 snprintf(str_enable, sizeof(str_enable), "%d", enable);
699 return dbus_method_sync(DEVICED_BUS_NAME,
700 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
701 METHOD_SET_ENHANCED_TOUCH, "i", arr);
704 API int display_get_hbm(void)
706 return dbus_method_sync(DEVICED_BUS_NAME,
707 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
708 METHOD_GET_HBM, NULL, NULL);
711 API int display_set_hbm(int enable)
716 if (enable != 0 && enable != 1)
719 snprintf(str_enable, sizeof(str_enable), "%d", enable);
722 return dbus_method_sync(DEVICED_BUS_NAME,
723 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
724 METHOD_SET_HBM, "i", arr);
727 API int display_enable_hbm(int enable, int timeout)
731 char str_timeout[32];
733 if (enable != 0 && enable != 1)
739 snprintf(str_enable, sizeof(str_enable), "%d", enable);
742 snprintf(str_timeout, sizeof(str_timeout), "%d", timeout);
743 arr[1] = str_timeout;
745 return dbus_method_sync(DEVICED_BUS_NAME,
746 DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
747 METHOD_SET_HBM_TIMEOUT, "ii", arr);