tizen 2.3.1 release submit/tizen_2.3.1/20150915.075720 tizen_2.3.1_release
authorjk7744.park <jk7744.park@samsung.com>
Tue, 8 Sep 2015 13:09:10 +0000 (22:09 +0900)
committerjk7744.park <jk7744.park@samsung.com>
Tue, 8 Sep 2015 13:09:10 +0000 (22:09 +0900)
44 files changed:
AUTHORS [deleted file]
CMakeLists.txt
COPYING [deleted file]
LICENSE [new file with mode: 0755]
TC/testcase/tslist
TC/testcase/utc_system_device_battery.c
TC/testcase/utc_system_device_brightness.c
TC/testcase/utc_system_device_cpu.c [new file with mode: 0644]
TC/testcase/utc_system_device_flash.c [new file with mode: 0644]
TC/testcase/utc_system_device_memory.c [new file with mode: 0644]
capi-system-device.pc.in
debian/README [deleted file]
debian/capi-system-device-dev.install [deleted file]
debian/capi-system-device-dev.postinst [deleted file]
debian/capi-system-device.install [deleted file]
debian/capi-system-device.postinst [deleted file]
debian/changelog [deleted file]
debian/compat [deleted file]
debian/control [deleted file]
debian/rules [deleted file]
doc/device_doc.h [new file with mode: 0755]
include/battery.h [new file with mode: 0755]
include/callback.h [new file with mode: 0755]
include/device-error.h [new file with mode: 0755]
include/device.h
include/display.h [new file with mode: 0755]
include/haptic.h [new file with mode: 0755]
include/led.h [new file with mode: 0755]
include/power.h [new file with mode: 0755]
packaging/capi-system-device.manifest [new file with mode: 0644]
packaging/capi-system-device.spec
src/battery.c [new file with mode: 0644]
src/callback.c [new file with mode: 0644]
src/common.h [new file with mode: 0644]
src/cpu.c [new file with mode: 0644]
src/dbus.c [new file with mode: 0644]
src/dbus.h [new file with mode: 0644]
src/device.c
src/display.c [new file with mode: 0644]
src/haptic.c [new file with mode: 0644]
src/led.c [new file with mode: 0644]
src/list.h [new file with mode: 0644]
src/memory.c [new file with mode: 0644]
src/power.c [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
deleted file mode 100644 (file)
index 0a63eea..0000000
--- a/AUTHORS
+++ /dev/null
@@ -1 +0,0 @@
-Pius Lee <pius.lee@samsung.com>
index 9d395bb..c222b82 100755 (executable)
@@ -10,7 +10,7 @@ SET(PREFIX ${CMAKE_INSTALL_PREFIX})
 SET(INC_DIR include)
 INCLUDE_DIRECTORIES(${INC_DIR})
 
-SET(dependents "devman dlog vconf capi-base-common")
+SET(dependents "deviced dlog vconf dbus-1 dbus-glib-1 capi-base-common capi-system-info")
 SET(pc_dependents "capi-base-common")
 
 INCLUDE(FindPkgConfig)
@@ -27,7 +27,7 @@ IF("${ARCH}" STREQUAL "arm")
 ENDIF("${ARCH}" STREQUAL "arm")
 
 ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
-ADD_DEFINITIONS("-DTIZEN_DEBUG")
+ADD_DEFINITIONS("-DFEATURE_DEVICE_DLOG")
 
 SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=/usr/lib")
 
@@ -44,10 +44,13 @@ SET_TARGET_PROPERTIES(${fw_name}
 )
 
 INSTALL(TARGETS ${fw_name} DESTINATION lib)
+INSTALL(FILES ${INC_DIR}/device.h ${INC_DIR}/device-error.h
+               DESTINATION include/system)
 INSTALL(
-        DIRECTORY ${INC_DIR}/ DESTINATION include/system
+        DIRECTORY ${INC_DIR}/ DESTINATION include/device
         FILES_MATCHING
-        PATTERN "*_private.h" EXCLUDE
+        PATTERN "*_doc.h" EXCLUDE
+               PATTERN "device.h" EXCLUDE
         PATTERN "${INC_DIR}/*.h"
         )
 
diff --git a/COPYING b/COPYING
deleted file mode 100644 (file)
index 1683b26..0000000
--- a/COPYING
+++ /dev/null
@@ -1,506 +0,0 @@
-Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.\r
-\r
-                  GNU LESSER GENERAL PUBLIC LICENSE\r
-                       Version 2.1, February 1999\r
-\r
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.\r
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r
- Everyone is permitted to copy and distribute verbatim copies\r
- of this license document, but changing it is not allowed.\r
-\r
-[This is the first released version of the Lesser GPL.  It also counts\r
- as the successor of the GNU Library Public License, version 2, hence\r
- the version number 2.1.]\r
-\r
-                            Preamble\r
-\r
-  The licenses for most software are designed to take away your\r
-freedom to share and change it.  By contrast, the GNU General Public\r
-Licenses are intended to guarantee your freedom to share and change\r
-free software--to make sure the software is free for all its users.\r
-\r
-  This license, the Lesser General Public License, applies to some\r
-specially designated software packages--typically libraries--of the\r
-Free Software Foundation and other authors who decide to use it.  You\r
-can use it too, but we suggest you first think carefully about whether\r
-this license or the ordinary General Public License is the better\r
-strategy to use in any particular case, based on the explanations below.\r
-\r
-  When we speak of free software, we are referring to freedom of use,\r
-not price.  Our General Public Licenses are designed to make sure that\r
-you have the freedom to distribute copies of free software (and charge\r
-for this service if you wish); that you receive source code or can get\r
-it if you want it; that you can change the software and use pieces of\r
-it in new free programs; and that you are informed that you can do\r
-these things.\r
-\r
-  To protect your rights, we need to make restrictions that forbid\r
-distributors to deny you these rights or to ask you to surrender these\r
-rights.  These restrictions translate to certain responsibilities for\r
-you if you distribute copies of the library or if you modify it.\r
-\r
-  For example, if you distribute copies of the library, whether gratis\r
-or for a fee, you must give the recipients all the rights that we gave\r
-you.  You must make sure that they, too, receive or can get the source\r
-code.  If you link other code with the library, you must provide\r
-complete object files to the recipients, so that they can relink them\r
-with the library after making changes to the library and recompiling\r
-it.  And you must show them these terms so they know their rights.\r
-\r
-  We protect your rights with a two-step method: (1) we copyright the\r
-library, and (2) we offer you this license, which gives you legal\r
-permission to copy, distribute and/or modify the library.\r
-\r
-  To protect each distributor, we want to make it very clear that\r
-there is no warranty for the free library.  Also, if the library is\r
-modified by someone else and passed on, the recipients should know\r
-that what they have is not the original version, so that the original\r
-author's reputation will not be affected by problems that might be\r
-introduced by others.\r
-\f\r
-  Finally, software patents pose a constant threat to the existence of\r
-any free program.  We wish to make sure that a company cannot\r
-effectively restrict the users of a free program by obtaining a\r
-restrictive license from a patent holder.  Therefore, we insist that\r
-any patent license obtained for a version of the library must be\r
-consistent with the full freedom of use specified in this license.\r
-\r
-  Most GNU software, including some libraries, is covered by the\r
-ordinary GNU General Public License.  This license, the GNU Lesser\r
-General Public License, applies to certain designated libraries, and\r
-is quite different from the ordinary General Public License.  We use\r
-this license for certain libraries in order to permit linking those\r
-libraries into non-free programs.\r
-\r
-  When a program is linked with a library, whether statically or using\r
-a shared library, the combination of the two is legally speaking a\r
-combined work, a derivative of the original library.  The ordinary\r
-General Public License therefore permits such linking only if the\r
-entire combination fits its criteria of freedom.  The Lesser General\r
-Public License permits more lax criteria for linking other code with\r
-the library.\r
-\r
-  We call this license the "Lesser" General Public License because it\r
-does Less to protect the user's freedom than the ordinary General\r
-Public License.  It also provides other free software developers Less\r
-of an advantage over competing non-free programs.  These disadvantages\r
-are the reason we use the ordinary General Public License for many\r
-libraries.  However, the Lesser license provides advantages in certain\r
-special circumstances.\r
-\r
-  For example, on rare occasions, there may be a special need to\r
-encourage the widest possible use of a certain library, so that it becomes\r
-a de-facto standard.  To achieve this, non-free programs must be\r
-allowed to use the library.  A more frequent case is that a free\r
-library does the same job as widely used non-free libraries.  In this\r
-case, there is little to gain by limiting the free library to free\r
-software only, so we use the Lesser General Public License.\r
-\r
-  In other cases, permission to use a particular library in non-free\r
-programs enables a greater number of people to use a large body of\r
-free software.  For example, permission to use the GNU C Library in\r
-non-free programs enables many more people to use the whole GNU\r
-operating system, as well as its variant, the GNU/Linux operating\r
-system.\r
-\r
-  Although the Lesser General Public License is Less protective of the\r
-users' freedom, it does ensure that the user of a program that is\r
-linked with the Library has the freedom and the wherewithal to run\r
-that program using a modified version of the Library.\r
-\r
-  The precise terms and conditions for copying, distribution and\r
-modification follow.  Pay close attention to the difference between a\r
-"work based on the library" and a "work that uses the library".  The\r
-former contains code derived from the library, whereas the latter must\r
-be combined with the library in order to run.\r
-\f\r
-                  GNU LESSER GENERAL PUBLIC LICENSE\r
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\r
-\r
-  0. This License Agreement applies to any software library or other\r
-program which contains a notice placed by the copyright holder or\r
-other authorized party saying it may be distributed under the terms of\r
-this Lesser General Public License (also called "this License").\r
-Each licensee is addressed as "you".\r
-\r
-  A "library" means a collection of software functions and/or data\r
-prepared so as to be conveniently linked with application programs\r
-(which use some of those functions and data) to form executables.\r
-\r
-  The "Library", below, refers to any such software library or work\r
-which has been distributed under these terms.  A "work based on the\r
-Library" means either the Library or any derivative work under\r
-copyright law: that is to say, a work containing the Library or a\r
-portion of it, either verbatim or with modifications and/or translated\r
-straightforwardly into another language.  (Hereinafter, translation is\r
-included without limitation in the term "modification".)\r
-\r
-  "Source code" for a work means the preferred form of the work for\r
-making modifications to it.  For a library, complete source code means\r
-all the source code for all modules it contains, plus any associated\r
-interface definition files, plus the scripts used to control compilation\r
-and installation of the library.\r
-\r
-  Activities other than copying, distribution and modification are not\r
-covered by this License; they are outside its scope.  The act of\r
-running a program using the Library is not restricted, and output from\r
-such a program is covered only if its contents constitute a work based\r
-on the Library (independent of the use of the Library in a tool for\r
-writing it).  Whether that is true depends on what the Library does\r
-and what the program that uses the Library does.\r
-\r
-  1. You may copy and distribute verbatim copies of the Library's\r
-complete source code as you receive it, in any medium, provided that\r
-you conspicuously and appropriately publish on each copy an\r
-appropriate copyright notice and disclaimer of warranty; keep intact\r
-all the notices that refer to this License and to the absence of any\r
-warranty; and distribute a copy of this License along with the\r
-Library.\r
-\r
-  You may charge a fee for the physical act of transferring a copy,\r
-and you may at your option offer warranty protection in exchange for a\r
-fee.\r
-\f\r
-  2. You may modify your copy or copies of the Library or any portion\r
-of it, thus forming a work based on the Library, and copy and\r
-distribute such modifications or work under the terms of Section 1\r
-above, provided that you also meet all of these conditions:\r
-\r
-    a) The modified work must itself be a software library.\r
-\r
-    b) You must cause the files modified to carry prominent notices\r
-    stating that you changed the files and the date of any change.\r
-\r
-    c) You must cause the whole of the work to be licensed at no\r
-    charge to all third parties under the terms of this License.\r
-\r
-    d) If a facility in the modified Library refers to a function or a\r
-    table of data to be supplied by an application program that uses\r
-    the facility, other than as an argument passed when the facility\r
-    is invoked, then you must make a good faith effort to ensure that,\r
-    in the event an application does not supply such function or\r
-    table, the facility still operates, and performs whatever part of\r
-    its purpose remains meaningful.\r
-\r
-    (For example, a function in a library to compute square roots has\r
-    a purpose that is entirely well-defined independent of the\r
-    application.  Therefore, Subsection 2d requires that any\r
-    application-supplied function or table used by this function must\r
-    be optional: if the application does not supply it, the square\r
-    root function must still compute square roots.)\r
-\r
-These requirements apply to the modified work as a whole.  If\r
-identifiable sections of that work are not derived from the Library,\r
-and can be reasonably considered independent and separate works in\r
-themselves, then this License, and its terms, do not apply to those\r
-sections when you distribute them as separate works.  But when you\r
-distribute the same sections as part of a whole which is a work based\r
-on the Library, the distribution of the whole must be on the terms of\r
-this License, whose permissions for other licensees extend to the\r
-entire whole, and thus to each and every part regardless of who wrote\r
-it.\r
-\r
-Thus, it is not the intent of this section to claim rights or contest\r
-your rights to work written entirely by you; rather, the intent is to\r
-exercise the right to control the distribution of derivative or\r
-collective works based on the Library.\r
-\r
-In addition, mere aggregation of another work not based on the Library\r
-with the Library (or with a work based on the Library) on a volume of\r
-a storage or distribution medium does not bring the other work under\r
-the scope of this License.\r
-\r
-  3. You may opt to apply the terms of the ordinary GNU General Public\r
-License instead of this License to a given copy of the Library.  To do\r
-this, you must alter all the notices that refer to this License, so\r
-that they refer to the ordinary GNU General Public License, version 2,\r
-instead of to this License.  (If a newer version than version 2 of the\r
-ordinary GNU General Public License has appeared, then you can specify\r
-that version instead if you wish.)  Do not make any other change in\r
-these notices.\r
-\f\r
-  Once this change is made in a given copy, it is irreversible for\r
-that copy, so the ordinary GNU General Public License applies to all\r
-subsequent copies and derivative works made from that copy.\r
-\r
-  This option is useful when you wish to copy part of the code of\r
-the Library into a program that is not a library.\r
-\r
-  4. You may copy and distribute the Library (or a portion or\r
-derivative of it, under Section 2) in object code or executable form\r
-under the terms of Sections 1 and 2 above provided that you accompany\r
-it with the complete corresponding machine-readable source code, which\r
-must be distributed under the terms of Sections 1 and 2 above on a\r
-medium customarily used for software interchange.\r
-\r
-  If distribution of object code is made by offering access to copy\r
-from a designated place, then offering equivalent access to copy the\r
-source code from the same place satisfies the requirement to\r
-distribute the source code, even though third parties are not\r
-compelled to copy the source along with the object code.\r
-\r
-  5. A program that contains no derivative of any portion of the\r
-Library, but is designed to work with the Library by being compiled or\r
-linked with it, is called a "work that uses the Library".  Such a\r
-work, in isolation, is not a derivative work of the Library, and\r
-therefore falls outside the scope of this License.\r
-\r
-  However, linking a "work that uses the Library" with the Library\r
-creates an executable that is a derivative of the Library (because it\r
-contains portions of the Library), rather than a "work that uses the\r
-library".  The executable is therefore covered by this License.\r
-Section 6 states terms for distribution of such executables.\r
-\r
-  When a "work that uses the Library" uses material from a header file\r
-that is part of the Library, the object code for the work may be a\r
-derivative work of the Library even though the source code is not.\r
-Whether this is true is especially significant if the work can be\r
-linked without the Library, or if the work is itself a library.  The\r
-threshold for this to be true is not precisely defined by law.\r
-\r
-  If such an object file uses only numerical parameters, data\r
-structure layouts and accessors, and small macros and small inline\r
-functions (ten lines or less in length), then the use of the object\r
-file is unrestricted, regardless of whether it is legally a derivative\r
-work.  (Executables containing this object code plus portions of the\r
-Library will still fall under Section 6.)\r
-\r
-  Otherwise, if the work is a derivative of the Library, you may\r
-distribute the object code for the work under the terms of Section 6.\r
-Any executables containing that work also fall under Section 6,\r
-whether or not they are linked directly with the Library itself.\r
-\f\r
-  6. As an exception to the Sections above, you may also combine or\r
-link a "work that uses the Library" with the Library to produce a\r
-work containing portions of the Library, and distribute that work\r
-under terms of your choice, provided that the terms permit\r
-modification of the work for the customer's own use and reverse\r
-engineering for debugging such modifications.\r
-\r
-  You must give prominent notice with each copy of the work that the\r
-Library is used in it and that the Library and its use are covered by\r
-this License.  You must supply a copy of this License.  If the work\r
-during execution displays copyright notices, you must include the\r
-copyright notice for the Library among them, as well as a reference\r
-directing the user to the copy of this License.  Also, you must do one\r
-of these things:\r
-\r
-    a) Accompany the work with the complete corresponding\r
-    machine-readable source code for the Library including whatever\r
-    changes were used in the work (which must be distributed under\r
-    Sections 1 and 2 above); and, if the work is an executable linked\r
-    with the Library, with the complete machine-readable "work that\r
-    uses the Library", as object code and/or source code, so that the\r
-    user can modify the Library and then relink to produce a modified\r
-    executable containing the modified Library.  (It is understood\r
-    that the user who changes the contents of definitions files in the\r
-    Library will not necessarily be able to recompile the application\r
-    to use the modified definitions.)\r
-\r
-    b) Use a suitable shared library mechanism for linking with the\r
-    Library.  A suitable mechanism is one that (1) uses at run time a\r
-    copy of the library already present on the user's computer system,\r
-    rather than copying library functions into the executable, and (2)\r
-    will operate properly with a modified version of the library, if\r
-    the user installs one, as long as the modified version is\r
-    interface-compatible with the version that the work was made with.\r
-\r
-    c) Accompany the work with a written offer, valid for at\r
-    least three years, to give the same user the materials\r
-    specified in Subsection 6a, above, for a charge no more\r
-    than the cost of performing this distribution.\r
-\r
-    d) If distribution of the work is made by offering access to copy\r
-    from a designated place, offer equivalent access to copy the above\r
-    specified materials from the same place.\r
-\r
-    e) Verify that the user has already received a copy of these\r
-    materials or that you have already sent this user a copy.\r
-\r
-  For an executable, the required form of the "work that uses the\r
-Library" must include any data and utility programs needed for\r
-reproducing the executable from it.  However, as a special exception,\r
-the materials to be distributed need not include anything that is\r
-normally distributed (in either source or binary form) with the major\r
-components (compiler, kernel, and so on) of the operating system on\r
-which the executable runs, unless that component itself accompanies\r
-the executable.\r
-\r
-  It may happen that this requirement contradicts the license\r
-restrictions of other proprietary libraries that do not normally\r
-accompany the operating system.  Such a contradiction means you cannot\r
-use both them and the Library together in an executable that you\r
-distribute.\r
-\f\r
-  7. You may place library facilities that are a work based on the\r
-Library side-by-side in a single library together with other library\r
-facilities not covered by this License, and distribute such a combined\r
-library, provided that the separate distribution of the work based on\r
-the Library and of the other library facilities is otherwise\r
-permitted, and provided that you do these two things:\r
-\r
-    a) Accompany the combined library with a copy of the same work\r
-    based on the Library, uncombined with any other library\r
-    facilities.  This must be distributed under the terms of the\r
-    Sections above.\r
-\r
-    b) Give prominent notice with the combined library of the fact\r
-    that part of it is a work based on the Library, and explaining\r
-    where to find the accompanying uncombined form of the same work.\r
-\r
-  8. You may not copy, modify, sublicense, link with, or distribute\r
-the Library except as expressly provided under this License.  Any\r
-attempt otherwise to copy, modify, sublicense, link with, or\r
-distribute the Library is void, and will automatically terminate your\r
-rights under this License.  However, parties who have received copies,\r
-or rights, from you under this License will not have their licenses\r
-terminated so long as such parties remain in full compliance.\r
-\r
-  9. You are not required to accept this License, since you have not\r
-signed it.  However, nothing else grants you permission to modify or\r
-distribute the Library or its derivative works.  These actions are\r
-prohibited by law if you do not accept this License.  Therefore, by\r
-modifying or distributing the Library (or any work based on the\r
-Library), you indicate your acceptance of this License to do so, and\r
-all its terms and conditions for copying, distributing or modifying\r
-the Library or works based on it.\r
-\r
-  10. Each time you redistribute the Library (or any work based on the\r
-Library), the recipient automatically receives a license from the\r
-original licensor to copy, distribute, link with or modify the Library\r
-subject to these terms and conditions.  You may not impose any further\r
-restrictions on the recipients' exercise of the rights granted herein.\r
-You are not responsible for enforcing compliance by third parties with\r
-this License.\r
-\f\r
-  11. If, as a consequence of a court judgment or allegation of patent\r
-infringement or for any other reason (not limited to patent issues),\r
-conditions are imposed on you (whether by court order, agreement or\r
-otherwise) that contradict the conditions of this License, they do not\r
-excuse you from the conditions of this License.  If you cannot\r
-distribute so as to satisfy simultaneously your obligations under this\r
-License and any other pertinent obligations, then as a consequence you\r
-may not distribute the Library at all.  For example, if a patent\r
-license would not permit royalty-free redistribution of the Library by\r
-all those who receive copies directly or indirectly through you, then\r
-the only way you could satisfy both it and this License would be to\r
-refrain entirely from distribution of the Library.\r
-\r
-If any portion of this section is held invalid or unenforceable under any\r
-particular circumstance, the balance of the section is intended to apply,\r
-and the section as a whole is intended to apply in other circumstances.\r
-\r
-It is not the purpose of this section to induce you to infringe any\r
-patents or other property right claims or to contest validity of any\r
-such claims; this section has the sole purpose of protecting the\r
-integrity of the free software distribution system which is\r
-implemented by public license practices.  Many people have made\r
-generous contributions to the wide range of software distributed\r
-through that system in reliance on consistent application of that\r
-system; it is up to the author/donor to decide if he or she is willing\r
-to distribute software through any other system and a licensee cannot\r
-impose that choice.\r
-\r
-This section is intended to make thoroughly clear what is believed to\r
-be a consequence of the rest of this License.\r
-\r
-  12. If the distribution and/or use of the Library is restricted in\r
-certain countries either by patents or by copyrighted interfaces, the\r
-original copyright holder who places the Library under this License may add\r
-an explicit geographical distribution limitation excluding those countries,\r
-so that distribution is permitted only in or among countries not thus\r
-excluded.  In such case, this License incorporates the limitation as if\r
-written in the body of this License.\r
-\r
-  13. The Free Software Foundation may publish revised and/or new\r
-versions of the Lesser General Public License from time to time.\r
-Such new versions will be similar in spirit to the present version,\r
-but may differ in detail to address new problems or concerns.\r
-\r
-Each version is given a distinguishing version number.  If the Library\r
-specifies a version number of this License which applies to it and\r
-"any later version", you have the option of following the terms and\r
-conditions either of that version or of any later version published by\r
-the Free Software Foundation.  If the Library does not specify a\r
-license version number, you may choose any version ever published by\r
-the Free Software Foundation.\r
-\f\r
-  14. If you wish to incorporate parts of the Library into other free\r
-programs whose distribution conditions are incompatible with these,\r
-write to the author to ask for permission.  For software which is\r
-copyrighted by the Free Software Foundation, write to the Free\r
-Software Foundation; we sometimes make exceptions for this.  Our\r
-decision will be guided by the two goals of preserving the free status\r
-of all derivatives of our free software and of promoting the sharing\r
-and reuse of software generally.\r
-\r
-                            NO WARRANTY\r
-\r
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\r
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\r
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\r
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\r
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\r
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\r
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\r
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\r
-\r
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\r
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\r
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\r
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\r
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\r
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\r
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\r
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\r
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\r
-DAMAGES.\r
-\r
-                     END OF TERMS AND CONDITIONS\r
-\f\r
-           How to Apply These Terms to Your New Libraries\r
-\r
-  If you develop a new library, and you want it to be of the greatest\r
-possible use to the public, we recommend making it free software that\r
-everyone can redistribute and change.  You can do so by permitting\r
-redistribution under these terms (or, alternatively, under the terms of the\r
-ordinary General Public License).\r
-\r
-  To apply these terms, attach the following notices to the library.  It is\r
-safest to attach them to the start of each source file to most effectively\r
-convey the exclusion of warranty; and each file should have at least the\r
-"copyright" line and a pointer to where the full notice is found.\r
-\r
-    <one line to give the library's name and a brief idea of what it does.>\r
-    Copyright (C) <year>  <name of author>\r
-\r
-    This library is free software; you can redistribute it and/or\r
-    modify it under the terms of the GNU Lesser General Public\r
-    License as published by the Free Software Foundation; either\r
-    version 2.1 of the License, or (at your option) any later version.\r
-\r
-    This library is distributed in the hope that it will be useful,\r
-    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
-    Lesser General Public License for more details.\r
-\r
-    You should have received a copy of the GNU Lesser General Public\r
-    License along with this library; if not, write to the Free Software\r
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r
-\r
-Also add information on how to contact you by electronic and paper mail.\r
-\r
-You should also get your employer (if you work as a programmer) or your\r
-school, if any, to sign a "copyright disclaimer" for the library, if\r
-necessary.  Here is a sample; alter the names:\r
-\r
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the\r
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\r
-\r
-  <signature of Ty Coon>, 1 April 1990\r
-  Ty Coon, President of Vice\r
-\r
-That's all there is to it!\r
-\r
-\r
diff --git a/LICENSE b/LICENSE
new file mode 100755 (executable)
index 0000000..bbe9d02
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,206 @@
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.\r
+\r
+                                 Apache License\r
+                           Version 2.0, January 2004\r
+                        http://www.apache.org/licenses/\r
+\r
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r
+\r
+   1. Definitions.\r
+\r
+      "License" shall mean the terms and conditions for use, reproduction,\r
+      and distribution as defined by Sections 1 through 9 of this document.\r
+\r
+      "Licensor" shall mean the copyright owner or entity authorized by\r
+      the copyright owner that is granting the License.\r
+\r
+      "Legal Entity" shall mean the union of the acting entity and all\r
+      other entities that control, are controlled by, or are under common\r
+      control with that entity. For the purposes of this definition,\r
+      "control" means (i) the power, direct or indirect, to cause the\r
+      direction or management of such entity, whether by contract or\r
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r
+      outstanding shares, or (iii) beneficial ownership of such entity.\r
+\r
+      "You" (or "Your") shall mean an individual or Legal Entity\r
+      exercising permissions granted by this License.\r
+\r
+      "Source" form shall mean the preferred form for making modifications,\r
+      including but not limited to software source code, documentation\r
+      source, and configuration files.\r
+\r
+      "Object" form shall mean any form resulting from mechanical\r
+      transformation or translation of a Source form, including but\r
+      not limited to compiled object code, generated documentation,\r
+      and conversions to other media types.\r
+\r
+      "Work" shall mean the work of authorship, whether in Source or\r
+      Object form, made available under the License, as indicated by a\r
+      copyright notice that is included in or attached to the work\r
+      (an example is provided in the Appendix below).\r
+\r
+      "Derivative Works" shall mean any work, whether in Source or Object\r
+      form, that is based on (or derived from) the Work and for which the\r
+      editorial revisions, annotations, elaborations, or other modifications\r
+      represent, as a whole, an original work of authorship. For the purposes\r
+      of this License, Derivative Works shall not include works that remain\r
+      separable from, or merely link (or bind by name) to the interfaces of,\r
+      the Work and Derivative Works thereof.\r
+\r
+      "Contribution" shall mean any work of authorship, including\r
+      the original version of the Work and any modifications or additions\r
+      to that Work or Derivative Works thereof, that is intentionally\r
+      submitted to Licensor for inclusion in the Work by the copyright owner\r
+      or by an individual or Legal Entity authorized to submit on behalf of\r
+      the copyright owner. For the purposes of this definition, "submitted"\r
+      means any form of electronic, verbal, or written communication sent\r
+      to the Licensor or its representatives, including but not limited to\r
+      communication on electronic mailing lists, source code control systems,\r
+      and issue tracking systems that are managed by, or on behalf of, the\r
+      Licensor for the purpose of discussing and improving the Work, but\r
+      excluding communication that is conspicuously marked or otherwise\r
+      designated in writing by the copyright owner as "Not a Contribution."\r
+\r
+      "Contributor" shall mean Licensor and any individual or Legal Entity\r
+      on behalf of whom a Contribution has been received by Licensor and\r
+      subsequently incorporated within the Work.\r
+\r
+   2. Grant of Copyright License. Subject to the terms and conditions of\r
+      this License, each Contributor hereby grants to You a perpetual,\r
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r
+      copyright license to reproduce, prepare Derivative Works of,\r
+      publicly display, publicly perform, sublicense, and distribute the\r
+      Work and such Derivative Works in Source or Object form.\r
+\r
+   3. Grant of Patent License. Subject to the terms and conditions of\r
+      this License, each Contributor hereby grants to You a perpetual,\r
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r
+      (except as stated in this section) patent license to make, have made,\r
+      use, offer to sell, sell, import, and otherwise transfer the Work,\r
+      where such license applies only to those patent claims licensable\r
+      by such Contributor that are necessarily infringed by their\r
+      Contribution(s) alone or by combination of their Contribution(s)\r
+      with the Work to which such Contribution(s) was submitted. If You\r
+      institute patent litigation against any entity (including a\r
+      cross-claim or counterclaim in a lawsuit) alleging that the Work\r
+      or a Contribution incorporated within the Work constitutes direct\r
+      or contributory patent infringement, then any patent licenses\r
+      granted to You under this License for that Work shall terminate\r
+      as of the date such litigation is filed.\r
+\r
+   4. Redistribution. You may reproduce and distribute copies of the\r
+      Work or Derivative Works thereof in any medium, with or without\r
+      modifications, and in Source or Object form, provided that You\r
+      meet the following conditions:\r
+\r
+      (a) You must give any other recipients of the Work or\r
+          Derivative Works a copy of this License; and\r
+\r
+      (b) You must cause any modified files to carry prominent notices\r
+          stating that You changed the files; and\r
+\r
+      (c) You must retain, in the Source form of any Derivative Works\r
+          that You distribute, all copyright, patent, trademark, and\r
+          attribution notices from the Source form of the Work,\r
+          excluding those notices that do not pertain to any part of\r
+          the Derivative Works; and\r
+\r
+      (d) If the Work includes a "NOTICE" text file as part of its\r
+          distribution, then any Derivative Works that You distribute must\r
+          include a readable copy of the attribution notices contained\r
+          within such NOTICE file, excluding those notices that do not\r
+          pertain to any part of the Derivative Works, in at least one\r
+          of the following places: within a NOTICE text file distributed\r
+          as part of the Derivative Works; within the Source form or\r
+          documentation, if provided along with the Derivative Works; or,\r
+          within a display generated by the Derivative Works, if and\r
+          wherever such third-party notices normally appear. The contents\r
+          of the NOTICE file are for informational purposes only and\r
+          do not modify the License. You may add Your own attribution\r
+          notices within Derivative Works that You distribute, alongside\r
+          or as an addendum to the NOTICE text from the Work, provided\r
+          that such additional attribution notices cannot be construed\r
+          as modifying the License.\r
+\r
+      You may add Your own copyright statement to Your modifications and\r
+      may provide additional or different license terms and conditions\r
+      for use, reproduction, or distribution of Your modifications, or\r
+      for any such Derivative Works as a whole, provided Your use,\r
+      reproduction, and distribution of the Work otherwise complies with\r
+      the conditions stated in this License.\r
+\r
+   5. Submission of Contributions. Unless You explicitly state otherwise,\r
+      any Contribution intentionally submitted for inclusion in the Work\r
+      by You to the Licensor shall be under the terms and conditions of\r
+      this License, without any additional terms or conditions.\r
+      Notwithstanding the above, nothing herein shall supersede or modify\r
+      the terms of any separate license agreement you may have executed\r
+      with Licensor regarding such Contributions.\r
+\r
+   6. Trademarks. This License does not grant permission to use the trade\r
+      names, trademarks, service marks, or product names of the Licensor,\r
+      except as required for reasonable and customary use in describing the\r
+      origin of the Work and reproducing the content of the NOTICE file.\r
+\r
+   7. Disclaimer of Warranty. Unless required by applicable law or\r
+      agreed to in writing, Licensor provides the Work (and each\r
+      Contributor provides its Contributions) on an "AS IS" BASIS,\r
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r
+      implied, including, without limitation, any warranties or conditions\r
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r
+      PARTICULAR PURPOSE. You are solely responsible for determining the\r
+      appropriateness of using or redistributing the Work and assume any\r
+      risks associated with Your exercise of permissions under this License.\r
+\r
+   8. Limitation of Liability. In no event and under no legal theory,\r
+      whether in tort (including negligence), contract, or otherwise,\r
+      unless required by applicable law (such as deliberate and grossly\r
+      negligent acts) or agreed to in writing, shall any Contributor be\r
+      liable to You for damages, including any direct, indirect, special,\r
+      incidental, or consequential damages of any character arising as a\r
+      result of this License or out of the use or inability to use the\r
+      Work (including but not limited to damages for loss of goodwill,\r
+      work stoppage, computer failure or malfunction, or any and all\r
+      other commercial damages or losses), even if such Contributor\r
+      has been advised of the possibility of such damages.\r
+\r
+   9. Accepting Warranty or Additional Liability. While redistributing\r
+      the Work or Derivative Works thereof, You may choose to offer,\r
+      and charge a fee for, acceptance of support, warranty, indemnity,\r
+      or other liability obligations and/or rights consistent with this\r
+      License. However, in accepting such obligations, You may act only\r
+      on Your own behalf and on Your sole responsibility, not on behalf\r
+      of any other Contributor, and only if You agree to indemnify,\r
+      defend, and hold each Contributor harmless for any liability\r
+      incurred by, or claims asserted against, such Contributor by reason\r
+      of your accepting any such warranty or additional liability.\r
+\r
+   END OF TERMS AND CONDITIONS\r
+\r
+   APPENDIX: How to apply the Apache License to your work.\r
+\r
+      To apply the Apache License to your work, attach the following\r
+      boilerplate notice, with the fields enclosed by brackets "[]"\r
+      replaced with your own identifying information. (Don't include\r
+      the brackets!)  The text should be enclosed in the appropriate\r
+      comment syntax for the file format. We also recommend that a\r
+      file or class name and description of purpose be included on the\r
+      same "printed page" as the copyright notice for easier\r
+      identification within third-party archives.\r
+\r
+   Copyright [yyyy] [name of copyright owner]\r
+\r
+   Licensed under the Apache License, Version 2.0 (the "License");\r
+   you may not use this file except in compliance with the License.\r
+   You may obtain a copy of the License at\r
+\r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+   Unless required by applicable law or agreed to in writing, software\r
+   distributed under the License is distributed on an "AS IS" BASIS,\r
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+   See the License for the specific language governing permissions and\r
+   limitations under the License.\r
+\r
+\r
+\r
index 9517124..c919e23 100644 (file)
@@ -1,3 +1,6 @@
 /testcase/utc_system_device_battery
 /testcase/utc_system_device_brightness
+/testcase/utc_system_device_flash
+/testcase/utc_system_device_memory
+/testcase/utc_system_device_cpu
 
index a93ba00..0ab951c 100644 (file)
 #include <tet_api.h>
 #include <device.h>
 
+#define API_NAME_DEVICE_BATTERY_GET_WARNING_STATUS "device_battery_get_warning_status"
+#define API_NAME_DEVICE_BATTERY_WARNING_SET_CB "device_battery_warning_set_cb"
+#define API_NAME_DEVICE_BATTERY_WARNING_UNSET_CB "device_battery_warning_unset_cb"
 #define API_NAME_DEVICE_BATTERY_GET_PERCENT "device_battery_get_percent"
-#define API_NAME_DEVICE_BATTERY_IS_FULL "device_battery_is_full"
+#define API_NAME_DEVICE_BATTERY_GET_DETAIL "device_battery_get_detail"
 #define API_NAME_DEVICE_BATTERY_IS_CHARGING "device_battery_is_charging"
 #define API_NAME_DEVICE_BATTERY_SET_CB "device_battery_set_cb"
 #define API_NAME_DEVICE_BATTERY_UNSET_CB "device_battery_unset_cb"
+#define API_NAME_DEVICE_BATTERY_IS_FULL "device_battery_is_full"
+#define API_NAME_DEVICE_BATTERY_GET_REMAINING_TIME "device_battery_get_remaining_time"
+#define API_NAME_DEVICE_BATTERY_SET_REMAINING_TIME_CHANGED_CB "device_battery_set_remaining_time_changed_cb"
+#define API_NAME_DEVICE_BATTERY_UNSET_REMAINING_TIME_CHANGED_CB "device_battery_unset_remaining_time_changed_cb"
+#define API_NAME_DEVICE_BATTERY_GET_LEVEL_STATUS "device_battery_get_level_status"
+#define API_NAME_DEVICE_BATTERY_LEVEL_SET_CB "device_battery_level_set_cb"
 
 static void startup(void);
 static void cleanup(void);
@@ -30,16 +39,35 @@ static void cleanup(void);
 void (*tet_startup)(void) = startup;
 void (*tet_cleanup)(void) = cleanup;
 
+
+static void utc_system_device_battery_get_warning_status_p(void);
+static void utc_system_device_battery_get_warning_status_n(void);
+static void utc_system_device_battery_warning_set_cb_p(void);
+static void utc_system_device_battery_warning_set_cb_n(void);
+static void utc_system_device_battery_warning_unset_cb_p(void);
 static void utc_system_device_battery_get_percent_p(void);
 static void utc_system_device_battery_get_percent_n(void);
-static void utc_system_device_battery_is_full_p(void);
-static void utc_system_device_battery_is_full_n(void);
+static void utc_system_device_battery_get_detail_p(void);
+static void utc_system_device_battery_get_detail_n(void);
 static void utc_system_device_battery_is_charging_p(void);
 static void utc_system_device_battery_is_charging_n(void);
 static void utc_system_device_battery_set_cb_p(void);
 static void utc_system_device_battery_set_cb_n(void);
 static void utc_system_device_battery_unset_cb_p(void);
-
+static void utc_system_device_battery_is_full_p(void);
+static void utc_system_device_battery_is_full_n(void);
+static void utc_system_device_battery_get_remaining_time_p(void);
+static void utc_system_device_battery_get_remaining_time_n_1(void);
+static void utc_system_device_battery_get_remaining_time_n_2(void);
+static void utc_system_device_battery_set_remaining_time_changed_cb_p(void);
+static void utc_system_device_battery_set_remaining_time_changed_cb_n_1(void);
+static void utc_system_device_battery_set_remaining_time_changed_cb_n_2(void);
+static void utc_system_device_battery_unset_remaining_time_changed_cb_p(void);
+static void utc_system_device_battery_unset_remaining_time_changed_cb_n(void);
+static void utc_system_device_battery_get_level_status_p(void);
+static void utc_system_device_battery_get_level_status_n(void);
+static void utc_system_device_battery_level_set_cb_p(void);
+static void utc_system_device_battery_level_set_cb_n(void);
 
 enum {
        POSITIVE_TC_IDX = 0x01,
@@ -47,15 +75,34 @@ enum {
 };
 
 struct tet_testlist tet_testlist[] = {
+       { utc_system_device_battery_get_warning_status_p, POSITIVE_TC_IDX },
+       { utc_system_device_battery_get_warning_status_n, NEGATIVE_TC_IDX },
+       { utc_system_device_battery_warning_set_cb_p, POSITIVE_TC_IDX },
+       { utc_system_device_battery_warning_set_cb_n, NEGATIVE_TC_IDX },
+       { utc_system_device_battery_warning_unset_cb_p, POSITIVE_TC_IDX },
        { utc_system_device_battery_get_percent_p, POSITIVE_TC_IDX },
        { utc_system_device_battery_get_percent_n, NEGATIVE_TC_IDX },
-       { utc_system_device_battery_is_full_p, POSITIVE_TC_IDX },
-       { utc_system_device_battery_is_full_n, NEGATIVE_TC_IDX },
+       { utc_system_device_battery_get_detail_p, POSITIVE_TC_IDX },
+       { utc_system_device_battery_get_detail_n, NEGATIVE_TC_IDX },
        { utc_system_device_battery_is_charging_p, POSITIVE_TC_IDX },
        { utc_system_device_battery_is_charging_n, NEGATIVE_TC_IDX },
        { utc_system_device_battery_set_cb_p, POSITIVE_TC_IDX },
        { utc_system_device_battery_set_cb_n, NEGATIVE_TC_IDX },
        { utc_system_device_battery_unset_cb_p, POSITIVE_TC_IDX },
+       { utc_system_device_battery_is_full_p, POSITIVE_TC_IDX },
+       { utc_system_device_battery_is_full_n, NEGATIVE_TC_IDX },
+       { utc_system_device_battery_get_remaining_time_p, POSITIVE_TC_IDX },
+       { utc_system_device_battery_get_remaining_time_n_1, NEGATIVE_TC_IDX },
+       { utc_system_device_battery_get_remaining_time_n_2, NEGATIVE_TC_IDX },
+       { utc_system_device_battery_set_remaining_time_changed_cb_p, POSITIVE_TC_IDX },
+       { utc_system_device_battery_set_remaining_time_changed_cb_n_1, NEGATIVE_TC_IDX },
+       { utc_system_device_battery_set_remaining_time_changed_cb_n_2, NEGATIVE_TC_IDX },
+       { utc_system_device_battery_unset_remaining_time_changed_cb_p, POSITIVE_TC_IDX },
+       { utc_system_device_battery_unset_remaining_time_changed_cb_n, NEGATIVE_TC_IDX },
+       { utc_system_device_battery_get_level_status_p, POSITIVE_TC_IDX },
+       { utc_system_device_battery_get_level_status_n, NEGATIVE_TC_IDX },
+       { utc_system_device_battery_level_set_cb_p, POSITIVE_TC_IDX },
+       { utc_system_device_battery_level_set_cb_n, NEGATIVE_TC_IDX },
        { NULL, 0},
 };
 
@@ -70,15 +117,76 @@ static void cleanup(void)
 }
 
 /**
+ * @brief Positive test case of device_battery_get_warning_status()
+ */
+static void utc_system_device_battery_get_warning_status_p(void)
+{
+       device_battery_warn_e status = 0;
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_get_warning_status(&status);
+
+       dts_check_eq(API_NAME_DEVICE_BATTERY_GET_WARNING_STATUS, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_battery_get_warning_status()
+ */
+static void utc_system_device_battery_get_warning_status_n(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_get_warning_status(NULL);
+
+       dts_check_ne(API_NAME_DEVICE_BATTERY_GET_PERCENT, error, DEVICE_ERROR_NONE);
+}
+
+static void warning_set_cb(device_battery_warn_e status, void *user_data)
+{
+
+}
+
+/**
+ * @brief Positive test case of device_battery_warning_set_cb()
+ */
+static void utc_system_device_battery_warning_set_cb_p(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_warning_set_cb(warning_set_cb, NULL);
+
+       dts_check_eq(API_NAME_DEVICE_BATTERY_WARNING_SET_CB, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_battery_warning_set_cb()
+ */
+static void utc_system_device_battery_warning_set_cb_n(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_warning_set_cb(NULL, NULL);
+
+       dts_check_ne(API_NAME_DEVICE_BATTERY_WARNING_SET_CB, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Positive test case of device_battery_warning_unset_cb()
+ */
+static void utc_system_device_battery_warning_unset_cb_p(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_warning_unset_cb();
+
+       dts_check_eq(API_NAME_DEVICE_BATTERY_WARNING_SET_CB, error, DEVICE_ERROR_NONE);
+}
+
+/**
  * @brief Positive test case of device_battery_get_percent()
  */
 static void utc_system_device_battery_get_percent_p(void)
 {
-    int percent = 0;
-    int error = DEVICE_ERROR_NONE;
-    error = device_battery_get_percent(&percent);
+       int percent = 0;
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_get_percent(&percent);
 
-    dts_check_eq(API_NAME_DEVICE_BATTERY_GET_PERCENT, error, DEVICE_ERROR_NONE);
+       dts_check_eq(API_NAME_DEVICE_BATTERY_GET_PERCENT, error, DEVICE_ERROR_NONE);
 }
 
 /**
@@ -86,71 +194,245 @@ static void utc_system_device_battery_get_percent_p(void)
  */
 static void utc_system_device_battery_get_percent_n(void)
 {
-    int error = DEVICE_ERROR_NONE;
-    error = device_battery_get_percent(NULL);
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_get_percent(NULL);
 
-    dts_check_ne(API_NAME_DEVICE_BATTERY_GET_PERCENT, error, DEVICE_ERROR_NONE);
+       dts_check_ne(API_NAME_DEVICE_BATTERY_GET_PERCENT, error, DEVICE_ERROR_NONE);
 }
 
 /**
- * @brief Positive test case of device_battery_is_full()
+ * @brief Positive test case of device_battery_get_detail()
  */
-static void utc_system_device_battery_is_full_p(void)
+static void utc_system_device_battery_get_detail_p(void)
 {
-    bool full;
-    int error = DEVICE_ERROR_NONE;
-    error = device_battery_is_full(&full);
-    dts_check_eq(API_NAME_DEVICE_BATTERY_IS_FULL, error, DEVICE_ERROR_NONE);
+       int detail = 0;
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_get_detail(&detail);
+
+       dts_check_eq(API_NAME_DEVICE_BATTERY_GET_DETAIL, error, DEVICE_ERROR_NONE);
 }
 
 /**
- * @brief Negative test case of device_battery_is_full()
+ * @brief Negative test case of device_battery_get_detail()
  */
-static void utc_system_device_battery_is_full_n(void)
+static void utc_system_device_battery_get_detail_n(void)
 {
-    int error = DEVICE_ERROR_NONE;
-    error = device_battery_is_full(NULL);
-    dts_check_ne(API_NAME_DEVICE_BATTERY_IS_FULL, error, DEVICE_ERROR_NONE);
-}
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_get_detail(NULL);
 
+       dts_check_ne(API_NAME_DEVICE_BATTERY_GET_DETAIL, error, DEVICE_ERROR_NONE);
+}
 
+/**
+ * @brief Positive test case of device_battery_is_charging()
+ */
 static void utc_system_device_battery_is_charging_p(void)
 {
-    bool charging;
-    int error = DEVICE_ERROR_NONE;
-    error = device_battery_is_charging(&charging);
-    dts_check_eq(API_NAME_DEVICE_BATTERY_IS_CHARGING, error, DEVICE_ERROR_NONE);
+       bool charging;
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_is_charging(&charging);
+       dts_check_eq(API_NAME_DEVICE_BATTERY_IS_CHARGING, error, DEVICE_ERROR_NONE);
 }
 
+/**
+ * @brief Negative test case of device_battery_is_charging()
+ */
 static void utc_system_device_battery_is_charging_n(void)
 {
-    bool charging;
-    int error = DEVICE_ERROR_NONE;
-    error = device_battery_is_charging(NULL);
-    dts_check_ne(API_NAME_DEVICE_BATTERY_IS_CHARGING, error, DEVICE_ERROR_NONE);
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_is_charging(NULL);
+       dts_check_ne(API_NAME_DEVICE_BATTERY_IS_CHARGING, error, DEVICE_ERROR_NONE);
 }
 
 static void battery_cb(int percent, void *user_data)
 {
 }
 
+/**
+ * @brief Positive test case of device_battery_set_cb()
+ */
 static void utc_system_device_battery_set_cb_p(void)
 {
-    int error = device_battery_set_cb(battery_cb, NULL);
-    device_battery_unset_cb();
-    dts_check_eq(API_NAME_DEVICE_BATTERY_SET_CB, error, DEVICE_ERROR_NONE);
+       int error = device_battery_set_cb(battery_cb, NULL);
+       device_battery_unset_cb();
+       dts_check_eq(API_NAME_DEVICE_BATTERY_SET_CB, error, DEVICE_ERROR_NONE);
 }
 
+/**
+ * @brief Negative test case of device_battery_set_cb()
+ */
 static void utc_system_device_battery_set_cb_n(void)
 {
-    int error = device_battery_set_cb(NULL, NULL);
-    device_battery_unset_cb();
-    dts_check_ne(API_NAME_DEVICE_BATTERY_SET_CB, error, DEVICE_ERROR_NONE);
+       int error = device_battery_set_cb(NULL, NULL);
+       device_battery_unset_cb();
+       dts_check_ne(API_NAME_DEVICE_BATTERY_SET_CB, error, DEVICE_ERROR_NONE);
 }
 
+/**
+ * @brief Positive test case of device_battery_unset_cb()
+ */
 static void utc_system_device_battery_unset_cb_p(void)
 {
-    device_battery_set_cb(battery_cb, NULL);
-    int error = device_battery_unset_cb();
-    dts_check_eq(API_NAME_DEVICE_BATTERY_SET_CB, error, DEVICE_ERROR_NONE);
+       device_battery_set_cb(battery_cb, NULL);
+       int error = device_battery_unset_cb();
+       dts_check_eq(API_NAME_DEVICE_BATTERY_SET_CB, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Positive test case of device_battery_is_full()
+ */
+static void utc_system_device_battery_is_full_p(void)
+{
+       bool full;
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_is_full(&full);
+       dts_check_eq(API_NAME_DEVICE_BATTERY_IS_FULL, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_battery_is_full()
+ */
+static void utc_system_device_battery_is_full_n(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_is_full(NULL);
+       dts_check_ne(API_NAME_DEVICE_BATTERY_IS_FULL, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Positive test case of device_battery_get_remaining_time()
+ */
+static void utc_system_device_battery_get_remaining_time_p(void)
+{
+       int stime = 0;
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_get_remaining_time(DEVICE_BATTERY_REMAINING_TIME_TO_FULLY_CHARGED, &stime);
+       dts_check_eq(API_NAME_DEVICE_BATTERY_GET_REMAINING_TIME, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_battery_get_remaing_time()
+ */
+static void utc_system_device_battery_get_remaining_time_n_1(void)
+{
+       int stime = 0;
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_get_remaining_time(-1, &stime);
+       dts_check_ne(API_NAME_DEVICE_BATTERY_IS_FULL, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_battery_get_remaing_time()
+ */
+static void utc_system_device_battery_get_remaining_time_n_2(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_get_remaining_time(DEVICE_BATTERY_REMAINING_TIME_TO_FULLY_CHARGED, NULL);
+       dts_check_ne(API_NAME_DEVICE_BATTERY_IS_FULL, error, DEVICE_ERROR_NONE);
+}
+
+static void remaining_time_changed_cb(int time, void *user_data)
+{
+
+}
+
+/**
+ * @brief Positive test case of device_battery_set_remaining_time_changed_cb()
+ */
+static void utc_system_device_battery_set_remaining_time_changed_cb_p(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_set_remaining_time_changed_cb(
+                       DEVICE_BATTERY_REMAINING_TIME_TO_FULLY_CHARGED,
+                       remaining_time_changed_cb, NULL);
+       dts_check_eq(API_NAME_DEVICE_BATTERY_SET_REMAINING_TIME_CHANGED_CB, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_battery_set_remaing_time_changed_cb()
+ */
+static void utc_system_device_battery_set_remaining_time_changed_cb_n_1(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_set_remaining_time_changed_cb(
+                       -1, remaining_time_changed_cb, NULL);
+       dts_check_ne(API_NAME_DEVICE_BATTERY_SET_REMAINING_TIME_CHANGED_CB, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_battery_set_remaing_time_changed_cb()
+ */
+static void utc_system_device_battery_set_remaining_time_changed_cb_n_2(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_set_remaining_time_changed_cb(
+                       DEVICE_BATTERY_REMAINING_TIME_TO_FULLY_CHARGED, NULL, NULL);
+       dts_check_ne(API_NAME_DEVICE_BATTERY_SET_REMAINING_TIME_CHANGED_CB, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Positive test case of device_battery_unset_remaining_time_changed_cb()
+ */
+static void utc_system_device_battery_unset_remaining_time_changed_cb_p(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_unset_remaining_time_changed_cb(
+                       DEVICE_BATTERY_REMAINING_TIME_TO_FULLY_CHARGED);
+       dts_check_eq(API_NAME_DEVICE_BATTERY_UNSET_REMAINING_TIME_CHANGED_CB, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_battery_unset_remaing_time_changed_cb()
+ */
+static void utc_system_device_battery_unset_remaining_time_changed_cb_n(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_unset_remaining_time_changed_cb(-1);
+       dts_check_ne(API_NAME_DEVICE_BATTERY_UNSET_REMAINING_TIME_CHANGED_CB, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Positive test case of device_battery_get_level_status()
+ */
+static void utc_system_device_battery_get_level_status_p(void)
+{
+       device_battery_level_e status;
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_get_level_status(&status);
+       dts_check_eq(API_NAME_DEVICE_BATTERY_GET_LEVEL_STATUS, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_battery_get_level_status()
+ */
+static void utc_system_device_battery_get_level_status_n(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_get_level_status(NULL);
+       dts_check_ne(API_NAME_DEVICE_BATTERY_GET_LEVEL_STATUS, error, DEVICE_ERROR_NONE);
+}
+
+static void level_set_cb(device_battery_level_e status, void *user_data)
+{
+
+}
+
+/**
+ * @brief Positive test case of device_battery_level_set_cb()
+ */
+static void utc_system_device_battery_level_set_cb_p(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_level_set_cb(level_set_cb, NULL);
+       dts_check_eq(API_NAME_DEVICE_BATTERY_LEVEL_SET_CB, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_battery_level_set_cb()
+ */
+static void utc_system_device_battery_level_set_cb_n(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_battery_level_set_cb(NULL, NULL);
+       dts_check_ne(API_NAME_DEVICE_BATTERY_LEVEL_SET_CB, error, DEVICE_ERROR_NONE);
 }
index 58dc106..4f418a9 100644 (file)
 
 #define API_NAME_DEVICE_GET_DISPLAY_COUNT "device_get_display_numbers"
 #define API_NAME_DEVICE_GET_BRIGHTNESS "device_get_brightness"
-#define API_NAME_DEVICE_GET_MAX_BRIGHTNESS "device_get_max_brightness"
 #define API_NAME_DEVICE_SET_BRIGHTNESS "device_set_brightness"
+#define API_NAME_DEVICE_GET_MAX_BRIGHTNESS "device_get_max_brightness"
 #define API_NAME_DEVICE_SET_BRIGHTNESS_FROM_SETTINGS "device_set_brightness_from_settings"
+#define API_NAME_DEVICE_SET_BRIGHTNESS_TO_SETTINGS "device_set_brightness_to_settings"
 
 static void startup(void);
 static void cleanup(void);
@@ -33,19 +34,20 @@ void (*tet_cleanup)(void) = cleanup;
 
 
 static void utc_system_device_get_display_numbers_p(void);
+static void utc_system_device_get_display_numbers_n(void);
 static void utc_system_device_get_brightness_p(void);
 static void utc_system_device_get_brightness_n_1(void);
 static void utc_system_device_get_brightness_n_2(void);
+static void utc_system_device_set_brightness_p(void);
+static void utc_system_device_set_brightness_n_1(void);
+static void utc_system_device_set_brightness_n_2(void);
 static void utc_system_device_get_max_brightness_p(void);
 static void utc_system_device_get_max_brightness_n_1(void);
 static void utc_system_device_get_max_brightness_n_2(void);
-static void utc_system_device_set_brightness_p_1(void);
-static void utc_system_device_set_brightness_p_2(void);
-static void utc_system_device_set_brightness_n_1(void);
-static void utc_system_device_set_brightness_n_2(void);
 static void utc_system_device_set_brightness_from_settings_p(void);
 static void utc_system_device_set_brightness_from_settings_n(void);
-
+static void utc_system_device_set_brightness_to_settings_p(void);
+static void utc_system_device_set_brightness_to_settings_n(void);
 
 enum {
        POSITIVE_TC_IDX = 0x01,
@@ -53,19 +55,21 @@ enum {
 };
 
 struct tet_testlist tet_testlist[] = {
-    { utc_system_device_get_display_numbers_p, POSITIVE_TC_IDX},
+       { utc_system_device_get_display_numbers_p, POSITIVE_TC_IDX},
+       { utc_system_device_get_display_numbers_n, NEGATIVE_TC_IDX },
        { utc_system_device_get_brightness_p, POSITIVE_TC_IDX },
        { utc_system_device_get_brightness_n_1, NEGATIVE_TC_IDX },
        { utc_system_device_get_brightness_n_2, NEGATIVE_TC_IDX },
+       { utc_system_device_set_brightness_p, POSITIVE_TC_IDX },
+       { utc_system_device_set_brightness_n_1, NEGATIVE_TC_IDX },
+       { utc_system_device_set_brightness_n_2, NEGATIVE_TC_IDX },
        { utc_system_device_get_max_brightness_p, POSITIVE_TC_IDX },
        { utc_system_device_get_max_brightness_n_1, NEGATIVE_TC_IDX },
        { utc_system_device_get_max_brightness_n_2, NEGATIVE_TC_IDX },
-       { utc_system_device_set_brightness_p_1, POSITIVE_TC_IDX },
-       { utc_system_device_set_brightness_p_2, POSITIVE_TC_IDX },
-       { utc_system_device_set_brightness_n_1, NEGATIVE_TC_IDX },
-       { utc_system_device_set_brightness_n_2, NEGATIVE_TC_IDX },
        { utc_system_device_set_brightness_from_settings_p, POSITIVE_TC_IDX },
        { utc_system_device_set_brightness_from_settings_n, NEGATIVE_TC_IDX },
+       { utc_system_device_set_brightness_to_settings_p, POSITIVE_TC_IDX },
+       { utc_system_device_set_brightness_to_settings_n, NEGATIVE_TC_IDX },
        { NULL, 0},
 };
 
@@ -74,53 +78,53 @@ static int cnt;
 static void startup(void)
 {
        /* start of TC */
-    power_wakeup();
-    power_lock_state(POWER_STATE_NORMAL, 0);
+       power_wakeup(false);
+       power_lock_state(POWER_STATE_NORMAL, 0);
 
-    device_get_display_numbers(&cnt);
+       device_get_display_numbers(&cnt);
 }
 
 static void cleanup(void)
 {
        /* end of TC */
-    power_unlock_state(POWER_STATE_NORMAL);
+       power_unlock_state(POWER_STATE_NORMAL);
 }
 
+/**
+ * @brief Positive test case of device_get_display_numbers()
+ */
 static void utc_system_device_get_display_numbers_p(void)
 {
-    int _cnt, err;
-    err = device_get_display_numbers(&_cnt);
-
-    if(err < 0){
-        dts_fail(API_NAME_DEVICE_GET_DISPLAY_COUNT);
-    }
-    else{
-        dts_pass(API_NAME_DEVICE_GET_DISPLAY_COUNT);
-    }
+       int _cnt, error = DEVICE_ERROR_NONE;
+       error = device_get_display_numbers(&_cnt);
+
+       dts_check_eq(API_NAME_DEVICE_GET_DISPLAY_COUNT, error, DEVICE_ERROR_NONE);
 }
 
 /**
- * @brief Positive test case of device_get_brightness()
+ * @brief Negative test case of device_get_display_numbers()
  */
-static void utc_system_device_get_brightness_p(void)
+static void utc_system_device_get_display_numbers_n(void)
 {
-    int i;
-    int value = 0;
-    int error = DEVICE_ERROR_NONE;
-
-    for(i=0; i<cnt; i++){
-        error = device_get_brightness(i, &value);
+       int error = DEVICE_ERROR_NONE;
+       error = device_get_display_numbers(NULL);
 
-        if (error != DEVICE_ERROR_NONE){
-            dts_fail(API_NAME_DEVICE_GET_BRIGHTNESS);
-        }
+       dts_check_ne(API_NAME_DEVICE_GET_DISPLAY_COUNT, error, DEVICE_ERROR_NONE);
+}
 
-        if (value < 0){
-            dts_fail(API_NAME_DEVICE_GET_BRIGHTNESS);
-        }
-    }
+/**
+ * @brief Positive test case of device_get_brightness()
+ */
+static void utc_system_device_get_brightness_p(void)
+{
+       int i;
+       int value = 0;
+       int error = DEVICE_ERROR_NONE;
 
-    dts_pass(API_NAME_DEVICE_GET_BRIGHTNESS);
+       for (i = 0; i < cnt; i++) {
+               error = device_get_brightness(i, &value);
+               dts_check_eq(API_NAME_DEVICE_GET_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+       }
 }
 
 /**
@@ -128,11 +132,11 @@ static void utc_system_device_get_brightness_p(void)
  */
 static void utc_system_device_get_brightness_n_1(void)
 {
-    int value = 0;
-    int error = DEVICE_ERROR_NONE;
-    
-    error = device_get_brightness(cnt+1, &value);
-    dts_check_ne(API_NAME_DEVICE_GET_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+       int value = 0;
+       int error = DEVICE_ERROR_NONE;
+
+       error = device_get_brightness(cnt+1, &value);
+       dts_check_ne(API_NAME_DEVICE_GET_BRIGHTNESS, error, DEVICE_ERROR_NONE);
 }
 
 /**
@@ -140,191 +144,162 @@ static void utc_system_device_get_brightness_n_1(void)
  */
 static void utc_system_device_get_brightness_n_2(void)
 {
-    int value = 0, i=0;
-    int error = DEVICE_ERROR_NONE;
-
-    for(i=0; i<cnt; i++){
-        error = device_get_brightness(i, NULL);
+       int i;
+       int error = DEVICE_ERROR_NONE;
 
-        if(error == DEVICE_ERROR_NONE){
-            dts_fail(API_NAME_DEVICE_GET_BRIGHTNESS);
-        }
-    }
-    dts_pass(API_NAME_DEVICE_GET_BRIGHTNESS);
+       for (i = 0; i < cnt; i++) {
+               error = device_get_brightness(i, NULL);
+               dts_check_ne(API_NAME_DEVICE_GET_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+       }
 }
 
 /**
- * @brief Positive test case of device_get_max_brightness()
+ * @brief Positive test case of device_set_brightness()
  */
-static void utc_system_device_get_max_brightness_p(void)
+static void utc_system_device_set_brightness_p(void)
 {
-    int value = 0, i=0;
-    int error = DEVICE_ERROR_NONE;
+       int i, max;
+       int error = DEVICE_ERROR_NONE;
+
+       dts_message(API_NAME_DEVICE_SET_BRIGHTNESS, "!@#$ cnt=%d", cnt);
 
-    for(i=0; i<cnt; i++){
-        error = device_get_max_brightness(i, &value);
+       for (i = 0; i < cnt; i++) {
+               dts_message(API_NAME_DEVICE_SET_BRIGHTNESS, "index=%d", i);
 
-        if(error != DEVICE_ERROR_NONE){
-            dts_fail(API_NAME_DEVICE_GET_MAX_BRIGHTNESS);
-        }
-    }
-    dts_pass(API_NAME_DEVICE_GET_MAX_BRIGHTNESS);
+               if (device_get_max_brightness(i, &max) != DEVICE_ERROR_NONE)
+                       dts_fail(API_NAME_DEVICE_SET_BRIGHTNESS);
+
+               error = device_set_brightness(i, max);
+               dts_check_eq(API_NAME_DEVICE_SET_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+       }
 }
 
 /**
- * @brief Negative test case of device_get_max_brightness() with bad display parameter
+ * @brief Negative test case of device_set_brightness()
  */
-static void utc_system_device_get_max_brightness_n_1(void)
+static void utc_system_device_set_brightness_n_1(void)
 {
-    int value = 0;
-    int error = DEVICE_ERROR_NONE;
-    error = device_get_max_brightness(cnt+1, &value);
+       int error = DEVICE_ERROR_NONE;
 
-    dts_check_ne(API_NAME_DEVICE_GET_MAX_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+       error = device_set_brightness(-1, 0);
+       dts_check_ne(API_NAME_DEVICE_SET_BRIGHTNESS, error, DEVICE_ERROR_NONE);
 }
 
 /**
- * @brief Negative test case of device_get_max_brightness() with null pointer
+ * @brief Negative test case of device_set_brightness()
  */
-static void utc_system_device_get_max_brightness_n_2(void)
+static void utc_system_device_set_brightness_n_2(void)
 {
-    int error = DEVICE_ERROR_NONE, i=0;
+       int i;
+       int error = DEVICE_ERROR_NONE;
 
-    for(i=0; i<cnt; i++){
-        error = device_get_max_brightness(i, NULL);
+       for (i = 0; i < cnt; i++) {
+               dts_message(API_NAME_DEVICE_SET_BRIGHTNESS, "index=%d", i);
 
-        if(error == DEVICE_ERROR_NONE){
-            dts_fail(API_NAME_DEVICE_GET_MAX_BRIGHTNESS);
-        }
-    }
-    dts_pass(API_NAME_DEVICE_GET_MAX_BRIGHTNESS);
+               error = device_set_brightness(i, -1);
+               dts_check_ne(API_NAME_DEVICE_SET_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+       }
 }
 
 /**
- * @brief Positive test case of device_set_brightness()
+ * @brief Positive test case of device_get_max_brightness()
  */
-static void utc_system_device_set_brightness_p_1(void)
+static void utc_system_device_get_max_brightness_p(void)
 {
-    int i=0;
-    int err;
-
-    dts_message(API_NAME_DEVICE_SET_BRIGHTNESS, "!@#$ cnt=%d", cnt);
-
-    for(i=0; i<cnt; i++){
-        dts_message(API_NAME_DEVICE_SET_BRIGHTNESS, "index=%d", i);
-        err = device_set_brightness(i, 0);
-        dts_message(API_NAME_DEVICE_SET_BRIGHTNESS, "error=%d", err);
-        if(err != DEVICE_ERROR_NONE) {
-            dts_fail(API_NAME_DEVICE_SET_BRIGHTNESS);
-        }
-    }
-    dts_pass(API_NAME_DEVICE_SET_BRIGHTNESS);
+       int value = 0, i;
+       int error = DEVICE_ERROR_NONE;
+
+       for (i = 0; i < cnt; i++) {
+               dts_message(API_NAME_DEVICE_GET_MAX_BRIGHTNESS, "index=%d", i);
+
+               error = device_get_max_brightness(i, &value);
+               dts_check_eq(API_NAME_DEVICE_GET_MAX_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+       }
 }
 
 /**
- * @brief Positive test case of device_set_brightness()
+ * @brief Negative test case of device_get_max_brightness() with bad display parameter
  */
-static void utc_system_device_set_brightness_p_2(void)
+static void utc_system_device_get_max_brightness_n_1(void)
 {
-    int setting = 0;
-    int max_value = 0;
-    int value = 0, i=0;
-
-    for(i=0; i<cnt; i++){
-        if( device_get_max_brightness(i, &max_value) != DEVICE_ERROR_NONE ) {
-            dts_fail(API_NAME_DEVICE_SET_BRIGHTNESS);
-        }
-
-        if( max_value < 0 ) {
-            dts_fail(API_NAME_DEVICE_SET_BRIGHTNESS);
-        }
-
-        setting = max_value > 1 ? max_value / 2 : 1;
-
-        if( device_set_brightness(i, setting) != DEVICE_ERROR_NONE ) {
-            dts_fail(API_NAME_DEVICE_SET_BRIGHTNESS);
-        }
-        dts_message(API_NAME_DEVICE_SET_BRIGHTNESS, "brightness=%d", setting);
+       int value = 0;
+       int error = DEVICE_ERROR_NONE;
+       error = device_get_max_brightness(cnt+1, &value);
 
+       dts_check_ne(API_NAME_DEVICE_GET_MAX_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+}
 
-        if ( device_get_brightness(i, &value) != DEVICE_ERROR_NONE ) {
-            dts_fail(API_NAME_DEVICE_SET_BRIGHTNESS);
-        }
-        dts_message(API_NAME_DEVICE_SET_BRIGHTNESS, "brightness=%d", value);
+/**
+ * @brief Negative test case of device_get_max_brightness() with null pointer
+ */
+static void utc_system_device_get_max_brightness_n_2(void)
+{
+       int i;
+       int error = DEVICE_ERROR_NONE;
 
-        if ( value != setting ){
-            dts_fail(API_NAME_DEVICE_SET_BRIGHTNESS);
-        }
-    }
+       for (i = 0; i < cnt; i++) {
+               dts_message(API_NAME_DEVICE_GET_MAX_BRIGHTNESS, "index=%d", i);
 
-    dts_pass(API_NAME_DEVICE_SET_BRIGHTNESS);
+               error = device_get_max_brightness(i, NULL);
+               dts_check_ne(API_NAME_DEVICE_GET_MAX_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+       }
 }
 
 /**
- * @brief Negative test case of device_set_brightness()
+ * @brief Positive test case of device_set_brightness_from_settings()
  */
-static void utc_system_device_set_brightness_n_1(void)
+static void utc_system_device_set_brightness_from_settings_p(void)
 {
-    int i=0;
-    int max_value = 0;
-
-    for(i=0; i<cnt; i++){
-        if( device_get_max_brightness(i, &max_value) != DEVICE_ERROR_NONE ) {
-            dts_fail(API_NAME_DEVICE_SET_BRIGHTNESS, "fail get_max_brightness");
-        }
+       int i;
+       int error = DEVICE_ERROR_NONE;
 
-        if( device_set_brightness(i, max_value+1) == DEVICE_ERROR_NONE ) {
-            dts_fail(API_NAME_DEVICE_SET_BRIGHTNESS, "fail set_brightness");
-        }
-    }
+       for (i = 0; i < cnt; i++) {
+               dts_message(API_NAME_DEVICE_SET_BRIGHTNESS_FROM_SETTINGS, "index=%d", i);
 
-    dts_pass(API_NAME_DEVICE_SET_BRIGHTNESS);
+               error = device_set_brightness_from_settings(i);
+               dts_check_eq(API_NAME_DEVICE_SET_BRIGHTNESS_FROM_SETTINGS, error, DEVICE_ERROR_NONE);
+       }
 }
 
 /**
- * @brief Negative test case of device_set_brightness()
+ * @brief Negative test case of device_set_brightness_from_settings() with bad display parameter
  */
-static void utc_system_device_set_brightness_n_2(void)
+static void utc_system_device_set_brightness_from_settings_n(void)
 {
-    int i=0;
+       int error = DEVICE_ERROR_NONE;
 
-    for(i=0; i<cnt; i++){
-        if( device_set_brightness(i, -1) == DEVICE_ERROR_NONE ) {
-            dts_fail(API_NAME_DEVICE_SET_BRIGHTNESS);
-        }
-    }
+       error = device_set_brightness_from_settings(cnt+1);
 
-    dts_pass(API_NAME_DEVICE_SET_BRIGHTNESS);
+       dts_check_ne(API_NAME_DEVICE_SET_BRIGHTNESS_FROM_SETTINGS, error, DEVICE_ERROR_NONE);
 }
 
 /**
- * @brief Positive test case of device_set_brightness_from_settings()
+ * @brief Positive test case of device_set_brightness_to_settings()
  */
-static void utc_system_device_set_brightness_from_settings_p(void)
+static void utc_system_device_set_brightness_to_settings_p(void)
 {
-    int i, error;
-
-    dts_message(API_NAME_DEVICE_SET_BRIGHTNESS_FROM_SETTINGS, "display cnt=%d", cnt);
-
-    for(i=0; i<cnt; i++){
-        dts_message(API_NAME_DEVICE_SET_BRIGHTNESS_FROM_SETTINGS, "index=%d", i);
-        error = device_set_brightness_from_settings(i);
-        dts_message(API_NAME_DEVICE_SET_BRIGHTNESS_FROM_SETTINGS, "error=%d", error);
-        if(error != DEVICE_ERROR_NONE) {
-            dts_fail(API_NAME_DEVICE_SET_BRIGHTNESS_FROM_SETTINGS);
-        }
-    }
-    dts_pass(API_NAME_DEVICE_SET_BRIGHTNESS_FROM_SETTINGS);
+       int i, max;
+       int error = DEVICE_ERROR_NONE;
+
+       for (i = 0; i < cnt; i++) {
+               dts_message(API_NAME_DEVICE_SET_BRIGHTNESS_TO_SETTINGS, "index=%d", i);
+
+               if (device_get_max_brightness(i, &max) != DEVICE_ERROR_NONE)
+                       dts_fail(API_NAME_DEVICE_SET_BRIGHTNESS_TO_SETTINGS);
+
+               error = device_set_brightness_to_settings(i, max);
+               dts_check_eq(API_NAME_DEVICE_SET_BRIGHTNESS_TO_SETTINGS, error, DEVICE_ERROR_NONE);
+       }
 }
 
 /**
- * @brief Negative test case of device_set_brightness_from_settings() with bad display parameter
+ * @brief Negative test case of device_set_brightness_to_settings()
  */
-static void utc_system_device_set_brightness_from_settings_n(void)
+static void utc_system_device_set_brightness_to_settings_n(void)
 {
        int error = DEVICE_ERROR_NONE;
 
-       error = device_set_brightness_from_settings(cnt+1);
+       error = device_set_brightness_to_settings(cnt+1, 0);
 
-       dts_check_ne(API_NAME_DEVICE_SET_BRIGHTNESS_FROM_SETTINGS, error, DEVICE_ERROR_NONE);
+       dts_check_ne(API_NAME_DEVICE_SET_BRIGHTNESS_TO_SETTINGS, error, DEVICE_ERROR_NONE);
 }
diff --git a/TC/testcase/utc_system_device_cpu.c b/TC/testcase/utc_system_device_cpu.c
new file mode 100644 (file)
index 0000000..ff409be
--- /dev/null
@@ -0,0 +1,212 @@
+/*
+ * 
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ * PROPRIETARY/CONFIDENTIAL
+ * 
+ * This software is the confidential and proprietary information of SAMSUNG 
+ * ELECTRONICS ("Confidential Information"). You agree and acknowledge that 
+ * this software is owned by Samsung and you shall not disclose such 
+ * Confidential Information and shall use it only in accordance with the terms 
+ * of the license agreement you entered into with SAMSUNG ELECTRONICS. SAMSUNG 
+ * make no representations or warranties about the suitability of the software, 
+ * either express or implied, including but not limited to the implied 
+ * warranties of merchantability, fitness for a particular purpose, or 
+ * non-infringement. SAMSUNG shall not be liable for any damages suffered by 
+ * licensee arising out of or related to this software.
+ * 
+ */
+#include <tet_api.h>
+#include <device.h>
+
+#define API_NAME_DEVICE_CPU_GET_SYSTEM_TIME "device_cpu_get_system_time"
+#define API_NAME_DEVICE_CPU_GET_COUNT "device_cpu_get_count"
+#define API_NAME_DEVICE_CPU_GET_CURRENT_FREQ "device_cpu_get_current_freq"
+#define API_NAME_DEVICE_CPU_GET_MAX_FREQ "device_cpu_get_max_freq"
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+
+static void utc_system_device_cpu_get_system_time_p(void);
+static void utc_system_device_cpu_get_system_time_n(void);
+static void utc_system_device_cpu_get_count_p(void);
+static void utc_system_device_cpu_get_count_n(void);
+static void utc_system_device_cpu_get_current_freq_p(void);
+static void utc_system_device_cpu_get_current_freq_n_1(void);
+static void utc_system_device_cpu_get_current_freq_n_2(void);
+static void utc_system_device_cpu_get_max_freq_p(void);
+static void utc_system_device_cpu_get_max_freq_n_1(void);
+static void utc_system_device_cpu_get_max_freq_n_2(void);
+
+
+enum {
+       POSITIVE_TC_IDX = 0x01,
+       NEGATIVE_TC_IDX,
+};
+
+struct tet_testlist tet_testlist[] = {
+       { utc_system_device_cpu_get_system_time_p, POSITIVE_TC_IDX },
+       { utc_system_device_cpu_get_system_time_n, NEGATIVE_TC_IDX },
+       { utc_system_device_cpu_get_count_p, POSITIVE_TC_IDX },
+       { utc_system_device_cpu_get_count_n, NEGATIVE_TC_IDX },
+       { utc_system_device_cpu_get_current_freq_p, POSITIVE_TC_IDX },
+       { utc_system_device_cpu_get_current_freq_n_1, NEGATIVE_TC_IDX },
+       { utc_system_device_cpu_get_current_freq_n_2, NEGATIVE_TC_IDX },
+       { utc_system_device_cpu_get_max_freq_p, POSITIVE_TC_IDX },
+       { utc_system_device_cpu_get_max_freq_n_1, NEGATIVE_TC_IDX },
+       { utc_system_device_cpu_get_max_freq_n_2, NEGATIVE_TC_IDX },
+       { NULL, 0},
+};
+
+static int cnt;
+
+static void startup(void)
+{
+       /* start of TC */
+
+       device_cpu_get_count(&cnt);
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+/**
+ * @brief Positive test case of device_cpu_get_system_time()
+ */
+static void utc_system_device_cpu_get_system_time_p(void)
+{
+       device_system_time_s stime;
+       int error = DEVICE_ERROR_NONE;
+       error = device_cpu_get_system_time(&stime);
+
+       dts_check_eq(API_NAME_DEVICE_CPU_GET_SYSTEM_TIME, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_cpu_get_system_time()
+ */
+static void utc_system_device_cpu_get_system_time_n(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_cpu_get_system_time(NULL);
+
+       dts_check_ne(API_NAME_DEVICE_CPU_GET_SYSTEM_TIME, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Positive test case of device_cpu_get_count()
+ */
+static void utc_system_device_cpu_get_count_p(void)
+{
+       int _cnt;
+       int error = DEVICE_ERROR_NONE;
+       error = device_cpu_get_count(&_cnt);
+
+       dts_check_eq(API_NAME_DEVICE_CPU_GET_COUNT, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_cpu_get_count()
+ */
+static void utc_system_device_cpu_get_count_n(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_cpu_get_count(NULL);
+
+       dts_check_ne(API_NAME_DEVICE_CPU_GET_COUNT, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Positive test case of device_cpu_get_current_freq()
+ */
+static void utc_system_device_cpu_get_current_freq_p(void)
+{
+       unsigned int freq;
+       int i;
+       int error = DEVICE_ERROR_NONE;
+
+       for (i = 0; i < cnt; ++i) {
+               dts_message(API_NAME_DEVICE_CPU_GET_CURRENT_FREQ, "index=%d", i);
+
+               error = device_cpu_get_current_freq(i, &freq);
+               dts_check_eq(API_NAME_DEVICE_CPU_GET_CURRENT_FREQ, error, DEVICE_ERROR_NONE);
+       }
+}
+
+/**
+ * @brief Negative test case of device_cpu_get_current_freq()
+ */
+static void utc_system_device_cpu_get_current_freq_n_1(void)
+{
+       unsigned int freq;
+       int error = DEVICE_ERROR_NONE;
+       error = device_cpu_get_current_freq(-1, &freq);
+
+       dts_check_ne(API_NAME_DEVICE_CPU_GET_CURRENT_FREQ, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_cpu_get_current_freq()
+ */
+static void utc_system_device_cpu_get_current_freq_n_2(void)
+{
+       int i;
+       int error = DEVICE_ERROR_NONE;
+
+       for (i = 0; i < cnt; ++i) {
+               dts_message(API_NAME_DEVICE_CPU_GET_CURRENT_FREQ, "index=%d", i);
+
+               error = device_cpu_get_current_freq(i, NULL);
+               dts_check_ne(API_NAME_DEVICE_CPU_GET_CURRENT_FREQ, error, DEVICE_ERROR_NONE);
+       }
+}
+
+/**
+ * @brief Positive test case of device_cpu_get_max_freq()
+ */
+static void utc_system_device_cpu_get_max_freq_p(void)
+{
+       unsigned int freq;
+       int i;
+       int error = DEVICE_ERROR_NONE;
+
+       for (i = 0; i < cnt; ++i) {
+               dts_message(API_NAME_DEVICE_CPU_GET_MAX_FREQ, "index=%d", i);
+
+               error = device_cpu_get_max_freq(i, &freq);
+               dts_check_eq(API_NAME_DEVICE_CPU_GET_MAX_FREQ, error, DEVICE_ERROR_NONE);
+       }
+}
+
+/**
+ * @brief Negative test case of device_cpu_get_max_freq()
+ */
+static void utc_system_device_cpu_get_max_freq_n_1(void)
+{
+       unsigned int freq;
+       int error = DEVICE_ERROR_NONE;
+       error = device_cpu_get_max_freq(-1, &freq);
+
+       dts_check_ne(API_NAME_DEVICE_CPU_GET_MAX_FREQ, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_cpu_get_max_freq()
+ */
+static void utc_system_device_cpu_get_max_freq_n_2(void)
+{
+       int i;
+       int error = DEVICE_ERROR_NONE;
+
+       for (i = 0; i < cnt; ++i) {
+               dts_message(API_NAME_DEVICE_CPU_GET_MAX_FREQ, "index=%d", i);
+
+               error = device_cpu_get_max_freq(i, NULL);
+               dts_check_ne(API_NAME_DEVICE_CPU_GET_MAX_FREQ, error, DEVICE_ERROR_NONE);
+       }
+}
diff --git a/TC/testcase/utc_system_device_flash.c b/TC/testcase/utc_system_device_flash.c
new file mode 100644 (file)
index 0000000..725272c
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * 
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ * PROPRIETARY/CONFIDENTIAL
+ * 
+ * This software is the confidential and proprietary information of SAMSUNG 
+ * ELECTRONICS ("Confidential Information"). You agree and acknowledge that 
+ * this software is owned by Samsung and you shall not disclose such 
+ * Confidential Information and shall use it only in accordance with the terms 
+ * of the license agreement you entered into with SAMSUNG ELECTRONICS. SAMSUNG 
+ * make no representations or warranties about the suitability of the software, 
+ * either express or implied, including but not limited to the implied 
+ * warranties of merchantability, fitness for a particular purpose, or 
+ * non-infringement. SAMSUNG shall not be liable for any damages suffered by 
+ * licensee arising out of or related to this software.
+ * 
+ */
+#include <tet_api.h>
+#include <device.h>
+
+#define API_NAME_DEVICE_FLASH_GET_BRIGHTNESS "device_flash_get_brightness"
+#define API_NAME_DEVICE_FLASH_SET_BRIGHTNESS "device_flash_set_brightness"
+#define API_NAME_DEVICE_FLASH_GET_MAX_BRIGHTNESS "device_flash_get_max_brightness"
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+
+static void utc_system_device_flash_get_brightness_p(void);
+static void utc_system_device_flash_get_brightness_n(void);
+static void utc_system_device_flash_set_brightness_p(void);
+static void utc_system_device_flash_set_brightness_n(void);
+static void utc_system_device_flash_get_max_brightness_p(void);
+static void utc_system_device_flash_get_max_brightness_n(void);
+
+
+enum {
+       POSITIVE_TC_IDX = 0x01,
+       NEGATIVE_TC_IDX,
+};
+
+struct tet_testlist tet_testlist[] = {
+       { utc_system_device_flash_get_brightness_p, POSITIVE_TC_IDX},
+       { utc_system_device_flash_get_brightness_n, NEGATIVE_TC_IDX },
+       { utc_system_device_flash_set_brightness_p, POSITIVE_TC_IDX},
+       { utc_system_device_flash_set_brightness_n, NEGATIVE_TC_IDX },
+       { utc_system_device_flash_get_max_brightness_p, POSITIVE_TC_IDX},
+       { utc_system_device_flash_get_max_brightness_n, NEGATIVE_TC_IDX },
+       { NULL, 0},
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+/**
+ * @brief Positive test case of device_flash_get_brightness()
+ */
+static void utc_system_device_flash_get_brightness_p(void)
+{
+       int brightness;
+       int error = DEVICE_ERROR_NONE;
+       error = device_flash_get_brightness(&brightness);
+
+       dts_check_eq(API_NAME_DEVICE_FLASH_GET_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_flash_get_brightness()
+ */
+static void utc_system_device_flash_get_brightness_n(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_flash_get_brightness(NULL);
+
+       dts_check_ne(API_NAME_DEVICE_FLASH_GET_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Positive test case of device_flash_set_brightness()
+ */
+static void utc_system_device_flash_set_brightness_p(void)
+{
+       int max;
+       int error = DEVICE_ERROR_NONE;
+
+       if (device_flash_get_max_brightness(&max) != DEVICE_ERROR_NONE)
+               dts_fail(API_NAME_DEVICE_FLASH_SET_BRIGHTNESS);
+
+       error = device_flash_set_brightness(max);
+
+       dts_check_eq(API_NAME_DEVICE_FLASH_SET_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_flash_set_brightness()
+ */
+static void utc_system_device_flash_set_brightness_n(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_flash_set_brightness(-1);
+
+       dts_check_ne(API_NAME_DEVICE_FLASH_SET_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Positive test case of device_flash_get_max_brightness()
+ */
+static void utc_system_device_flash_get_max_brightness_p(void)
+{
+       int max;
+       int error = DEVICE_ERROR_NONE;
+       error = device_flash_get_max_brightness(&max);
+
+       dts_check_eq(API_NAME_DEVICE_FLASH_GET_MAX_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_flash_get_max_brightness()
+ */
+static void utc_system_device_flash_get_max_brightness_n(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_flash_get_max_brightness(NULL);
+
+       dts_check_ne(API_NAME_DEVICE_FLASH_GET_MAX_BRIGHTNESS, error, DEVICE_ERROR_NONE);
+}
diff --git a/TC/testcase/utc_system_device_memory.c b/TC/testcase/utc_system_device_memory.c
new file mode 100644 (file)
index 0000000..de46bae
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * 
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ * PROPRIETARY/CONFIDENTIAL
+ * 
+ * This software is the confidential and proprietary information of SAMSUNG 
+ * ELECTRONICS ("Confidential Information"). You agree and acknowledge that 
+ * this software is owned by Samsung and you shall not disclose such 
+ * Confidential Information and shall use it only in accordance with the terms 
+ * of the license agreement you entered into with SAMSUNG ELECTRONICS. SAMSUNG 
+ * make no representations or warranties about the suitability of the software, 
+ * either express or implied, including but not limited to the implied 
+ * warranties of merchantability, fitness for a particular purpose, or 
+ * non-infringement. SAMSUNG shall not be liable for any damages suffered by 
+ * licensee arising out of or related to this software.
+ * 
+ */
+#include <tet_api.h>
+#include <device.h>
+
+#define API_NAME_DEVICE_MEMORY_GET_TOTAL "device_memory_get_total"
+#define API_NAME_DEVICE_MEMORY_GET_AVAILABLE "device_memory_get_available"
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+
+static void utc_system_device_memory_get_total_p(void);
+static void utc_system_device_memory_get_total_n(void);
+static void utc_system_device_memory_get_available_p(void);
+static void utc_system_device_memory_get_available_n(void);
+
+
+enum {
+       POSITIVE_TC_IDX = 0x01,
+       NEGATIVE_TC_IDX,
+};
+
+struct tet_testlist tet_testlist[] = {
+       { utc_system_device_memory_get_total_p, POSITIVE_TC_IDX },
+       { utc_system_device_memory_get_total_n, NEGATIVE_TC_IDX },
+       { utc_system_device_memory_get_available_p, POSITIVE_TC_IDX },
+       { utc_system_device_memory_get_available_n, NEGATIVE_TC_IDX },
+       { NULL, 0},
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+/**
+ * @brief Positive test case of device_memory_get_total()
+ */
+static void utc_system_device_memory_get_total_p(void)
+{
+       unsigned int total;
+       int error = DEVICE_ERROR_NONE;
+       error = device_memory_get_total(&total);
+
+       dts_check_eq(API_NAME_DEVICE_MEMORY_GET_TOTAL, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_memory_get_total()
+ */
+static void utc_system_device_memory_get_total_n(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_memory_get_total(NULL);
+
+       dts_check_ne(API_NAME_DEVICE_MEMORY_GET_TOTAL, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Positive test case of device_memory_get_available()
+ */
+static void utc_system_device_memory_get_available_p(void)
+{
+       unsigned int avail;
+       int error = DEVICE_ERROR_NONE;
+       error = device_memory_get_available(&avail);
+
+       dts_check_eq(API_NAME_DEVICE_MEMORY_GET_AVAILABLE, error, DEVICE_ERROR_NONE);
+}
+
+/**
+ * @brief Negative test case of device_memory_get_available()
+ */
+static void utc_system_device_memory_get_available_n(void)
+{
+       int error = DEVICE_ERROR_NONE;
+       error = device_memory_get_available(NULL);
+
+       dts_check_ne(API_NAME_DEVICE_MEMORY_GET_AVAILABLE, error, DEVICE_ERROR_NONE);
+}
index d0610b9..73a86a8 100644 (file)
@@ -4,12 +4,11 @@
 prefix=@PREFIX@
 exec_prefix=/usr
 libdir=/usr/lib
-includedir=/usr/include/system
+includedir=/usr/include
 
 Name: @PC_NAME@
 Description: @PACKAGE_DESCRIPTION@
 Version: @VERSION@
-Requires: @PC_REQUIRED@ 
+Requires: @PC_REQUIRED@
 Libs: -L${libdir} @PC_LDFLAGS@
-Cflags: -I${includedir}
-
+Cflags: -I${includedir} -I/usr/include/system
diff --git a/debian/README b/debian/README
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/debian/capi-system-device-dev.install b/debian/capi-system-device-dev.install
deleted file mode 100644 (file)
index 761a28b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/usr/include/*
-/usr/include/*/*
-/usr/lib/pkgconfig/*.pc
-
diff --git a/debian/capi-system-device-dev.postinst b/debian/capi-system-device-dev.postinst
deleted file mode 100644 (file)
index 1a24852..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#!/bin/sh
diff --git a/debian/capi-system-device.install b/debian/capi-system-device.install
deleted file mode 100644 (file)
index 4a755a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/usr/lib/lib*.so*
diff --git a/debian/capi-system-device.postinst b/debian/capi-system-device.postinst
deleted file mode 100644 (file)
index 1a24852..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#!/bin/sh
diff --git a/debian/changelog b/debian/changelog
deleted file mode 100644 (file)
index 7359690..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-capi-system-device (0.1.0-10) unstable; urgency=low
-
-  * add functions to control the LED that placed to camera flash.
-  * add getting battery detail function
-  * Git: slp/api/device
-  * Tag: capi-system-device_0.1.0-10
-
- -- Jiyoung Yun <jy910.yun@samsung.com>  Fri, 20 Jul 2012 16:06:31 +0900
-
-capi-system-device (0.1.0-9) unstable; urgency=low
-
-  * add a function to set the display brightness value that registed in settings
-  * Git: slp/api/device
-  * Tag: capi-system-device_0.1.0-9
-
- -- Jiyoung Yun <jy910.yun@samsung.com>  Tue, 26 Jun 2012 17:32:03 +0900
-
-capi-system-device (0.1.0-8) unstable; urgency=low
-
-  * add new battery warning status for battery full
-  * Git: slp/api/device
-  * Tag: capi-system-device_0.1.0-8
-
- -- Jinkun Jang <jinkun.jang@samsung.com>  Tue, 05 Jun 2012 16:33:50 +0900
-
-capi-system-device (0.1.0-7) unstable; urgency=low
-
-  * battery warning status API and battery warning status callback API added
-  * Git: slp/api/device
-  * Tag: capi-system-device_0.1.0-7
-
- -- Jinkun Jang <jinkun.jang@samsung.com>  Wed, 25 Apr 2012 20:51:50 +0900
-
-capi-system-device (0.1.0-6) unstable; urgency=low
-
-  * so version added
-  * Git: slp/api/device
-  * Tag: capi-system-device_0.1.0-6
-
- -- pius lee <pius.lee@samsung.com>  Thu, 16 Feb 2012 16:51:50 +0900
-
-capi-system-device (0.1.0-5) unstable; urgency=low
-
-  * battery chaging status API and battery chage percentage callback API added
-  * Git: slp/api/device
-  * Tag: capi-system-device_0.1.0-5
-
- -- pius lee <pius.lee@samsung.com>  Wed, 07 Dec 2011 02:43:55 +0900
-
-capi-system-device (0.1.0-4) unstable; urgency=low
-
-  * fix success code 
-  * Git: slp-source.sec.samsung.net:slp/api/device
-  * Tag: capi-system-device_0.1.0-4
-
- -- pius lee <pius.lee@samsung.com>  Mon, 05 Dec 2011 15:42:45 +0900
-
-capi-system-device (0.1.0-3) unstable; urgency=low
-
-  * replace boilerplate 
-  * Git: slp-source.sec.samsung.net:slp/api/device
-  * Tag: capi-system-device_0.1.0-3
-
- -- pius lee <pius.lee@samsung.com>  Fri, 02 Dec 2011 11:17:48 +0900
-
-capi-system-device (0.1.0-2) unstable; urgency=low
-
-  * replace project name from SLP to Tizen
-  * Git: slp-source.sec.samsung.net:slp/api/device
-  * Tag: capi-system-device_0.1.0-2
-
- -- pius lee <pius.lee@samsung.com>  Wed, 23 Nov 2011 13:08:30 +0900
-
-capi-system-device (0.1.0-1) unstable; urgency=low
-
-  * fix TC and update documents
-  * Git: slp-source.sec.samsung.net:slp/api/device
-  * Tag: capi-system-device_0.1.0-1
-
- -- pius lee <pius.lee@samsung.com>  Tue, 27 Sep 2011 21:53:47 +0900
-
-capi-system-device (0.0.1-6) unstable; urgency=low
-
-  * change get_display_count function to get_display_numbers
-  * Git: slp-source.sec.samsung.net:slp/api/device
-  * Tag: capi-system-device_0.0.1-6
-
- -- pius lee <pius.lee@samsung.com>  Tue, 27 Sep 2011 20:30:18 +0900
-
-capi-system-device (0.0.1-5) unstable; urgency=low
-
-  * count function return value through parameter
-  * Git: slp-source.sec.samsung.net:slp/api/device
-  * Tag: capi-system-device_0.0.1-5
-
- -- pius lee <pius.lee@samsung.com>  Tue, 27 Sep 2011 16:12:46 +0900
-
-capi-system-device (0.0.1-4) unstable; urgency=low
-
-  * Fix version number
-  * Git: slp-source.sec.samsung.net:slp/api/device
-  * Tag: capi-system-device_0.0.1-4
-
- -- pius lee <pius.lee@samsung.com>  Mon, 26 Sep 2011 21:53:36 +0900
-
-capi-system-device (0.0.1-3-docfix) unstable; urgency=low
-
-  * Fix documents 
-  * Git: slp-source.sec.samsung.net:slp/api/device
-  * Tag: capi-system-device_0.0.1-3-docfix
-
- -- pius lee <pius.lee@samsung.com>  Mon, 26 Sep 2011 21:07:34 +0900
-
-capi-system-device (0.0.1-3) unstable; urgency=low
-
-  * Remove useless errors and fix documents 
-  * Git: slp-source.sec.samsung.net:slp/api/device
-  * Tag: capi-system-device_0.0.1-3
-
- -- pius lee <pius.lee@samsung.com>  Mon, 26 Sep 2011 14:50:05 +0900
-
-capi-system-device (0.0.1-2) unstable; urgency=low
-
-  * change unknown device error to more meaningful
-  * Git: slp-source.sec.samsung.net:slp/api/device
-  * Tag: capi-system-device_0.0.1-2
-
- -- pius lee <pius.lee@samsung.com>  Mon, 29 Aug 2011 18:03:03 +0900
-
-capi-system-device (0.0.1-1) unstable; urgency=low
-
-  * Initial upload
-  * Git: slp-source.sec.samsung.net:slp/api/device
-  * Tag: capi-system-device_0.0.1-1
-
- -- pius lee <pius.lee@samsung.com>  Fri, 05 Aug 2011 11:29:51 +0900
diff --git a/debian/compat b/debian/compat
deleted file mode 100644 (file)
index 7ed6ff8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-5
diff --git a/debian/control b/debian/control
deleted file mode 100644 (file)
index 605a87d..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-
-Source: capi-system-device
-Section: libs
-Priority: extra
-Maintainer: pius lee <pius.lee@samsung.com>
-Build-Depends: debhelper (>= 5), dlog-dev, libdevman-dev, libglib2.0-dev, capi-base-common-dev, libvconf-dev  
-
-Package: capi-system-device
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: A Device library in Tizen Native API
-
-Package: capi-system-device-dev
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, capi-system-device (= ${Source-Version}), dlog-dev, libdevman-dev, capi-base-common-dev, libvconf-dev
-Description: A Device library in Tizen Native API (DEV)
-
-Package: capi-system-device-dbg
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, capi-system-device (= ${Source-Version})
-Description: A Device library in Tizen Native API (DBG)
-
diff --git a/debian/rules b/debian/rules
deleted file mode 100755 (executable)
index 7cf5611..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/make -f
-
-FULLVER ?= $(shell dpkg-parsechangelog | grep Version: | cut -d ' ' -f 2 | cut -d '-' -f 1)
-MAJORVER ?= $(shell echo $(FULLVER) | cut -d '.' -f 1)
-
-CFLAGS = -Wall -g
-
-ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
-       CFLAGS += -O0
-else
-       CFLAGS += -O2
-endif
-CMAKE_ROOT_DIR ?= $(CURDIR)
-CMAKE_BUILD_DIR ?= $(CURDIR)/cmake_build_tmp
-
-configure: configure-stamp
-configure-stamp:
-       dh_testdir
-       mkdir -p $(CMAKE_BUILD_DIR) && cd $(CMAKE_BUILD_DIR) && cmake .. -DFULLVER=${FULLVER} -DMAJORVER=${MAJORVER}
-       touch configure-stamp
-
-
-build: build-stamp
-build-stamp: configure-stamp 
-       dh_testdir
-       cd $(CMAKE_BUILD_DIR) && $(MAKE)
-       touch $@
-
-clean:
-       cd $(CMAKE_ROOT_DIR)
-       dh_testdir
-       dh_testroot
-       rm -f build-stamp configure-stamp
-       rm -f `find . -name *.pc`
-       rm -rf $(CMAKE_BUILD_DIR)
-       dh_clean
-       
-install: build
-       dh_testdir
-       dh_testroot
-       dh_clean -k 
-       dh_installdirs
-
-       cd $(CMAKE_BUILD_DIR) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install
-
-binary-indep: build install
-
-binary-arch: build install
-       dh_testdir
-       dh_testroot
-       dh_installchangelogs 
-       dh_installdocs
-       dh_installexamples
-       dh_install --sourcedir=debian/tmp
-       dh_installman
-       dh_link
-       dh_strip --dbg-package=capi-system-device-dbg
-       dh_fixperms
-       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
-
diff --git a/doc/device_doc.h b/doc/device_doc.h
new file mode 100755 (executable)
index 0000000..15325f8
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_SYSTEM_DEVICE_DOC_H__
+#define __TIZEN_SYSTEM_DEVICE_DOC_H__
+
+/**
+ * @ingroup CAPI_SYSTEM_FRAMEWORK
+ * @defgroup CAPI_SYSTEM_DEVICE_MODULE Device
+ * @brief  The DEVICE API provides functions to control devices or to get status of devices.
+ *
+ * @section CAPI_SYSTEM_DEVICE_MODULE_HEADER Required Header
+ *   \#include <device/battery.h> \n
+ *   \#include <device/callback.h> \n
+ *   \#include <device/display.h> \n
+ *   \#include <device/haptic.h> \n
+ *   \#include <device/led.h> \n
+ *   \#include <device/power.h>
+ *
+ * @section CAPI_SYSTEM_DEVICE_MODULE_OVERVIEW Overview
+ * The DEVICE API provides functions to control devices or to get status of devices.
+ *
+ *  This API allows checking of the following parameters:
+ * - Battery
+ * - Display
+ * - Haptic
+ * - LED
+ * - Power
+ */
+
+/**
+ * @ingroup CAPI_SYSTEM_DEVICE_MODULE
+ * @defgroup CAPI_SYSTEM_DEVICE_BATTERY_MODULE Battery
+ * @brief The Battery API provides functions to get information about the battery.
+ *
+ * @section CAPI_SYSTEM_DEVICE_BATTERY_MODULE_HEADER Required Header
+ *   \#include <device/battery.h> \n
+ *   \#include <device/callback.h> \n
+ *
+ * @section CAPI_SYSTEM_DEVICE_BATTERY_MODULE_OVERVIEW Overview
+ * The Battery API provides the way to get the current battery capacity value, battery state and charging state.
+ * It also supports the API for an application to receive the battery events from the system.
+ * To receive the battery event it should be described by the callback function.
+ *
+ */
+
+/**
+ * @ingroup CAPI_SYSTEM_DEVICE_MODULE
+ * @defgroup CAPI_SYSTEM_DEVICE_DISPLAY_MODULE Display
+ * @brief The Display API provides functions to control the display status.
+ *
+ * @section CAPI_SYSTEM_DEVICE_DISPLAY_MODULE_HEADER Required Header
+ *   \#include <device/display.h> \n
+ *   \#include <device/callback.h> \n
+ *
+ * @section CAPI_SYSTEM_DEVICE_DISPLAY_MODULE_OVERVIEW Overview
+ * The Display API provides the way to get supported display count and the display brightness.
+ * It also supports the API to set the display brightness.
+ * Application can receive the display event by callback function from the system.
+ *
+ */
+
+/**
+ * @ingroup CAPI_SYSTEM_DEVICE_MODULE
+ * @defgroup CAPI_SYSTEM_DEVICE_HAPTIC_MODULE Haptic
+ * @brief The Haptic API provides functions to control a vibrator.
+ *
+ * @section CAPI_SYSTEM_DEVICE_HAPTIC_MODULE_HEADER Required Header
+ *   \#include <device/haptic.h> \n
+ *
+ * @section CAPI_SYSTEM_DEVICE_HAPTIC_MODULE_OVERVIEW Overview
+ * The Haptic API provides the way to control vibration functionality of a device.
+ * It allows the management of the device's vibrator parameters, such as the vibration count and level.
+ *
+ */
+
+/**
+ * @ingroup CAPI_SYSTEM_DEVICE_MODULE
+ * @defgroup CAPI_SYSTEM_DEVICE_LED_MODULE Led
+ * @brief The Led API provides functions to control the attached led device.
+ *
+ * @section CAPI_SYSTEM_DEVICE_LED_MODULE_HEADER Required Header
+ *   \#include <device/led.h> \n
+ *
+ * @section CAPI_SYSTEM_DEVICE_LED_MODULE_OVERVIEW Overview
+ * The Led API provides the way to control the attached LED device such as the camera flash and service LED.
+ * It supports to turn on the camera flash and set the pattern to the service LED which is located to the front of a device.
+ * @section CAPI_SYSTEM_DEVICE_LED_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ *  - http://tizen.org/feature/led\n
+ *  - http://tizen.org/feature/camera.back.flash\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a devrice supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+/**
+ * @ingroup CAPI_SYSTEM_DEVICE_MODULE
+ * @defgroup CAPI_SYSTEM_DEVICE_POWER_MODULE Power
+ * @brief The Power API provides functions to control the power service.
+ *
+ * @section CAPI_SYSTEM_DEVICE_POWER_MODULE_HEADER Required Header
+ *   \#include <device/power.h> \n
+ *
+ * @section CAPI_SYSTEM_DEVICE_POWER_MODULE_OVERVIEW Overview
+ * The Power API provides the way to control the power service.
+ * It can be made to hold the specific state to avoid changing display and CPU state internally.
+ *
+ */
+
+/**
+ * @ingroup CAPI_SYSTEM_DEVICE_MODULE
+ * @defgroup CAPI_SYSTEM_DEVICE_CALLBACK_MODULE Callback
+ * @brief The Callback API provides functions to observe the changing of device state.
+ *
+ * @section CAPI_SYSTEM_DEVICE_CALLBACK_MODULE_HEADER Required Header
+ *   \#include <device/callback.h> \n
+ *
+ * @section CAPI_SYSTEM_DEVICE_CALLBACK_MODULE_OVERVIEW Overview
+ * The Callback API provides the way to observe the changing of device state.
+ *
+ *  This API allows observing of the following events:
+ * - Battery capacity
+ * - Battery level
+ * - Battery charging
+ * - Display state
+ */
+
+#endif /* __TIZEN_SYSTEM_DEVICE_DOC_H__ */
diff --git a/include/battery.h b/include/battery.h
new file mode 100755 (executable)
index 0000000..1fd2ac8
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_SYSTEM_BATTERY_H__
+#define __TIZEN_SYSTEM_BATTERY_H__
+
+#include <stdbool.h>
+#include "device-error.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * @addtogroup CAPI_SYSTEM_DEVICE_BATTERY_MODULE
+ * @{
+ */
+
+/**
+ * @brief Enumeration for the battery level status.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum
+{
+    DEVICE_BATTERY_LEVEL_EMPTY = 0,  /**< The battery goes empty. Prepare for the safe termination of the application, because the device starts a shutdown process soon after entering this level. */
+    DEVICE_BATTERY_LEVEL_CRITICAL,   /**< The battery charge is at a critical state. You may have to stop using multimedia features, because they are not guaranteed to work correctly at this battery status. */
+    DEVICE_BATTERY_LEVEL_LOW,        /**< The battery has little charge left. */
+    DEVICE_BATTERY_LEVEL_HIGH,       /**< The battery status is not to be careful. */
+    DEVICE_BATTERY_LEVEL_FULL,       /**< The battery status is full. */
+} device_battery_level_e;
+
+/**
+ * @brief Gets the battery charge percentage.
+ * @details It returns an integer value from @c 0 to @c 100 that indicates remaining battery charge
+ *          as a percentage of the maximum level.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * 
+ * @remarks In order to be notified when the battery state changes, use system_info_set_changed_cb().
+ *
+ * @param[out] percent The remaining battery charge percentage (@c 0 ~ @c 100)
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ */
+int device_battery_get_percent(int *percent);
+
+/**
+ * @brief Gets the charging state.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ *
+ * @param[out] charging The battery charging state
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ *
+ * @see device_add_callback
+ * @see device_remove_callback
+ * @see #DEVICE_CALLBACK_BATTERY_CHARGING
+ */
+int device_battery_is_charging(bool *charging);
+
+/**
+ * @brief Gets the battery level status.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ *
+ * @param[out] status The battery level status
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ *
+ * @see device_battery_level_e
+ * @see device_add_callback
+ * @see device_remove_callback
+ * @see #DEVICE_CALLBACK_BATTERY_LEVEL
+ */
+int device_battery_get_level_status(device_battery_level_e *status);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // __TIZEN_SYSTEM_BATTERY_H__
diff --git a/include/callback.h b/include/callback.h
new file mode 100755 (executable)
index 0000000..45f6cf7
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_SYSTEM_CALLBACK_H__
+#define __TIZEN_SYSTEM_CALLBACK_H__
+
+#include <stdbool.h>
+#include "device-error.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * @addtogroup CAPI_SYSTEM_DEVICE_CALLBACK_MODULE
+ * @{
+ */
+
+/**
+ * @brief Enumeration for the device state callback.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum
+{
+    DEVICE_CALLBACK_BATTERY_CAPACITY,    /**< Called when a battery charge percentage is changed */
+    DEVICE_CALLBACK_BATTERY_LEVEL,       /**< Called when a battery level is changed */
+    DEVICE_CALLBACK_BATTERY_CHARGING,    /**< Called when battery charging state is changed */
+    DEVICE_CALLBACK_DISPLAY_STATE,       /**< Called when a display state is changed */
+    DEVICE_CALLBACK_MAX
+} device_callback_e;
+
+/**
+ * @brief Called when a device status is changed.
+ * @details Each device callback has a different output param type. \n
+ *          So you need to check below output param before using this function. \n
+ *                  callback enum               output type \n
+ *          DEVICE_CALLBACK_BATTERY_CAPACITY        int \n
+ *          DEVICE_CALLBACK_BATTERY_LEVEL           int \n
+ *          DEVICE_CALLBACK_BATTERY_CHARGING        bool \n
+ *          DEVICE_CALLBACK_DISPLAY_STATE           int
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ *
+ * @param[out] type          The device type to monitor
+ * @param[out] value         The changed value \n
+ * @param[out] user_data     The user data passed from the callback registration function
+ */
+typedef void (*device_changed_cb)(device_callback_e type, void *value, void *user_data);
+
+/**
+ * @brief Adds a callback to the observing device state.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ *
+ * @param[in] type          The device type to monitor
+ * @param[in] callback      The callback function to add
+ * @param[in] user_data     The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE                   Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER      Invalid parameter
+ * @retval #DEVICE_ERROR_ALREADY_IN_PROGRESS    Operation already
+ * @retval #DEVICE_ERROR_OPERATION_FAILED       Operation failed
+ */
+int device_add_callback(device_callback_e type, device_changed_cb callback, void *user_data);
+
+/**
+ * @brief Removes a device callback function.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ *
+ * @param[in] type          The device type to monitor
+ * @param[in] callback      The callback function to remove
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ */
+int device_remove_callback(device_callback_e type, device_changed_cb callback);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // __TIZEN_SYSTEM_CALLBACK_H__
diff --git a/include/device-error.h b/include/device-error.h
new file mode 100755 (executable)
index 0000000..cfdaa52
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_SYSTEM_DEVICE_ERROR_H__
+#define __TIZEN_SYSTEM_DEVICE_ERROR_H__
+
+#include <tizen_error.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * @addtogroup CAPI_SYSTEM_DEVICE_MODULE
+ * @{
+ */
+
+/**
+ * @brief Enumerations of error code for Device.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum
+{
+       DEVICE_ERROR_NONE                = TIZEN_ERROR_NONE,                /**< Successful */
+       DEVICE_ERROR_OPERATION_FAILED    = TIZEN_ERROR_NOT_PERMITTED,       /**< Operation not permitted */
+       DEVICE_ERROR_PERMISSION_DENIED   = TIZEN_ERROR_PERMISSION_DENIED,   /**< Permission denied */
+       DEVICE_ERROR_INVALID_PARAMETER   = TIZEN_ERROR_INVALID_PARAMETER,   /**< Invalid parameter */
+       DEVICE_ERROR_ALREADY_IN_PROGRESS = TIZEN_ERROR_ALREADY_IN_PROGRESS, /**< Operation already in progress */
+       DEVICE_ERROR_NOT_SUPPORTED       = TIZEN_ERROR_NOT_SUPPORTED,       /**< Not supported in this device */
+       DEVICE_ERROR_NOT_INITIALIZED     = TIZEN_ERROR_DEVICE | 0x13,       /**< Not initialized */
+} device_error_e;
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // __TIZEN_SYSTEM_DEVICE_ERROR_H__
index 0fd8a1d..e991e23 100755 (executable)
@@ -21,7 +21,7 @@
 #define __TIZEN_SYSTEM_DEVICE_H__
 
 #include <stdbool.h>
-#include <tizen_error.h>
+#include "device-error.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -34,17 +34,6 @@ extern "C" {
  */
 
 /**
- * @brief Enumerations of error code for Device.
- */
-typedef enum
-{
-    DEVICE_ERROR_NONE              = TIZEN_ERROR_NONE,                  /**< Successful */
-    DEVICE_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER,   /**< Invalid parameter */
-    DEVICE_ERROR_OPERATION_FAILED  = TIZEN_ERROR_SYSTEM_CLASS | 0x12, /**< Operation failed */
-    DEVICE_ERROR_NOT_SUPPORTED     = TIZEN_ERROR_SYSTEM_CLASS | 0x13, /**< Not supported in this device */
-} device_error_e;
-
-/**
  * @brief Enumerations of the battery warning status
  */
 typedef enum
@@ -57,6 +46,42 @@ typedef enum
 } device_battery_warn_e;
 
 /**
+ * @brief Enumerations of the battery remaining time type
+ */
+typedef enum
+{
+    DEVICE_BATTERY_REMAINING_TIME_TO_FULLY_CHARGED,
+    DEVICE_BATTERY_REMAINING_TIME_TO_DISCHARGED
+} device_battery_remaining_time_type_e;
+
+/**
+ * @brief Enumerations of the battery level status
+ */
+typedef enum
+{
+    DEVICE_BATTERY_LEVEL_EMPTY = 0,      /**< The battery goes empty. Prepare for the safe termination of the application, because the device starts a shutdown process soon after entering this level. */
+    DEVICE_BATTERY_LEVEL_CRITICAL,  /**< The battery charge is at a critical state. You may have to stop using multimedia features, because they are not guaranteed to work correctly at this battery status. */
+    DEVICE_BATTERY_LEVEL_LOW,       /**< The battery has little charge left. */
+    DEVICE_BATTERY_LEVEL_HIGH,    /**< The battery status is not to be careful. */
+    DEVICE_BATTERY_LEVEL_FULL,      /**< The battery status is full. */
+} device_battery_level_e;
+
+
+/**
+ * @brief Structure of the time information system spent, measured in units of USER_HZ
+ */
+typedef struct {
+       unsigned long long total;
+       unsigned long long user;
+       unsigned long long nice;
+       unsigned long long system;
+       unsigned long long idle;
+       unsigned long long iowait;
+       unsigned long long irq;
+       unsigned long long softirq;
+} device_system_time_s;
+
+/**
  * @}
 */
 
@@ -84,6 +109,15 @@ typedef void (*device_battery_cb)(int percent, void *user_data);
 typedef void (*device_battery_warn_cb)(device_battery_warn_e status, void *user_data);
 
 /**
+ * @brief Called when an battery level changed
+ *
+ * @param[in] status       The remaining battery level (empty[0~1] critical[2~5] low[6~15] high[16~94] full[95~100])
+ * @param[in] user_data     The user data passed from the callback registration function
+ *
+ */
+typedef void (*device_battery_level_cb)(device_battery_level_e status, void *user_data);
+
+/**
  * @brief Gets the battery warning status.
  *
  * @param[out] status The battery warning status.
@@ -142,25 +176,6 @@ int device_battery_warning_unset_cb(void);
 int device_battery_get_percent(int *percent);
 
 /**
- * @brief Gets the battery detail charge as a per ten thousand.
- * @details It return integer value from 0 to 10000 that indicates remaining battery charge as a per ten thousand of the maximum level.
- * @remarks this function return #DEVICE_ERROR_NOT_SUPPORTED when device can not be supported detail battery information.
- *
- * @param[out] detail   The remaining battery charge as a per ten thousand. (0 ~ 10000)
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #DEVICE_ERROR_NONE                          Successful
- * @retval #DEVICE_ERROR_INVALID_PARAMETER     Invalid parameter
- * @retval #DEVICE_ERROR_OPERATION_FAILED      Operation failed
- * @retval #DEVICE_ERROR_NOT_SUPPORTED      Not supported device
- *
- * @see device_battery_is_full()
- * @see device_battery_get_percent()
- * @see device_battery_set_cb()
- */
-int device_battery_get_detail(int *detail);
-
-/**
  * @brief Get charging state
  *
  * @param[out] charging The battery charging state.
@@ -214,6 +229,35 @@ int device_battery_unset_cb(void);
 int device_battery_is_full(bool *full);
 
 /**
+ * @brief Gets the battery level status.
+ *
+ * @param[out] status The battery level status.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #DEVICE_ERROR_NONE                          Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER     Invalid parameter
+ * @retval #DEVICE_ERROR_OPERATION_FAILED      Operation failed
+ *
+ * @see device_battery_level_e
+ * @see device_battery_level_set_cb()
+ */
+int device_battery_get_level_status(device_battery_level_e *status);
+
+/**
+ * @brief Set/Unset callback to be observing battery level.
+ *
+ * @param[in] callback      The callback function to set, if you input NULL, observing is disabled
+ * @param[in] user_data     The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #DEVICE_ERROR_NONE                  Successful
+ * @retval #DEVICE_ERROR_OPERATION_FAILED      Operation failed
+ *
+ * @see device_battery_level_e
+ * @see device_battery_get_level_status()
+ */
+int device_battery_level_set_cb(device_battery_level_cb callback, void* user_data);
+
+/**
  * @brief Gets the number of display devices.
  *
  * @return The number of display devices that the device provides.
@@ -223,6 +267,8 @@ int device_battery_is_full(bool *full);
  * @see        device_get_brightness()
  * @see device_set_brightness()
  * @see device_get_max_brightness()
+ * @see device_set_brightness_from_settings()
+ * @see device_set_brightness_to_settings()
  */
 int device_get_display_numbers(int* device_number);
 
@@ -243,6 +289,7 @@ int device_get_display_numbers(int* device_number);
  * @see device_set_brightness()
  * @see device_get_max_brightness()
  * @see device_set_brightness_from_settings()
+ * @see device_set_brightness_to_settings()
  */
 int device_get_brightness(int display_index, int *brightness);
 
@@ -264,6 +311,7 @@ int device_get_brightness(int display_index, int *brightness);
  * @see device_get_max_brightness()
  * @see device_get_brightness()
  * @see device_set_brightness_from_settings()
+ * @see device_set_brightness_to_settings()
  */
 int device_set_brightness(int display_index, int brightness);
 
@@ -284,11 +332,12 @@ int device_set_brightness(int display_index, int brightness);
  * @see device_set_brightness()
  * @see device_get_brightness()
  * @see device_set_brightness_from_settings()
+ * @see device_set_brightness_to_settings()
  */
 int device_get_max_brightness(int display_index, int *max_brightness);
 
 /**
- * @brief Sets the display brightness value that registed in settings.
+ * @brief Sets the display brightness value from registed in settings.
  *
  * @details
  * This function set display brightness to condition in the settings.
@@ -307,10 +356,37 @@ int device_get_max_brightness(int display_index, int *max_brightness);
  * @see device_get_max_brightness()
  * @see device_set_brightness()
  * @see device_get_brightness()
+ * @see device_set_brightness_to_settings()
  */
 int device_set_brightness_from_settings(int display_index);
 
 /**
+ * @brief Sets the display brightness value to specific display and set to variable in settings.
+ *
+ * @details
+ * This function set given brightness value to given index of display.
+ * And also brightness variable in settings will be changed to given brightness value too.
+ *
+ * @param[in] display_index    The index of the display, it be greater than or equal to 0 and less than \n
+ *                          the number of displays returned by device_get_display_numbers().\n
+ *                          The index zero is always assigned to the main display.
+ * @param[in] brightness       The new brightness value to set \n
+ *                                                     The maximum value can be represented by device_get_max_brightness()
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #DEVICE_ERROR_NONE                          Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER     Invalid parameter
+ * @retval #DEVICE_ERROR_OPERATION_FAILED      Operation failed
+ *
+ * @see device_get_display_numbers()
+ * @see device_get_max_brightness()
+ * @see device_set_brightness()
+ * @see device_get_brightness()
+ * @see device_set_brightness_from_settings()
+ */
+int device_set_brightness_to_settings(int display_index, int brightness);
+
+/**
  * @brief Get brightness value of LED that placed to camera flash.
  *
  * @param[out] brightness brightness value of LED (0 ~ MAX)
@@ -352,6 +428,95 @@ int device_flash_set_brightness(int brightness);
 int device_flash_get_max_brightness(int *max_brightness);
 
 /**
+ * @brief Get total amount of physical RAM, in kilobytes
+ *
+ * @remark
+ *
+ * @param[out] total_mem total amount of physical RAM
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #DEVICE_ERROR_NONE                          Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER     Invalid parameter
+ * @retval #DEVICE_ERROR_OPERATION_FAILED      Operation failed
+ */
+int device_memory_get_total(unsigned int *total_mem);
+
+/**
+ * @brief Get available amount of physical RAM, in kilobytes
+ *
+ * @remark
+ * Available amount is defined by following formula currently.
+ * available mem = MemFree+Buffers+Cached+SwapCached-Shmem
+ *
+ * @param[out] avail_mem available amount of physical RAM
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #DEVICE_ERROR_NONE                          Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER     Invalid parameter
+ * @retval #DEVICE_ERROR_OPERATION_FAILED      Operation failed
+ */
+int device_memory_get_available(unsigned int *avail_mem);
+
+/**
+ * @brief Get time information the CPU has spent performing work.
+ *
+ * @remark
+ * Time units are in USER_HZ (typically hundredths of a second).
+ *
+ * @param[out] time structure of time information the CPU has spent
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #DEVICE_ERROR_NONE                          Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER     Invalid parameter
+ * @retval #DEVICE_ERROR_OPERATION_FAILED      Operation failed
+ */
+int device_cpu_get_system_time(device_system_time_s *time);
+
+/**
+ * @brief Get all of CPU count
+ *
+ * @remark
+ *
+ * @param[out] cpu_cnt total count of CPU
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #DEVICE_ERROR_NONE                          Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER     Invalid parameter
+ * @retval #DEVICE_ERROR_OPERATION_FAILED      Operation failed
+ */
+int device_cpu_get_count(int *cpu_cnt);
+
+/**
+ * @brief Get currently frequency of CPU
+ *
+ * @remark
+ *
+ * @param[in]  cpu the index of CPU which want to know
+ * @param[out] cur_freq currently frequency value of CPU
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #DEVICE_ERROR_NONE                          Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER     Invalid parameter
+ * @retval #DEVICE_ERROR_OPERATION_FAILED      Operation failed
+ */
+int device_cpu_get_current_freq(int cpu, unsigned int *cur_freq);
+
+/**
+ * @brief Get max frequency of CPU
+ *
+ * @remark
+ *
+ * @param[in]  cpu the index of CPU which want to know
+ * @param[out] max_freq max frequency value of CPU
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #DEVICE_ERROR_NONE                          Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER     Invalid parameter
+ * @retval #DEVICE_ERROR_OPERATION_FAILED      Operation failed
+ */
+int device_cpu_get_max_freq(int cpu, unsigned int *max_freq);
+
+/**
  * @}
  */
 
diff --git a/include/display.h b/include/display.h
new file mode 100755 (executable)
index 0000000..ee47b54
--- /dev/null
@@ -0,0 +1,218 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_SYSTEM_DISPLAY_H__
+#define __TIZEN_SYSTEM_DISPLAY_H__
+
+#include "device-error.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * @addtogroup CAPI_SYSTEM_DEVICE_DISPLAY_MODULE
+ * @{
+ */
+
+/**
+ * @brief Gets the number of display devices.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/display
+ *
+ * @param[out] device_number The total number of displays
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ *
+ * @see device_display_get_brightness()
+ * @see device_display_set_brightness()
+ * @see device_display_get_max_brightness()
+ */
+int device_display_get_numbers(int *device_number);
+
+/**
+ * @brief Gets the maximum brightness value that can be set.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/display
+ *
+ * @param[in] display_index     The index of the display \n
+ *                              It can be greater than or equal to @c 0 and less than
+ *                              the number of displays returned by device_display_get_numbers(). \n
+ *                              The index zero is always assigned to the main display.
+ * @param[out] max_brightness   The maximum brightness value of the display
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ *
+ * @see device_display_get_numbers()
+ * @see device_display_set_brightness()
+ * @see device_display_get_brightness()
+ */
+int device_display_get_max_brightness(int display_index, int *max_brightness);
+
+/**
+ * @brief Gets the display brightness value.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/display
+ *
+ * @param[in] display_index The index of the display \n
+ *                          It can be greater than or equal to @c 0 and less than
+ *                          the number of displays returned by device_display_get_numbers(). \n
+ *                          The index zero is always assigned to the main display.
+ * @param[out] brightness   The current brightness value of the display
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ *
+ * @see device_display_get_numbers()
+ * @see device_display_set_brightness()
+ * @see device_display_get_max_brightness()
+ */
+int device_display_get_brightness(int display_index, int *brightness);
+
+/**
+ * @brief Sets the display brightness value.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/display
+ *
+ * @param[in] display_index The index of the display \n
+ *                          It can be greater than or equal to @c 0 and less than
+ *                          the number of displays returned by device_display_get_numbers(). \n
+ *                          The index zero is always assigned to the main display.
+ * @param[in] brightness    The new brightness value to set \n
+ *                          The maximum value can be represented by device_display_get_max_brightness().
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ *
+ * @see device_display_get_numbers()
+ * @see device_display_get_max_brightness()
+ * @see device_display_get_brightness()
+ */
+int device_display_set_brightness(int display_index, int brightness);
+
+/**
+ * @brief   Enumeration for the available display states.
+ * @details An application cannot put the device into the power off state or the suspend state.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum
+{
+    DISPLAY_STATE_NORMAL,      /**< Normal state */
+    DISPLAY_STATE_SCREEN_DIM,  /**< Screen dim state */
+    DISPLAY_STATE_SCREEN_OFF,  /**< Screen off state */
+} display_state_e;
+
+/**
+ * @brief Gets the current display state.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/display
+ *
+ * @param[out] state the display state
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ *
+ * @see device_add_callback
+ * @see device_remove_callback
+ * @see #DEVICE_CALLBACK_DISPLAY_STATE
+ */
+int device_display_get_state(display_state_e *state);
+
+/**
+ * @brief Changes the display state by force.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/display
+ *
+ * @remarks Display state may not be changed immediately
+ *
+ * @param[in] state the display state
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ *
+ * @see device_power_request_lock()
+ * @see device_power_release_lock()
+ * @see device_add_callback
+ * @see device_remove_callback
+ * @see #DEVICE_CALLBACK_DISPLAY_STATE
+ *
+ * @par Example
+ * @code
+ *  ...
+ *  result = device_display_change_state(DISPLAY_STATE_SCREEN_OFF);
+ *  if( result < 0 )
+ *      printf("[ERROR] return value result =%d, \n",result);
+ *  else
+ *      printf("[SUCCESS] return value result =%d \n",result);
+ *  ...
+ * @endcode
+ */
+int device_display_change_state(display_state_e state);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // __TIZEN_SYSTEM_DISPLAY_H__
diff --git a/include/haptic.h b/include/haptic.h
new file mode 100755 (executable)
index 0000000..fb5a233
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_SYSTEM_HAPTIC_H__
+#define __TIZEN_SYSTEM_HAPTIC_H__
+
+#include "device-error.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * @addtogroup CAPI_SYSTEM_DEVICE_HAPTIC_MODULE
+ * @{
+ */
+
+/**
+ * @brief The haptic device handle.
+ */
+typedef void* haptic_device_h;
+
+/**
+ * @brief The haptic effect handle.
+ */
+typedef void* haptic_effect_h;
+
+/**
+ * @brief Gets the number of vibrators.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/haptic
+ *
+ * @param[in] device_number The number of vibrators
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ * @retval #DEVICE_ERROR_NOT_SUPPORTED      Not supported device
+ */
+int device_haptic_get_count(int *device_number);
+
+/**
+ * @brief Opens a haptic-vibration device.
+ * @details Internally, it makes a connection to the vibrator.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/haptic
+ *
+ * @remarks You must close the Haptic API using device_haptic_close().
+ *
+ * @param[in] device_index The index of device what you want to vibrate \n
+ *                         The index starts from @c 0.
+ * @param[out] device_handle The handle of vibrator
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ * @retval #DEVICE_ERROR_NOT_SUPPORTED      Not supported device
+ *
+ * @see device_haptic_close()
+ */
+int device_haptic_open(int device_index, haptic_device_h *device_handle);
+
+/**
+ * @brief Closes a haptic-vibration device.
+ * @details Internally, it disconnects the connection to the vibrator.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/haptic
+ *
+ * @param[in] device_handle The device handle from device_haptic_open()
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ * @retval #DEVICE_ERROR_NOT_SUPPORTED      Not supported device
+ *
+ * @see device_haptic_open()
+ */
+int device_haptic_close(haptic_device_h device_handle);
+
+/**
+ * @brief Vibrates during the specified time with a constant intensity.
+ * @details This function can be used to start monotonous vibration for the specified time.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/haptic
+ *
+ * @remarks @a feedback level is reserved for auto changing to save variable in the settings.
+ * @remarks @a effect_handle effect_handle value can be @c 0(zero).
+ *
+ * @param[in] device_handle The device handle from device_haptic_open()
+ * @param[in] duration The play duration in milliseconds
+ * @param[in] feedback The amount of the intensity variation (@c 0 ~ @c 100)
+ * @param[out] effect_handle The pointer to the variable that will receive a handle to the playing effect
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ * @retval #DEVICE_ERROR_NOT_SUPPORTED      Not supported device
+ *
+ * @see device_haptic_stop()
+ */
+
+int device_haptic_vibrate(haptic_device_h device_handle,
+        int duration, int feedback, haptic_effect_h *effect_handle);
+
+/**
+ * @brief Stops all vibration effects which are being played.
+ * @details This function can be used to stop all effects started by device_haptic_vibrate().
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/haptic
+ *
+ * @param[in] device_handle The device handle from device_haptic_open()
+ * @param[in] effect_handle The effect handle from device_haptic_vibrate()
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ * @retval #DEVICE_ERROR_NOT_SUPPORTED      Not supported device
+ *
+ * @see device_haptic_vibrate()
+ */
+int device_haptic_stop(haptic_device_h device_handle, haptic_effect_h effect_handle);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // __TIZEN_SYSTEM_HAPTIC_H__
diff --git a/include/led.h b/include/led.h
new file mode 100755 (executable)
index 0000000..7a659af
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_SYSTEM_LED_H__
+#define __TIZEN_SYSTEM_LED_H__
+
+#include "device-error.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * @addtogroup CAPI_SYSTEM_DEVICE_LED_MODULE
+ * @{
+ */
+
+/**
+ * @brief Gets the max brightness value of a LED that is located next to the camera.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/led
+ *
+ * @param[out] max_brightness The max brightness value of the LED
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ * @retval #DEVICE_ERROR_NOT_SUPPORTED      Not supported device
+ */
+int device_flash_get_max_brightness(int *max_brightness);
+
+/**
+ * @brief Gets the brightness value of a LED that is located next to the camera.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/led
+ *
+ * @param[out] brightness The brightness value of LED (@c 0 ~ MAX)
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ * @retval #DEVICE_ERROR_NOT_SUPPORTED      Not supported device
+ */
+int device_flash_get_brightness(int *brightness);
+
+/**
+ * @brief Sets the brightness value of a LED that is located next to the camera.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/led
+ *
+ * @param[in] brightness The brightness value of LED (@c 0 ~ MAX)
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ * @retval #DEVICE_ERROR_NOT_SUPPORTED      Not supported device
+ */
+int device_flash_set_brightness(int brightness);
+
+/**
+ * @brief Enumeration for custom LED flags.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum {
+    LED_CUSTOM_DUTY_ON = 1 << 0,                /**< blink LED */
+    LED_CUSTOM_DEFAULT = (LED_CUSTOM_DUTY_ON),  /**< Default flag */
+} led_custom_flags;
+
+/**
+ * @brief Plays the custom effect of the service LED that is located to the front of a device.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/led
+ *
+ * @param[in] on    Turn on time in milliseconds
+ * @param[in] off   Turn off time in milliseconds
+ * @param[in] color The Color value \n
+ *                  The first byte means opaque and the other 3 bytes are RGB values.
+ * @param[in] flags The combination of enum #led_custom_flags
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ * @retval #DEVICE_ERROR_NOT_SUPPORTED      Not supported device
+ */
+int device_led_play_custom(int on, int off, unsigned int color, unsigned int flags);
+
+/**
+ * @brief Stops the custom effect of the service LED that is located to the front of a device.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/led
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ * @retval #DEVICE_ERROR_NOT_SUPPORTED      Not supported device
+ */
+int device_led_stop_custom(void);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // __TIZEN_SYSTEM_LED_H__
diff --git a/include/power.h b/include/power.h
new file mode 100755 (executable)
index 0000000..39dd8c0
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_SYSTEM_POWER_H__
+#define __TIZEN_SYSTEM_POWER_H__
+
+#include <stdbool.h>
+#include "device-error.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * @addtogroup CAPI_SYSTEM_DEVICE_POWER_MODULE
+ * @{
+ */
+
+/**
+ * @brief Enumeration for lock type.
+ * @details Each enum ensures that the suitable device is on
+ *          until all the lock requests have been released or after a timeout. \n
+ *                                 CPU    Brightness \n
+ *          POWER_LOCK_CPU          ON      OFF \n
+ *          POWER_LOCK_DISPLAY      ON      ON(normal) \n
+ *          POWER_LOCK_DISPLAY_DIM  ON      ON(dim)
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ *
+ * @remarks An application can lock the specific type.
+ * @remarks These enums are mutually exclusive.
+ * @remarks You cannot combine with an enum below.
+ *
+ */
+typedef enum
+{
+    POWER_LOCK_CPU,         /**< CPU lock */
+    POWER_LOCK_DISPLAY,     /**< Display normal lock */
+    POWER_LOCK_DISPLAY_DIM, /**< Display dim lock */
+} power_lock_e;
+
+/**
+ * @brief Locks the given lock state for a specified time.
+ * @details After the given @a timeout_ms (in milliseconds), unlock the given lock state automatically.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/display
+ *
+ * @remarks If the process dies, then every lock will be removed.
+ *
+ * @param[in] type          The power type to request lock
+ * @param[in] timeout_ms    The positive number in milliseconds or @c 0 for permanent lock \n
+ *                          So you must release the permanent lock of power state with #device_power_release_lock() if @a timeout_ms is zero.
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ *
+ * @see device_power_release_lock()
+ */
+int device_power_request_lock(power_lock_e type, int timeout_ms);
+
+/**
+ * @brief Releases the given lock state locked before.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/display
+ *
+ * @param[in] type The power type to release lock
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ *
+ * @see device_power_request_lock()
+ */
+int device_power_release_lock(power_lock_e type);
+
+/**
+ * @brief Changes the current power state to the normal/dim state.
+ *
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/display
+ *
+ * @param[in] dim Set @c true to set the dim state,
+ *                otherwise set @c false to not set the dim state
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ *
+ * @post The device will be in #DISPLAY_STATE_NORMAL state.
+ */
+int device_power_wakeup(bool dim);
+
+/**
+ * @internal
+ * @brief Reboots the device.
+ * @details Will not return if the reboot is successful. \n
+ *          It operates asynchronously.
+ *
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/reboot
+ *
+ * @param[in] reason Pass to the platform and kernel to request special reboot reason, or null.
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ *
+ * @retval #DEVICE_ERROR_NONE               Successful
+ * @retval #DEVICE_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #DEVICE_ERROR_PERMISSION_DENIED  Permission denied
+ * @retval #DEVICE_ERROR_OPERATION_FAILED   Operation failed
+ */
+int device_power_reboot(const char *reason);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // __TIZEN_SYSTEM_POWER_H__
diff --git a/packaging/capi-system-device.manifest b/packaging/capi-system-device.manifest
new file mode 100644 (file)
index 0000000..b631abe
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+<request>
+       <domain  name="_"/>
+</request>
+</manifest>
index 433ff18..4f181cb 100644 (file)
@@ -1,16 +1,19 @@
 Name:       capi-system-device
 Summary:    A Device library in TIZEN C API
-Version: 0.1.0
-Release:    8
-Group:      TO_BE/FILLED_IN
-License:    TO BE FILLED IN
+Version:    0.1.0
+Release:    18
+Group:      System/Libraries
+License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.gz
+Source1:    capi-system-device.manifest
 BuildRequires:  cmake
-BuildRequires:  pkgconfig(glib-2.0)
-BuildRequires:  pkgconfig(devman)
+BuildRequires:  pkgconfig(deviced)
 BuildRequires:  pkgconfig(capi-base-common)
+BuildRequires:  pkgconfig(capi-system-info)
 BuildRequires:  pkgconfig(dlog)
 BuildRequires:  pkgconfig(vconf)
+BuildRequires:  pkgconfig(dbus-1)
+BuildRequires:  pkgconfig(dbus-glib-1)
 
 Requires(post): /sbin/ldconfig  
 Requires(postun): /sbin/ldconfig
@@ -32,6 +35,10 @@ Requires: %{name} = %{version}-%{release}
 
 
 %build
+%if 0%{?tizen_build_binary_release_type_eng}
+export CFLAGS+=" -DTIZEN_ENGINEER_MODE"
+%endif
+cp %{SOURCE1} .
 MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
 cmake . -DCMAKE_INSTALL_PREFIX=/usr -DFULLVER=%{version} -DMAJORVER=${MAJORVER}
 
@@ -41,17 +48,21 @@ make %{?jobs:-j%jobs}
 rm -rf %{buildroot}
 %make_install
 
+mkdir -p %{buildroot}/usr/share/license
+cp LICENSE %{buildroot}/usr/share/license/%{name}
+
 %post -p /sbin/ldconfig
 
 %postun -p /sbin/ldconfig
 
 
 %files
+%manifest capi-system-device.manifest
 %{_libdir}/libcapi-system-device.so.*
+%{_datadir}/license/%{name}
 
 %files devel
-%{_includedir}/system/device.h
+%{_includedir}/device/*.h
+%{_includedir}/system/*.h
 %{_libdir}/pkgconfig/*.pc
 %{_libdir}/libcapi-system-device.so
-
-
diff --git a/src/battery.c b/src/battery.c
new file mode 100644 (file)
index 0000000..a8c34af
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <vconf.h>
+
+#include "battery.h"
+#include "common.h"
+#include "dbus.h"
+
+#define METHOD_GET_PERCENT             "GetPercent"
+
+int device_battery_get_percent(int *percent)
+{
+       int ret;
+
+       if (!percent)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_BATTERY, DEVICED_INTERFACE_BATTERY,
+                       METHOD_GET_PERCENT, NULL, NULL);
+       if (ret < 0)
+               return errno_to_device_error(ret);
+
+       *percent = ret;
+       return DEVICE_ERROR_NONE;
+}
+
+int device_battery_is_charging(bool *charging)
+{
+       int ret, val;
+
+       if (!charging)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW, &val);
+       if (ret < 0 || val < 0 || val > 1)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       *charging = val;
+       return DEVICE_ERROR_NONE;
+}
+
+int device_battery_get_level_status(device_battery_level_e *status)
+{
+       int val, ret;
+
+       if (!status)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_LEVEL_STATUS, &val);
+       if (ret < 0)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       if (val == VCONFKEY_SYSMAN_BAT_LEVEL_EMPTY)
+               *status = DEVICE_BATTERY_LEVEL_EMPTY;
+       else if (val == VCONFKEY_SYSMAN_BAT_LEVEL_CRITICAL)
+               *status = DEVICE_BATTERY_LEVEL_CRITICAL;
+       else if (val == VCONFKEY_SYSMAN_BAT_LEVEL_LOW)
+               *status = DEVICE_BATTERY_LEVEL_LOW;
+       else if (val == VCONFKEY_SYSMAN_BAT_LEVEL_HIGH)
+               *status = DEVICE_BATTERY_LEVEL_HIGH;
+       else if (val == VCONFKEY_SYSMAN_BAT_LEVEL_FULL)
+               *status = DEVICE_BATTERY_LEVEL_FULL;
+       else
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       return DEVICE_ERROR_NONE;
+}
diff --git a/src/callback.c b/src/callback.c
new file mode 100644 (file)
index 0000000..39dd5ef
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <vconf.h>
+
+#include "callback.h"
+#include "battery.h"
+#include "display.h"
+#include "common.h"
+#include "dbus.h"
+#include "list.h"
+
+struct device_cb_info {
+       device_changed_cb cb;
+       void *data;
+};
+
+static dd_list *device_cb_list[DEVICE_CALLBACK_MAX];
+
+static void battery_capacity_cb(keynode_t *key, void *data)
+{
+       static device_callback_e type = DEVICE_CALLBACK_BATTERY_CAPACITY;
+       struct device_cb_info *cb_info;
+       dd_list *elem;
+       int val;
+
+       val = vconf_keynode_get_int(key);
+
+       /* invoke the each callback with value */
+       DD_LIST_FOREACH(device_cb_list[type], elem, cb_info)
+               cb_info->cb(type, (void*)val, cb_info->data);
+}
+
+static void battery_charging_cb(keynode_t *key, void *data)
+{
+       static device_callback_e type = DEVICE_CALLBACK_BATTERY_CHARGING;
+       struct device_cb_info *cb_info;
+       dd_list *elem;
+       int val;
+
+       val = vconf_keynode_get_int(key);
+
+       /* invoke the each callback with value */
+       DD_LIST_FOREACH(device_cb_list[type], elem, cb_info)
+               cb_info->cb(type, (void*)val, cb_info->data);
+}
+
+static void battery_level_cb(keynode_t *key, void *data)
+{
+       static device_callback_e type = DEVICE_CALLBACK_BATTERY_LEVEL;
+       struct device_cb_info *cb_info;
+       dd_list *elem;
+       int val, status;
+
+       val = vconf_keynode_get_int(key);
+
+       if (val == VCONFKEY_SYSMAN_BAT_LEVEL_EMPTY)
+               status = DEVICE_BATTERY_LEVEL_EMPTY;
+       else if (val == VCONFKEY_SYSMAN_BAT_LEVEL_CRITICAL)
+               status = DEVICE_BATTERY_LEVEL_CRITICAL;
+       else if (val == VCONFKEY_SYSMAN_BAT_LEVEL_LOW)
+               status = DEVICE_BATTERY_LEVEL_LOW;
+       else if (val == VCONFKEY_SYSMAN_BAT_LEVEL_HIGH)
+               status = DEVICE_BATTERY_LEVEL_HIGH;
+       else if (val == VCONFKEY_SYSMAN_BAT_LEVEL_FULL)
+               status = DEVICE_BATTERY_LEVEL_FULL;
+       else
+               status = -1;
+
+       /* invoke the each callback with value */
+       DD_LIST_FOREACH(device_cb_list[type], elem, cb_info)
+               cb_info->cb(type, (void*)status, cb_info->data);
+}
+
+static void display_changed_cb(keynode_t *key, void *data)
+{
+       static device_callback_e type = DEVICE_CALLBACK_DISPLAY_STATE;
+       struct device_cb_info *cb_info;
+       dd_list *elem;
+       display_state_e state;
+       int val;
+
+       val = vconf_keynode_get_int(key);
+
+       switch(val) {
+       case 1: state = DISPLAY_STATE_NORMAL;
+                       break;
+       case 2: state = DISPLAY_STATE_SCREEN_DIM;
+                       break;
+       case 3: state = DISPLAY_STATE_SCREEN_OFF;
+                       break;
+       default: state = -1;
+                       break;
+       }
+
+       /* invoke the each callback with value */
+       DD_LIST_FOREACH(device_cb_list[type], elem, cb_info)
+               cb_info->cb(type, (void*)state, cb_info->data);
+}
+
+static int register_request(device_callback_e type)
+{
+       switch (type) {
+       case DEVICE_CALLBACK_BATTERY_CAPACITY:
+               return vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_CAPACITY,
+                               battery_capacity_cb, NULL);
+       case DEVICE_CALLBACK_BATTERY_LEVEL:
+               return vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_LEVEL_STATUS,
+                               battery_level_cb, NULL);
+       case DEVICE_CALLBACK_BATTERY_CHARGING:
+               return vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW,
+                               battery_charging_cb, NULL);
+       case DEVICE_CALLBACK_DISPLAY_STATE:
+               return vconf_notify_key_changed(VCONFKEY_PM_STATE,
+                               display_changed_cb, NULL);
+       default:
+               break;
+       }
+
+       return -EINVAL;
+}
+
+static int release_request(device_callback_e type)
+{
+       switch (type) {
+       case DEVICE_CALLBACK_BATTERY_CAPACITY:
+               return vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_CAPACITY,
+                               battery_capacity_cb);
+       case DEVICE_CALLBACK_BATTERY_LEVEL:
+               return vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_LEVEL_STATUS,
+                               battery_level_cb);
+       case DEVICE_CALLBACK_BATTERY_CHARGING:
+               return vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW,
+                               battery_charging_cb);
+       case DEVICE_CALLBACK_DISPLAY_STATE:
+               return vconf_ignore_key_changed(VCONFKEY_PM_STATE,
+                               display_changed_cb);
+       default:
+               break;
+       }
+
+       return -EINVAL;
+}
+
+int device_add_callback(device_callback_e type, device_changed_cb cb, void *data)
+{
+       struct device_cb_info *cb_info;
+       dd_list *elem;
+       int ret, n;
+
+       if (type < 0 || type >= DEVICE_CALLBACK_MAX)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       if (!cb)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       /* check if it is the first request */
+       n = DD_LIST_LENGTH(device_cb_list[type]);
+       if (n == 0) {
+               ret = register_request(type);
+               if (ret < 0)
+                       return DEVICE_ERROR_OPERATION_FAILED;
+       }
+
+       /* check for the same request */
+       DD_LIST_FOREACH(device_cb_list[type], elem, cb_info) {
+               if (cb_info->cb == cb)
+                       return DEVICE_ERROR_ALREADY_IN_PROGRESS;
+       }
+
+       /* add device changed callback to list (local) */
+       cb_info = malloc(sizeof(struct device_cb_info));
+       if (!cb_info)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       cb_info->cb = cb;
+       cb_info->data = data;
+
+       DD_LIST_APPEND(device_cb_list[type], cb_info);
+
+       return DEVICE_ERROR_NONE;
+}
+
+int device_remove_callback(device_callback_e type, device_changed_cb cb)
+{
+       struct device_cb_info *cb_info;
+       dd_list *elem;
+       int ret, n;
+
+       if (type < 0 || type >= DEVICE_CALLBACK_MAX)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       if (!cb)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       /* search for the same element with callback */
+       DD_LIST_FOREACH(device_cb_list[type], elem, cb_info) {
+               if (cb_info->cb == cb)
+                       break;
+       }
+
+       if (!cb_info)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       /* remove device callback from list (local) */
+       DD_LIST_REMOVE(device_cb_list[type], cb_info);
+       free(cb_info);
+
+       /* check if this callback is last element */
+       n = DD_LIST_LENGTH(device_cb_list[type]);
+       if (n == 0) {
+               ret = release_request(type);
+               if (ret < 0)
+                       return DEVICE_ERROR_OPERATION_FAILED;
+       }
+
+       return DEVICE_ERROR_NONE;
+}
diff --git a/src/common.h b/src/common.h
new file mode 100644 (file)
index 0000000..dd01165
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __COMMON_H__
+#define __COMMON_H__
+
+#ifdef FEATURE_DEVICE_DLOG
+    #define LOG_TAG "SYSTEM_DEVICE"
+    #include <dlog.h>
+    #define _D(fmt, args...)   SLOGD(fmt, ##args)
+    #define _I(fmt, args...)   SLOGI(fmt, ##args)
+    #define _E(fmt, args...)   SLOGE(fmt, ##args)
+#else
+    #define _D(x, ...)
+    #define _I(x, ...)
+    #define _E(x, ...)
+#endif
+
+#ifndef __CONSTRUCTOR__
+#define __CONSTRUCTOR__ __attribute__ ((constructor))
+#endif
+
+#include "device-error.h"
+
+static inline int errno_to_device_error(int err)
+{
+       if (err == -ECOMM)
+               return DEVICE_ERROR_PERMISSION_DENIED;
+       else if (err == -ENODEV || err == -ENOENT)
+               return DEVICE_ERROR_NOT_SUPPORTED;
+       else if (err < 0)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       return DEVICE_ERROR_NONE;
+}
+
+#endif /* __COMMON_H__ */
diff --git a/src/cpu.c b/src/cpu.c
new file mode 100644 (file)
index 0000000..688c694
--- /dev/null
+++ b/src/cpu.c
@@ -0,0 +1,171 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include "device.h"
+#include "common.h"
+
+#define PROC_STAT              "/proc/stat"
+
+#define PROC_CPU_PRESENT                               "/sys/devices/system/cpu/present"
+#define PROC_SCALING_CUR_FREQ                  "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_cur_freq"
+#define PROC_SCALING_MAX_FREQ                  "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_max_freq"
+
+
+int device_cpu_get_count(int *cpu_cnt)
+{
+       FILE *fp;
+       int ret;
+       int st, ed;
+
+       if (cpu_cnt == NULL)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       fp = fopen(PROC_CPU_PRESENT, "r");
+       if (!fp)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       ret = fscanf(fp, "%u-%u", &st, &ed);
+       fclose(fp);
+       if (ret != 2)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       *cpu_cnt = ed+1;
+       return DEVICE_ERROR_NONE;
+}
+
+static int _get_systime(device_system_time_s *st)
+{
+       FILE *fp;
+       char buf[4096];
+       char *s;
+
+       assert(st);
+
+       fp = fopen(PROC_STAT, "r");
+       if (!fp)
+               return -1;
+
+       s = fgets(buf, sizeof(buf), fp);
+       fclose(fp);
+       if (!s)
+               return -1;
+
+       s = strchr(buf, ' ');
+       if (!s)
+               return -1;
+
+       s++;
+       st->user = strtol(s, &s, 10);
+       st->nice = strtol(s, &s, 10);
+       st->system = strtol(s, &s, 10);
+       st->idle = strtol(s, &s, 10);
+       st->iowait = strtol(s, &s, 10);
+       st->irq = strtol(s, &s, 10);
+       st->softirq = strtol(s, &s, 10);
+
+       return 0;
+}
+
+int device_cpu_get_system_time(device_system_time_s *time)
+{
+       int ret;
+       device_system_time_s st;
+
+       if (time == NULL)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       ret = _get_systime(&st);
+       if (ret < 0)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       st.total = st.user+st.nice+st.system+st.idle+st.iowait+st.irq+st.softirq;
+       *time = st;
+       return DEVICE_ERROR_NONE;
+}
+
+static int _get_uint(const char *path, unsigned int *val)
+{
+       FILE *fp;
+       unsigned int num;
+       int ret;
+
+       assert(path);
+       assert(val);
+
+       fp = fopen(path, "r");
+       if (!fp)
+               return -1;
+
+       ret = fscanf(fp, "%u", &num);
+       fclose(fp);
+       if (ret != 1)
+               return -1;
+
+       *val = num;
+       return 0;
+}
+
+int device_cpu_get_current_freq(int cpu, unsigned int *cur_freq)
+{
+       char path[FILENAME_MAX];
+       int ret;
+       int count;
+       unsigned int cur;
+
+       if (cur_freq == NULL)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       ret = device_cpu_get_count(&count);
+       if (ret != DEVICE_ERROR_NONE || cpu < 0 || cpu >= count)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       snprintf(path, sizeof(path), PROC_SCALING_CUR_FREQ, cpu);
+       ret = _get_uint(path, &cur);
+       if (ret < 0)
+               cur = 0;
+
+       *cur_freq = cur;
+       return DEVICE_ERROR_NONE;
+}
+
+int device_cpu_get_max_freq(int cpu, unsigned int *max_freq)
+{
+       char path[FILENAME_MAX];
+       int ret;
+       int count;
+       unsigned int max;
+
+       if (max_freq == NULL)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       ret = device_cpu_get_count(&count);
+       if (ret != DEVICE_ERROR_NONE || cpu < 0 || cpu >= count)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       snprintf(path, sizeof(path), PROC_SCALING_MAX_FREQ, cpu);
+       ret = _get_uint(path, &max);
+       if (ret < 0)
+               max = 0;
+
+       *max_freq = max;
+       return DEVICE_ERROR_NONE;
+}
diff --git a/src/dbus.c b/src/dbus.c
new file mode 100644 (file)
index 0000000..bf54116
--- /dev/null
@@ -0,0 +1,235 @@
+/*
+ * system-dbus
+ *
+ * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd.
+ *
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <errno.h>
+#include <dbus/dbus-glib-lowlevel.h>
+
+#include "common.h"
+#include "dbus.h"
+
+#define DBUS_REPLY_TIMEOUT     (-1)
+
+struct pending_call_data {
+       dbus_pending_cb func;
+       void *data;
+};
+
+static int append_variant(DBusMessageIter *iter, const char *sig, char *param[])
+{
+       char *ch;
+       int i;
+       int int_type;
+       uint64_t int64_type;
+
+       if (!sig || !param)
+               return 0;
+
+       for (ch = (char*)sig, i = 0; *ch != '\0'; ++i, ++ch) {
+               switch (*ch) {
+               case 'i':
+                       int_type = atoi(param[i]);
+                       dbus_message_iter_append_basic(iter, DBUS_TYPE_INT32, &int_type);
+                       break;
+               case 'u':
+                       int_type = strtoul(param[i], NULL, 10);
+                       dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &int_type);
+                       break;
+               case 't':
+                       int64_type = atoll(param[i]);
+                       dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT64, &int64_type);
+                       break;
+               case 's':
+                       dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &param[i]);
+                       break;
+               default:
+                       return -EINVAL;
+               }
+       }
+
+       return 0;
+}
+
+int dbus_method_sync(const char *dest, const char *path,
+               const char *interface, const char *method,
+               const char *sig, char *param[])
+{
+       DBusConnection *conn;
+       DBusMessage *msg;
+       DBusMessageIter iter;
+       DBusMessage *reply;
+       DBusError err;
+       int ret, result;
+
+       conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
+       if (!conn) {
+               _E("dbus_bus_get error");
+               return -EPERM;
+       }
+
+       msg = dbus_message_new_method_call(dest, path, interface, method);
+       if (!msg) {
+               _E("dbus_message_new_method_call(%s:%s-%s)",
+                       path, interface, method);
+               return -EBADMSG;
+       }
+
+       dbus_message_iter_init_append(msg, &iter);
+       ret = append_variant(&iter, sig, param);
+       if (ret < 0) {
+               _E("append_variant error(%d) %s %s:%s-%s",
+                       ret, dest, path, interface, method);
+               dbus_message_unref(msg);
+               return ret;
+       }
+
+       dbus_error_init(&err);
+
+       reply = dbus_connection_send_with_reply_and_block(conn, msg, DBUS_REPLY_TIMEOUT, &err);
+       dbus_message_unref(msg);
+       if (!reply) {
+               _E("dbus_connection_send error(%s:%s) %s %s:%s-%s",
+                       err.name, err.message, dest, path, interface, method);
+               dbus_error_free(&err);
+               return -ECOMM;
+       }
+
+       ret = dbus_message_get_args(reply, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
+       dbus_message_unref(reply);
+       if (!ret) {
+               _E("no message : [%s:%s] %s %s:%s-%s",
+                       err.name, err.message, dest, path, interface, method);
+               dbus_error_free(&err);
+               return -ENOMSG;
+       }
+
+       return result;
+}
+
+static void cb_pending(DBusPendingCall *pending, void *user_data)
+{
+       DBusMessage *msg;
+       DBusError err;
+       struct pending_call_data *data = user_data;
+       int ret;
+
+       ret = dbus_pending_call_get_completed(pending);
+       if (!ret) {
+               _I("dbus_pending_call_get_completed() fail");
+               dbus_pending_call_unref(pending);
+               return;
+       }
+
+       dbus_error_init(&err);
+       msg = dbus_pending_call_steal_reply(pending);
+       if (!msg) {
+               _E("no message : [%s:%s]", err.name, err.message);
+
+               if (data->func) {
+                       dbus_set_error(&err, "org.tizen.system.deviced.NoReply",
+                                       "There was no reply to this method call");
+                       data->func(data->data, NULL, &err);
+                       dbus_error_free(&err);
+               }
+               return;
+       }
+
+       ret = dbus_set_error_from_message(&err, msg);
+       if (ret) {
+               _E("error msg : [%s:%s]", err.name, err.message);
+
+               if (data->func)
+                       data->func(data->data, NULL, &err);
+               dbus_error_free(&err);
+       } else {
+               if (data->func)
+                       data->func(data->data, msg, &err);
+       }
+
+       dbus_message_unref(msg);
+       dbus_pending_call_unref(pending);
+}
+
+int dbus_method_async_with_reply(const char *dest, const char *path,
+               const char *interface, const char *method,
+               const char *sig, char *param[], dbus_pending_cb cb, int timeout, void *data)
+{
+       DBusConnection *conn;
+       DBusMessage *msg;
+       DBusMessageIter iter;
+       DBusPendingCall *pending = NULL;
+       struct pending_call_data *pdata;
+       int ret;
+
+       conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
+       if (!conn) {
+               _E("dbus_bus_get error");
+               return -EPERM;
+       }
+
+       /* this function should be invoked to receive dbus messages
+        * does nothing if it's already been done */
+       dbus_connection_setup_with_g_main(conn, NULL);
+
+       msg = dbus_message_new_method_call(dest, path, interface, method);
+       if (!msg) {
+               _E("dbus_message_new_method_call(%s:%s-%s)",
+                       path, interface, method);
+               return -EBADMSG;
+       }
+
+       dbus_message_iter_init_append(msg, &iter);
+       ret = append_variant(&iter, sig, param);
+       if (ret < 0) {
+               _E("append_variant error(%d)%s %s:%s-%s",
+                       ret, dest, path, interface, method);
+               dbus_message_unref(msg);
+               return ret;
+       }
+
+       ret = dbus_connection_send_with_reply(conn, msg, &pending, timeout);
+       if (!ret) {
+               dbus_message_unref(msg);
+               _E("dbus_connection_send error(%s %s:%s-%s)",
+                       dest, path, interface, method);
+               return -ECOMM;
+       }
+
+       dbus_message_unref(msg);
+
+       if (cb && pending) {
+               pdata = malloc(sizeof(struct pending_call_data));
+               if (!pdata)
+                       return -ENOMEM;
+
+               pdata->func = cb;
+               pdata->data = data;
+
+               ret = dbus_pending_call_set_notify(pending, cb_pending, pdata, free);
+               if (!ret) {
+                       free(pdata);
+                       dbus_pending_call_cancel(pending);
+                       return -ECOMM;
+               }
+       }
+
+       return 0;
+}
diff --git a/src/dbus.h b/src/dbus.h
new file mode 100644 (file)
index 0000000..0beac19
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * system-dbus
+ *
+ * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd.
+ *
+ * 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 __DBUS_H__
+#define __DBUS_H__
+
+#include <dbus/dbus.h>
+
+#define DEVICED_BUS_NAME               "org.tizen.system.deviced"
+#define DEVICED_OBJECT_PATH            "/Org/Tizen/System/DeviceD"
+#define DEVICED_INTERFACE_NAME DEVICED_BUS_NAME
+
+/* Display service: start/stop display(pm), get/set brightness operations about display */
+#define DEVICED_PATH_DISPLAY                DEVICED_OBJECT_PATH"/Display"
+#define DEVICED_INTERFACE_DISPLAY           DEVICED_INTERFACE_NAME".display"
+
+/* Battery service */
+#define DEVICED_PATH_BATTERY                DEVICED_OBJECT_PATH"/Battery"
+#define DEVICED_INTERFACE_BATTERY           DEVICED_INTERFACE_NAME".Battery"
+
+/* Haptic service: operatioins about haptic */
+#define DEVICED_PATH_HAPTIC                 DEVICED_OBJECT_PATH"/Haptic"
+#define DEVICED_INTERFACE_HAPTIC            DEVICED_INTERFACE_NAME".haptic"
+
+/* Led service: play/stop led operations about led */
+#define DEVICED_PATH_LED                    DEVICED_OBJECT_PATH"/Led"
+#define DEVICED_INTERFACE_LED               DEVICED_INTERFACE_NAME".Led"
+
+/* Power service: request to reboot */
+#define DEVICED_PATH_POWER                  DEVICED_OBJECT_PATH"/Power"
+#define DEVICED_INTERFACE_POWER             DEVICED_INTERFACE_NAME".power"
+
+int dbus_method_sync(const char *dest, const char *path,
+               const char *interface, const char *method,
+               const char *sig, char *param[]);
+
+typedef void (*dbus_pending_cb)(void *data, DBusMessage *msg, DBusError *err);
+
+int dbus_method_async_with_reply(const char *dest, const char *path,
+               const char *interface, const char *method,
+               const char *sig, char *param[], dbus_pending_cb cb, int timeout, void *data);
+
+#endif
index d16810e..b309667 100644 (file)
  * 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. 
+ * limitations under the License.
  */
 
 
-
-#define LOG_TAG "TIZEN_SYSTEM_DEVICE"
-
-#include <string.h>
 #include <stdio.h>
-#include <devman.h>
-#include <device.h>
+#include <string.h>
 #include <errno.h>
-#include <dlog.h>
+#include <dd-display.h>
+#include <dd-battery.h>
 #include <vconf.h>
 
-#define _MSG_DEVICE_ERROR_INVALID_PARAMETER "Invalid parameter"
-#define _MSG_DEVICE_ERROR_OPERATION_FAILED "Operation failed"
-#define _MSG_DEVICE_ERROR_NOT_SUPPORTED "Not supported in this device"
-
-#define RETURN_ERR_MSG(err_code, msg) \
-    do { \
-        LOGE("[%s] "_MSG_##err_code"(0x%08x) : %s", __FUNCTION__, err_code, msg); \
-        return err_code; \
-    }while(0)
-
-#define RETURN_ERR(err_code) \
-    do { \
-        LOGE("[%s] "_MSG_##err_code"(0x%08x)", __FUNCTION__, err_code); \
-        return err_code; \
-    }while(0)
+#include "device.h"
+#include "common.h"
 
-static int _display[] = {
-    DEV_DISPLAY_0,
-    DEV_DISPLAY_1,
-};
+#define CHECK_ERR(val) \
+       do {    \
+               if (val < 0) {          \
+                       if (errno == ENODEV)    \
+                               return DEVICE_ERROR_NOT_SUPPORTED;      \
+                       return DEVICE_ERROR_OPERATION_FAILED;   \
+               }       \
+       } while(0)
 
 int device_get_display_numbers(int* device_number)
 {
-    if(device_number == NULL)
-        RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
+       if(device_number == NULL)
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
-    *device_number = device_get_display_count();
-    if(*device_number < 0)
-        RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
+       *device_number = display_get_count();
+       CHECK_ERR(*device_number);
 
-    return DEVICE_ERROR_NONE;
-}
-
-int device_battery_get_percent(int* percent)
-{
-       if (percent == NULL)
-               RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
-
-       int pct = device_get_battery_pct();
-       if (pct < 0) {
-               RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-       } else {
-               *percent = pct;
-       }
        return DEVICE_ERROR_NONE;
 }
 
-int device_battery_get_detail(int* percent)
+int device_get_brightness(int disp_idx, int* value)
 {
-       if (percent == NULL)
-               RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
+       int val, max_id, ret;
 
-       int pct = device_get_battery_pct_raw();
-       if (pct == -ENODEV)
-               RETURN_ERR(DEVICE_ERROR_NOT_SUPPORTED);
+       if(value == NULL)
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
-       if (pct < 0)
-               RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
+       ret = device_get_display_numbers(&max_id);
+       if (ret != DEVICE_ERROR_NONE)
+               return ret;
 
-       *percent = pct;
-       return DEVICE_ERROR_NONE;
-}
+       if(disp_idx < 0 || disp_idx >= max_id)
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
-int device_battery_is_full(bool* full)
-{
-       if (full == NULL)
-               RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
+       val = display_get_brightness();
+       CHECK_ERR(val);
 
-       int f = device_is_battery_full();
-       if (f < 0) {
-               RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-       } else {
-               *full = (f == 1) ? true : false;
-       }
+       *value = val;
        return DEVICE_ERROR_NONE;
 }
 
-int device_get_brightness(int disp_idx, int* value)
+int device_set_brightness(int disp_idx, int new_value)
 {
-       int val, disp, max_id;
+       int max_value, val, max_id, ret;
 
-    if(value == NULL) RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
+       if(new_value < 0)
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
-    if(device_get_display_numbers(&max_id) < 0)
-        RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
+       ret = device_get_display_numbers(&max_id);
+       if (ret != DEVICE_ERROR_NONE)
+               return ret;
 
-    if(disp_idx < 0 || disp_idx >= max_id)
-        RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
+       if(disp_idx < 0 || disp_idx >= max_id)
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
-    disp = _display[disp_idx];
+       ret = device_get_max_brightness(disp_idx, &max_value);
+       if (ret != DEVICE_ERROR_NONE)
+               return ret;
 
-    if(value == NULL)
-        RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
+       if(new_value > max_value)
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
-       val = device_get_display_brt(disp);
-       
-       if(val < 0) {
-        RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-    }
-       else
-               *value = val;
+       val = display_set_brightness(new_value);
+       CHECK_ERR(val);
 
        return DEVICE_ERROR_NONE;
 }
 
-int device_set_brightness(int disp_idx, int new_value)
+int device_get_max_brightness(int disp_idx, int* max_value)
 {
-    int max_value, val;
-       int disp, max_id;
-    
-    if(device_get_display_numbers(&max_id) < 0)
-        RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-
-    if(disp_idx < 0 || disp_idx >= max_id)
-        RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
+       int val, max_id, ret;
 
-    disp = _display[disp_idx];
+       if(max_value == NULL)
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
-    if(new_value < 0)
-        RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
+       ret = device_get_display_numbers(&max_id);
+       _E("max id : %d", max_id);
+       if (ret != DEVICE_ERROR_NONE)
+               return ret;
 
-    device_get_max_brightness(disp, &max_value);
+       if(disp_idx < 0 || disp_idx >= max_id)
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
-    if(new_value > max_value)
-        RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
+       val = display_get_max_brightness();
+       CHECK_ERR(val);
 
-       val = device_set_display_brt(disp, new_value);
-       if(val < 0) {
-        RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-    }
+       *max_value = val;
        return DEVICE_ERROR_NONE;
 }
 
-int device_get_max_brightness(int disp_idx, int* max_value)
+int device_set_brightness_from_settings(int disp_idx)
 {
-       int val, disp, max_id;
-    
-    if(device_get_display_numbers(&max_id) < 0)
-        RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-
-    if(disp_idx < 0 || disp_idx >= max_id)
-        RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
-       
-    disp = _display[disp_idx];
-
-    if(max_value == NULL)
-        RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
-
-       val = device_get_max_brt(disp);
-       
-       if(val < 0) {
-        RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-    }
-       else
-               *max_value = val;
+       int max_id, val, ret;
+
+       ret = device_get_display_numbers(&max_id);
+       if (ret != DEVICE_ERROR_NONE)
+               return ret;
+
+       if(disp_idx < 0 || disp_idx >= max_id)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       val = display_release_brightness();
+       CHECK_ERR(val);
 
        return DEVICE_ERROR_NONE;
 }
 
-int device_set_brightness_from_settings(int disp_idx)
+int device_set_brightness_to_settings(int disp_idx, int new_value)
 {
-       int max_id, disp, val;
+       int max_value, val, max_id, ret;
+
+       if(new_value < 0)
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
-       if(device_get_display_numbers(&max_id) < 0)
-               RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
+       ret = device_get_display_numbers(&max_id);
+       if (ret != DEVICE_ERROR_NONE)
+               return ret;
 
        if(disp_idx < 0 || disp_idx >= max_id)
-               RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
-       disp = _display[disp_idx];
+       ret = device_get_max_brightness(disp_idx, &max_value);
+       if (ret != DEVICE_ERROR_NONE)
+               return ret;
 
-       val = device_release_brt_ctrl(disp);
-       if(val < 0) {
-               RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-       }
+       if(new_value > max_value)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       val = display_set_brightness_with_setting(new_value);
+       CHECK_ERR(val);
 
        return DEVICE_ERROR_NONE;
 }
 
-int device_battery_is_charging(bool *charging)
+int device_battery_is_full(bool* full)
 {
-    // VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW
-    int value, err;
-    
-    if(charging == NULL){
-        RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
-    }
-
-    err  = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW, &value);
-
-    if(err <0){
-        RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-    }
-    if(value == 1){
-        *charging = true;
-    }else if(value == 0){
-        *charging = false;
-    }else{
-        RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-    }
-    return DEVICE_ERROR_NONE;
+       if (full == NULL)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       int f = battery_is_full();
+       CHECK_ERR(f);
+
+       *full = (f == 1) ? true : false;
+       return DEVICE_ERROR_NONE;
 }
 
 static device_battery_cb changed_callback = NULL;
@@ -234,69 +176,70 @@ static void* changed_callback_user_data = NULL;
 
 static void battery_changed_inside_cb(keynode_t* key, void* user_data)
 {
-    char* keyname = vconf_keynode_get_name(key);
-
-    if(keyname != NULL && changed_callback != NULL && strcmp(keyname, VCONFKEY_SYSMAN_BATTERY_CAPACITY) == 0){
-        int percent = 0;
-        if(vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CAPACITY, &percent) == 0){
-            changed_callback(percent, changed_callback_user_data);
-        }
-    }
+       char* keyname = vconf_keynode_get_name(key);
+
+       if (keyname != NULL && changed_callback != NULL && strcmp(keyname, VCONFKEY_SYSMAN_BATTERY_CAPACITY) == 0) {
+               int percent = 0;
+               if (vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CAPACITY, &percent) == 0) {
+                       changed_callback(percent, changed_callback_user_data);
+               }
+       }
 }
 
 int device_battery_set_cb(device_battery_cb callback, void* user_data)
 {
-    // VCONFKEY_SYSMAN_BATTERY_CAPACITY
-    int err;
-    if(callback == NULL)
-        RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
+       // VCONFKEY_SYSMAN_BATTERY_CAPACITY
+       int err;
+       if (callback == NULL)
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
-    changed_callback = callback;
-    changed_callback_user_data = user_data;
+       changed_callback = callback;
+       changed_callback_user_data = user_data;
 
-    err = vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_CAPACITY, battery_changed_inside_cb, NULL);
-    if(err < 0){
-        RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
-    }
+       err = vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_CAPACITY, battery_changed_inside_cb, NULL);
+       if (err < 0)
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
-    return DEVICE_ERROR_NONE;
+       return DEVICE_ERROR_NONE;
 }
+
 int device_battery_unset_cb(void)
 {
-    int err = vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_CAPACITY, battery_changed_inside_cb);
-    if(err < 0){
-        RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-    }
-    changed_callback = NULL;
-    changed_callback_user_data = NULL;
-
-    return DEVICE_ERROR_NONE;
+       int err = vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_CAPACITY, battery_changed_inside_cb);
+       if (err < 0)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       changed_callback = NULL;
+       changed_callback_user_data = NULL;
+
+       return DEVICE_ERROR_NONE;
 }
 
 int device_battery_get_warning_status(device_battery_warn_e *status)
 {
-       if (status == NULL) RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
+       if (status == NULL)
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
        int value, err;
 
        err = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &value);
+       if (err < 0)
+               return DEVICE_ERROR_OPERATION_FAILED;
 
-       if(err < 0){
-               RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-       }
-       if(value == VCONFKEY_SYSMAN_BAT_POWER_OFF){
+       if (value == VCONFKEY_SYSMAN_BAT_POWER_OFF) {
                *status = DEVICE_BATTERY_WARN_EMPTY;
-       }else if(value == VCONFKEY_SYSMAN_BAT_CRITICAL_LOW){
+       } else if (value == VCONFKEY_SYSMAN_BAT_CRITICAL_LOW) {
                *status = DEVICE_BATTERY_WARN_CRITICAL;
-       }else if(value == VCONFKEY_SYSMAN_BAT_WARNING_LOW){
+       } else if (value == VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
                *status = DEVICE_BATTERY_WARN_LOW;
-       }else if(value == VCONFKEY_SYSMAN_BAT_NORMAL){
+       } else if (value == VCONFKEY_SYSMAN_BAT_NORMAL) {
                *status = DEVICE_BATTERY_WARN_NORMAL;
-       }else if(value == VCONFKEY_SYSMAN_BAT_FULL){
+       } else if (value == VCONFKEY_SYSMAN_BAT_FULL) {
                *status = DEVICE_BATTERY_WARN_FULL;
-       }else{
-               RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
+       } else {
+               return DEVICE_ERROR_OPERATION_FAILED;
        }
+
        return DEVICE_ERROR_NONE;
 }
 
@@ -307,9 +250,9 @@ static void battery_warn_changed_inside_cb(keynode_t* key, void* user_data)
 {
        char* keyname = vconf_keynode_get_name(key);
 
-       if(keyname != NULL && warn_changed_callback != NULL && strcmp(keyname, VCONFKEY_SYSMAN_BATTERY_STATUS_LOW) == 0){
+       if (keyname != NULL && warn_changed_callback != NULL && strcmp(keyname, VCONFKEY_SYSMAN_BATTERY_STATUS_LOW) == 0) {
                int bat_state = 0;
-               if(vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat_state) == 0){
+               if (vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat_state) == 0) {
                        warn_changed_callback(bat_state-1, warn_changed_callback_user_data);
                }
        }
@@ -319,16 +262,16 @@ int device_battery_warning_set_cb(device_battery_warn_cb callback, void* user_da
 {
        // VCONFKEY_SYSMAN_BATTERY_STATUS_LOW
        int err;
-       if(callback == NULL)
-               RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
+
+       if (callback == NULL)
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
        warn_changed_callback = callback;
        warn_changed_callback_user_data = user_data;
 
        err = vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, battery_warn_changed_inside_cb, NULL);
-       if(err < 0){
-               RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
-       }
+       if (err < 0)
+               return DEVICE_ERROR_INVALID_PARAMETER;
 
        return DEVICE_ERROR_NONE;
 }
@@ -336,62 +279,11 @@ int device_battery_warning_set_cb(device_battery_warn_cb callback, void* user_da
 int device_battery_warning_unset_cb(void)
 {
        int err = vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, battery_warn_changed_inside_cb);
-       if(err < 0){
-               RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-       }
+       if (err < 0)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
        warn_changed_callback = NULL;
        warn_changed_callback_user_data = NULL;
 
        return DEVICE_ERROR_NONE;
 }
-
-int device_flash_get_brightness(int *brightness)
-{
-       int value;
-
-       if (brightness == NULL)
-               RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
-
-       value = device_get_led_brt();
-
-       if (value < 0)
-               RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-
-       *brightness = value;
-
-       return DEVICE_ERROR_NONE;
-}
-
-int device_flash_set_brightness(int brightness)
-{
-       int max_value, value;
-
-       device_flash_get_max_brightness(&max_value);
-
-       if (brightness < 0 || brightness > max_value)
-               RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
-
-       value = device_set_led_brt(brightness);
-
-       if (value < 0)
-               RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-
-       return DEVICE_ERROR_NONE;
-}
-
-int device_flash_get_max_brightness(int *max_brightness)
-{
-       int value;
-
-       if (max_brightness == NULL)
-               RETURN_ERR(DEVICE_ERROR_INVALID_PARAMETER);
-
-       value = device_get_max_led();
-
-       if (value < 0)
-               RETURN_ERR(DEVICE_ERROR_OPERATION_FAILED);
-
-       *max_brightness = value;
-
-       return DEVICE_ERROR_NONE;
-}
diff --git a/src/display.c b/src/display.c
new file mode 100644 (file)
index 0000000..658bfff
--- /dev/null
@@ -0,0 +1,222 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. 
+ */
+
+
+#include <stdio.h>
+#include <errno.h>
+#include <vconf.h>
+
+#include "display.h"
+#include "common.h"
+#include "dbus.h"
+
+#define METHOD_GET_DISPLAY_COUNT    "GetDisplayCount"
+#define METHOD_GET_MAX_BRIGHTNESS   "GetMaxBrightness"
+#define METHOD_GET_BRIGHTNESS   "GetBrightness"
+#define METHOD_SET_BRIGHTNESS   "SetBrightness"
+#define METHOD_CHANGE_STATE            "changestate"
+
+#define STR_LCD_OFF   "lcdoff"
+#define STR_LCD_DIM   "lcddim"
+#define STR_LCD_ON    "lcdon"
+
+static int display_cnt = -1;
+struct display {
+       int max;
+} *display_arr;
+
+static int alloc_display(void)
+{
+       display_arr = malloc(sizeof(struct display) * display_cnt);
+       if (!display_arr)
+               return -ENOMEM;
+       memset(display_arr, -1, sizeof(struct display));
+       return 0;
+}
+
+int device_display_get_numbers(int *device_number)
+{
+       int ret;
+
+       if (!device_number)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       /* if it is a first request */
+       if (display_cnt < 0) {
+               ret = dbus_method_sync(DEVICED_BUS_NAME,
+                               DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
+                               METHOD_GET_DISPLAY_COUNT, NULL, NULL);
+               if (ret < 0)
+                       return errno_to_device_error(ret);
+               display_cnt = ret;
+               alloc_display();
+       }
+
+       *device_number = display_cnt;
+       _I("device_number : %d", *device_number);
+       return DEVICE_ERROR_NONE;
+}
+
+int device_display_get_max_brightness(int display_index, int *max_brightness)
+{
+       int ret;
+
+       if (!max_brightness)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       if (display_cnt < 0)
+               device_display_get_numbers(&display_cnt);
+
+       if (display_index < 0 || display_index >= display_cnt)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       if (!display_arr && alloc_display() < 0)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       if (display_arr[display_index].max < 0) {
+               ret = dbus_method_sync(DEVICED_BUS_NAME,
+                               DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
+                               METHOD_GET_MAX_BRIGHTNESS, NULL, NULL);
+               if (ret < 0)
+                       return errno_to_device_error(ret);
+               display_arr[display_index].max = ret;
+       }
+
+       *max_brightness = display_arr[display_index].max;
+       return DEVICE_ERROR_NONE;
+}
+
+int device_display_get_brightness(int display_index, int *brightness)
+{
+       int ret;
+
+       if (!brightness)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       if (display_cnt < 0)
+               device_display_get_numbers(&display_cnt);
+
+       if (display_index < 0 || display_index >= display_cnt)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
+                       METHOD_GET_BRIGHTNESS, NULL, NULL);
+       if (ret < 0)
+               return errno_to_device_error(ret);
+
+       *brightness = ret;
+       return DEVICE_ERROR_NONE;
+}
+
+int device_display_set_brightness(int display_index, int brightness)
+{
+       char *arr[1];
+       char str_val[32];
+       int ret, max;
+
+       if (display_cnt < 0)
+               device_display_get_numbers(&display_cnt);
+
+       if (display_index < 0 || display_index >= display_cnt)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       if (display_arr[display_index].max < 0)
+               device_display_get_max_brightness(display_index, &max);
+
+       if (brightness < 0 || brightness > display_arr[display_index].max)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       snprintf(str_val, sizeof(str_val), "%d", brightness);
+       arr[0] = str_val;
+
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
+                       METHOD_SET_BRIGHTNESS, "i", arr);
+       if (ret < 0)
+               return errno_to_device_error(ret);
+
+       return DEVICE_ERROR_NONE;
+}
+
+int device_display_get_state(display_state_e *state)
+{
+       int ret, val;
+
+       if (!state)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       ret = vconf_get_int(VCONFKEY_PM_STATE, &val);
+       if (ret < 0)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       if (val == VCONFKEY_PM_STATE_NORMAL)
+               *state = DISPLAY_STATE_NORMAL;
+       else if (val == VCONFKEY_PM_STATE_LCDDIM)
+               *state = DISPLAY_STATE_SCREEN_DIM;
+       else if (val == VCONFKEY_PM_STATE_LCDOFF)
+               *state = DISPLAY_STATE_SCREEN_OFF;
+       else
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       return DEVICE_ERROR_NONE;
+}
+
+static char *get_state_str(display_state_e state)
+{
+       switch (state) {
+       case DISPLAY_STATE_NORMAL:
+               return STR_LCD_ON;
+       case DISPLAY_STATE_SCREEN_DIM:
+               return STR_LCD_DIM;
+       case DISPLAY_STATE_SCREEN_OFF:
+               return STR_LCD_OFF;
+       default:
+               break;
+       }
+       return NULL;
+}
+
+int device_display_change_state(display_state_e state)
+{
+       char *str, *arr[1];
+       int ret;
+
+       if (state < DISPLAY_STATE_NORMAL || state > DISPLAY_STATE_SCREEN_OFF)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       arr[0] = "";
+
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
+                       METHOD_CHANGE_STATE, "s", arr);
+       if (ret == -ECOMM || ret == -EACCES || ret == -EPERM)
+               return DEVICE_ERROR_PERMISSION_DENIED;
+
+       str = get_state_str(state);
+       if (!str)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       arr[0] = str;
+
+       ret = dbus_method_async_with_reply(DEVICED_BUS_NAME,
+                       DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
+                       METHOD_CHANGE_STATE, "s", arr, NULL, -1, NULL);
+       if (ret < 0)
+               return errno_to_device_error(ret);
+
+       return DEVICE_ERROR_NONE;
+}
diff --git a/src/haptic.c b/src/haptic.c
new file mode 100644 (file)
index 0000000..6d70a62
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+ * deviced
+ *
+ * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd.
+ *
+ * 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 <stdio.h>
+#include <errno.h>
+
+#include "haptic.h"
+#include "common.h"
+#include "dbus.h"
+
+#define METHOD_GET_COUNT                       "GetCount"
+#define METHOD_OPEN_DEVICE                     "OpenDevice"
+#define METHOD_CLOSE_DEVICE                    "CloseDevice"
+#define METHOD_STOP_DEVICE                     "StopDevice"
+#define METHOD_VIBRATE_MONOTONE                "VibrateMonotone"
+
+enum feedback_e
+{
+       HAPTIC_FEEDBACK_MIN = 0,
+       HAPTIC_FEEDBACK_MAX = 100,
+};
+
+enum priority_e
+{
+       HAPTIC_PRIORITY_MIN = 0,
+       HAPTIC_PRIORITY_MIDDLE,
+       HAPTIC_PRIORITY_HIGH,
+};
+
+int device_haptic_get_count(int *device_number)
+{
+       int ret;
+
+       if (!device_number)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       /* request to deviced to get haptic count */
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_HAPTIC, DEVICED_INTERFACE_HAPTIC,
+                       METHOD_GET_COUNT, NULL, NULL);
+       if (ret < 0)
+               return errno_to_device_error(ret);
+
+       *device_number = ret;
+       return DEVICE_ERROR_NONE;
+}
+
+int device_haptic_open(int device_index, haptic_device_h *device_handle)
+{
+       char str_index[32];
+       char *arr[1];
+       int ret, max;
+
+       ret = device_haptic_get_count(&max);
+       if (ret < 0)
+               return ret;
+
+       if (device_index < 0 || device_index >= max)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       if (!device_handle)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       snprintf(str_index, sizeof(str_index), "%d", device_index);
+       arr[0] = str_index;
+
+       /* request to deviced to open haptic device */
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_HAPTIC, DEVICED_INTERFACE_HAPTIC,
+                       METHOD_OPEN_DEVICE, "i", arr);
+       if (ret < 0)
+               return errno_to_device_error(ret);
+
+       *device_handle = (haptic_device_h)ret;
+       return DEVICE_ERROR_NONE;
+}
+
+int device_haptic_close(haptic_device_h device_handle)
+{
+       char str_handle[32];
+       char *arr[1];
+       int ret;
+
+       if (!device_handle)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       snprintf(str_handle, sizeof(str_handle), "%u", (unsigned int)device_handle);
+       arr[0] = str_handle;
+
+       /* request to deviced to open haptic device */
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_HAPTIC, DEVICED_INTERFACE_HAPTIC,
+                       METHOD_CLOSE_DEVICE, "u", arr);
+       if (ret < 0)
+               return errno_to_device_error(ret);
+
+       return DEVICE_ERROR_NONE;
+}
+
+int device_haptic_vibrate(haptic_device_h device_handle, int duration, int feedback, haptic_effect_h *effect_handle)
+{
+       char str_handle[32];
+       char str_duration[32];
+       char str_feedback[32];
+       char str_priority[32];
+       char *arr[4];
+       int ret, priority;
+
+       if (!device_handle)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       if (duration < 0)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       if (feedback < HAPTIC_FEEDBACK_MIN || feedback > HAPTIC_FEEDBACK_MAX)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       priority = HAPTIC_PRIORITY_MIN;
+
+       snprintf(str_handle, sizeof(str_handle), "%u", (unsigned int)device_handle);
+       arr[0] = str_handle;
+       snprintf(str_duration, sizeof(str_duration), "%d", duration);
+       arr[1] = str_duration;
+       snprintf(str_feedback, sizeof(str_feedback), "%d", feedback);
+       arr[2] = str_feedback;
+       snprintf(str_priority, sizeof(str_priority), "%d", priority);
+       arr[3] = str_priority;
+
+       /* request to deviced to vibrate haptic device */
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_HAPTIC, DEVICED_INTERFACE_HAPTIC,
+                       METHOD_VIBRATE_MONOTONE, "uiii", arr);
+       if (ret < 0)
+               return errno_to_device_error(ret);
+
+       if (effect_handle)
+               *effect_handle = (haptic_effect_h)ret;
+
+       return DEVICE_ERROR_NONE;
+}
+
+int device_haptic_stop(haptic_device_h device_handle, haptic_effect_h effect_handle)
+{
+       char str_handle[32];
+       char *arr[1];
+       int ret;
+
+       if (!device_handle)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       /* TODO : support to stop haptic effect */
+       snprintf(str_handle, sizeof(str_handle), "%u", (unsigned int)device_handle);
+       arr[0] = str_handle;
+
+       /* request to deviced to open haptic device */
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_HAPTIC, DEVICED_INTERFACE_HAPTIC,
+                       METHOD_STOP_DEVICE, "u", arr);
+       if (ret < 0)
+               return errno_to_device_error(ret);
+
+       return DEVICE_ERROR_NONE;
+}
diff --git a/src/led.c b/src/led.c
new file mode 100644 (file)
index 0000000..4e84b07
--- /dev/null
+++ b/src/led.c
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. 
+ */
+
+
+#include <stdio.h>
+#include <stdbool.h>
+#include <errno.h>
+#include <system_info.h>
+
+#include "led.h"
+#include "common.h"
+#include "dbus.h"
+
+#define METHOD_GET_MAX_BRIGHTNESS      "GetMaxBrightness"
+#define METHOD_GET_BRIGHTNESS          "GetBrightness"
+#define METHOD_SET_BRIGHTNESS          "SetBrightness"
+#define METHOD_PLAY_CUSTOM     "playcustom"
+#define METHOD_STOP_CUSTOM     "stopcustom"
+
+#define FRONT_LED_FEATURE              "tizen.org/feature/led"
+#define CAMERA_LED_FEATURE             "tizen.org/feature/camera.back.flash"
+
+static bool support_front_led;
+static bool support_camera_led;
+
+static void __attribute__((constructor)) init(void)
+{
+       int ret;
+       bool val;
+
+       ret = system_info_get_platform_bool(FRONT_LED_FEATURE, &val);
+       if (ret == SYSTEM_INFO_ERROR_NONE && val)
+               support_front_led = true;
+
+       ret = system_info_get_platform_bool(CAMERA_LED_FEATURE, &val);
+       if (ret == SYSTEM_INFO_ERROR_NONE && val)
+               support_camera_led = true;
+}
+
+int device_flash_get_max_brightness(int *max_brightness)
+{
+       int ret;
+
+       if (!support_camera_led)
+               return DEVICE_ERROR_NOT_SUPPORTED;
+
+       if (!max_brightness)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_LED, DEVICED_INTERFACE_LED,
+                       METHOD_GET_MAX_BRIGHTNESS, NULL, NULL);
+       if (ret < 0)
+               return errno_to_device_error(ret);
+
+       *max_brightness = ret;
+       return DEVICE_ERROR_NONE;
+}
+
+int device_flash_get_brightness(int *brightness)
+{
+       int ret;
+
+       if (!support_camera_led)
+               return DEVICE_ERROR_NOT_SUPPORTED;
+
+       if (!brightness)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_LED, DEVICED_INTERFACE_LED,
+                       METHOD_GET_BRIGHTNESS, NULL, NULL);
+       if (ret < 0)
+               return errno_to_device_error(ret);
+
+       *brightness = ret;
+       return DEVICE_ERROR_NONE;
+}
+
+int device_flash_set_brightness(int brightness)
+{
+       char *arr[2];
+       char buf_val[32];
+       char buf_noti[32];
+       int max, ret;
+
+       if (!support_camera_led)
+               return DEVICE_ERROR_NOT_SUPPORTED;
+
+       ret = device_flash_get_max_brightness(&max);
+       if (ret < 0)
+               return ret;
+
+       if (brightness < 0 || brightness > max)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       snprintf(buf_val, sizeof(buf_val), "%d", brightness);
+       arr[0] = buf_val;
+       snprintf(buf_noti, sizeof(buf_noti), "%d", 0);
+       arr[1] = buf_noti;
+
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_LED, DEVICED_INTERFACE_LED,
+                       METHOD_SET_BRIGHTNESS, "ii", arr);
+       if (ret < 0)
+               return errno_to_device_error(ret);
+
+       return DEVICE_ERROR_NONE;
+}
+
+int device_led_play_custom(int on, int off, unsigned int color, unsigned int flags)
+{
+       char *arr[4];
+       char str_on[32], str_off[32];
+       char str_color[32], str_flags[32];
+       int ret;
+
+       if (!support_front_led)
+               return DEVICE_ERROR_NOT_SUPPORTED;
+
+       if (on < 0 || off < 0)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       snprintf(str_on, sizeof(str_on), "%d", on);
+       arr[0] = str_on;
+       snprintf(str_off, sizeof(str_off), "%d", off);
+       arr[1] = str_off;
+       snprintf(str_color, sizeof(str_color), "%lu", (long unsigned int)color);
+       arr[2] = str_color;
+       snprintf(str_flags, sizeof(str_flags), "%lu", (long unsigned int)flags);
+       arr[3] = str_flags;
+
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_LED, DEVICED_INTERFACE_LED,
+                       METHOD_PLAY_CUSTOM, "iiuu", arr);
+       if (ret < 0)
+               return errno_to_device_error(ret);
+
+       return DEVICE_ERROR_NONE;
+}
+
+int device_led_stop_custom(void)
+{
+       int ret;
+
+       if (!support_front_led)
+               return DEVICE_ERROR_NOT_SUPPORTED;
+
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_LED, DEVICED_INTERFACE_LED,
+                       METHOD_STOP_CUSTOM, NULL, NULL);
+       if (ret < 0)
+               return errno_to_device_error(ret);
+
+       return DEVICE_ERROR_NONE;
+}
diff --git a/src/list.h b/src/list.h
new file mode 100644 (file)
index 0000000..712ca70
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * deviced
+ *
+ * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __LIST_H__
+#define __LIST_H__
+
+#include <stdio.h>
+
+#define EINA_LIST_APPEND(a, b) \
+       a = eina_list_append(a, b)
+
+#define EINA_LIST_REMOVE(a, b) \
+       a = eina_list_remove(a, b)
+
+#define EINA_LIST_REMOVE_LIST(a, b) \
+       a = eina_list_remove_list(a, b)
+
+#define EINA_LIST_FREE_LIST(a) \
+       a = eina_list_free(a)
+
+#define EINA_LIST_PROMOTE_LIST(a, b) \
+       a = eina_list_promote_list(a, b)
+
+#ifdef EINA_LIST
+#include <Ecore.h>
+typedef Eina_List dd_list;
+#define DD_LIST_PREPEND(a, b)  \
+       a = eina_list_prepend(a, b)
+#define DD_LIST_APPEND(a, b)   \
+       a = eina_list_append(a, b)
+#define DD_LIST_REMOVE(a, b)   \
+       a = eina_list_remove(a, b)
+#define DD_LIST_LENGTH(a)              \
+       eina_list_count(a)
+#define DD_LIST_NTH(a, b)                      \
+       eina_list_nth(a, b)
+#define DD_LIST_FREE_LIST(a)    \
+       a = eina_list_free(a)
+#define DD_LIST_FOREACH(head, elem, node)      \
+       EINA_LIST_FOREACH(head, elem, node)
+#define DD_LIST_FOREACH_SAFE(head, elem, elem_next, node) \
+       EINA_LIST_FOREACH_SAFE(head, elem, elem_next, node)
+
+#else
+#include <glib.h>
+typedef GList dd_list;
+#define DD_LIST_PREPEND(a, b)          \
+       a = g_list_prepend(a, (gpointer)b)
+#define DD_LIST_APPEND(a, b)           \
+       a = g_list_append(a, (gpointer)b)
+#define DD_LIST_REMOVE(a, b)           \
+       a = g_list_remove(a, (gpointer)b)
+#define DD_LIST_LENGTH(a)                      \
+       g_list_length(a)
+#define DD_LIST_NTH(a, b)                      \
+       g_list_nth_data(a, b)
+#define DD_LIST_FREE_LIST(a)        \
+       g_list_free(a)
+#define DD_LIST_FOREACH(head, elem, node)      \
+       for (elem = head, node = NULL; elem && ((node = elem->data) != NULL); elem = elem->next, node = NULL)
+#define DD_LIST_FOREACH_SAFE(head, elem, elem_next, node) \
+       for (elem = head, elem_next = g_list_next(elem), node = NULL; \
+                       elem && ((node = elem->data) != NULL); \
+                       elem = elem_next, elem_next = g_list_next(elem), node = NULL)
+
+#endif
+
+#endif
diff --git a/src/memory.c b/src/memory.c
new file mode 100644 (file)
index 0000000..fde09e6
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include "device.h"
+#include "common.h"
+
+#define PROC_MEMORY            "/proc/meminfo"
+
+enum {
+       _MI_TOTAL,
+       _MI_FREE,
+       _MI_BUF,
+       _MI_CACHED,
+       _MI_SWAP,
+       _MI_SHMEM,
+       _MI_MAX,
+};
+
+struct meminfo {
+       unsigned long l[_MI_MAX];
+};
+
+static const char *_mi_str[] = {
+       [_MI_TOTAL] = "MemTotal",
+       [_MI_FREE] = "MemFree",
+       [_MI_BUF] = "Buffers",
+       [_MI_CACHED] = "Cached",
+       [_MI_SWAP] = "SwapCached",
+       [_MI_SHMEM] = "Shmem",
+};
+
+static inline int _get_idx(const char *name)
+{
+       int i;
+
+       for (i = 0; i < sizeof(_mi_str)/sizeof(_mi_str[0]); ++i) {
+               if (name && _mi_str[i] && !strcmp(name, _mi_str[i]))
+                       return i;
+       }
+
+       return -1;
+}
+
+static int _get_meminfo(struct meminfo *mi)
+{
+       FILE *fp;
+       char buf[4096];
+       char *s, *name, *num;
+       int idx;
+
+       assert(mi);
+
+       fp = fopen(PROC_MEMORY, "r");
+       if (!fp)
+               return -1;
+
+       memset(mi, 0, sizeof(*mi));
+
+       while (!feof(fp)) {
+               s = fgets(buf, sizeof(buf), fp);
+               if (!s)
+                       break;
+
+               s = strchr(buf, ':');
+               if (!s)
+                       continue;
+
+               *s = '\0';
+               name = buf;
+
+               s++;
+               while (*s == ' ')
+                       s++;
+               num = s;
+
+               idx = _get_idx(name);
+               if (idx < 0)
+                       continue;
+
+               mi->l[idx] = strtol(num, NULL, 10);
+       }
+
+       fclose(fp);
+       return 0;
+}
+
+int device_memory_get_total(unsigned int *total_mem)
+{
+       struct meminfo mi;
+       int ret;
+
+       if (total_mem == NULL)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       ret = _get_meminfo(&mi);
+       if (ret < 0)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       *total_mem = mi.l[_MI_TOTAL];
+       return DEVICE_ERROR_NONE;
+}
+
+int device_memory_get_available(unsigned int *avail_mem)
+{
+       struct meminfo mi;
+       int ret;
+
+       if (avail_mem == NULL)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       ret = _get_meminfo(&mi);
+       if (ret < 0)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       *avail_mem = mi.l[_MI_FREE] + mi.l[_MI_BUF] + mi.l[_MI_CACHED] + mi.l[_MI_SWAP] - mi.l[_MI_SHMEM];
+       return DEVICE_ERROR_NONE;
+}
diff --git a/src/power.c b/src/power.c
new file mode 100644 (file)
index 0000000..b7a0f37
--- /dev/null
@@ -0,0 +1,234 @@
+/*
+ * Copyright (c) 2011 - 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. 
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <errno.h>
+
+#include "power.h"
+#include "display.h"
+#include "common.h"
+#include "dbus.h"
+
+/**
+ * Parameters for device_power_request_lock()
+ */
+#define STAY_CUR_STATE  0x1
+#define GOTO_STATE_NOW  0x2
+#define HOLD_KEY_BLOCK  0x4
+#define STANDBY_MODE    0x8
+
+/**
+ * Parameters for device_power_request_unlock()
+ */
+#define PM_SLEEP_MARGIN 0x0 /**< keep guard time for unlock */
+#define PM_RESET_TIMER  0x1 /**< reset timer for unlock */
+#define PM_KEEP_TIMER   0x2 /**< keep timer for unlock */
+
+#define METHOD_LOCK_STATE       "lockstate"
+#define METHOD_UNLOCK_STATE     "unlockstate"
+#define METHOD_CHANGE_STATE     "changestate"
+#define METHOD_REBOOT           "Reboot"
+
+#define STR_STAYCURSTATE "staycurstate"
+#define STR_GOTOSTATENOW "gotostatenow"
+
+#define STR_HOLDKEYBLOCK "holdkeyblock"
+#define STR_STANDBYMODE  "standbymode"
+#define STR_NULL         "NULL"
+
+#define STR_SLEEP_MARGIN "sleepmargin"
+#define STR_RESET_TIMER  "resettimer"
+#define STR_KEEP_TIMER   "keeptimer"
+
+#define STR_LCD_OFF   "lcdoff"
+#define STR_LCD_DIM   "lcddim"
+#define STR_LCD_ON    "lcdon"
+
+static char *get_state_str(display_state_e state)
+{
+       switch (state) {
+       case DISPLAY_STATE_NORMAL:
+               return STR_LCD_ON;
+       case DISPLAY_STATE_SCREEN_DIM:
+               return STR_LCD_DIM;
+       case DISPLAY_STATE_SCREEN_OFF:
+               return STR_LCD_OFF;
+       default:
+               break;
+       }
+       return NULL;
+}
+
+static void lock_cb(void *data, DBusMessage *msg, DBusError *unused)
+{
+       DBusError err;
+       int ret, val;
+
+       if (!msg)
+               return;
+
+       dbus_error_init(&err);
+       ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &val, DBUS_TYPE_INVALID);
+       if (!ret) {
+               _E("no message [%s:%s]", err.name, err.message);
+               dbus_error_free(&err);
+               return;
+       }
+
+       _D("%s-%s : %d", DEVICED_INTERFACE_DISPLAY, METHOD_LOCK_STATE, val);
+}
+
+static int lock_state(display_state_e state, unsigned int flag, int timeout_ms)
+{
+       char *arr[4];
+       char str_timeout[32];
+
+       arr[0] = get_state_str(state);
+       if (!arr[0])
+               return -EINVAL;
+
+       if (flag & GOTO_STATE_NOW)
+               arr[1] = STR_GOTOSTATENOW;
+       else
+               arr[1] = STR_STAYCURSTATE;
+
+       if (flag & HOLD_KEY_BLOCK)
+               arr[2] = STR_HOLDKEYBLOCK;
+       else if (flag & STANDBY_MODE)
+               arr[2] = STR_STANDBYMODE;
+       else
+               arr[2] = STR_NULL;
+
+       snprintf(str_timeout, sizeof(str_timeout), "%d", timeout_ms);
+       arr[3] = str_timeout;
+
+       return dbus_method_async_with_reply(DEVICED_BUS_NAME,
+                       DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
+                       METHOD_LOCK_STATE, "sssi", arr, lock_cb, -1, NULL);
+}
+
+static void unlock_cb(void *data, DBusMessage *msg, DBusError *unused)
+{
+       DBusError err;
+       int ret, val;
+
+       if (!msg)
+               return;
+
+       dbus_error_init(&err);
+       ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &val, DBUS_TYPE_INVALID);
+       if (!ret) {
+               _E("no message [%s:%s]", err.name, err.message);
+               dbus_error_free(&err);
+               return;
+       }
+
+       _D("%s-%s : %d", DEVICED_INTERFACE_DISPLAY, METHOD_UNLOCK_STATE, val);
+}
+
+static int unlock_state(display_state_e state, unsigned int flag)
+{
+       char *arr[2];
+
+       arr[0] = get_state_str(state);
+       if (!arr[0])
+               return -EINVAL;
+
+       if (flag == PM_SLEEP_MARGIN)
+               arr[1] = STR_SLEEP_MARGIN;
+       else if (flag == PM_RESET_TIMER)
+               arr[1] = STR_RESET_TIMER;
+       else if (flag == PM_KEEP_TIMER)
+               arr[1] = STR_KEEP_TIMER;
+       else
+               return -EINVAL;
+
+       return dbus_method_async_with_reply(DEVICED_BUS_NAME,
+                       DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,
+                       METHOD_UNLOCK_STATE, "ss", arr, unlock_cb, -1, NULL);
+}
+
+int device_power_request_lock(power_lock_e type, int timeout_ms)
+{
+       int ret;
+
+       if (timeout_ms < 0)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       if (type == POWER_LOCK_CPU)
+               ret = lock_state(DISPLAY_STATE_SCREEN_OFF, STAY_CUR_STATE, timeout_ms);
+       else if (type == POWER_LOCK_DISPLAY)
+               ret = lock_state(DISPLAY_STATE_NORMAL, STAY_CUR_STATE, timeout_ms);
+       else if (type == POWER_LOCK_DISPLAY_DIM)
+               ret = lock_state(DISPLAY_STATE_SCREEN_DIM, STAY_CUR_STATE, timeout_ms);
+       else
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       if (ret == -ECOMM)
+               return DEVICE_ERROR_PERMISSION_DENIED;
+       else if (ret < 0)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       return DEVICE_ERROR_NONE;
+}
+
+int device_power_release_lock(power_lock_e type)
+{
+       int ret;
+
+       if (type == POWER_LOCK_CPU)
+               ret = unlock_state(DISPLAY_STATE_SCREEN_OFF, PM_SLEEP_MARGIN);
+       else if (type == POWER_LOCK_DISPLAY)
+               ret = unlock_state(DISPLAY_STATE_NORMAL, PM_KEEP_TIMER);
+       else if (type == POWER_LOCK_DISPLAY_DIM)
+               ret = unlock_state(DISPLAY_STATE_SCREEN_DIM, PM_KEEP_TIMER);
+       else
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       if (ret == -ECOMM)
+               return DEVICE_ERROR_PERMISSION_DENIED;
+       else if (ret < 0)
+               return DEVICE_ERROR_OPERATION_FAILED;
+
+       return DEVICE_ERROR_NONE;
+}
+
+int device_power_wakeup(bool dim)
+{
+       if (dim)
+               return device_display_change_state(DISPLAY_STATE_SCREEN_DIM);
+
+       return device_display_change_state(DISPLAY_STATE_NORMAL);
+}
+
+int device_power_reboot(const char *reason)
+{
+       char *arr[1];
+       int ret;
+
+       if (!reason)
+               return DEVICE_ERROR_INVALID_PARAMETER;
+
+       arr[0] = (char *)reason;
+       ret = dbus_method_sync(DEVICED_BUS_NAME,
+                       DEVICED_PATH_POWER,
+                       DEVICED_INTERFACE_POWER,
+                       METHOD_REBOOT, "s", arr);
+       return errno_to_device_error(ret);
+}