merge with master
authorJinkun Jang <jinkun.jang@samsung.com>
Fri, 15 Mar 2013 16:18:32 +0000 (01:18 +0900)
committerJinkun Jang <jinkun.jang@samsung.com>
Fri, 15 Mar 2013 16:18:32 +0000 (01:18 +0900)
21 files changed:
AUTHORS
CMakeLists.txt
include/ss_data.h
packaging/system-server.manifest
packaging/system-server.service
packaging/system-server.spec
ss_cpu_handler.c
ss_device_change_handler.c
ss_device_plugin.c [deleted file]
ss_log.h
ss_lowbat_handler.c
ss_lowmem_handler.c
ss_main.c
ss_mmc_handler.c
ss_pmon_handler.c
ss_predefine.c
ss_ta_handler.c
ss_timemgr.c
ss_usb_handler.c
ss_vibrator.c [new file with mode: 0644]
ss_vibrator.h [moved from ss_device_plugin.h with 65% similarity]

diff --git a/AUTHORS b/AUTHORS
index de52fb3..6edd069 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,2 +1,2 @@
 Giyeol Ok <giyeol.ok@samsung.com>\r
-Suchang Woo <suchang.woo@samsung.com>\r
+Taesoo Jun <steve.jun@samsung.com>\r
index 26b8bf1..8ad3a00 100755 (executable)
@@ -22,8 +22,9 @@ SET(SRCS
        ss_procmgr.c
        ss_timemgr.c
        ss_cpu_handler.c
-       ss_device_plugin.c)
+       ss_vibrator.c
+       )
+
 INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
 
 SET(MOVINAND_FORMAT movi_format.sh)
@@ -42,7 +43,7 @@ pkg_check_modules(pkgs REQUIRED
        dlog
        syspopup-caller
        devman
-       devman_plugin)
+       device-node)
 
 FOREACH(flag ${pkgs_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
index 1c860ae..d56aad7 100644 (file)
@@ -50,6 +50,7 @@ enum {
 #define PREDEF_USB_STORAGE_ADD         "usbstorage-add"
 #define PREDEF_USB_STORAGE_REMOVE      "usbstorage-remove"
 #define PREDEF_INACTIVE                        "inactive"
+#define PREDEF_HAPTIC                  "haptic"
 
 #define OOMADJ_SET                     "oomadj_set"
 #define LOW_MEM_ACT                    "low_mem_act"
index f3309c8..fa0d09e 100644 (file)
@@ -1,17 +1,16 @@
 <manifest>
-    <define>
-        <domain name="system-server"/>
-        <request>
-            <smack request="sys-assert::core" type="rwxat" />
-        </request>
-    </define>
-    <assign>
-        <filesystem path="/etc/init.d/system_server.sh" label="_" exec_label="none" />
-        <filesystem path="/etc/rc.d/init.d/system_server.sh" label="_" exec_label="none" />
-        <filesystem path="/etc/rc.d/rc3.d/S35system-server" label="_" exec_label="none" />
-        <filesystem path="/etc/rc.d/rc5.d/S00system-server" label="_" exec_label="none" />
-    </assign>
-    <request>
-        <domain name="system-server"/>
-    </request>
+       <define>
+               <domain name="system-server"/>
+       </define>
+       <assign>
+               <filesystem path="/etc/init.d/system_server.sh" label="_" exec_label="none" />
+               <filesystem path="/etc/rc.d/init.d/system_server.sh" label="_" exec_label="none" />
+               <filesystem path="/etc/rc.d/rc3.d/S35system-server" label="_" exec_label="none" />
+               <filesystem path="/etc/rc.d/rc5.d/S00system-server" label="_" exec_label="none" />
+               <filesystem path="/usr/lib/systemd/system/system-server.service" label="_" exec_label="none" />
+               <filesystem path="/usr/lib/systemd/system/multi-user.target.wants/system-server.service" label="_" exec_label="none" />
+       </assign>
+       <request>
+               <domain name="system-server"/>
+       </request>
 </manifest>
index cc5b2ae..4ce8d4a 100644 (file)
@@ -1,10 +1,12 @@
 [Unit]
 Description=Start the system server service
+After=vconf-setup.service
 
 [Service]
 # set DISPLAY for usb_setting launching
 Environment=DISPLAY=:0
 ExecStart=/usr/bin/system_server
+TimeoutSec=2
 
 [Install]
 WantedBy=multi-user.target
index 78c7d7d..df0ac47 100755 (executable)
@@ -1,10 +1,10 @@
 #sbs-git:slp/pkgs/s/system-server system-server 0.1.51 56e16bca39f96d6c8aed9ed3df2fea9b393801be
 Name:       system-server
 Summary:    System server
-Version: 0.1.63
-Release:    1
-Group:      framework-system
-License:    APLv2
+Version:    0.1.65
+Release:    3
+Group:      Framework/system
+License:    Apache License, Version 2.0
 Source0:    system-server-%{version}.tar.gz
 Source1:    system-server.service
 Source2:    system-server.manifest
@@ -20,13 +20,12 @@ BuildRequires:  pkgconfig(pmapi)
 BuildRequires:  pkgconfig(edbus)
 BuildRequires:  pkgconfig(dlog)
 BuildRequires:  pkgconfig(syspopup-caller)
-BuildRequires:  pkgconfig(devman_plugin)
 BuildRequires:  pkgconfig(x11)
 BuildRequires:  pkgconfig(svi)
 BuildRequires:  pkgconfig(notification)
 BuildRequires:  pkgconfig(usbutils)
+BuildRequires:  pkgconfig(device-node)
 BuildRequires: gettext
-Requires: sys-assert
 Requires(preun): /usr/bin/systemctl
 Requires(post): /usr/bin/systemctl
 Requires(post): /usr/bin/vconftool
@@ -74,12 +73,20 @@ vconftool set -t int memory/sysman/sliding_keyboard -1 -i
 vconftool set -t int memory/sysman/mmc_mount -1 -i
 vconftool set -t int memory/sysman/mmc_unmount -1 -i
 vconftool set -t int memory/sysman/mmc_format -1 -i
-
+vconftool set -t int memory/sysman/mmc_format_progress 0 -i
+vconftool set -t int memory/sysman/mmc_err_status 0 -i
+vconftool set -t int memory/sysman/power_off 0 -u 5000 -i -f
+vconftool set -t int memory/sysman/battery_level_status -1 -i
 vconftool set -t string memory/private/sysman/added_storage_uevent "" -i
 vconftool set -t string memory/private/sysman/removed_storage_uevent "" -u 5000 -i
 
 vconftool set -t int memory/sysman/hdmi 0 -i
 
+vconftool set -t int memory/sysman/stime_changed 0 -i
+
+#db type vconf key init
+vconftool set -t int db/sysman/mmc_dev_changed 0 -i
+
 heynotitool set power_off_start
 
 heynotitool set mmcblk_add
@@ -109,12 +116,6 @@ if [ $1 == 1 ]; then
     systemctl restart system-server.service
 fi
 
-if [ -f %{_libdir}/rpm-plugins/msm.so ] ; then
-       find /opt/share/crash -print0 | xargs -0 chsmack -a 'sys-assert::core'
-       find /opt/share/crash -type d -print0 | xargs -0 chsmack -t
-fi
-
-
 %preun
 if [ $1 == 0 ]; then
     systemctl stop system-server.service
index ba9f77d..c88ef9f 100644 (file)
@@ -17,7 +17,7 @@
 
 #include <fcntl.h>
 
-#include "ss_device_plugin.h"
+#include "device-node.h"
 #include "ss_log.h"
 #include "include/ss_data.h"
 #include "vconf.h"
@@ -236,13 +236,13 @@ static void __set_freq_limit()
 {
        int ret;
 
-       ret = plugin_intf->OEM_sys_get_cpufreq_cpuinfo_max_freq(&max_cpu_freq_limit);
+       ret = device_get_property(DEVICE_TYPE_CPU, PROP_CPU_CPUINFO_MAX_FREQ, &max_cpu_freq_limit);
        if (ret < 0) {
                PRT_TRACE_ERR("get cpufreq cpuinfo max readerror: %s", strerror(errno));
                max_cpu_freq_limit = DEFAULT_MAX_CPU_FREQ;
        }
 
-       ret = plugin_intf->OEM_sys_get_cpufreq_cpuinfo_min_freq(&min_cpu_freq_limit);
+       ret = device_get_property(DEVICE_TYPE_CPU, PROP_CPU_CPUINFO_MIN_FREQ, &min_cpu_freq_limit);
        if (ret < 0) {
                PRT_TRACE_ERR("get cpufreq cpuinfo min readerror: %s", strerror(errno));
                min_cpu_freq_limit = DEFAULT_MIN_CPU_FREQ;
@@ -406,7 +406,7 @@ static int __write_max_cpu_freq(int freq)
 {
        int ret;
 
-       ret = plugin_intf->OEM_sys_set_cpufreq_scaling_max_freq(freq);
+       ret = device_set_property(DEVICE_TYPE_CPU, PROP_CPU_SCALING_MAX_FREQ, freq);
        if (ret < 0) {
                PRT_TRACE_ERR("set cpufreq max freq write error: %s", strerror(errno));
                return -1;
@@ -419,7 +419,7 @@ static int __write_min_cpu_freq(int freq)
 {
        int ret;
 
-       ret = plugin_intf->OEM_sys_set_cpufreq_scaling_min_freq(freq);
+       ret = device_set_property(DEVICE_TYPE_CPU, PROP_CPU_SCALING_MIN_FREQ, freq);
        if (ret < 0) {
                PRT_TRACE_ERR("set cpufreq min freq write error: %s", strerror(errno));
                return -1;
index ab0758e..2ef3bc1 100755 (executable)
@@ -33,7 +33,7 @@
 #include "ss_queue.h"
 #include "ss_log.h"
 #include "ss_device_handler.h"
-#include "ss_device_plugin.h"
+#include "device-node.h"
 #include "ss_noti.h"
 #include "include/ss_data.h"
 #include "sys_device_noti/sys_device_noti.h"
@@ -72,13 +72,13 @@ static int check_lowbat_charge_device(int bInserted)
        int bat_state = -1;
        int ret = -1;
        if (bInserted == 1) {
-               if (plugin_intf->OEM_sys_get_battery_charge_now(&val) == 0) {
+               if (device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CHARGE_NOW, &val) == 0) {
                        if (val == 1)
                                bChargeDeviceInserted = 1;
                        return 0;
                }
        } else if (bInserted == 0) {
-               if (plugin_intf->OEM_sys_get_battery_charge_now(&val) == 0) {
+               if (device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CHARGE_NOW, &val) == 0) {
                        if (val == 0 && bChargeDeviceInserted == 1) {
                                bChargeDeviceInserted = 0;
                                //low bat popup during charging device removing
@@ -120,7 +120,8 @@ static void usb_chgdet_cb(struct ss_main_data *ad)
        ss_lowbat_monitor(NULL);
        ss_action_entry_call_internal(PREDEF_USBCON, 0);
 
-       if (plugin_intf->OEM_sys_get_jack_usb_online(&val)==0) {
+       if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_USB_ONLINE, &val) == 0) {
+               PRT_TRACE("jack - usb changed %d",val);
                check_lowbat_charge_device(val);
                if (val==1) {
                        snprintf(params, sizeof(params), "%d", CB_NOTI_BATT_CHARGE);
@@ -144,7 +145,8 @@ static void ta_chgdet_cb(struct ss_main_data *ad)
        int bat_state = VCONFKEY_SYSMAN_BAT_NORMAL;
        char params[BUFF_MAX];
 
-       if (plugin_intf->OEM_sys_get_jack_charger_online(&val) == 0) {
+       if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_TA_ONLINE, &val) == 0) {
+               PRT_TRACE("jack - ta changed %d",val);
                check_lowbat_charge_device(val);
                vconf_set_int(VCONFKEY_SYSMAN_CHARGER_STATUS, val);
                if (val == 0) {
@@ -170,8 +172,7 @@ static void earkey_chgdet_cb(struct ss_main_data *ad)
 {
        int val;
        PRT_TRACE("jack - earkey changed\n");
-
-       if (plugin_intf->OEM_sys_get_jack_earkey_online(&val) == 0)
+       if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_EARKEY_ONLINE, &val) == 0)
                vconf_set_int(VCONFKEY_SYSMAN_EARJACKKEY, val);
 }
 
@@ -186,14 +187,15 @@ static void hdmi_chgdet_cb(struct ss_main_data *ad)
        PRT_TRACE("jack - hdmi changed\n");
        int val;
        pm_change_state(LCD_NORMAL);
-       if (plugin_intf->OEM_sys_get_hdmi_support(&val) == 0) {
+       if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_HDMI_SUPPORT, &val) == 0) {
                if (val!=1) {
                        PRT_TRACE_ERR("target is not support HDMI");
                        vconf_set_int(VCONFKEY_SYSMAN_HDMI, HDMI_NOT_SUPPORTED);
                        return;
                }
        }
-       if (plugin_intf->OEM_sys_get_jack_hdmi_online(&val) == 0) {
+       if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_HDMI_ONLINE, &val) == 0) {
+               PRT_TRACE("jack - hdmi changed %d",val);
                vconf_set_int(VCONFKEY_SYSMAN_HDMI,val);
                if(val == 1)
                        pm_lock_state(LCD_NORMAL, GOTO_STATE_NOW, 0);
@@ -208,8 +210,8 @@ static void keyboard_chgdet_cb(struct ss_main_data *ad)
        int ret = -1;
        PRT_TRACE("jack - keyboard changed\n");
 
-       ret = plugin_intf->OEM_sys_get_jack_keyboard_online(&val);
-       if( ret == 0) {
+       if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_KEYBOARD_ONLINE, &val) == 0) {
+               PRT_TRACE("jack - keyboard changed %d",val);
                if(val != 1)
                        val = 0;
                vconf_set_int(VCONFKEY_SYSMAN_SLIDING_KEYBOARD, val);
@@ -255,16 +257,18 @@ static void charge_cb(struct ss_main_data *ad)
        char params[BUFF_MAX];
        static int bat_full_noti = 0;
        ss_lowbat_monitor(NULL);
-       if (plugin_intf->OEM_sys_get_battery_health(&val) == 0) {
+
+       if (device_get_property(DEVICE_TYPE_POWER, PROP_POWER_HEALTH, &val) == 0) {
                if (val==BATTERY_OVERHEAT || val==BATTERY_COLD) {
                        PRT_TRACE_ERR("Battery health status is not good (%d)", val);
                        ss_action_entry_call_internal(PREDEF_LOWBAT, 1, CHARGE_ERROR_ACT);
+
                        return;
                }
        } else {
                PRT_TRACE_ERR("failed to get battery health status");
        }
-       plugin_intf->OEM_sys_get_battery_charge_full(&val);
+       device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CHARGE_FULL, &val);
        if (val==0) {
                if (bat_full_noti==1) {
                        snprintf(params, sizeof(params), "%d %d", CB_NOTI_BATT_FULL, CB_NOTI_OFF);
diff --git a/ss_device_plugin.c b/ss_device_plugin.c
deleted file mode 100644 (file)
index 6d5f77d..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2012 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 <dlfcn.h>
-#include <unistd.h>
-
-#include "ss_log.h"
-#include "ss_device_plugin.h"
-
-static void *dlopen_handle;
-
-int _ss_devman_plugin_init()
-{
-       char *error;
-
-       dlopen_handle = dlopen(DEVMAN_PLUGIN_PATH, RTLD_NOW);
-       if (!dlopen_handle) {
-               PRT_TRACE_ERR("dlopen() failed");
-               return -1;
-       }
-
-       const OEM_sys_devman_plugin_interface *(*get_devman_plugin_interface) ();
-       get_devman_plugin_interface = dlsym(dlopen_handle, "OEM_sys_get_devman_plugin_interface");
-       if ((error = dlerror()) != NULL) {
-               PRT_TRACE_ERR("dlsym() failed: %s", error);
-               dlclose(dlopen_handle);
-               return -1;
-       }
-
-       plugin_intf = get_devman_plugin_interface();
-       if (!plugin_intf) {
-               PRT_TRACE_ERR("get_devman_plugin_interface() failed");
-               dlclose(dlopen_handle);
-               return -1;
-       }
-
-       return 0;
-}
-
-
-int _ss_devman_plugin_fini()
-{
-       if (dlopen_handle) {
-               dlclose(dlopen_handle);
-       }
-
-       return 0;
-}
-
-
index 02884e2..db769d0 100644 (file)
--- a/ss_log.h
+++ b/ss_log.h
 #define __LOG(prio, fmt, arg...) \
        do { SLOG(prio, LOG_TAG, fmt, ##arg); } while (0)
 #define __LOGD(prio, fmt, arg...) \
-       do { SLOG(prio, LOG_TAG, "[%s:%d] "fmt"\n", __FUNCTION__, __LINE__, ##arg); } while (0)
+       do { SLOG(prio, LOG_TAG, "%s: %s(%d) > " fmt, __MODULE__, __func__, __LINE__, ##arg); } while (0)
 #define __PRT(prio, fmt, arg...) \
        do { fprintf(((D##prio) == DLOG_ERR ? stderr : stdout), fmt"\n", ##arg); } while (0)
 #define __PRTD(prio, fmt, arg...) \
        do { \
                fprintf(((D##prio) == DLOG_ERR ? stderr : stdout), \
-                               "[%s:%d] "fmt"\n", __FILE__, __LINE__, ##arg); \
+                               "%s: %s(%d) > "fmt"\n", __MODULE__, __func__, __LINE__, ##arg); \
        } while (0)
 #else
 #include <syslog.h>
 #define __LOG(prio, fmt, arg...) \
        do { syslog(prio, fmt, ##arg); } while (0)
 #define __LOGD(prio, fmt, arg...) \
-       do { syslog(prio, "[%s:%d] "fmt"\n", __FUNCTION__, __LINE__, ##arg); } while (0)
+       do { syslog(prio, "%s: %s(%d) > "fmt"\n", __MODULE__, __func__, __LINE__, ##arg); } while (0)
 #define __PRT(prio, fmt, arg...) \
        do { fprintf(((prio) == LOG_ERR ? stderr : stdout), fmt"\n", ##arg); } while (0)
 #define __PRTD(prio, fmt, arg...) \
        do { \
                fprintf(((prio) == LOG_ERR ? stderr : stdout), \
-                               "[%s:%d] "fmt"\n", __FILE__, __LINE__, ##arg); \
+                                "%s: %s(%d) > "fmt"\n", __MODULE__, __func__, __LINE__, ##arg); \
        } while (0)
 #endif
 
index 2e5dcc9..f6ce0fe 100755 (executable)
@@ -26,7 +26,7 @@
 #include "ss_launch.h"
 #include "ss_noti.h"
 #include "ss_queue.h"
-#include "ss_device_plugin.h"
+#include "device-node.h"
 #include "include/ss_data.h"
 
 #define BAT_MON_INTERVAL               30
 
 #define LOWBAT_EXEC_PATH               PREFIX"/bin/lowbatt-popup"
 
-static int battery_level_table[] = {
-       5,                      /* BATTERY_LEVEL0 */
-       15,                     /* 1 */
-       25,                     /* 2 */
-       40,                     /* 3 */
-       60,                     /* 4 */
-       80,                     /* 5 */
-       100,                    /* 6 */
-};
+#define        BATTERY_LEVEL_CHECK_FULL        95
+#define        BATTERY_LEVEL_CHECK_HIGH        15
+#define        BATTERY_LEVEL_CHECK_LOW         5
+#define        BATTERY_LEVEL_CHECK_CRITICAL    1
 
 #define _SYS_LOW_POWER "LOW_POWER"
 
@@ -127,7 +122,7 @@ int ss_lowbat_set_charge_on(int onoff)
 int ss_lowbat_is_charge_in_now()
 {
        int val = 0;
-       if (0 > plugin_intf->OEM_sys_get_battery_charge_now(&val)) {
+       if (device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CHARGE_NOW, &val) < 0) {
                PRT_TRACE_ERR("fail to read charge now from kernel");
                ss_lowbat_set_charge_on(0);
                return 0;
@@ -165,7 +160,7 @@ static int lowbat_process(int bat_percent, void *ad)
        }
 
        if (new_bat_capacity <= BATTERY_REAL_POWER_OFF) {
-               if (0 > plugin_intf->OEM_sys_get_battery_charge_now(&val)) {
+               if (device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CHARGE_NOW, &val) < 0) {
                        PRT_TRACE_ERR("fail to read charge now from kernel");
                }
                PRT_TRACE("charge_now status %d",val);
@@ -193,7 +188,9 @@ static int lowbat_process(int bat_percent, void *ad)
        } else {
                new_bat_state = BATTERY_NORMAL;
                if (new_bat_capacity == BATTERY_FULL) {
-                       plugin_intf->OEM_sys_get_battery_charge_full(&bat_full);
+                       if (device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CHARGE_FULL, &bat_full) < 0) {
+                               PRT_TRACE_ERR("fail to read charge full from kernel");
+                       }
                        if (bat_full == 1) {
                                if (vconf_state != VCONFKEY_SYSMAN_BAT_FULL)
                                ret=vconf_set_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, VCONFKEY_SYSMAN_BAT_FULL);
@@ -247,14 +244,45 @@ static int lowbat_read()
 {
        int bat_percent;
 
-       plugin_intf->OEM_sys_get_battery_capacity(&bat_percent);
+       if (device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CAPACITY, &bat_percent) < 0) {
+               PRT_TRACE_ERR("fail to read power capacity from kernel");
+               return -1;
+       }
 
        return bat_percent;
 }
 
-int ss_lowbat_monitor(void *data)
+static void __ss_change_lowbat_level(int bat_percent)
+{
+       int prev, now;
+
+       if (cur_bat_capacity == bat_percent)
+               return;
+
+       if (vconf_get_int(VCONFKEY_SYSMAN_BATTERY_LEVEL_STATUS, &prev) < 0) {
+               PRT_TRACE_ERR("vconf_get_int() failed");
+               return;
+       }
+
+
+       if (bat_percent > BATTERY_LEVEL_CHECK_FULL) {
+               now = VCONFKEY_SYSMAN_BAT_LEVEL_FULL;
+       } else if (bat_percent > BATTERY_LEVEL_CHECK_HIGH) {
+               now = VCONFKEY_SYSMAN_BAT_LEVEL_HIGH;
+       } else if (bat_percent > BATTERY_LEVEL_CHECK_LOW) {
+               now = VCONFKEY_SYSMAN_BAT_LEVEL_LOW;
+       } else if (bat_percent > BATTERY_LEVEL_CHECK_CRITICAL) {
+               now = VCONFKEY_SYSMAN_BAT_LEVEL_CRITICAL;
+       } else {
+               now = VCONFKEY_SYSMAN_BAT_LEVEL_EMPTY;
+       }
+
+       if (prev != now)
+               vconf_set_int(VCONFKEY_SYSMAN_BATTERY_LEVEL_STATUS, now);
+}
+
+static int __check_lowbat_percent(void)
 {
-       struct ss_main_data *ad = (struct ss_main_data *)data;
        int bat_percent;
 
        bat_percent = lowbat_read();
@@ -264,12 +292,21 @@ int ss_lowbat_monitor(void *data)
                if (bat_err_count > MAX_BATTERY_ERROR) {
                        PRT_TRACE_ERR
                            ("[BATMON] Cannot read battery gage. stop read fuel gage");
-                       return 0;
                }
-               return 1;
+               return -1;
        }
        if (bat_percent > 100)
                bat_percent = 100;
+       __ss_change_lowbat_level(bat_percent);
+       return bat_percent;
+}
+
+int ss_lowbat_monitor(void *data)
+{
+       struct ss_main_data *ad = (struct ss_main_data *)data;
+       int bat_percent;
+
+       bat_percent = __check_lowbat_percent();
 
        if (lowbat_process(bat_percent, ad) < 0)
                ecore_timer_interval_set(lowbat_timer, BAT_MON_INTERVAL_MIN);
@@ -296,7 +333,7 @@ static int check_battery()
        int r;
        int ret = -1;
 
-       if (0 > plugin_intf->OEM_sys_get_battery_present(&ret)) {
+       if (device_get_property(DEVICE_TYPE_POWER, PROP_POWER_PRESENT, &ret) < 0) {
                PRT_TRACE_ERR("[BATMON] battery check : %d", ret);
        }
        PRT_TRACE("[BATMON] battery check : %d", ret);
@@ -311,6 +348,9 @@ int ss_lowbat_init(struct ss_main_data *ad)
        /* need check battery */
        lowbat_timer =
            ecore_timer_add(BAT_MON_INTERVAL_MIN, ss_lowbat_monitor, ad);
+
+       __check_lowbat_percent();
+
        ss_lowbat_is_charge_in_now();
 
        vconf_notify_key_changed(VCONFKEY_PM_STATE, (void *)wakeup_cb, NULL);
index 252e0e4..fb6db58 100644 (file)
@@ -25,7 +25,7 @@
 #include <sys/stat.h>
 #include <sys/shm.h>
 
-#include "ss_device_plugin.h"
+#include "device-node.h"
 #include "ss_log.h"
 #include "ss_noti.h"
 #include "ss_queue.h"
@@ -303,12 +303,12 @@ static int lowmem_cb(void *data, Ecore_Fd_Handler * fd_handler)
 
 static int set_threshold()
 {
-       if (0 > plugin_intf->OEM_sys_set_memnotify_threshold_lv1(MEM_THRESHOLD_LV1)) {
+       if (device_set_property(DEVICE_TYPE_MEMORY, PROP_MEMORY_THRESHOLD_LV1, MEM_THRESHOLD_LV1) < 0) {
                PRT_TRACE_ERR("Set memnorify threshold lv1 failed");
                return -1;
        }
 
-       if (0 > plugin_intf->OEM_sys_set_memnotify_threshold_lv2(MEM_THRESHOLD_LV2)) {
+       if (device_set_property(DEVICE_TYPE_MEMORY, PROP_MEMORY_THRESHOLD_LV2, MEM_THRESHOLD_LV2) < 0) {
                PRT_TRACE_ERR("Set memnorify threshold lv2 failed");
                return -1;
        }
@@ -320,7 +320,7 @@ int ss_lowmem_init(struct ss_main_data *ad)
 {
        char lowmem_dev_node[PATH_MAX];
 
-       if (0 > plugin_intf->OEM_sys_get_memnotify_node(lowmem_dev_node)) {
+       if (device_get_property(DEVICE_TYPE_MEMORY, PROP_MEMORY_NODE, lowmem_dev_node) < 0) {
                PRT_TRACE_ERR("Low memory handler fd init failed");
                return -1;
        }
index 3721a6e..aceac64 100644 (file)
--- a/ss_main.c
+++ b/ss_main.c
 #include "ss_procmgr.h"
 #include "ss_timemgr.h"
 #include "ss_cpu_handler.h"
-#include "ss_device_plugin.h"
 #include "include/ss_data.h"
 
+#define SS_PIDFILE_PATH                "/var/run/.system_server.pid"
+
 static void fini(struct ss_main_data *ad)
 {
+       // try to remove pid file
+       unlink(SS_PIDFILE_PATH);
 }
 
 static void init_ad(struct ss_main_data *ad)
@@ -57,11 +60,6 @@ static void writepid(char *pidpath)
 
 static void system_server_init(struct ss_main_data *ad)
 {
-       if (0 > _ss_devman_plugin_init()) {
-               PRT_TRACE_ERR("Device Manager Plugin Initialize failed");
-               exit (-1);
-       }
-
        ad->sysnoti_fd = ss_sysnoti_init();
        if (ss_noti_init() < 0)
                PRT_TRACE_ERR("init noti error");
@@ -84,8 +82,6 @@ static void system_server_init(struct ss_main_data *ad)
        ss_bs_init();
 }
 
-#define SS_PIDFILE_PATH                "/var/run/.system_server.pid"
-
 static int system_main(int argc, char **argv)
 {
        struct ss_main_data ad;
index 5e7cf61..27ac1c4 100644 (file)
 #define MOVINAND_DEV           "/dev/mmcblk0p1"
 #define FORMAT_MMC             PREFIX"/sbin/mkfs.vfat "
 #define FORMAT_MOVINAND                PREFIX"/bin/movi_format.sh"
+#define FS_VFAT_MOUNT_OPT  "uid=0,gid=0,dmask=0000,fmask=0111,iocharset=iso8859-1,utf8,shortname=mixed,smackfsroot=*,smackfsdef=*"
 
 int mmc_status;
+int ss_mmc_inserted(void);
+static int __umount_fs(void);
 
 int get_mmcblk_num()
 {
@@ -50,8 +53,7 @@ int get_mmcblk_num()
 
        while ((dir = readdir(dp)) != NULL) {
                memset(&stat, 0, sizeof(struct stat));
-               if (lstat(dir->d_name, &stat) < 0)
-                       continue;
+               if(lstat(dir->d_name, &stat) < 0) {continue;}
                if (S_ISDIR(stat.st_mode) || S_ISLNK(stat.st_mode)) {
                        if (strncmp(".", dir->d_name, 1) == 0
                            || strncmp("..", dir->d_name, 2) == 0)
@@ -100,15 +102,18 @@ int get_mmcblk_num()
 static int ss_mmc_format(keynode_t *key_nodes, void *data)
 {
        PRT_TRACE_ERR("mmc format called");
+       __umount_fs();
+       vconf_set_int(VCONFKEY_SYSMAN_MMC_FORMAT_PROGRESS, VCONFKEY_SYSMAN_MMC_FORMAT_PROGRESS_NOW);
        device_set_property(DEVTYPE_MMC, MMC_PROP_FORMAT, 0);
-
+       vconf_set_int(VCONFKEY_SYSMAN_MMC_FORMAT_PROGRESS, VCONFKEY_SYSMAN_MMC_FORMAT_PROGRESS_NONE);
+       ss_mmc_inserted();
        return 0;
 }
 
 int ss_mmc_unmounted(int argc, char **argv)
 {
        int option = -1;
-
+       int mmc_err = 0;
        if (argc < 1) {
                PRT_TRACE_ERR("Option is wong");
                return -1;
@@ -119,9 +124,12 @@ int ss_mmc_unmounted(int argc, char **argv)
        }
 
        if (umount2(MMC_MOUNT_POINT, option) != 0) {
+               mmc_err = errno;
                PRT_TRACE_ERR("Failed to unmount mmc card\n");
                vconf_set_int(VCONFKEY_SYSMAN_MMC_UNMOUNT,
                              VCONFKEY_SYSMAN_MMC_UNMOUNT_FAILED);
+               vconf_set_int(VCONFKEY_SYSMAN_MMC_ERR_STATUS,
+                               mmc_err);
                return -1;
 
        }
@@ -139,96 +147,112 @@ int ss_mmc_init()
        /* mmc card mount */
        ss_mmc_inserted();
 
-       ss_action_entry_add_internal(PREDEF_MOUNT_MMC, ss_mmc_inserted, NULL,
-                                    NULL);
-       ss_action_entry_add_internal(PREDEF_UNMOUNT_MMC, ss_mmc_unmounted, NULL,
-                                    NULL);
-       ss_action_entry_add_internal(PREDEF_FORMAT_MMC, ss_mmc_format, NULL,
-                                    NULL);
+       ss_action_entry_add_internal(PREDEF_MOUNT_MMC, ss_mmc_inserted, NULL, NULL);
+       ss_action_entry_add_internal(PREDEF_UNMOUNT_MMC, ss_mmc_unmounted, NULL, NULL);
+       ss_action_entry_add_internal(PREDEF_FORMAT_MMC, ss_mmc_format, NULL, NULL);
        return 0;
 }
 
-int ss_mmc_inserted()
+static int __mount_fs(char *path, const char *fs_name, const char *mount_data)
+{
+       int ret, retry = 0;
+       do {
+               if ((ret = mount(path, MMC_MOUNT_POINT, fs_name, 0, mount_data)) == 0) {
+                       PRT_TRACE("Mounted mmc card\n");
+                       return 0;
+               }
+               usleep(100000);
+       } while (ret == -1 && errno == ENOENT && retry++ < 10);
+
+       return errno;
+}
+
+static int __mmc_mount_fs(void)
 {
        char buf[NAME_MAX];
-       int blk_num, ret, retry = 0;
-       char opt[NAME_MAX];
-       char *popt = opt;
-       int r = 0;
-       if (mmc_status == VCONFKEY_SYSMAN_MMC_MOUNTED) {
-               PRT_DBG("Mmc is already mounted.\n");
-               vconf_set_int(VCONFKEY_SYSMAN_MMC_STATUS,
-                             VCONFKEY_SYSMAN_MMC_MOUNTED);
-               vconf_set_int(VCONFKEY_SYSMAN_MMC_MOUNT,
-                             VCONFKEY_SYSMAN_MMC_MOUNT_ALREADY);
-               return -1;
-       }
+       char params[NAME_MAX];
+       int fd;
+       int blk_num;
 
        if (access(MMC_MOUNT_POINT, R_OK) != 0) {
-               r = mkdir(MMC_MOUNT_POINT, 0755);
-               if(r < 0) {
+               if (mkdir(MMC_MOUNT_POINT, 0755) < 0) {
                        PRT_TRACE_ERR("Make Directory is failed");
-                       return -1;
+                       return errno;
                }
        }
 
-       if ((blk_num = get_mmcblk_num()) == -1) {
-               vconf_set_int(VCONFKEY_SYSMAN_MMC_STATUS,
-                             VCONFKEY_SYSMAN_MMC_REMOVED);
-               vconf_set_int(VCONFKEY_SYSMAN_MMC_MOUNT,
-                             VCONFKEY_SYSMAN_MMC_MOUNT_FAILED);
-               mmc_status = VCONFKEY_SYSMAN_MMC_REMOVED;
-               return 0;
+       blk_num = get_mmcblk_num();
+       if (blk_num  == -1) {
+               PRT_TRACE_ERR("fail to check mmc block");
+               return -1;
        }
-       popt = NULL;
-
-       snprintf(buf, sizeof(buf), "%s%d", MMC_DEV, blk_num);
-       if (mount
-           (buf, MMC_MOUNT_POINT, "vfat", 0,
-            "uid=0,gid=0,dmask=0000,fmask=0111,iocharset=iso8859-1,utf8,shortname=mixed,smackfsroot=*,smackfsdef=*")
-           == 0) {
-               PRT_DBG("Mounted mmc card\n");
-               vconf_set_int(VCONFKEY_SYSMAN_MMC_STATUS,
-                             VCONFKEY_SYSMAN_MMC_MOUNTED);
-               vconf_set_int(VCONFKEY_SYSMAN_MMC_MOUNT,
-                             VCONFKEY_SYSMAN_MMC_MOUNT_COMPLETED);
-               mmc_status = VCONFKEY_SYSMAN_MMC_MOUNTED;
-               return 0;
+
+       snprintf(buf, sizeof(buf), "%s%dp1", MMC_DEV, blk_num);
+       fd = open(buf, O_RDONLY);
+       if (fd < 0) {
+               PRT_TRACE_ERR("can't open the '%s': %s", buf, strerror(errno));
+               snprintf(buf, sizeof(buf), "%s%d", MMC_DEV, blk_num);
        }
-       do {
-               snprintf(buf, sizeof(buf), "%s%dp1", MMC_DEV, blk_num);
-               if ((ret =
-                    mount(buf, MMC_MOUNT_POINT, "vfat", 0,
-                          "uid=0,gid=0,dmask=0000,fmask=0111,iocharset=iso8859-1,utf8,shortname=mixed,smackfsroot=*,smackfsdef=*"))
-                   == 0) {
-                       PRT_DBG("Mounted mmc card partition 1(%s)\n", buf);
-                       vconf_set_int(VCONFKEY_SYSMAN_MMC_STATUS,
-                                     VCONFKEY_SYSMAN_MMC_MOUNTED);
-                       vconf_set_int(VCONFKEY_SYSMAN_MMC_MOUNT,
-                                     VCONFKEY_SYSMAN_MMC_MOUNT_COMPLETED);
-                       mmc_status = VCONFKEY_SYSMAN_MMC_MOUNTED;
-                       return 0;
-               }
-               usleep(100000);
-       } while (ret == -1 && errno == ENOENT && retry++ < 10);
+       close(fd);
 
-       vconf_set_int(VCONFKEY_SYSMAN_MMC_STATUS,
-                     VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED);
-       vconf_set_int(VCONFKEY_SYSMAN_MMC_MOUNT,
-                     VCONFKEY_SYSMAN_MMC_MOUNT_FAILED);
+               if (__mount_fs(buf, "vfat", FS_VFAT_MOUNT_OPT) != 0)
+                       return errno;
+       return 0;
+}
+
+int ss_mmc_inserted(void)
+{
+       int r = 0;
+
+       if (mmc_status == VCONFKEY_SYSMAN_MMC_MOUNTED) {
+               PRT_DBG("Mmc is already mounted.\n");
+               vconf_set_int(VCONFKEY_SYSMAN_MMC_STATUS, VCONFKEY_SYSMAN_MMC_MOUNTED);
+               vconf_set_int(VCONFKEY_SYSMAN_MMC_MOUNT, VCONFKEY_SYSMAN_MMC_MOUNT_ALREADY);
+
+               return -1;
+       }
+
+       r = __mmc_mount_fs();
+       if (r == 0)
+               goto mount_complete;
+       else if (r == -1)
+               goto mount_fail;
+       vconf_set_int(VCONFKEY_SYSMAN_MMC_STATUS, VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED);
+       vconf_set_int(VCONFKEY_SYSMAN_MMC_MOUNT, VCONFKEY_SYSMAN_MMC_MOUNT_FAILED);
+       vconf_set_int(VCONFKEY_SYSMAN_MMC_ERR_STATUS, errno);
        mmc_status = VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED;
        PRT_TRACE_ERR("Failed to mount mmc card\n");
        return -1;
-}
 
-int ss_mmc_removed()
-{
+mount_complete:
+       vconf_set_int(VCONFKEY_SYSMAN_MMC_STATUS, VCONFKEY_SYSMAN_MMC_MOUNTED);
+       vconf_set_int(VCONFKEY_SYSMAN_MMC_MOUNT, VCONFKEY_SYSMAN_MMC_MOUNT_COMPLETED);
+       mmc_status = VCONFKEY_SYSMAN_MMC_MOUNTED;
+       return 0;
+mount_fail:
        vconf_set_int(VCONFKEY_SYSMAN_MMC_STATUS, VCONFKEY_SYSMAN_MMC_REMOVED);
+       vconf_set_int(VCONFKEY_SYSMAN_MMC_MOUNT, VCONFKEY_SYSMAN_MMC_MOUNT_FAILED);
+       vconf_set_int(VCONFKEY_SYSMAN_MMC_ERR_STATUS, VCONFKEY_SYSMAN_MMC_EINVAL);
+       mmc_status = VCONFKEY_SYSMAN_MMC_REMOVED;
+       return 0;
+}
 
-       if (umount2(MMC_MOUNT_POINT, MNT_DETACH) != 0) {
+static int __umount_fs(void)
+{
+       int ret;
+       if ((ret = umount2(MMC_MOUNT_POINT, MNT_DETACH)) != 0) {
                PRT_TRACE_ERR("Failed to unmount mmc card\n");
        }
        mmc_status = VCONFKEY_SYSMAN_MMC_REMOVED;
+       return ret;
+}
+
+int ss_mmc_removed()
+{
+       int mmc_err = 0;
+       vconf_set_int(VCONFKEY_SYSMAN_MMC_STATUS, VCONFKEY_SYSMAN_MMC_REMOVED);
+       mmc_err = __umount_fs();
+       vconf_set_int(VCONFKEY_SYSMAN_MMC_ERR_STATUS, mmc_err);
 
        return 0;
 }
index ffa5aa7..2a5a105 100644 (file)
@@ -22,7 +22,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 
-#include "ss_device_plugin.h"
+#include "device-node.h"
 #include "ss_log.h"
 #include "ss_launch.h"
 #include "include/ss_data.h"
@@ -151,7 +151,7 @@ static int pmon_process(int pid, void *ad)
                                }
                                close(fd);
 
-                               if (0 > plugin_intf->OEM_sys_set_process_monitor_mp_pnp(new_pid)) {
+                               if ( device_set_property(DEVICE_TYPE_PROCESS, PROP_PROCESS_MP_PNP, new_pid) < 0) {
                                        PRT_TRACE_ERR("Write new pid failed");
                                }
                                PRT_TRACE("[Process MON] %d ", new_pid);
@@ -220,8 +220,7 @@ static int pmon_cb(void *data, Ecore_Fd_Handler * fd_handler)
 int ss_pmon_init(struct ss_main_data *ad)
 {
        char pmon_dev_node[PATH_MAX];
-
-       if (0 > plugin_intf->OEM_sys_get_process_monitor_node(pmon_dev_node)) {
+       if (device_get_property(DEVICE_TYPE_PROCESS, PROP_PROCESS_NODE, pmon_dev_node) < 0) {
                PRT_TRACE_ERR("ss_pmon_init get dev node path failed");
                return -1;
        }
index f7ac294..6674146 100644 (file)
 #include "ss_launch.h"
 #include "ss_queue.h"
 #include "ss_device_handler.h"
-#include "ss_device_plugin.h"
+#include "device-node.h"
 #include "ss_predefine.h"
 #include "ss_procmgr.h"
+#include "ss_vibrator.h"
 #include "include/ss_data.h"
 
 #define PREDEFINE_SO_DIR                       PREFIX"/lib/ss_predefine/"
@@ -74,11 +75,13 @@ static int lowbat_popup_option = 0;
 
 static struct timeval tv_start_poweroff;
 static void powerdown_ap(TapiHandle *handle, const char *noti_id, void *data, void *user_data);
+static void poweroff_control_cb(keynode_t *in_key, struct ss_main_data *ad);
 
 static int ss_flags = 0;
 
 static Ecore_Timer *poweroff_timer_id = NULL;
 static TapiHandle *tapi_handle = NULL;
+static int power_off = 0;
 
 static void make_memps_log(char *file, pid_t pid, char *victim_name)
 {
@@ -130,7 +133,7 @@ static int lowmem_get_victim_pid()
        pid_t pid;
        int fd;
 
-       if (0 > plugin_intf->OEM_sys_get_memnotify_victim_task(&pid)) {
+       if (device_get_property(DEVICE_TYPE_MEMORY, PROP_MEMORY_VICTIM_TASK, &pid) < 0) {
                PRT_TRACE_ERR("Get victim task failed");
                return -1;
        }
@@ -195,7 +198,7 @@ int usbcon_def_predefine_action(int argc, char **argv)
        int ret = -1;
        int bat_state = VCONFKEY_SYSMAN_BAT_NORMAL;
 
-       if (plugin_intf->OEM_sys_get_jack_usb_online(&val) == 0) {
+       if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_USB_ONLINE, &val) == 0) {
                if (val == 0) {
                        vconf_set_int(VCONFKEY_SYSMAN_USB_STATUS,
                                      VCONFKEY_SYSMAN_USB_DISCONNECTED);
@@ -222,7 +225,7 @@ int earjackcon_def_predefine_action(int argc, char **argv)
        int val;
 
        PRT_TRACE_EM("earjack_normal predefine action\n");
-       if (plugin_intf->OEM_sys_get_jack_earjack_online(&val) == 0) {
+       if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_EARJACK_ONLINE, &val) == 0) {
                return vconf_set_int(VCONFKEY_SYSMAN_EARJACK, val);
        }
 
@@ -336,8 +339,8 @@ Eina_Bool powerdown_ap_by_force(void *data)
        }
 
        PRT_TRACE("Power off by force\n");
-       kill(-1, SIGTERM);
        /* give a chance to be terminated for each process */
+       power_off = 1;
        sleep(1);
        sync();
        reboot(RB_POWER_OFF);
@@ -375,8 +378,8 @@ static void powerdown_ap(TapiHandle *handle, const char *noti_id, void *data, vo
                gettimeofday(&now, NULL);
        }
 
-       kill(-1, SIGTERM);
        /* give a chance to be terminated for each process */
+       power_off = 1;
        sleep(1);
        sync();
        reboot(RB_POWER_OFF);
@@ -390,6 +393,7 @@ int poweroff_def_predefine_action(int argc, char **argv)
        int ret;
 
        heynoti_publish(POWEROFF_NOTI_NAME);
+       vconf_ignore_key_changed(VCONFKEY_SYSMAN_POWER_OFF_STATUS, (void*)poweroff_control_cb);
 
        pm_change_state(LCD_NORMAL);
        system("/etc/rc.d/rc.shutdown &");
@@ -623,6 +627,7 @@ int flight_mode_def_predefine_action(int argc, char **argv)
        return 0;
 
 }
+
 static void ss_action_entry_load_from_sodir()
 {
        DIR *dp;
@@ -675,6 +680,21 @@ static void __tel_init_cb(keynode_t *key_nodes,void *data)
                PRT_TRACE_ERR("tapi is not ready yet");
        }
 }
+static void poweroff_control_cb(keynode_t *in_key, struct ss_main_data *ad)
+{
+       int val;
+       if (vconf_get_int(VCONFKEY_SYSMAN_POWER_OFF_STATUS, &val) != 0)
+               return;
+       switch (val) {
+       case VCONFKEY_SYSMAN_POWER_OFF_DIRECT:
+               ss_action_entry_call_internal(PREDEF_POWEROFF, 0);
+               break;
+       case VCONFKEY_SYSMAN_POWER_OFF_POPUP:
+               ss_action_entry_call_internal(PREDEF_PWROFF_POPUP, 0);
+               break;
+       }
+}
+
 void ss_predefine_internal_init(void)
 {
 
@@ -712,9 +732,14 @@ void ss_predefine_internal_init(void)
                                     launching_predefine_action, NULL, NULL);
        ss_action_entry_add_internal(PREDEF_REBOOT,
                                     restart_def_predefine_action, NULL, NULL);
-
        ss_action_entry_add_internal(PREDEF_FLIGHT_MODE,
                                     flight_mode_def_predefine_action, NULL, NULL);
+       ss_action_entry_add_internal(PREDEF_HAPTIC, haptic_def_predefine_action,
+                                       NULL, NULL);
+
+       if (vconf_notify_key_changed(VCONFKEY_SYSMAN_POWER_OFF_STATUS, (void *)poweroff_control_cb, NULL) < 0) {
+               PRT_TRACE_ERR("Vconf notify key chaneged failed: KEY(%s)", VCONFKEY_SYSMAN_POWER_OFF_STATUS);
+       }
        ss_action_entry_load_from_sodir();
 
        /* check and set earjack init status */
index 5c0faa9..ac1e38a 100644 (file)
@@ -19,7 +19,7 @@
 #include <vconf.h>
 #include <sysman.h>
 
-#include "ss_device_plugin.h"
+#include "device-node.h"
 #include "ss_log.h"
 #include "include/ss_data.h"
 
@@ -30,7 +30,7 @@ int ss_ta_init()
        int val = -1, i = 0, pid;
 
        PRT_TRACE("check ta connection");
-       if (plugin_intf->OEM_sys_get_jack_charger_online(&val) == 0) {
+       if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_TA_ONLINE, &val) == 0) {
                if ( val==1 ) {
                        vconf_set_int(VCONFKEY_SYSMAN_CHARGER_STATUS,
                                        VCONFKEY_SYSMAN_CHARGER_CONNECTED);
index 28bd0e5..854319d 100644 (file)
 #include <sys/ioctl.h>
 #include <linux/rtc.h>
 #include <fcntl.h>
+#include <sys/timerfd.h>
 
+#ifndef TFD_TIMER_CANCELON_SET
+#define TFD_TIMER_CANCELON_SET (1<<1)
+#endif
+#ifndef O_CLOEXEC
+#define O_CLOEXEC      0x2000000
+#endif
 
+#ifndef O_NONBLOCK
+#define O_NONBLOCK     0x4000
+#endif
+
+#ifndef TFD_CLOEXEC
+#define TFD_CLOEXEC    O_CLOEXEC
+#endif
+
+#ifndef TFD_NONBLOCK
+#define TFD_NONBLOCK   O_NONBLOCK
+#endif
 static const char default_rtc0[] = "/dev/rtc0";
 static const char default_rtc1[] = "/dev/rtc1";
 static const char default_localtime[] = "/opt/etc/localtime";
 
+static const time_t default_time = 2147483645; // max(32bit) -3sec
+static Ecore_Fd_Handler *tfdh = NULL; // tfd change noti
+
+static int tfd_cb(void *data, Ecore_Fd_Handler * fd_handler);
+static int timerfd_check_stop(int fd);
+static int timerfd_check_start(void);
+
 char *substring(const char *str, size_t begin, size_t len)
 {
        if (str == 0 || strlen(str) == 0 || strlen(str) < begin
@@ -151,11 +176,83 @@ int set_timezone_action(int argc, char **argv)
        return ret;
 }
 
+static int timerfd_check_start(void)
+{
+       int tfd = -1;
+       struct itimerspec tmr;
+
+       if ((tfd = timerfd_create(CLOCK_REALTIME,TFD_NONBLOCK|TFD_CLOEXEC)) == -1) {
+               PRT_TRACE_ERR("error timerfd_create() %d",errno);
+               tfdh = NULL;
+               return -1;
+       }
+
+       tfdh = ecore_main_fd_handler_add(tfd,ECORE_FD_READ,tfd_cb,NULL,NULL,NULL);
+       if (!tfdh) {
+               PRT_TRACE_ERR("error ecore_main_fd_handler_add");
+               return -1;
+       }
+       memset(&tmr, 0, sizeof(tmr));
+       tmr.it_value.tv_sec = default_time;
+
+       if (timerfd_settime(tfd,TFD_TIMER_ABSTIME|TFD_TIMER_CANCELON_SET,&tmr,NULL) < 0) {
+               PRT_TRACE_ERR("error timerfd_settime() %d",errno);
+               return -1;
+       }
+       return 0;
+}
+
+static int timerfd_check_stop(int tfd)
+{
+       if (tfdh) {
+               ecore_main_fd_handler_del(tfdh);
+               tfdh = NULL;
+       }
+       if (tfd >=0) {
+               close(tfd);
+               tfd = -1;
+       }
+       return 0;
+}
+
+static int tfd_cb(void *data, Ecore_Fd_Handler * fd_handler)
+{
+       int tfd = -1;
+       u_int64_t ticks;
+       int ret = -1;
+
+       if (!ecore_main_fd_handler_active_get(fd_handler,ECORE_FD_READ)) {
+               PRT_TRACE_ERR("error ecore_main_fd_handler_get()");
+               return -1;
+       }
+
+       if((tfd = ecore_main_fd_handler_fd_get(fd_handler)) == -1) {
+               PRT_TRACE_ERR("error ecore_main_fd_handler_fd_get()");
+               return -1;
+       }
+
+       ret = read(tfd,&ticks,sizeof(ticks));
+
+       if (ret < 0 && errno == ECANCELED) {
+               vconf_set_int(VCONFKEY_SYSMAN_STIME, VCONFKEY_SYSMAN_STIME_CHANGED);
+               timerfd_check_stop(tfd);
+               PRT_TRACE("NOTIFICATION here");
+               timerfd_check_start();
+       } else {
+               PRT_TRACE("unexpected read (err:%d)",errno);
+       }
+       return 0;
+}
+
 int ss_time_manager_init(void)
 {
        ss_action_entry_add_internal(PREDEF_SET_DATETIME, set_datetime_action,
                                     NULL, NULL);
        ss_action_entry_add_internal(PREDEF_SET_TIMEZONE, set_timezone_action,
                                     NULL, NULL);
+       if (timerfd_check_start() == -1) {
+               PRT_TRACE_ERR("fail system time change detector init");
+               return -1;
+       }
        return 0;
 }
index e9508a9..b97c358 100644 (file)
@@ -20,7 +20,7 @@
 #include <sysman.h>
 
 #include "ss_log.h"
-#include "ss_device_plugin.h"
+#include "device-node.h"
 #include "ss_launch.h"
 #include "include/ss_data.h"
 
@@ -32,7 +32,7 @@ int ss_usb_init()
        int val = -1, i = 0, pid;
 
        PRT_TRACE("check usb connection");
-       if (plugin_intf->OEM_sys_get_jack_usb_online(&val) == 0) {
+       if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_USB_ONLINE, &val) == 0) {
                if (val==1) {
                        vconf_set_int(VCONFKEY_SYSMAN_USB_STATUS,
                                        VCONFKEY_SYSMAN_USB_AVAILABLE);
diff --git a/ss_vibrator.c b/ss_vibrator.c
new file mode 100644 (file)
index 0000000..9ea3343
--- /dev/null
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2012 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 <glib.h>
+#include <device-node.h>
+
+#include "ss_log.h"
+#include "ss_predefine.h"
+#include "include/ss_data.h"
+
+enum {
+       PLAY_HAPTIC = 0,
+       STOP_HAPTIC,
+       LEVEL_HAPTIC,
+};
+
+struct haptic_node {
+       int pid;
+       int level;
+       int play;
+};
+
+static GList *haptic_head;
+
+static int add_node(struct haptic_node *node)
+{
+       haptic_head = g_list_append(haptic_head, node);
+}
+
+static int delete_node(struct haptic_node *node)
+{
+       haptic_head = g_list_remove(haptic_head, node);
+}
+
+static struct haptic_node *find_node(int pid)
+{
+       GList *elem;
+       struct haptic_node *node = NULL;
+
+       for (elem = haptic_head; elem; elem = elem->next) {
+               node = elem->data;
+               if (node->pid == pid)
+                       break;
+       }
+
+       return node;
+}
+
+static int haptic_play(int pid)
+{
+       struct haptic_node *node;
+       int r;
+
+       node = malloc(sizeof(struct haptic_node));
+       if (node == NULL) {
+               PRT_TRACE_ERR("malloc fail");
+               return -1;
+       }
+
+       node->pid = pid;
+       node->level = 0;
+       node->play = 1;
+
+       add_node(node);
+
+       r = device_set_property(DEVICE_TYPE_VIBRATOR, PROP_VIBRATOR_ENABLE, 1);
+       if (r < 0) {
+               PRT_TRACE_ERR("set enable fail");
+               return -1;
+       }
+
+       return 0;
+}
+
+static void check_play_state(gpointer data, gpointer user_data)
+{
+       struct haptic_node *node = (struct haptic_node*)data;
+       int *play = (int*)user_data;
+
+       *play += node->play;
+       PRT_TRACE_ERR("node pid : %d, level : %d, play : %d", node->pid, node->level, node->play);
+}
+
+static int haptic_stop(int pid)
+{
+       struct haptic_node *node;
+       int play = 0;
+       int r;
+
+       node = find_node(pid);
+       if (node == NULL) {
+               PRT_TRACE_ERR("find_node(%d) fail", pid);
+               return -1;
+       }
+
+       node->play = 0;
+       delete_node(node);
+       free(node);
+
+       g_list_foreach(haptic_head, check_play_state, &play);
+       PRT_TRACE_ERR("play state : %d", play);
+
+       if (!play) {
+               PRT_TRACE_ERR("not playing anymore, will be stop");
+               r = device_set_property(DEVICE_TYPE_VIBRATOR, PROP_VIBRATOR_ENABLE, 0);
+               if (r < 0) {
+                       PRT_TRACE_ERR("set enable fail");
+                       return -1;
+               }
+       }
+
+       return 0;
+}
+
+static void get_current_level(gpointer data, gpointer user_data)
+{
+       struct haptic_node *node = (struct haptic_node*)data;
+       int *sum = (int*)user_data;
+
+       PRT_TRACE_ERR("node pid : %d, level : %d, play : %d", node->pid, node->level, node->play);
+       if (node->play == 1) {
+               PRT_TRACE_ERR("node->play : %d, sum : %d", node->play, *sum);
+               *sum += node->level;
+       }
+}
+
+static int haptic_change_level(int pid, int level)
+{
+       struct haptic_node *node;
+       int sum = 0;
+       int r;
+
+       PRT_TRACE_ERR("pid : %d, level : %d", pid, level);
+
+       node = find_node(pid);
+       if (node == NULL) {
+               PRT_TRACE_ERR("find_node(%d) fail", pid);
+               return -1;
+       }
+
+       node->level = level;
+
+       g_list_foreach(haptic_head, get_current_level, &sum);
+       PRT_TRACE_ERR("current sum level : %d", sum);
+
+       r = device_set_property(DEVICE_TYPE_VIBRATOR, PROP_VIBRATOR_LEVEL, sum);
+       if (r < 0) {
+               PRT_TRACE_ERR("set level fail");
+               return -1;
+       }
+
+       return 0;
+}
+
+int haptic_def_predefine_action(int argc, char **argv)
+{
+       int i;
+       int pid;
+       int mode;
+
+       PRT_TRACE_ERR("argc : %d", argc);
+       for (i = 0; i < argc; ++i)
+               PRT_TRACE_ERR("[%2d] %s", i, argv[i]);
+
+       if (argc != 3) {
+               PRT_TRACE_ERR("Haptic predefine action failed");
+               return -1;
+       }
+
+       pid = atoi(argv[0]);
+       mode = atoi(argv[1]);
+       PRT_TRACE_ERR("pid : %d, mode : %d", pid, mode);
+
+       switch(mode) {
+       case PLAY_HAPTIC:
+               haptic_play(pid);
+               break;
+       case STOP_HAPTIC:
+               haptic_stop(pid);
+               break;
+       case LEVEL_HAPTIC:
+               haptic_change_level(pid, atoi(argv[2]));
+               break;
+       default:
+               break;
+       }
+
+       return 0;
+}
similarity index 65%
rename from ss_device_plugin.h
rename to ss_vibrator.h
index a9aa5e1..43c98c5 100644 (file)
  */
 
 
-#ifndef __SS_DEVICE_PLUGIN_H__
-#define __SS_DEVICE_PLUGIN_H__
+#ifndef __SS_VIBRATOR_H__
+#define __SS_VIBRATOR_H__
 
-#include "devman_plugin_intf.h"
+int haptic_def_predefine_action(int argc, char **argv);
 
-#define DEVMAN_PLUGIN_PATH      "/usr/lib/libslp_devman_plugin.so"
-
-int _ss_devman_plugin_init(void);
-int _ss_devman_plugin_fini(void);
-
-const OEM_sys_devman_plugin_interface *plugin_intf;
-
-#endif  /* __SS_DEVICE_PLUGIN_H__ */
+#endif /* __SS_VIBRATOR_H__ */