diff options
author | Yeongkyoon Lee <yeongkyoon.lee@samsung.com> | 2013-09-26 17:18:46 +0900 |
---|---|---|
committer | Yeongkyoon Lee <yeongkyoon.lee@samsung.com> | 2013-09-26 17:18:46 +0900 |
commit | 369bd032cda57187ee112a6d2acd6cade2ef0a47 (patch) | |
tree | b8163091b45c52d66323fdaab415a11256896815 | |
parent | d51f3461cecda7089a14a144fe9bc205fcdc223b (diff) | |
parent | 9bcc0f1f27acca08e4e7c31a23491fe5791203a8 (diff) | |
download | device-manager-plugin-emul-369bd032cda57187ee112a6d2acd6cade2ef0a47.tar.gz device-manager-plugin-emul-369bd032cda57187ee112a6d2acd6cade2ef0a47.tar.bz2 device-manager-plugin-emul-369bd032cda57187ee112a6d2acd6cade2ef0a47.zip |
Merge branch 'sdk-develop' into tizen
-rw-r--r-- | AUTHORS | 13 | ||||
-rw-r--r-- | CMakeLists.txt | 33 | ||||
-rw-r--r-- | LICENSE.APLv2 | 206 | ||||
-rw-r--r-- | NOTICE | 3 | ||||
-rw-r--r-- | debian/changelog | 47 | ||||
-rw-r--r-- | debian/compat | 1 | ||||
-rw-r--r-- | debian/control | 19 | ||||
-rw-r--r-- | debian/device-manager-plugin-maru.install.in | 1 | ||||
-rw-r--r-- | debian/dirs | 1 | ||||
-rwxr-xr-x | debian/rules | 132 | ||||
-rw-r--r-- | include/devman_define_node_path.h | 90 | ||||
-rw-r--r-- | packaging/device-manager-plugin-maru.manifest | 5 | ||||
-rw-r--r-- | packaging/device-manager-plugin-maru.spec | 38 | ||||
-rw-r--r-- | src/device_manager_io.c | 186 | ||||
-rw-r--r-- | src/device_manager_plugin_maru.c | 1085 |
15 files changed, 1860 insertions, 0 deletions
@@ -0,0 +1,13 @@ +YeongKyoon Lee <yeongkyoon.lee@samsung.com> +DaiYoung Kim <daiyoung777.kim@samsung.com> +SeokYeon Hwang <syeon.hwang@samsung.com> +SangJin Kim <sangjin3.kim@samsung.com> +KiTae Kim <kt920.kim@samsung.com> +JinHyung Jo <jinhyung.jo@samsung.com> +SungMin Ha <sungmin82.ha@samsung.com> +MunKyu Im <munkyu.im@samsung.com> +JiHye Kim <jihye1128.kim@samsung.com> +GiWoong Kim <giwoong.kim@samsung.com> +SooYoung Ha <yoosah.ha@samsnung.com> +HyunGoo Kang <hyungoo1.kang@samsung.com> + diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..bbdd52c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,33 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(slp_devman_plugin C) + +SET(SRCS + src/device_manager_io.c + src/device_manager_plugin_maru.c) + +IF("${CMAKE_BUILD_TYPE}" STREQUAL "") + SET(CMAKE_BUILD_TYPE "Release") +ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "") +MESSAGE("Build type: ${CMAKE_BUILD_TYPE}") + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) + +SET(CMAKE_C_FLAGS_DEBUG "-O0 -g") +SET(CMAKE_C_FLAGS_RELEASE "-O2") + +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs REQUIRED devman_plugin) + +FOREACH(flag ${pkgs_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") + +ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS}) +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS}) + +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) + +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib COMPONENT RuntimeLibraries) diff --git a/LICENSE.APLv2 b/LICENSE.APLv2 new file mode 100644 index 0000000..1d4a865 --- /dev/null +++ b/LICENSE.APLv2 @@ -0,0 +1,206 @@ +Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + + @@ -0,0 +1,3 @@ +Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. +Except as noted, this software is licensed under Apache License, Version 2. +Please, see the LICENSE.APLv2 file for Apache License Version 2, terms and conditions. diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..c54891c --- /dev/null +++ b/debian/changelog @@ -0,0 +1,47 @@ +device-manager-plugin-maru (0.0.1-6) unstable; urgency=low + + * add 'set_display_frame_rate' function pointer + * Git: slp/pkgs/d/device-manager-plugin-maru.git + * Tag: device-manager-plugin-maru_0.0.1-6 + + -- Jihye Kim <jihye1128.kim@samsung.com> Mon, 21 May 2012 21:30:37 +0900 + +device-manager-plugin-maru (0.0.1-5) unstable; urgency=low + + * change backlight-brightness and add 'set_display_frame_rate' function + * Git: slp/pkgs/d/device-manager-plugin-maru.git + * Tag: device-manager-plugin-maru_0.0.1-5 + + -- Sangjin Kim <sangjin3.kim@samsung.com> Wed, 16 May 2012 16:00:37 +0900 + +device-manager-plugin-maru (0.0.1-4) unstable; urgency=low + + * Add OBS build. + * Git: slp/pkgs/d/device-manager-plugin-maru.git + * Tag: device-manager-plugin-maru_0.0.1-4 + + -- Sangjin Kim <sangjin3.kim@samsung.com> Wed, 18 Apr 2012 13:15:37 +0900 + +device-manager-plugin-maru (0.0.1-3) unstable; urgency=low + + * Change "Architecture" of the control file as "i386" + * Git: slp/pkgs/d/device-manager-plugin-maru.git + * Tag: device-manager-plugin-maru_0.0.1-3 + + -- Dohyung Hong <don.hong@samsung.com> Thu, 08 Mar 2012 11:01:42 +0900 + +device-manager-plugin-maru (0.0.1-2) unstable; urgency=low + + * Add tag to upload source package + * Git: slp/pkgs/d/device-manager-plugin-maru.git + * Tag: device-manager-plugin-maru_0.0.1-2 + + -- Dohyung Hong <don.hong@samsung.com> Wed, 07 Mar 2012 18:04:00 +0900 + +device-manager-plugin-maru (0.0.1-1) unstable; urgency=low + + * Initial release + * Git: slp/pkgs/d/device-manager-plugin-maru.git + * Based on slp/pkgs/d/device-manager-plugin-c210.git + + -- Dohyung Hong <don.hong@samsung.com> Mon, 05 Mar 2012 15:11:57 +0900 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..45c042e --- /dev/null +++ b/debian/control @@ -0,0 +1,19 @@ +Source: device-manager-plugin-maru +Section: libs +Priority: extra +Maintainer: Dohyung Hong <don.hong@samsung.com> +Uploaders: Dohyung Hong <don.hong@samsung.com> +Build-Depends: debhelper (>= 5), libdevman-plugin-dev +Standards-Version: 3.7.2 + +Package: device-manager-plugin-maru +Section: libs +Architecture: i386 +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Samsung linux platform device manager plugin + +Package: device-manager-plugin-maru-dbg +Section: debug +Architecture: i386 +Depends: ${shlibs:Depends}, ${misc:Depends}, device-manager-plugin-maru (= ${Source-Version}) +Description: Samsung linux platform device manager plugin (unstripped) diff --git a/debian/device-manager-plugin-maru.install.in b/debian/device-manager-plugin-maru.install.in new file mode 100644 index 0000000..112242d --- /dev/null +++ b/debian/device-manager-plugin-maru.install.in @@ -0,0 +1 @@ +@PREFIX@/lib/* diff --git a/debian/dirs b/debian/dirs new file mode 100644 index 0000000..6845771 --- /dev/null +++ b/debian/dirs @@ -0,0 +1 @@ +usr/lib diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..2253047 --- /dev/null +++ b/debian/rules @@ -0,0 +1,132 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +CFLAGS ?= -Wall -g +CXXFLAGS ?= -Wall -g +LDFLAGS ?= +PREFIX ?= /usr +DATADIR ?= /opt + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 + CXXFLAGS += -O0 +else + CFLAGS += -O2 + CXXFLAGS += -O2 +endif + +LDFLAGS += -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" LDFLAGS="$(LDFLAGS)" cmake . -DCMAKE_INSTALL_PREFIX=$(PREFIX) + + touch configure-stamp + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + #docbook-to-man debian/wavplayer.sgml > wavplayer.1 + + for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ + cat $$f > $${f%.in}; \ + sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \ + sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \ + done + + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + -$(MAKE) clean + rm -rf CMakeCache.txt + rm -rf CMakeFiles + rm -rf cmake_install.cmake + rm -rf Makefile + rm -rf install_manifest.txt + rm -rf *.so + rm -rf ./pm_event/CMakeCache.txt + rm -rf ./pm_event/CMakeFiles + rm -rf ./pm_event/cmake_install.cmake + rm -rf ./pm_event/Makefile + rm -rf ./pm_event/install_manifest.txt + rm -rf ./pm_event/pm_event + + for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ + rm -f $${f%.in}; \ + done + + for f in `find $(CURDIR)/ -name "*.in"`; do \ + rm -f $${f%.in}; \ + done + + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/wavplayer. + $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples + dh_install --sourcedir=debian/tmp +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link +# dh_strip + dh_strip --dbg-package=device-manager-plugin-maru-dbg + dh_compress + dh_fixperms +# dh_perl + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure patch unpatch diff --git a/include/devman_define_node_path.h b/include/devman_define_node_path.h new file mode 100644 index 0000000..20a7d2b --- /dev/null +++ b/include/devman_define_node_path.h @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2011 - 2013 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * JiHye Kim <jihye1128.kim@samsung.com> + * YeongKyoon Lee <yeongkyoon.lee@samsung.com> + * + * 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. + */ + +#ifndef __DEVMAN_DEFINE_NODE_PATH_H +#define __DEVMAN_DEFINE_NODE_PATH_H + +#define BACKLIGHT_PATH "/sys/class/backlight/" +#define BACKLIGHT_MIN_BRIGHTNESS_PATH BACKLIGHT_PATH"%s/min_brightness" +#define BACKLIGHT_MAX_BRIGHTNESS_PATH BACKLIGHT_PATH"%s/max_brightness" +#define BACKLIGHT_BRIGHTNESS_PATH BACKLIGHT_PATH"%s/brightness" +#define BACKLIGHT_DIMMING_PATH BACKLIGHT_PATH"%s/dimming" +#define LCD_PATH "/sys/class/lcd/" +#define LCD_ACL_CONTROL_PATH LCD_PATH"%s/acl_control" +#define LCD_POWER_PATH LCD_PATH"%s/lcd_power" +#define IMAGE_ENHANCE_PATH "/sys/class/extension/mdnie/%s" +#define IMAGE_ENHANCE_PATH_INFO "/sys/class/extension/mdnie" + +//#define DISPLAY_FRAME_RATE_PATH "/sys/devices/platform/maru-display/devfreq/maru-display/max_freq" + +//#define UART_PATH "/sys/devices/platform/uart-select/path" +//#define USB_PATH "/sys/devices/platform/usb-switch/path" + +#define UART_PATH "/sys/devices/virtual/sec/switch/uart_sel" +#define USB_PATH "/sys/devices/virtual/sec/switch/usb_sel" +#define UART_PATH_TRATS "/sys/devices/platform/uart-select/path" +#define USB_PATH_TRATS "/sys/devices/platform/usb-select/path" + +#define HAPTIC_VIBETONES_LEVEL_PATH "/sys/class/haptic/vibetones/level" +#define HAPTIC_VIBETONES_LEVEL_MAX_PATH "/sys/class/haptic/vibetones/level_max" +#define HAPTIC_VIBETONES_ENABLE_PATH "/sys/class/haptic/vibetones/enable" +#define HAPTIC_VIBETONES_ONESHOT_PATH "/sys/class/haptic/vibetones/oneshot" + +#define BATTERY_CAPACITY_PATH "/sys/class/power_supply/battery/capacity" +#define BATTERY_CAPACITY_RAW_PATH "/sys/class/power_supply/battery/capacity_raw" +#define BATTERY_CHARGE_FULL_PATH "/sys/class/power_supply/battery/charge_full" +#define BATTERY_CHARGE_NOW_PATH "/sys/class/power_supply/battery/charge_now" +#define BATTERY_PRESENT_PATH "/sys/class/power_supply/battery/present" +#define BATTERY_HEALTH_PATH "/sys/class/power_supply/battery/health" + +#define JACK_CHARGER_ONLINE_PATH "/sys/devices/platform/jack/charger_online" +#define JACK_EARJACK_ONLINE_PATH "/sys/devices/platform/jack/earjack_online" +#define JACK_EARKEY_ONLINE_PATH "/sys/devices/platform/jack/earkey_online" +#define JACK_HDMI_ONLINE_PATH "/sys/devices/platform/jack/hdmi_online" +#define JACK_USB_ONLINE_PATH "/sys/devices/platform/jack/usb_online" +#define JACK_CRADLE_ONLINE_PATH "/sys/devices/platform/jack/cradle_online" +#define JACK_TVOUT_ONLINE_PATH "/sys/devices/platform/jack/tvout_online" +#define JACK_KEYBOARD_ONLINE_PATH "/sys/devices/platform/jack/keyboard_online" + +#define LEDS_TORCH_MAX_BRIGHTNESS_PATH "/sys/class/leds/leds-torch/max_brightness" +#define LEDS_TORCH_BRIGHTNESS_PATH "/sys/class/leds/leds-torch/brightness" +//#define LEDS_TORCH_MAX_BRIGHTNESS_PATH "/sys/class/camera/flash/max_brightness" +//#define LEDS_TORCH_BRIGHTNESS_PATH "/sys/class/camera/flash/rear_flash" + +#define POWER_STATE_PATH "/sys/power/state" +#define POWER_WAKEUP_COUNT_PATH "/sys/power/wakeup_count" + +#define MEMNOTIFY_NODE "/dev/memnotify" +#define MEMNOTIFY_VICTIM_TASK_PATH "/sys/class/memnotify/victim_task" +#define MEMNOTIFY_THRESHOLD_LV1_PATH "/sys/class/memnotify/threshold_lv1" +#define MEMNOTIFY_THRESHOLD_LV2_PATH "/sys/class/memnotify/threshold_lv2" + +#define TOUCH_EVENT_NODE "/dev/event2" + +#define PROCESS_MONITOR_NODE "/dev/pmon" +#define PROCESS_MONITOR_MP_PNP_PATH "/sys/class/pmon/mp_pnp" +#define PROCESS_MONITOR_MP_VIP_PATH "/sys/class/pmon/mp_vip" + +#define CPUFREQ_CPUINFO_MAX_FREQ_PATH "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" +#define CPUFREQ_CPUINFO_MIN_FREQ_PATH "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq" +#define CPUFREQ_SCALING_MAX_FREQ_PATH "/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq" +#define CPUFREQ_SCALING_MIN_FREQ_PATH "/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq" + +#endif /* __DEVMAN_DEFINE_NODE_PATH_H */ diff --git a/packaging/device-manager-plugin-maru.manifest b/packaging/device-manager-plugin-maru.manifest new file mode 100644 index 0000000..97e8c31 --- /dev/null +++ b/packaging/device-manager-plugin-maru.manifest @@ -0,0 +1,5 @@ +<manifest> + <request> + <domain name="_"/> + </request> +</manifest> diff --git a/packaging/device-manager-plugin-maru.spec b/packaging/device-manager-plugin-maru.spec new file mode 100644 index 0000000..627e6fc --- /dev/null +++ b/packaging/device-manager-plugin-maru.spec @@ -0,0 +1,38 @@ +Name: device-manager-plugin-maru +Summary: device-manager-plugin-maru +Version: 0.0.15 +Release: 1 +Group: TO_BE/FILLED_IN +License: TO_BE/FILLED_IN +Source0: %{name}-%{version}.tar.gz +Source1001: packaging/device-manager-plugin-maru.manifest +Requires(post): /sbin/ldconfig +Requires(postun): /sbin/ldconfig +BuildRequires: cmake +BuildRequires: pkgconfig(devman_plugin) + +%description +device-manager-plugin-maru. + +%prep +%setup -q + +%build +export LDFLAGS+="-Wl,--rpath=%{_libdir} -Wl,--as-needed" +%cmake . + +make + +%install +%make_install + +%post +/sbin/ldconfig + +%postun +/sbin/ldconfig + +%files +%defattr(-,root,root,-) +%{_libdir}/libslp_devman_plugin.so + diff --git a/src/device_manager_io.c b/src/device_manager_io.c new file mode 100644 index 0000000..c6a9d40 --- /dev/null +++ b/src/device_manager_io.c @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2011 - 2013 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * JiHye Kim <jihye1128.kim@samsung.com> + * YeongKyoon Lee <yeongkyoon.lee@samsung.com> + * + * 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. + */ + + +/* + * 2012-03-05 Dohyung Hong <don.hong@samsung.com> Changed package name for the maru board of emulator + */ + +#include <unistd.h> +#include <stdio.h> +#include <string.h> +#include <fcntl.h> +#include <devman_plugin_intf.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/stat.h> + +#define EXPORT_API __attribute__((visibility("default"))) + +#define BUFF_MAX 255 +#define SUCCESS 0 +#define FAIL 1 + +int sys_check_node(char *path) +{ + int fd = -1; + + fd = open(path, O_RDONLY); + + if (fd == -1) + return -1; + + close(fd); + return 0; +} + +int sys_get_node(char *path, char *node) +{ + if (0 >= snprintf(node, strlen(path) + 1, "%s", path)) + return -1; + + return 0; +} + +int sys_get_int_wo_convert(char *path, int *value) +{ + int fd = -1; + + fd = open(path, O_RDONLY); + if (fd == -1) { + return -1; + } + + if (0 > read(fd, value, sizeof(int))) { + close(fd); + return -1; + } + close (fd); + + return 0; +} + +int sys_set_int_wo_convert(char *path, int value) +{ + int fd = -1; + + fd = open(path, O_WRONLY); + if (fd == -1) { + return -1; + } + + if (0 > write(fd, &value, sizeof(int))) { + close(fd); + return -1; + } + close(fd); + + return 0; +} + +static int sys_read_buf(char *file, char *buf) +{ + int fd; + int r; + + fd = open(file, O_RDONLY); + if (fd == -1) { + return -ENOENT; + } + + r = read(fd, buf, BUFF_MAX - 1); + if ((r >= 0) && (r < BUFF_MAX)) + buf[r] = '\0'; + else { + close(fd); + return -EIO; + } + + close(fd); + return 0; +} + +static int sys_write_buf(char *file, char *buf) +{ + int fd; + int r; + + fd = open(file, O_WRONLY); + if (fd == -1) { + return -1; + } + + r = write(fd, buf, strlen(buf)); + close(fd); + if (r < 0) { + return -1; + } + + return 0; +} + +int sys_get_int(char *fname, int *val) +{ + char buf[BUFF_MAX]; + + if (sys_read_buf(fname, buf) == 0) { + *val = atoi(buf); + return 0; + } else { + *val = -1; + return -1; + } +} + +int sys_get_str(char *fname, char* str) +{ + char buf[BUFF_MAX] = {0}; + + if (sys_read_buf(fname, buf) == 0) { + strncpy(str, buf, strlen(buf)); + return 0; + } + + return -1; +} + +int sys_set_int(char *fname, int val) +{ + char buf[BUFF_MAX]; + int r = -1; + snprintf(buf, sizeof(buf), "%d", val); + + if (sys_write_buf(fname, buf) == 0) + r = 0; + + return r; +} + +int sys_set_str(char *fname, char *val) +{ + int r = -1; + + if (val != NULL) { + if (sys_write_buf(fname, val) == 0) + r = 0; + } + + return r; +} diff --git a/src/device_manager_plugin_maru.c b/src/device_manager_plugin_maru.c new file mode 100644 index 0000000..e75964a --- /dev/null +++ b/src/device_manager_plugin_maru.c @@ -0,0 +1,1085 @@ +/* + * Copyright (C) 2011 - 2013 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * JiHye Kim <jihye1128.kim@samsung.com> + * YeongKyoon Lee <yeongkyoon.lee@samsung.com> + * + * 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 <string.h> +#include <sys/types.h> +#include <stdio.h> +#include <dirent.h> +#include <devman_plugin_intf.h> + +#include "devman_define_node_path.h" + +#define EXPORT_API __attribute__((visibility("default"))) + +#define BUFF_MAX 255 +#define MAX_NAME 255 + +// TODO : checking return value +#if 0 +#define GENERATE_ACCESSORS_CHAR_RW(_suffix, _item) \ +char *OEM_sys_get_##_suffix(char* str) \ +{ \ + return sys_get_str(_item, str); \ +} \ + \ +int OEM_sys_set_##_suffix(char *str) \ +{ \ + return sys_set_str(_item, value); \ +} + +#define GENERATE_ACCESSORS_CHAR_R(_suffix, _item) \ +char *OEM_sys_get_##_suffix(char* str) \ +{ \ + return sys_get_str(_item, str); \ +} + +#define GENERATE_ACCESSORS_CHAR_W(_suffix, _item) \ +int OEM_sys_set_##_suffix(char *str) \ +{ \ + return sys_set_str(_item, str); \ +} +#endif + +/* TODO: Add APIs has (char *) params */ + +#define GENERATE_ACCESSORS_INT_RW(_suffix, _item) \ +int OEM_sys_get_##_suffix(int *value) \ +{ \ + return sys_get_int(_item, value); \ +} \ + \ +int OEM_sys_set_##_suffix(int value) \ +{ \ + return sys_set_int(_item, value); \ +} + +#define GENERATE_ACCESSORS_INT_R(_suffix, _item) \ +int OEM_sys_get_##_suffix(int *value) \ +{ \ + return sys_get_int(_item, value); \ +} + +#define GENERATE_ACCESSORS_INT_W(_suffix, _item) \ +int OEM_sys_set_##_suffix(int value) \ +{ \ + return sys_set_int(_item, value); \ +} + +/* +GENERATE_ACCESSORS_INT_R(backlight_max_brightness, BACKLIGHT_MAX_BRIGHTNESS_PATH) +GENERATE_ACCESSORS_INT_RW(backlight_brightness, BACKLIGHT_BRIGHTNESS_PATH) +GENERATE_ACCESSORS_INT_RW(backlight_acl_control, LCD_ACL_CONTROL_PATH) +GENERATE_ACCESSORS_INT_RW(lcd_power, LCD_POWER_PATH) +*/ +#if defined(DEVMGR_LOG) +#define devmgr_log(fmt, args...) \ + do { \ + printf("%s:"fmt"\n", __func__, ##args); \ + }while(0); +#else +#define devmgr_log(fmt, args...) +#endif + +enum display_type +{ + DISP_MAIN = 0, + DISP_SUB, + DISP_MAX +}; + +enum lux_status { + decrement, + no_change, + increment, +}; + +struct display_info +{ + enum display_type etype; /* FIXME:!! Main LCD or Sub LCD node */ + char bl_name[MAX_NAME]; /* backlight name */ + char lcd_name[MAX_NAME]; /* lcd name */ +}; + +#define MAX_CANDELA_CRITERION 300 +#define PWR_SAVING_CANDELA_CRITERION 20 + +/* FIXME:!! change to global_ctx */ +int lcd_index; +struct display_info disp_info[DISP_MAX]; + +int OEM_sys_get_backlight_brightness_by_lux(unsigned int lux, enum lux_status status) +{ + static int brightness = -1; + + if (status == no_change) { + if (brightness == -1) + status = increment; + else + return brightness; + } + if (status == decrement) { + switch (lux) { + case 10000 ... 0xffffffff: + brightness = 100; + break; + case 1000 ... 9999: + brightness = 80; + break; + case 75 ... 999: + brightness = 60; + break; + case 7 ... 74: + brightness = 40; + break; + case 0 ... 6: + brightness = 1; + break; + default: + return -1; + } + } else if (status == increment) { + switch (lux) { + case 15001 ... 0xffffffff: + brightness = 100; + break; + case 1501 ... 15000: + brightness = 80; + break; + case 151 ... 1500: + brightness = 60; + break; + case 16 ... 150: + brightness = 40; + break; + case 0 ... 15: + brightness = 1; + break; + default: + return -1; + } + } else + return -1; + + return brightness; +} + +static int OEM_sys_display_info(struct display_info *disp_info) +{ + struct dirent *dent; + DIR *dirp; + int i, index; + const char * bl_path = BACKLIGHT_PATH; + const char * lcd_path = LCD_PATH; + + /* Backlight */ + index = 0; + dirp = opendir(bl_path); + if (dirp) { + while(dent = readdir(dirp)) { + if (index >= DISP_MAX) { + devmgr_log("supports %d display node", DISP_MAX); + break; + } + + if (!strcmp(".", dent->d_name) || !strcmp("..", dent->d_name)) + continue; + else { + strcpy(disp_info[index].bl_name, dent->d_name); + index++; + } + } + closedir(dirp); + } + + for (i = 0; i < index; i++) + devmgr_log("bl_name[%s]", disp_info[i].bl_name); + + /* LCD */ + index = 0; + dirp = opendir(lcd_path); + if (dirp) { + while(dent = readdir(dirp)) { + if (index >= DISP_MAX) { + devmgr_log("supports %d display node", DISP_MAX); + break; + } + + if (!strcmp(".", dent->d_name) || !strcmp("..", dent->d_name)) + continue; + else { + strcpy(disp_info[index].lcd_name, dent->d_name); + index++; + } + } + closedir(dirp); + } + + for (i = 0; i < index; i++) + devmgr_log("lcd_name[%s]", disp_info[i].lcd_name); + + lcd_index = index; + + return 0; +} + +int OEM_sys_get_display_count(int *value) +{ + int ret = -1; + + /* TODO: We should implement to find out current number of display */ + *value = lcd_index; + ret = 0; + /* ********************* */ + + devmgr_log("value[%d]", *value); + + return ret; +} + +int OEM_sys_get_backlight_max_brightness(int index, int *value) +{ + int ret = -1; + char path[MAX_NAME+1]; + + if (index >= DISP_MAX) { + devmgr_log("supports %d display node", DISP_MAX); + return ret; + } + + snprintf(path, MAX_NAME, BACKLIGHT_MAX_BRIGHTNESS_PATH, disp_info[index].bl_name); + ret = sys_get_int(path, value); + devmgr_log("path[%s]value[%d]", path, *value); + + return ret; +} + +int OEM_sys_get_backlight_min_brightness(int index, int *value) +{ + int ret = -1; + char path[MAX_NAME+1]; + + if (index >= DISP_MAX) { + devmgr_log("supports %d display node", DISP_MAX); + return ret; + } + + snprintf(path, MAX_NAME, BACKLIGHT_MIN_BRIGHTNESS_PATH, disp_info[index].bl_name); + ret = sys_get_int(path, value); + devmgr_log("path[%s]value[%d]", path, *value); + + return ret; +} + +int OEM_sys_get_backlight_brightness(int index, int *value, int power_saving) +{ + int ret = -1; + char path[MAX_NAME+1]; + int max_brightness; + int pwr_saving_offset; + + if (index >= DISP_MAX) { + devmgr_log("supports %d display node", DISP_MAX); + return ret; + } + + snprintf(path, MAX_NAME, BACKLIGHT_BRIGHTNESS_PATH, disp_info[index].bl_name); + ret = sys_get_int(path, value); + devmgr_log("path[%s]value[%d]power_saving[%d]", path, *value, power_saving); + + if (power_saving){ + snprintf(path, MAX_NAME, BACKLIGHT_MAX_BRIGHTNESS_PATH, disp_info[index].bl_name); + ret = sys_get_int(path, &max_brightness); + if (ret) + { + devmgr_log("Can't read max_brightness node[%s]", path); + return ret; + } + pwr_saving_offset = (PWR_SAVING_CANDELA_CRITERION * max_brightness / MAX_CANDELA_CRITERION) + 0.5; + + if (*value > max_brightness - pwr_saving_offset) + *value = max_brightness; + else + *value = *value + pwr_saving_offset; + + devmgr_log("power_saving result[%d]", *value); + } + + return ret; +} + +int OEM_sys_set_backlight_dimming(int index, int value) +{ + /* + int ret = -1; + char path[MAX_NAME+1]; + + if (index >= DISP_MAX) { + devmgr_log("supports %d display node", DISP_MAX); + return ret; + } + + snprintf(path, MAX_NAME, BACKLIGHT_DIMMING_PATH, disp_info[index].lcd_name); + devmgr_log("path[%s]value[%d]", path, value); + ret = sys_set_int(path, value); + return ret; + */ + + // TODO : value is only 1 + return OEM_sys_set_backlight_brightness(index, 1, 0/*power_saving*/); + +} + +int OEM_sys_set_backlight_brightness(int index, int value, int power_saving) +{ + int ret = -1; + char path[MAX_NAME+1]; + int max_brightness; + int pwr_saving_offset; + + if (index >= DISP_MAX) { + devmgr_log("supports %d display node", DISP_MAX); + return ret; + } + + devmgr_log("path[%s]value[%d]power_saving[%d]", path, value, power_saving); + + if (power_saving){ + snprintf(path, MAX_NAME, BACKLIGHT_MAX_BRIGHTNESS_PATH, disp_info[index].bl_name); + ret = sys_get_int(path, &max_brightness); + if (ret) + { + devmgr_log("Can't read max_brightness node[%s]", path); + return ret; + } + pwr_saving_offset = (PWR_SAVING_CANDELA_CRITERION * max_brightness / MAX_CANDELA_CRITERION) + 0.5; + + if (value < pwr_saving_offset) + value = 0; + else + value = value - pwr_saving_offset; + + devmgr_log("power_saving result[%d]", value); + } + + snprintf(path, MAX_NAME, BACKLIGHT_BRIGHTNESS_PATH, disp_info[index].bl_name); + ret = sys_set_int(path, value); + + return ret; +} + +int OEM_sys_get_backlight_acl_control(int index, int *value) +{ + int ret = -1; + char path[MAX_NAME+1]; + + if (index >= DISP_MAX) { + devmgr_log("supports %d display node", DISP_MAX); + return ret; + } + + snprintf(path, MAX_NAME, LCD_ACL_CONTROL_PATH, disp_info[index].lcd_name); + ret = sys_get_int(path, value); + devmgr_log("path[%s]value[%d]", path, *value); + + return ret; +} + +int OEM_sys_set_backlight_acl_control(int index, int value) +{ + int ret = -1; + char path[MAX_NAME+1]; + + if (index >= DISP_MAX) { + devmgr_log("supports %d display node", DISP_MAX); + return ret; + } + + snprintf(path, MAX_NAME, LCD_ACL_CONTROL_PATH, disp_info[index].lcd_name); + devmgr_log("path[%s]value[%d]", path, value); + ret = sys_set_int(path, value); + + return ret; +} + +int OEM_sys_get_lcd_power(int index, int *value) +{ + int ret = -1; + char path[MAX_NAME+1]; + + if (index >= DISP_MAX) { + devmgr_log("supports %d display node", DISP_MAX); + return ret; + } + + snprintf(path, MAX_NAME, LCD_POWER_PATH, disp_info[index].lcd_name); + ret = sys_get_int(path, value); + devmgr_log("path[%s]value[%d]", path, *value); + + return ret; +} + +int OEM_sys_set_lcd_power(int index, int value) +{ + int ret = -1; + char path[MAX_NAME+1]; + + if (index >= DISP_MAX) { + devmgr_log("supports %d display node", DISP_MAX); + return ret; + } + + snprintf(path, MAX_NAME, LCD_POWER_PATH, disp_info[index].lcd_name); + devmgr_log("path[%s]value[%d]", path, value); + ret = sys_set_int(path, value); + + return ret; +} + +/* image_enhance */ +int OEM_sys_get_image_enhance_save(void *image_enhance) +{ + int ret = -1; + return ret; +} + +int OEM_sys_set_image_enhance_restore(void *image_enhance) +{ + int ret = -1; + return ret; +} + +int OEM_sys_get_image_enhance_mode(int *value) +{ + int ret = -1; + return ret; +} + +int OEM_sys_set_image_enhance_mode(int value) +{ + int ret = -1; + return ret; +} + +int OEM_sys_get_image_enhance_scenario(int *value) +{ + int ret = -1; + return ret; +} + +int OEM_sys_set_image_enhance_scenario(int value) +{ + int ret = -1; + return ret; +} + +int OEM_sys_get_image_enhance_tone(int *value) +{ + int ret = -1; + return ret; +} + +int OEM_sys_set_image_enhance_tone(int value) +{ + int ret = -1; + return ret; +} + +int OEM_sys_get_image_enhance_outdoor(int *value) +{ + int ret = -1; + return ret; +} + +int OEM_sys_set_image_enhance_outdoor(int value) +{ + int ret = -1; + return ret; +} + +int OEM_sys_get_image_enhance_tune(int *value) +{ + int ret = -1; + return ret; +} + +int OEM_sys_set_image_enhance_tune(int value) +{ + int ret = -1; + return ret; +} + +int OEM_sys_image_enhance_info(int *value) +{ + return 0; +} + +int OEM_sys_set_display_frame_rate(int value) +{ +/* + if(value){ + devmgr_log("Display frame rate limited to 40Hz"); + return sys_set_str(DISPLAY_FRAME_RATE_PATH, "40"); + }else{ + devmgr_log("Display frame rate change 40Hz and 60Hz"); + return sys_set_str(DISPLAY_FRAME_RATE_PATH, "60"); + } +*/ + return -1; +} + +GENERATE_ACCESSORS_INT_RW(haptic_vibetones_level, HAPTIC_VIBETONES_LEVEL_PATH) +GENERATE_ACCESSORS_INT_R(haptic_vibetones_level_max, HAPTIC_VIBETONES_LEVEL_MAX_PATH) +GENERATE_ACCESSORS_INT_W(haptic_vibetones_enable, HAPTIC_VIBETONES_ENABLE_PATH) +GENERATE_ACCESSORS_INT_W(haptic_vibetones_oneshot, HAPTIC_VIBETONES_ONESHOT_PATH) + +GENERATE_ACCESSORS_INT_R(battery_capacity, BATTERY_CAPACITY_PATH) +GENERATE_ACCESSORS_INT_R(battery_charge_full, BATTERY_CHARGE_FULL_PATH) +GENERATE_ACCESSORS_INT_R(battery_charge_now, BATTERY_CHARGE_NOW_PATH) +GENERATE_ACCESSORS_INT_R(battery_present, BATTERY_PRESENT_PATH) + +int OEM_sys_get_battery_capacity_raw(int *value) +{ + return 0; +} + +static char *health_text[] = { + "Unknown", "Good", "Overheat", "Dead", "Over voltage", + "Unspecified failure", "Cold", +}; + +int OEM_sys_get_battery_health(int *value) +{ + char buf[BUFF_MAX] = {0}; + int ret = 0; + int i = 0; + + ret = sys_get_str(BATTERY_HEALTH_PATH, buf); + if (ret != 0) { + return -1; + } + + for (i = 0; i < BATTERY_HEALTH_MAX; i++) { + if (strncmp(buf, health_text[i], strlen(health_text[i])) == 0) { + *value = i; + return 0; + } + } + + return -1; +} + +int OEM_sys_get_battery_polling_required(int *value) +{ + *value = 1; + + return 0; +} + +int OEM_sys_get_battery_support_insuspend_charging(int *value) +{ + *value = 1; + + return 0; +} + +static char uart_node_path[MAX_NAME]; +static char usb_node_path[MAX_NAME]; + +/* find uart/usb node path */ +static int OEM_sys_muic_node_path_info() +{ + int err = -1; + + err = sys_check_node(UART_PATH); + if (!err) + sys_get_node(UART_PATH, uart_node_path); + else { + err = sys_check_node(UART_PATH_TRATS); + if (err) { + devmgr_log("uart path node not found"); + return -1; + } + sys_get_node(UART_PATH_TRATS, uart_node_path); + } + + err = sys_check_node(USB_PATH); + if (!err) + sys_get_node(USB_PATH, usb_node_path); + else { + err = sys_check_node(USB_PATH_TRATS); + if (err) { + devmgr_log("usb path node not found"); + return -1; + } + sys_get_node(USB_PATH_TRATS, usb_node_path); + } + return 0; +} + +int OEM_sys_get_uart_path(int *value) +{ + char buf[BUFF_MAX] = {0}; + int ret = 0; + + ret = sys_get_str(uart_node_path, buf); + if (ret != 0) { + return -1; + } + + if (strncmp(buf, "CP", 2) == 0) { + *value = PATH_CP; + return 0; + } else if (strncmp(buf, "AP", 2) == 0) { + *value = PATH_AP; + return 0; + } + + return -1; +} + +int OEM_sys_set_uart_path(int value) +{ + switch (value) { + case PATH_CP: + return sys_set_str(uart_node_path, "CP"); + case PATH_AP: + return sys_set_str(uart_node_path, "AP"); + } + + return -1; +} + + +int OEM_sys_get_usb_path(int *value) +{ + char buf[BUFF_MAX] = {0}; + int ret = 0; + + ret = sys_get_str(usb_node_path, buf); + if (ret != 0) { + return -1; + } + + if (strncmp(buf, "PDA", 3) == 0) { + *value = PATH_AP; + return 0; + } else if (strncmp(buf, "MODEM", 5) == 0) { + *value = PATH_CP; + return 0; + } + + return -1; +} + +int OEM_sys_set_usb_path(int value) +{ + switch (value) { + case PATH_CP: + return sys_set_str(usb_node_path, "MODEM"); + case PATH_AP: + return sys_set_str(usb_node_path, "PDA"); + } + + return -1; +} + +GENERATE_ACCESSORS_INT_R(jack_charger_online, JACK_CHARGER_ONLINE_PATH) +GENERATE_ACCESSORS_INT_R(jack_earjack_online, JACK_EARJACK_ONLINE_PATH) +GENERATE_ACCESSORS_INT_R(jack_earkey_online, JACK_EARKEY_ONLINE_PATH) +GENERATE_ACCESSORS_INT_R(jack_hdmi_online, JACK_HDMI_ONLINE_PATH) +GENERATE_ACCESSORS_INT_R(jack_usb_online, JACK_USB_ONLINE_PATH) +GENERATE_ACCESSORS_INT_R(jack_cradle_online, JACK_CRADLE_ONLINE_PATH) +GENERATE_ACCESSORS_INT_R(jack_tvout_online, JACK_TVOUT_ONLINE_PATH) + +int OEM_sys_get_jack_keyboard_online(int *value) +{ + /* Currently, We don't provide SLP Based platform with keyboard I/F */ + int ret = -1; + /*return sys_get_int(JACK_KEYBOARD_ONLINE_PATH, value);*/ + return ret; +} + +int OEM_sys_get_hdmi_support(int *value) +{ + *value = 1; + + return 0; +} + +GENERATE_ACCESSORS_INT_R(leds_torch_max_brightness, LEDS_TORCH_MAX_BRIGHTNESS_PATH) +GENERATE_ACCESSORS_INT_RW(leds_torch_brightness, LEDS_TORCH_BRIGHTNESS_PATH) + +int OEM_sys_set_power_state(int value) +{ + switch (value) { + case POWER_STATE_SUSPEND: + return sys_set_str(POWER_STATE_PATH, "mem"); + case POWER_STATE_PRE_SUSPEND: + return sys_set_str(POWER_STATE_PATH, "pre_suspend"); + case POWER_STATE_POST_RESUME: + return sys_set_str(POWER_STATE_PATH, "post_resume"); + } + + return -1; +} + +GENERATE_ACCESSORS_INT_RW(power_wakeup_count, POWER_WAKEUP_COUNT_PATH) + +GENERATE_ACCESSORS_INT_W(memnotify_threshold_lv1, MEMNOTIFY_THRESHOLD_LV1_PATH) +GENERATE_ACCESSORS_INT_W(memnotify_threshold_lv2, MEMNOTIFY_THRESHOLD_LV2_PATH) + +GENERATE_ACCESSORS_INT_R(cpufreq_cpuinfo_max_freq, CPUFREQ_CPUINFO_MAX_FREQ_PATH) +GENERATE_ACCESSORS_INT_R(cpufreq_cpuinfo_min_freq, CPUFREQ_CPUINFO_MIN_FREQ_PATH) +GENERATE_ACCESSORS_INT_RW(cpufreq_scaling_max_freq, CPUFREQ_SCALING_MAX_FREQ_PATH) +GENERATE_ACCESSORS_INT_RW(cpufreq_scaling_min_freq, CPUFREQ_SCALING_MIN_FREQ_PATH) + +#define GENERATE_ACCESSORS_INT_R_NO_CONVERT(_suffix, _item) \ +int OEM_sys_get_##_suffix(int *value) \ +{ \ + return sys_get_int_wo_convert(_item, value); \ +} + +#define GENERATE_ACCESSORS_INT_W_NO_CONVERT(_suffix, _item) \ +int OEM_sys_set_##_suffix(int value) \ +{ \ + return sys_set_int_wo_convert(_item, value); \ +} + +GENERATE_ACCESSORS_INT_R_NO_CONVERT(memnotify_victim_task, MEMNOTIFY_VICTIM_TASK_PATH) +GENERATE_ACCESSORS_INT_W_NO_CONVERT(process_monitor_mp_pnp, PROCESS_MONITOR_MP_PNP_PATH) +GENERATE_ACCESSORS_INT_W_NO_CONVERT(process_monitor_mp_vip, PROCESS_MONITOR_MP_VIP_PATH) + +#define GENERATE_ACCESSORS_GET_NODE_PATH(_suffix, _item) \ +int OEM_sys_get_##_suffix(char *node) \ +{ \ + return sys_get_node(_item, node); \ +} + +GENERATE_ACCESSORS_GET_NODE_PATH(touch_event, TOUCH_EVENT_NODE) +GENERATE_ACCESSORS_GET_NODE_PATH(memnotify_node, MEMNOTIFY_NODE) +GENERATE_ACCESSORS_GET_NODE_PATH(process_monitor_node, PROCESS_MONITOR_NODE) + +#if 0 +int get_uart_path(char *value, int val) { +{ + char *tmp_buff; + + tmp_buff = sys_get_str(UART_PATH); + if (tmp_buff == NULL) + return -1; + + if (strncmp(tmp_buff, "AP", 2) == 0) { + *val = PATH_TO_PDA; + } else if (strncmp(tmp_buff, "CP", 2) == 0) { + *val = PATH_TO_MODEM; + } else { + free(tmp_buff); + return -1; + } + free(tmp_buff); + + return 0; +} + +static int set_uart_path(char *value, int val) +{ + int ret = -1; + + if (val < PATH_TO_MODEM || val > PATH_TO_PDA) { + return -1; + } + ret = + sys_set_str(UART_PATH, (val == PATH_TO_MODEM) ? "CP" : "AP"); + if(ret == 0) { + if (val == PATH_TO_MODEM) { + system("/usr/bin/save_blenv uartpath CP"); + } else { + system("/usr/bin/save_blenv uartpath AP"); + } + } + return ret; +} + +int get_usb_path(char *prop, int *val) { +{ + char *tmp_buff = NULL; + switch (prop) { + case JACK_PROP_USB_ONLINE: + case JACK_PROP_TA_ONLINE: + return generic_jack_interface_get(NULL, prop, val); + + case JACK_PROP_HDMI_ONLINE: + tmp_buff = + sys_get_str("/sys/class/i2c-adapter/i2c-5/5-0072/status"); + if (tmp_buff && (strstr(tmp_buff, "MHL connected:yes") != 0)) { + free(tmp_buff); + *val = 1; + } else { + if(tmp_buff) + free(tmp_buff); + *val = 0; + } + return 0; + case JACK_PROP_USB_PATH: + tmp_buff = sys_get_str(USB_PATH); + if (tmp_buff == NULL) + return -1; + if (strncmp(tmp_buff, usb_path_string[PATH_TO_MODEM], 2) == 0) + *val = PATH_TO_MODEM; + else + *val = PATH_TO_PDA; + + free(tmp_buff); + return 0; + } + + free(tmp_buff); + return -1; +} + +int set_usb_path(char *prop, int val); +{ + char *cur_path; + int conn; + + switch (prop) { + case JACK_PROP_USB_PATH: + break; + default: + return -1; + } + cur_path = sys_get_str(USB_PATH); + if (cur_path == NULL) + return -1; + + switch (val) { + case PATH_TO_MODEM: + case PATH_TO_PDA: + if (strncmp(cur_path, usb_path_string[val], 2) == 0) { + free(cur_path); + return 0; + } + free(cur_path); + if (generic_jack_interface_get + (NULL, JACK_USB_ONLINE_PATH, &conn) != 0) { + /*failed to get the connection status */ + return -1; + } + if (sys_set_str(USB_PATH, (char *)usb_path_string[val]) != + 0) + return -1; + if (val == PATH_TO_MODEM) { + system("/usr/bin/save_blenv usbpath CP"); + } else { + system("/usr/bin/save_blenv usbpath AP"); + } + break; + + default: + free(cur_path); + return -1; + } + + return 0; +} +#endif + +static OEM_sys_devman_plugin_interface devman_plugin_interface_emul; + +#if 0 +static const OEM_sys_devman_plugin_interface devman_plugin_interface_emul = { + OEM_sys_get_display_count, + OEM_sys_get_backlight_min_brightness, + OEM_sys_get_backlight_max_brightness, + OEM_sys_get_backlight_brightness, + OEM_sys_set_backlight_brightness, + OEM_sys_set_backlight_dimming + OEM_sys_get_backlight_acl_control, + OEM_sys_set_backlight_acl_control, + + OEM_sys_get_lcd_power, + OEM_sys_set_lcd_power, + + OEM_sys_get_image_enhance_mode, + OEM_sys_set_image_enhance_mode, + OEM_sys_get_image_enhance_scenario, + OEM_sys_set_image_enhance_scenario, + OEM_sys_get_image_enhance_tone, + OEM_sys_set_image_enhance_tone, + OEM_sys_get_image_enhance_outdoor, + OEM_sys_set_image_enhance_outdoor, + + OEM_sys_get_image_enhance_tune, + OEM_sys_set_image_enhance_tune, + OEM_sys_image_enhance_info, + + OEM_sys_set_display_frame_rate, + + OEM_sys_get_uart_path, + OEM_sys_set_uart_path, + + OEM_sys_get_usb_path, + OEM_sys_set_usb_path, + + OEM_sys_get_haptic_vibetones_level_max, + OEM_sys_get_haptic_vibetones_level, + OEM_sys_set_haptic_vibetones_level, + OEM_sys_set_haptic_vibetones_enable, + OEM_sys_set_haptic_vibetones_oneshot, + + OEM_sys_get_battery_capacity, + OEM_sys_get_battery_capacity_raw, + OEM_sys_get_battery_charge_full, + OEM_sys_get_battery_charge_now, + OEM_sys_get_battery_present, + OEM_sys_get_battery_health, + + OEM_sys_get_jack_charger_online, + OEM_sys_get_jack_earjack_online, + OEM_sys_get_jack_earkey_online, + OEM_sys_get_jack_hdmi_online, + OEM_sys_get_jack_usb_online, + OEM_sys_get_jack_cradle_online, + OEM_sys_get_jack_tvout_online, + OEM_sys_get_jack_keyboard_online, + + OEM_sys_get_leds_torch_max_brightness, + OEM_sys_get_leds_torch_brightness, + OEM_sys_set_leds_torch_brightness, + + OEM_sys_set_power_state, + + /* TODO: Should determine enum values of wakeup_count nodes */ + OEM_sys_get_power_wakeup_count, + OEM_sys_set_power_wakeup_count, + + OEM_sys_get_memnotify_node, + OEM_sys_get_memnotify_victim_task, + OEM_sys_set_memnotify_threshold_lv1, + OEM_sys_set_memnotify_threshold_lv2, + + OEM_sys_get_process_monitor_node, + OEM_sys_set_process_monitor_mp_pnp, + OEM_sys_set_process_monitor_mp_vip, + + OEM_sys_get_cpufreq_cpuinfo_max_freq, + OEM_sys_get_cpufreq_cpuinfo_min_freq, + OEM_sys_get_cpufreq_scaling_max_freq, + OEM_sys_set_cpufreq_scaling_max_freq, + OEM_sys_get_cpufreq_scaling_min_freq, + OEM_sys_set_cpufreq_scaling_min_freq +}; +#endif + +EXPORT_API const OEM_sys_devman_plugin_interface *OEM_sys_get_devman_plugin_interface() +{ + devman_plugin_interface_emul.OEM_sys_get_display_count = &OEM_sys_get_display_count; + devman_plugin_interface_emul.OEM_sys_get_backlight_min_brightness = &OEM_sys_get_backlight_min_brightness; + devman_plugin_interface_emul.OEM_sys_get_backlight_max_brightness = &OEM_sys_get_backlight_max_brightness; + devman_plugin_interface_emul.OEM_sys_get_backlight_brightness = &OEM_sys_get_backlight_brightness; + devman_plugin_interface_emul.OEM_sys_set_backlight_brightness = &OEM_sys_set_backlight_brightness; + devman_plugin_interface_emul.OEM_sys_set_backlight_dimming = &OEM_sys_set_backlight_dimming; + devman_plugin_interface_emul.OEM_sys_get_backlight_acl_control = &OEM_sys_get_backlight_acl_control; + devman_plugin_interface_emul.OEM_sys_set_backlight_acl_control = &OEM_sys_set_backlight_acl_control; + + devman_plugin_interface_emul.OEM_sys_get_lcd_power = &OEM_sys_get_lcd_power; + devman_plugin_interface_emul.OEM_sys_set_lcd_power = &OEM_sys_set_lcd_power; + + devman_plugin_interface_emul.OEM_sys_get_image_enhance_mode = &OEM_sys_get_image_enhance_mode; + devman_plugin_interface_emul.OEM_sys_set_image_enhance_mode = &OEM_sys_set_image_enhance_mode; + devman_plugin_interface_emul.OEM_sys_get_image_enhance_scenario = &OEM_sys_get_image_enhance_scenario; + devman_plugin_interface_emul.OEM_sys_set_image_enhance_scenario = &OEM_sys_set_image_enhance_scenario; + devman_plugin_interface_emul.OEM_sys_get_image_enhance_tone = &OEM_sys_get_image_enhance_tone; + devman_plugin_interface_emul.OEM_sys_set_image_enhance_tone = &OEM_sys_set_image_enhance_tone; + devman_plugin_interface_emul.OEM_sys_get_image_enhance_outdoor = &OEM_sys_get_image_enhance_outdoor; + devman_plugin_interface_emul.OEM_sys_set_image_enhance_outdoor = &OEM_sys_set_image_enhance_outdoor; + + devman_plugin_interface_emul.OEM_sys_get_image_enhance_tune = &OEM_sys_get_image_enhance_tune; + devman_plugin_interface_emul.OEM_sys_set_image_enhance_tune = &OEM_sys_set_image_enhance_tune; + + devman_plugin_interface_emul.OEM_sys_image_enhance_info = &OEM_sys_image_enhance_info; + + devman_plugin_interface_emul.OEM_sys_set_display_frame_rate = &OEM_sys_set_display_frame_rate; + + devman_plugin_interface_emul.OEM_sys_get_uart_path = &OEM_sys_get_uart_path; + devman_plugin_interface_emul.OEM_sys_set_uart_path = &OEM_sys_set_uart_path; + + devman_plugin_interface_emul.OEM_sys_get_usb_path = &OEM_sys_get_usb_path; + devman_plugin_interface_emul.OEM_sys_set_usb_path = &OEM_sys_set_usb_path; + + devman_plugin_interface_emul.OEM_sys_get_haptic_vibetones_level_max = &OEM_sys_get_haptic_vibetones_level_max; + devman_plugin_interface_emul.OEM_sys_get_haptic_vibetones_level = &OEM_sys_get_haptic_vibetones_level; + devman_plugin_interface_emul.OEM_sys_set_haptic_vibetones_level = &OEM_sys_set_haptic_vibetones_level; + devman_plugin_interface_emul.OEM_sys_set_haptic_vibetones_enable = &OEM_sys_set_haptic_vibetones_enable; + devman_plugin_interface_emul.OEM_sys_set_haptic_vibetones_oneshot = &OEM_sys_set_haptic_vibetones_oneshot; + + devman_plugin_interface_emul.OEM_sys_get_battery_capacity = &OEM_sys_get_battery_capacity; + devman_plugin_interface_emul.OEM_sys_get_battery_capacity_raw = &OEM_sys_get_battery_capacity_raw; + devman_plugin_interface_emul.OEM_sys_get_battery_charge_full = &OEM_sys_get_battery_charge_full; + devman_plugin_interface_emul.OEM_sys_get_battery_charge_now = &OEM_sys_get_battery_charge_now; + devman_plugin_interface_emul.OEM_sys_get_battery_present = &OEM_sys_get_battery_present; + devman_plugin_interface_emul.OEM_sys_get_battery_health = &OEM_sys_get_battery_health; + devman_plugin_interface_emul.OEM_sys_get_battery_polling_required = &OEM_sys_get_battery_polling_required; + devman_plugin_interface_emul.OEM_sys_get_battery_support_insuspend_charging = &OEM_sys_get_battery_support_insuspend_charging; + + devman_plugin_interface_emul.OEM_sys_get_jack_charger_online = &OEM_sys_get_jack_charger_online; + devman_plugin_interface_emul.OEM_sys_get_jack_earjack_online = &OEM_sys_get_jack_earjack_online; + devman_plugin_interface_emul.OEM_sys_get_jack_earkey_online = &OEM_sys_get_jack_earkey_online; + devman_plugin_interface_emul.OEM_sys_get_jack_hdmi_online = &OEM_sys_get_jack_hdmi_online; + devman_plugin_interface_emul.OEM_sys_get_jack_usb_online = &OEM_sys_get_jack_usb_online; + devman_plugin_interface_emul.OEM_sys_get_jack_cradle_online = &OEM_sys_get_jack_cradle_online; + devman_plugin_interface_emul.OEM_sys_get_jack_tvout_online = &OEM_sys_get_jack_tvout_online; + devman_plugin_interface_emul.OEM_sys_get_jack_keyboard_online = &OEM_sys_get_jack_keyboard_online; + + devman_plugin_interface_emul.OEM_sys_get_hdmi_support = &OEM_sys_get_hdmi_support; + + devman_plugin_interface_emul.OEM_sys_get_leds_torch_max_brightness = &OEM_sys_get_leds_torch_max_brightness; + devman_plugin_interface_emul.OEM_sys_get_leds_torch_brightness = &OEM_sys_get_leds_torch_brightness; + devman_plugin_interface_emul.OEM_sys_set_leds_torch_brightness = &OEM_sys_set_leds_torch_brightness; + + devman_plugin_interface_emul.OEM_sys_set_power_state = &OEM_sys_set_power_state; + + /* TODO: Should determine enum values of wakeup_count nodes */ + devman_plugin_interface_emul.OEM_sys_get_power_wakeup_count = &OEM_sys_get_power_wakeup_count; + devman_plugin_interface_emul.OEM_sys_set_power_wakeup_count = &OEM_sys_set_power_wakeup_count; + + devman_plugin_interface_emul.OEM_sys_get_memnotify_node = &OEM_sys_get_memnotify_node; + devman_plugin_interface_emul.OEM_sys_get_memnotify_victim_task = &OEM_sys_get_memnotify_victim_task; + devman_plugin_interface_emul.OEM_sys_set_memnotify_threshold_lv1 = &OEM_sys_set_memnotify_threshold_lv1; + devman_plugin_interface_emul.OEM_sys_set_memnotify_threshold_lv2 = &OEM_sys_set_memnotify_threshold_lv2; + + devman_plugin_interface_emul.OEM_sys_get_process_monitor_node = &OEM_sys_get_process_monitor_node; + devman_plugin_interface_emul.OEM_sys_set_process_monitor_mp_pnp = &OEM_sys_set_process_monitor_mp_pnp; + devman_plugin_interface_emul.OEM_sys_set_process_monitor_mp_vip = &OEM_sys_set_process_monitor_mp_vip; + + devman_plugin_interface_emul.OEM_sys_get_cpufreq_cpuinfo_max_freq = &OEM_sys_get_cpufreq_cpuinfo_max_freq; + devman_plugin_interface_emul.OEM_sys_get_cpufreq_cpuinfo_min_freq = &OEM_sys_get_cpufreq_cpuinfo_min_freq; + devman_plugin_interface_emul.OEM_sys_get_cpufreq_scaling_max_freq = &OEM_sys_get_cpufreq_scaling_max_freq; + devman_plugin_interface_emul.OEM_sys_set_cpufreq_scaling_max_freq = &OEM_sys_set_cpufreq_scaling_max_freq; + devman_plugin_interface_emul.OEM_sys_get_cpufreq_scaling_min_freq = &OEM_sys_get_cpufreq_scaling_min_freq; + devman_plugin_interface_emul.OEM_sys_set_cpufreq_scaling_min_freq = &OEM_sys_set_cpufreq_scaling_min_freq; + + devman_plugin_interface_emul.OEM_sys_get_backlight_brightness_by_lux = &OEM_sys_get_backlight_brightness_by_lux; + OEM_sys_display_info(disp_info); + OEM_sys_muic_node_path_info(); + + return &devman_plugin_interface_emul; +} |