2 Copyright 2012 Samsung Electronics Co., Ltd
4 Licensed under the Flora License, Version 1.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
8 http://www.tizenopensource.org/license
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
18 #include <sys/types.h>
21 #include <devman_plugin_intf.h>
23 #include "devman_define_node_path.h"
25 #define EXPORT_API __attribute__((visibility("default")))
30 #define GENERATE_ACCESSORS_CHAR_RW(_suffix, _item) \
31 char *OEM_sys_get_##_suffix() \
33 return sys_get_str(_item); \
36 int OEM_sys_set_##_suffix(char *str) \
38 return sys_set_str(_item, value); \
41 #define GENERATE_ACCESSORS_CHAR_R(_suffix, _item) \
42 char *OEM_sys_get_##_suffix() \
44 return sys_get_str(_item); \
47 #define GENERATE_ACCESSORS_CHAR_W(_suffix, _item) \
48 int OEM_sys_set_##_suffix(char *str) \
50 return sys_set_str(_item, str); \
53 /* TODO: Add APIs has (char *) params */
55 #define GENERATE_ACCESSORS_INT_RW(_suffix, _item) \
56 int OEM_sys_get_##_suffix(int *value) \
58 return sys_get_int(_item, value); \
61 int OEM_sys_set_##_suffix(int value) \
63 return sys_set_int(_item, value); \
66 #define GENERATE_ACCESSORS_INT_R(_suffix, _item) \
67 int OEM_sys_get_##_suffix(int *value) \
69 return sys_get_int(_item, value); \
72 #define GENERATE_ACCESSORS_INT_W(_suffix, _item) \
73 int OEM_sys_set_##_suffix(int value) \
75 return sys_set_int(_item, value); \
79 GENERATE_ACCESSORS_INT_R(backlight_max_brightness, BACKLIGHT_MAX_BRIGHTNESS_PATH)
80 GENERATE_ACCESSORS_INT_RW(backlight_brightness, BACKLIGHT_BRIGHTNESS_PATH)
81 GENERATE_ACCESSORS_INT_RW(backlight_acl_control, LCD_ACL_CONTROL_PATH)
82 GENERATE_ACCESSORS_INT_RW(lcd_power, LCD_POWER_PATH)
84 #if defined(DEVMGR_LOG)
85 #define devmgr_log(fmt, args...) \
87 printf("%s:"fmt"\n", __func__, ##args); \
90 #define devmgr_log(fmt, args...)
102 enum display_type etype; /* FIXME:!! Main LCD or Sub LCD node */
103 char bl_name[MAX_NAME]; /* backlight name */
104 char lcd_name[MAX_NAME]; /* lcd name */
107 /* FIXME:!! change to global_ctx */
109 struct display_info disp_info[DISP_MAX];
111 static int OEM_sys_display_info(struct display_info *disp_info)
116 const char * bl_path = BACKLIGHT_PATH;
117 const char * lcd_path = LCD_PATH;
121 dirp = opendir(bl_path);
123 while(dent = readdir(dirp)) {
124 if (index >= DISP_MAX) {
125 devmgr_log("supports %d display node", DISP_MAX);
129 if (!strcmp(".", dent->d_name) || !strcmp("..", dent->d_name))
132 strcpy(disp_info[index].bl_name, dent->d_name);
139 for (i = 0; i < index; i++)
140 devmgr_log("bl_name[%s]", disp_info[i].bl_name);
144 dirp = opendir(lcd_path);
146 while(dent = readdir(dirp)) {
147 if (index >= DISP_MAX) {
148 devmgr_log("supports %d display node", DISP_MAX);
152 if (!strcmp(".", dent->d_name) || !strcmp("..", dent->d_name))
155 strcpy(disp_info[index].lcd_name, dent->d_name);
162 for (i = 0; i < index; i++)
163 devmgr_log("lcd_name[%s]", disp_info[i].lcd_name);
168 int OEM_sys_get_display_count(int *value)
172 /* TODO: We should implement to find out current number of display */
175 /* ********************* */
177 devmgr_log("value[%d]", *value);
182 int OEM_sys_get_backlight_max_brightness(int index, int *value)
185 char path[MAX_NAME+1];
187 if (index >= DISP_MAX) {
188 devmgr_log("supports %d display node", DISP_MAX);
192 snprintf(path, MAX_NAME, BACKLIGHT_MAX_BRIGHTNESS_PATH, disp_info[index].bl_name);
193 ret = sys_get_int(path, value);
194 devmgr_log("path[%s]value[%d]", path, *value);
199 int OEM_sys_get_backlight_brightness(int index, int *value)
202 char path[MAX_NAME+1];
204 if (index >= DISP_MAX) {
205 devmgr_log("supports %d display node", DISP_MAX);
209 snprintf(path, MAX_NAME, BACKLIGHT_BRIGHTNESS_PATH, disp_info[index].bl_name);
210 ret = sys_get_int(path, value);
211 devmgr_log("path[%s]value[%d]", path, *value);
216 int OEM_sys_set_backlight_brightness(int index, int value)
219 char path[MAX_NAME+1];
221 if (index >= DISP_MAX) {
222 devmgr_log("supports %d display node", DISP_MAX);
226 snprintf(path, MAX_NAME, BACKLIGHT_BRIGHTNESS_PATH, disp_info[index].bl_name);
227 devmgr_log("path[%s]value[%d]", path, value);
228 ret = sys_set_int(path, value);
233 int OEM_sys_get_backlight_acl_control(int index, int *value)
236 char path[MAX_NAME+1];
238 if (index >= DISP_MAX) {
239 devmgr_log("supports %d display node", DISP_MAX);
243 snprintf(path, MAX_NAME, LCD_ACL_CONTROL_PATH, disp_info[index].lcd_name);
244 ret = sys_get_int(path, value);
245 devmgr_log("path[%s]value[%d]", path, *value);
250 int OEM_sys_set_backlight_acl_control(int index, int value)
253 char path[MAX_NAME+1];
255 if (index >= DISP_MAX) {
256 devmgr_log("supports %d display node", DISP_MAX);
260 snprintf(path, MAX_NAME, LCD_ACL_CONTROL_PATH, disp_info[index].lcd_name);
261 devmgr_log("path[%s]value[%d]", path, value);
262 ret = sys_set_int(path, value);
267 int OEM_sys_get_lcd_power(int index, int *value)
270 char path[MAX_NAME+1];
272 if (index >= DISP_MAX) {
273 devmgr_log("supports %d display node", DISP_MAX);
277 snprintf(path, MAX_NAME, LCD_POWER_PATH, disp_info[index].lcd_name);
278 ret = sys_get_int(path, value);
279 devmgr_log("path[%s]value[%d]", path, *value);
284 int OEM_sys_set_lcd_power(int index, int value)
287 char path[MAX_NAME+1];
289 if (index >= DISP_MAX) {
290 devmgr_log("supports %d display node", DISP_MAX);
294 snprintf(path, MAX_NAME, LCD_POWER_PATH, disp_info[index].lcd_name);
295 devmgr_log("path[%s]value[%d]", path, value);
296 ret = sys_set_int(path, value);
302 int OEM_sys_get_image_enhance_save(void *image_enhance)
308 int OEM_sys_set_image_enhance_restore(void *image_enhance)
314 int OEM_sys_get_image_enhance_mode(int *value)
320 int OEM_sys_set_image_enhance_mode(int value)
326 int OEM_sys_get_image_enhance_scenario(int *value)
332 int OEM_sys_set_image_enhance_scenario(int value)
338 int OEM_sys_get_image_enhance_tone(int *value)
344 int OEM_sys_set_image_enhance_tone(int value)
350 int OEM_sys_get_image_enhance_outdoor(int *value)
356 int OEM_sys_set_image_enhance_outdoor(int value)
362 int OEM_sys_get_image_enhance_tune(int *value)
368 int OEM_sys_set_image_enhance_tune(int value)
374 GENERATE_ACCESSORS_INT_RW(haptic_vibetones_level, HAPTIC_VIBETONES_LEVEL_PATH)
375 GENERATE_ACCESSORS_INT_R(haptic_vibetones_level_max, HAPTIC_VIBETONES_LEVEL_MAX_PATH)
376 GENERATE_ACCESSORS_INT_W(haptic_vibetones_enable, HAPTIC_VIBETONES_ENABLE_PATH)
377 GENERATE_ACCESSORS_INT_W(haptic_vibetones_oneshot, HAPTIC_VIBETONES_ONESHOT_PATH)
379 GENERATE_ACCESSORS_INT_R(battery_capacity, BATTERY_CAPACITY_PATH)
380 GENERATE_ACCESSORS_INT_R(battery_charge_full, BATTERY_CHARGE_FULL_PATH)
381 GENERATE_ACCESSORS_INT_R(battery_charge_now, BATTERY_CHARGE_NOW_PATH)
382 GENERATE_ACCESSORS_INT_R(battery_present, BATTERY_PRESENT_PATH)
384 static char *health_text[] = {
385 "Unknown", "Good", "Overheat", "Dead", "Over voltage",
386 "Unspecified failure", "Cold",
389 int OEM_sys_get_battery_health(int *value)
394 buf = sys_get_str(BATTERY_HEALTH_PATH);
399 for (i = 0; i < BATTERY_HEALTH_MAX; i++) {
400 if (strncmp(buf, health_text[i], strlen(health_text[i])) == 0) {
409 int OEM_sys_get_uart_path(int *value)
413 buf = sys_get_str(UART_PATH);
418 if (strncmp(buf, "CP", 2) == 0) {
421 } else if (strncmp(buf, "AP", 2) == 0) {
429 int OEM_sys_set_uart_path(int value)
433 return sys_set_str(UART_PATH, "CP");
435 return sys_set_str(UART_PATH, "AP");
442 int OEM_sys_get_usb_path(int *value)
446 buf = sys_get_str(USB_PATH);
451 if (strncmp(buf, "AP", 2) == 0) {
454 } else if (strncmp(buf, "CP", 2) == 0) {
462 int OEM_sys_set_usb_path(int value)
466 return sys_set_str(USB_PATH, "CP");
468 return sys_set_str(USB_PATH, "AP");
474 GENERATE_ACCESSORS_INT_R(jack_charger_online, JACK_CHARGER_ONLINE_PATH)
475 GENERATE_ACCESSORS_INT_R(jack_earjack_online, JACK_EARJACK_ONLINE_PATH)
476 GENERATE_ACCESSORS_INT_R(jack_earkey_online, JACK_EARKEY_ONLINE_PATH)
477 GENERATE_ACCESSORS_INT_R(jack_hdmi_online, JACK_HDMI_ONLINE_PATH)
478 GENERATE_ACCESSORS_INT_R(jack_usb_online, JACK_USB_ONLINE_PATH)
479 GENERATE_ACCESSORS_INT_R(jack_cradle_online, JACK_CRADLE_ONLINE_PATH)
480 GENERATE_ACCESSORS_INT_R(jack_tvout_online, JACK_TVOUT_ONLINE_PATH)
482 int OEM_sys_get_jack_keyboard_online(int *value)
484 /* Currently, We don't provide SLP Based platform with keyboard I/F */
486 /*return sys_get_int(JACK_KEYBOARD_ONLINE_PATH, value);*/
490 GENERATE_ACCESSORS_INT_R(leds_torch_max_brightness, LEDS_TORCH_MAX_BRIGHTNESS_PATH)
491 GENERATE_ACCESSORS_INT_RW(leds_torch_brightness, LEDS_TORCH_BRIGHTNESS_PATH)
493 int OEM_sys_set_power_state(int value)
496 case POWER_STATE_SUSPEND:
497 return sys_set_str(POWER_STATE_PATH, "mem");
503 GENERATE_ACCESSORS_INT_RW(power_wakeup_count, POWER_WAKEUP_COUNT_PATH)
505 GENERATE_ACCESSORS_INT_W(memnotify_threshold_lv1, MEMNOTIFY_THRESHOLD_LV1_PATH)
506 GENERATE_ACCESSORS_INT_W(memnotify_threshold_lv2, MEMNOTIFY_THRESHOLD_LV2_PATH)
508 GENERATE_ACCESSORS_INT_R(cpufreq_cpuinfo_max_freq, CPUFREQ_CPUINFO_MAX_FREQ_PATH)
509 GENERATE_ACCESSORS_INT_R(cpufreq_cpuinfo_min_freq, CPUFREQ_CPUINFO_MIN_FREQ_PATH)
510 GENERATE_ACCESSORS_INT_RW(cpufreq_scaling_max_freq, CPUFREQ_SCALING_MAX_FREQ_PATH)
511 GENERATE_ACCESSORS_INT_RW(cpufreq_scaling_min_freq, CPUFREQ_SCALING_MIN_FREQ_PATH)
513 #define GENERATE_ACCESSORS_INT_R_NO_CONVERT(_suffix, _item) \
514 int OEM_sys_get_##_suffix(int *value) \
516 return sys_get_int_wo_convert(_item, value); \
519 #define GENERATE_ACCESSORS_INT_W_NO_CONVERT(_suffix, _item) \
520 int OEM_sys_set_##_suffix(int value) \
522 return sys_set_int_wo_convert(_item, value); \
525 GENERATE_ACCESSORS_INT_R_NO_CONVERT(memnotify_victim_task, MEMNOTIFY_VICTIM_TASK_PATH)
526 GENERATE_ACCESSORS_INT_W_NO_CONVERT(process_monitor_mp_pnp, PROCESS_MONITOR_MP_PNP_PATH)
527 GENERATE_ACCESSORS_INT_W_NO_CONVERT(process_monitor_mp_vip, PROCESS_MONITOR_MP_VIP_PATH)
529 #define GENERATE_ACCESSORS_GET_NODE_PATH(_suffix, _item) \
530 int OEM_sys_get_##_suffix(char *node) \
532 return sys_get_node(_item, node); \
535 GENERATE_ACCESSORS_GET_NODE_PATH(touch_event, TOUCH_EVENT_NODE)
536 GENERATE_ACCESSORS_GET_NODE_PATH(memnotify_node, MEMNOTIFY_NODE)
537 GENERATE_ACCESSORS_GET_NODE_PATH(process_monitor_node, PROCESS_MONITOR_NODE)
540 int get_uart_path(char *value, int val) {
544 tmp_buff = sys_get_str(UART_PATH);
545 if (tmp_buff == NULL)
548 if (strncmp(tmp_buff, "AP", 2) == 0) {
550 } else if (strncmp(tmp_buff, "CP", 2) == 0) {
551 *val = PATH_TO_MODEM;
561 static int set_uart_path(char *value, int val)
565 if (val < PATH_TO_MODEM || val > PATH_TO_PDA) {
569 sys_set_str(UART_PATH, (val == PATH_TO_MODEM) ? "CP" : "AP");
571 if (val == PATH_TO_MODEM) {
572 system("/usr/bin/save_blenv uartpath CP");
574 system("/usr/bin/save_blenv uartpath AP");
580 int get_usb_path(char *prop, int *val) {
582 char *tmp_buff = NULL;
584 case JACK_PROP_USB_ONLINE:
585 case JACK_PROP_TA_ONLINE:
586 return generic_jack_interface_get(NULL, prop, val);
588 case JACK_PROP_HDMI_ONLINE:
590 sys_get_str("/sys/class/i2c-adapter/i2c-5/5-0072/status");
591 if (tmp_buff && (strstr(tmp_buff, "MHL connected:yes") != 0)) {
600 case JACK_PROP_USB_PATH:
601 tmp_buff = sys_get_str(USB_PATH);
602 if (tmp_buff == NULL)
604 if (strncmp(tmp_buff, usb_path_string[PATH_TO_MODEM], 2) == 0)
605 *val = PATH_TO_MODEM;
617 int set_usb_path(char *prop, int val);
623 case JACK_PROP_USB_PATH:
628 cur_path = sys_get_str(USB_PATH);
629 if (cur_path == NULL)
635 if (strncmp(cur_path, usb_path_string[val], 2) == 0) {
640 if (generic_jack_interface_get
641 (NULL, JACK_USB_ONLINE_PATH, &conn) != 0) {
642 /*failed to get the connection status */
645 if (sys_set_str(USB_PATH, (char *)usb_path_string[val]) !=
648 if (val == PATH_TO_MODEM) {
649 system("/usr/bin/save_blenv usbpath CP");
651 system("/usr/bin/save_blenv usbpath AP");
664 static const OEM_sys_devman_plugin_interface devman_plugin_interface_target = {
665 OEM_sys_get_display_count,
666 OEM_sys_get_backlight_max_brightness,
667 OEM_sys_get_backlight_brightness,
668 OEM_sys_set_backlight_brightness,
669 OEM_sys_get_backlight_acl_control,
670 OEM_sys_set_backlight_acl_control,
672 OEM_sys_get_lcd_power,
673 OEM_sys_set_lcd_power,
675 OEM_sys_get_image_enhance_mode,
676 OEM_sys_set_image_enhance_mode,
677 OEM_sys_get_image_enhance_scenario,
678 OEM_sys_set_image_enhance_scenario,
679 OEM_sys_get_image_enhance_tone,
680 OEM_sys_set_image_enhance_tone,
681 OEM_sys_get_image_enhance_outdoor,
682 OEM_sys_set_image_enhance_outdoor,
684 OEM_sys_get_image_enhance_tune,
685 OEM_sys_set_image_enhance_tune,
687 OEM_sys_get_uart_path,
688 OEM_sys_set_uart_path,
690 OEM_sys_get_usb_path,
691 OEM_sys_set_usb_path,
693 OEM_sys_get_haptic_vibetones_level_max,
694 OEM_sys_get_haptic_vibetones_level,
695 OEM_sys_set_haptic_vibetones_level,
696 OEM_sys_set_haptic_vibetones_enable,
697 OEM_sys_set_haptic_vibetones_oneshot,
699 OEM_sys_get_battery_capacity,
700 OEM_sys_get_battery_charge_full,
701 OEM_sys_get_battery_charge_now,
702 OEM_sys_get_battery_present,
703 OEM_sys_get_battery_health,
705 OEM_sys_get_jack_charger_online,
706 OEM_sys_get_jack_earjack_online,
707 OEM_sys_get_jack_earkey_online,
708 OEM_sys_get_jack_hdmi_online,
709 OEM_sys_get_jack_usb_online,
710 OEM_sys_get_jack_cradle_online,
711 OEM_sys_get_jack_tvout_online,
712 OEM_sys_get_jack_keyboard_online,
714 OEM_sys_get_leds_torch_max_brightness,
715 OEM_sys_get_leds_torch_brightness,
716 OEM_sys_set_leds_torch_brightness,
718 OEM_sys_set_power_state,
720 /* TODO: Should determine enum values of wakeup_count nodes */
721 OEM_sys_get_power_wakeup_count,
722 OEM_sys_set_power_wakeup_count,
724 OEM_sys_get_memnotify_node,
725 OEM_sys_get_memnotify_victim_task,
726 OEM_sys_set_memnotify_threshold_lv1,
727 OEM_sys_set_memnotify_threshold_lv2,
729 OEM_sys_get_process_monitor_node,
730 OEM_sys_set_process_monitor_mp_pnp,
731 OEM_sys_set_process_monitor_mp_vip,
733 OEM_sys_get_cpufreq_cpuinfo_max_freq,
734 OEM_sys_get_cpufreq_cpuinfo_min_freq,
735 OEM_sys_get_cpufreq_scaling_max_freq,
736 OEM_sys_set_cpufreq_scaling_max_freq,
737 OEM_sys_get_cpufreq_scaling_min_freq,
738 OEM_sys_set_cpufreq_scaling_min_freq
741 EXPORT_API const OEM_sys_devman_plugin_interface *OEM_sys_get_devman_plugin_interface()
743 OEM_sys_display_info(disp_info);
744 return &devman_plugin_interface_target;