Modify feedback operation 72/72072/2 accepted/tizen/common/20160629.222249 accepted/tizen/common/20160703.130648 accepted/tizen/ivi/20160701.033851 accepted/tizen/mobile/20160701.034016 accepted/tizen/tv/20160701.033807 accepted/tizen/wearable/20160701.033925 submit/tizen/20160627.095455 submit/tizen/20160630.105614 submit/tizen_common/20160701.180000
authorpr.jung <pr.jung@samsung.com>
Mon, 30 May 2016 11:19:49 +0000 (20:19 +0900)
committerpr.jung <pr.jung@samsung.com>
Mon, 27 Jun 2016 08:33:45 +0000 (17:33 +0900)
Parse vibration configuration file in deviced instead of libfeedback,
so configuration file is parsed only once.
(Before, it is parsed every time feedback_init is called.)
Compare to earlier, vibration.conf has duration for playing and waiting time.

Also, haptic_vibrate_effect and haptic_is_supported is added for VibrateEffect and IsSupported.
vibrate_effect is used instead of vibrate_buffer and vibrate_monotone.

Change-Id: I674c758ee3172a07056193354ce29fa63bfae671
Signed-off-by: pr.jung <pr.jung@samsung.com>
common/data/vibration.conf
mobile/data/vibration.conf
mobile/data/vibration_duration.conf [new file with mode: 0644]
mobile/data/vibration_mix.conf [new file with mode: 0644]
src/dbus.c
src/dbus.h
src/feedback.c
src/vibrator.c
wearable/data/vibration.conf

index e6d8f71..6751075 100644 (file)
@@ -1,29 +1,29 @@
 [Vibration]
-FEEDBACK_PATTERN_SIP=mono
-FEEDBACK_PATTERN_KEY0=mono
-FEEDBACK_PATTERN_KEY1=mono
-FEEDBACK_PATTERN_KEY2=mono
-FEEDBACK_PATTERN_KEY3=mono
-FEEDBACK_PATTERN_KEY4=mono
-FEEDBACK_PATTERN_KEY5=mono
-FEEDBACK_PATTERN_KEY6=mono
-FEEDBACK_PATTERN_KEY7=mono
-FEEDBACK_PATTERN_KEY8=mono
-FEEDBACK_PATTERN_KEY9=mono
-FEEDBACK_PATTERN_KEY_STAR=mono
-FEEDBACK_PATTERN_KEY_SHARP=mono
-FEEDBACK_PATTERN_KEY_BACK=mono
-FEEDBACK_PATTERN_HOLD=mono
-FEEDBACK_PATTERN_HW_TAP=mono
-FEEDBACK_PATTERN_HW_HOLD=mono
-FEEDBACK_PATTERN_MESSAGE=mono
-FEEDBACK_PATTERN_EMAIL=mono
-FEEDBACK_PATTERN_WAKEUP=mono
-FEEDBACK_PATTERN_SCHEDULE=mono
-FEEDBACK_PATTERN_TIMER=mono
-FEEDBACK_PATTERN_GENERAL=mono
-FEEDBACK_PATTERN_POWERON=mono
-FEEDBACK_PATTERN_POWEROFF=mono
-FEEDBACK_PATTERN_CHARGERCONN=mono
-FEEDBACK_PATTERN_LOWBATT=mono
-FEEDBACK_PATTERN_VIBRATION_ON=mono
+FEEDBACK_PATTERN_SIP=60D
+FEEDBACK_PATTERN_KEY0=100D
+FEEDBACK_PATTERN_KEY1=100D
+FEEDBACK_PATTERN_KEY2=100D
+FEEDBACK_PATTERN_KEY3=100D
+FEEDBACK_PATTERN_KEY4=100D
+FEEDBACK_PATTERN_KEY5=100D
+FEEDBACK_PATTERN_KEY6=100D
+FEEDBACK_PATTERN_KEY7=100D
+FEEDBACK_PATTERN_KEY8=100D
+FEEDBACK_PATTERN_KEY9=100D
+FEEDBACK_PATTERN_KEY_STAR=100D
+FEEDBACK_PATTERN_KEY_SHARP=100D
+FEEDBACK_PATTERN_KEY_BACK=100D
+FEEDBACK_PATTERN_HOLD=100D
+FEEDBACK_PATTERN_HW_TAP=100D
+FEEDBACK_PATTERN_HW_HOLD=100D
+FEEDBACK_PATTERN_MESSAGE=100D
+FEEDBACK_PATTERN_EMAIL=100D
+FEEDBACK_PATTERN_WAKEUP=100D
+FEEDBACK_PATTERN_SCHEDULE=100D
+FEEDBACK_PATTERN_TIMER=100D
+FEEDBACK_PATTERN_GENERAL=100D
+FEEDBACK_PATTERN_POWERON=100D
+FEEDBACK_PATTERN_POWEROFF=100D
+FEEDBACK_PATTERN_CHARGERCONN=100D
+FEEDBACK_PATTERN_LOWBATT=100D
+FEEDBACK_PATTERN_VIBRATION_ON=100D
index 3879564..12bcb2f 100644 (file)
@@ -1,47 +1,47 @@
 [Vibration]
-FEEDBACK_PATTERN_SIP=mono
-FEEDBACK_PATTERN_KEY0=mono
-FEEDBACK_PATTERN_KEY1=mono
-FEEDBACK_PATTERN_KEY2=mono
-FEEDBACK_PATTERN_KEY3=mono
-FEEDBACK_PATTERN_KEY4=mono
-FEEDBACK_PATTERN_KEY5=mono
-FEEDBACK_PATTERN_KEY6=mono
-FEEDBACK_PATTERN_KEY7=mono
-FEEDBACK_PATTERN_KEY8=mono
-FEEDBACK_PATTERN_KEY9=mono
-FEEDBACK_PATTERN_KEY_STAR=mono
-FEEDBACK_PATTERN_KEY_SHARP=mono
-FEEDBACK_PATTERN_KEY_BACK=mono
-FEEDBACK_PATTERN_HOLD=mono
-FEEDBACK_PATTERN_HW_TAP=mono
-FEEDBACK_PATTERN_HW_HOLD=mono
-FEEDBACK_PATTERN_MESSAGE=mono
-FEEDBACK_PATTERN_EMAIL=mono
-FEEDBACK_PATTERN_WAKEUP=mono
-FEEDBACK_PATTERN_SCHEDULE=mono
-FEEDBACK_PATTERN_TIMER=mono
-FEEDBACK_PATTERN_GENERAL=mono
-FEEDBACK_PATTERN_POWERON=mono
-FEEDBACK_PATTERN_POWEROFF=mono
-FEEDBACK_PATTERN_CHARGERCONN=mono
-FEEDBACK_PATTERN_LOWBATT=mono
-FEEDBACK_PATTERN_VIBRATION_ON=mono
-FEEDBACK_PATTERN_MOBILE_SIP_BACKSPACE=mono
-FEEDBACK_PATTERN_MOBILE_SIP_FUNCTION=mono
-FEEDBACK_PATTERN_MOBILE_SIP_FJKEY=mono
-FEEDBACK_PATTERN_MOBILE_MAX_CHARACTER=mono
-FEEDBACK_PATTERN_MOBILE_MULTI_TAP=mono
-FEEDBACK_PATTERN_MOBILE_MESSAGE_ON_CALL=mono
-FEEDBACK_PATTERN_MOBILE_EMAIL_ON_CALL=mono
-FEEDBACK_PATTERN_MOBILE_WAKEUP_ON_CALL=mono
-FEEDBACK_PATTERN_MOBILE_SCHEDULE_ON_CALL=mono
-FEEDBACK_PATTERN_MOBILE_TIMER_ON_CALL=mono
-FEEDBACK_PATTERN_MOBILE_GENERAL_ON_CALL=mono
-FEEDBACK_PATTERN_MOBILE_SMART_ALERT=mono
-FEEDBACK_PATTERN_MOBILE_CHARGERCONN_ON_CALL=mono
-FEEDBACK_PATTERN_MOBILE_LOWBATT_ON_CALL=mono
-FEEDBACK_PATTERN_MOBILE_OUTGOING_CALL=mono
-FEEDBACK_PATTERN_MOBILE_MINUTEMINDER=mono
-FEEDBACK_PATTERN_MOBILE_MMS=mono
-FEEDBACK_PATTERN_MOBILE_HOURLY_ALERT=mono
+FEEDBACK_PATTERN_SIP=60D
+FEEDBACK_PATTERN_KEY0=100D
+FEEDBACK_PATTERN_KEY1=100D
+FEEDBACK_PATTERN_KEY2=100D
+FEEDBACK_PATTERN_KEY3=100D
+FEEDBACK_PATTERN_KEY4=100D
+FEEDBACK_PATTERN_KEY5=100D
+FEEDBACK_PATTERN_KEY6=100D
+FEEDBACK_PATTERN_KEY7=100D
+FEEDBACK_PATTERN_KEY8=100D
+FEEDBACK_PATTERN_KEY9=100D
+FEEDBACK_PATTERN_KEY_STAR=100D
+FEEDBACK_PATTERN_KEY_SHARP=100D
+FEEDBACK_PATTERN_KEY_BACK=100D
+FEEDBACK_PATTERN_HOLD=100D
+FEEDBACK_PATTERN_HW_TAP=100D
+FEEDBACK_PATTERN_HW_HOLD=100D
+FEEDBACK_PATTERN_MESSAGE=100D
+FEEDBACK_PATTERN_EMAIL=100D
+FEEDBACK_PATTERN_WAKEUP=100D
+FEEDBACK_PATTERN_SCHEDULE=100D
+FEEDBACK_PATTERN_TIMER=100D
+FEEDBACK_PATTERN_GENERAL=100D
+FEEDBACK_PATTERN_POWERON=100D
+FEEDBACK_PATTERN_POWEROFF=100D
+FEEDBACK_PATTERN_CHARGERCONN=100D
+FEEDBACK_PATTERN_LOWBATT=100D
+FEEDBACK_PATTERN_VIBRATION_ON=100D
+FEEDBACK_PATTERN_MOBILE_SIP_BACKSPACE=100D
+FEEDBACK_PATTERN_MOBILE_SIP_FUNCTION=100D
+FEEDBACK_PATTERN_MOBILE_SIP_FJKEY=100D
+FEEDBACK_PATTERN_MOBILE_MAX_CHARACTER=100D
+FEEDBACK_PATTERN_MOBILE_MULTI_TAP=100D
+FEEDBACK_PATTERN_MOBILE_MESSAGE_ON_CALL=100D
+FEEDBACK_PATTERN_MOBILE_EMAIL_ON_CALL=100D
+FEEDBACK_PATTERN_MOBILE_WAKEUP_ON_CALL=100D
+FEEDBACK_PATTERN_MOBILE_SCHEDULE_ON_CALL=100D
+FEEDBACK_PATTERN_MOBILE_TIMER_ON_CALL=100D
+FEEDBACK_PATTERN_MOBILE_GENERAL_ON_CALL=100D
+FEEDBACK_PATTERN_MOBILE_SMART_ALERT=100D
+FEEDBACK_PATTERN_MOBILE_CHARGERCONN_ON_CALL=100D
+FEEDBACK_PATTERN_MOBILE_LOWBATT_ON_CALL=100D
+FEEDBACK_PATTERN_MOBILE_OUTGOING_CALL=100D
+FEEDBACK_PATTERN_MOBILE_MINUTEMINDER=100D
+FEEDBACK_PATTERN_MOBILE_MMS=100D
+FEEDBACK_PATTERN_MOBILE_HOURLY_ALERT=100D
diff --git a/mobile/data/vibration_duration.conf b/mobile/data/vibration_duration.conf
new file mode 100644 (file)
index 0000000..79f7bb1
--- /dev/null
@@ -0,0 +1,3 @@
+[Vibration]
+D1=60
+D2=100
diff --git a/mobile/data/vibration_mix.conf b/mobile/data/vibration_mix.conf
new file mode 100644 (file)
index 0000000..3da21c3
--- /dev/null
@@ -0,0 +1,47 @@
+[Vibration]
+FEEDBACK_PATTERN_SIP=D1
+FEEDBACK_PATTERN_KEY0=D2
+FEEDBACK_PATTERN_KEY1=D2
+FEEDBACK_PATTERN_KEY2=D2
+FEEDBACK_PATTERN_KEY3=D2
+FEEDBACK_PATTERN_KEY4=D2
+FEEDBACK_PATTERN_KEY5=D2
+FEEDBACK_PATTERN_KEY6=D2
+FEEDBACK_PATTERN_KEY7=D2
+FEEDBACK_PATTERN_KEY8=D2
+FEEDBACK_PATTERN_KEY9=D2
+FEEDBACK_PATTERN_KEY_STAR=D2
+FEEDBACK_PATTERN_KEY_SHARP=D2
+FEEDBACK_PATTERN_KEY_BACK=D2
+FEEDBACK_PATTERN_HOLD=D2
+FEEDBACK_PATTERN_HW_TAP=D2
+FEEDBACK_PATTERN_HW_HOLD=D2
+FEEDBACK_PATTERN_MESSAGE=D2
+FEEDBACK_PATTERN_EMAIL=D2
+FEEDBACK_PATTERN_WAKEUP=D2
+FEEDBACK_PATTERN_SCHEDULE=D2
+FEEDBACK_PATTERN_TIMER=D2
+FEEDBACK_PATTERN_GENERAL=D2
+FEEDBACK_PATTERN_POWERON=D2
+FEEDBACK_PATTERN_POWEROFF=D2
+FEEDBACK_PATTERN_CHARGERCONN=D2
+FEEDBACK_PATTERN_LOWBATT=D2
+FEEDBACK_PATTERN_VIBRATION_ON=D2
+FEEDBACK_PATTERN_MOBILE_SIP_BACKSPACE=D2
+FEEDBACK_PATTERN_MOBILE_SIP_FUNCTION=D2
+FEEDBACK_PATTERN_MOBILE_SIP_FJKEY=D2
+FEEDBACK_PATTERN_MOBILE_MAX_CHARACTER=D2
+FEEDBACK_PATTERN_MOBILE_MULTI_TAP=D2
+FEEDBACK_PATTERN_MOBILE_MESSAGE_ON_CALL=D2
+FEEDBACK_PATTERN_MOBILE_EMAIL_ON_CALL=D2
+FEEDBACK_PATTERN_MOBILE_WAKEUP_ON_CALL=D2
+FEEDBACK_PATTERN_MOBILE_SCHEDULE_ON_CALL=D2
+FEEDBACK_PATTERN_MOBILE_TIMER_ON_CALL=D2
+FEEDBACK_PATTERN_MOBILE_GENERAL_ON_CALL=D2
+FEEDBACK_PATTERN_MOBILE_SMART_ALERT=D2
+FEEDBACK_PATTERN_MOBILE_CHARGERCONN_ON_CALL=D2
+FEEDBACK_PATTERN_MOBILE_LOWBATT_ON_CALL=D2
+FEEDBACK_PATTERN_MOBILE_OUTGOING_CALL=D2
+FEEDBACK_PATTERN_MOBILE_MINUTEMINDER=D2
+FEEDBACK_PATTERN_MOBILE_MMS=D2
+FEEDBACK_PATTERN_MOBILE_HOURLY_ALERT=D2
index 1c66641..53db49b 100644 (file)
@@ -59,7 +59,7 @@ static int append_variant(DBusMessageIter *iter, const char *sig, char *param[])
                        dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &param[i]);
                        break;
                case 'a':
-                       ++ch;
+                       ++i, ++ch;
                        switch (*ch) {
                        case 'y':
                                dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE_AS_STRING, &arr);
@@ -126,9 +126,12 @@ int dbus_method_sync(const char *dest, const char *path,
        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", //LCOV_EXCL_LINE
-                       err.name, err.message, dest, path, interface, method);
-               dbus_error_free(&err); //LCOV_EXCL_LINE System Error
+               if (dbus_error_is_set(&err)) {
+                       _E("error : [%s:%s] %s %s:%s-%s", //LCOV_EXCL_LINE
+                               err.name, err.message, dest, path, interface, method);
+                       dbus_error_free(&err); //LCOV_EXCL_LINE System Error
+               } else
+                       _E("no message"); //LCOV_EXCL_LINE
                return -ENOMSG;
        }
 
index 9710b59..8c66655 100644 (file)
 #define DEVICED_PATH_LED                    DEVICED_OBJECT_PATH"/Led"
 #define DEVICED_INTERFACE_LED               DEVICED_INTERFACE_NAME".Led"
 /* Haptic service: operatioins about haptic */
-#define DEVICED_PATH_HAPTIC                 DEVICED_OBJECT_PATH"/Haptic"
-#define DEVICED_INTERFACE_HAPTIC            DEVICED_INTERFACE_NAME".haptic"
+#define VIBRATOR_BUS_NAME                    "org.tizen.system.vibrator"
+#define VIBRATOR_OBJECT_PATH                 "/Org/Tizen/System/Vibrator"
+#define VIBRATOR_INTERFACE_NAME              VIBRATOR_BUS_NAME
+#define VIBRATOR_PATH_HAPTIC                 VIBRATOR_OBJECT_PATH"/Haptic"
+#define VIBRATOR_INTERFACE_HAPTIC            VIBRATOR_INTERFACE_NAME".haptic"
 
 struct dbus_byte {
        const unsigned char *data;
index d807162..555123b 100644 (file)
@@ -331,6 +331,9 @@ API int feedback_get_resource_path(feedback_type_e type, feedback_pattern_e patt
                return FEEDBACK_ERROR_INVALID_PARAMETER;
        }
 
+       if (type == FEEDBACK_TYPE_VIBRATION)
+               return FEEDBACK_ERROR_NOT_SUPPORTED;
+
        if (pattern <= FEEDBACK_PATTERN_NONE ||
            pattern >= profile->max_pattern) {
                _E("Invalid parameter : pattern(%d)", pattern);
@@ -366,6 +369,11 @@ API int feedback_set_resource_path(feedback_type_e type, feedback_pattern_e patt
                return FEEDBACK_ERROR_INVALID_PARAMETER;
        }
 
+       if (type == FEEDBACK_TYPE_VIBRATION) {
+               _E("Not supported type");
+               return FEEDBACK_ERROR_NOT_SUPPORTED;
+       }
+
        /* proper device set path */
        dev = find_device(type);
        if (dev) {
index 1d74340..42e257e 100644 (file)
@@ -52,37 +52,32 @@ enum haptic_iteration {
        HAPTIC_ITERATION_INFINITE = 256,
 };
 
-#define VIBRATION_CONF_FILE         FEEDBACK_SYS_RO_SHARE"/feedback/vibration.conf"
-
 #define METHOD_OPEN                 "OpenDevice"
 #define METHOD_CLOSE                "CloseDevice"
-#define METHOD_VIBRATE_MONOTONE     "VibrateMonotone"
-#define METHOD_VIBRATE_BUFFER       "VibrateBuffer"
+#define METHOD_VIBRATE_EFFECT       "VibrateEffect"
 #define METHOD_STOP                 "StopDevice"
+#define METHOD_IS_SUPPORTED         "IsSupported"
+#define METHOD_GET_EFFECT           "GetEffect"
 
 #define DEFAULT_DURATION            100
 #define SIP_DURATION                60
+#define WHITESPACE      " \t"
 
 static int vibstatus;
 static unsigned int v_handle;
-static struct feedback_config_info vib_info = {
-       .name = "Vibration",
-};
 
-static char *get_data(feedback_pattern_e pattern)
+static inline char *trim_str(char *s)
 {
-       char *data;
-
-       if (pattern <= FEEDBACK_PATTERN_NONE ||
-           pattern >= profile->max_pattern)
-               return NULL;
-
-       if (vib_info.data[pattern].changed)
-               data = vib_info.data[pattern].changed;
-       else
-               data = vib_info.data[pattern].origin;
-
-       return data;
+       char *t;
+       /* left trim */
+       s += strspn(s, WHITESPACE);
+
+       /* right trim */
+       for (t = strchr(s, 0); t > s; t--)
+               if (!strchr(WHITESPACE, t[-1]))
+                       break;
+       *t = 0;
+       return s;
 }
 
 inline int is_vibration_mode(void)
@@ -98,8 +93,8 @@ static int haptic_open(void)
        snprintf(buf_index, sizeof(buf_index), "%d", HAPTIC_DEVICE);
        arr[0] = buf_index;
 
-       return dbus_method_sync(DEVICED_BUS_NAME, DEVICED_PATH_HAPTIC,
-                       DEVICED_INTERFACE_HAPTIC, METHOD_OPEN,
+       return dbus_method_sync(VIBRATOR_BUS_NAME, VIBRATOR_PATH_HAPTIC,
+                       VIBRATOR_INTERFACE_HAPTIC, METHOD_OPEN,
                        "i", arr);
 }
 
@@ -111,34 +106,43 @@ static int haptic_close(unsigned int handle)
        snprintf(buf_handle, sizeof(buf_handle), "%u", handle);
        arr[0] = buf_handle;
 
-       return dbus_method_sync(DEVICED_BUS_NAME, DEVICED_PATH_HAPTIC,
-                       DEVICED_INTERFACE_HAPTIC, METHOD_CLOSE,
+       return dbus_method_sync(VIBRATOR_BUS_NAME, VIBRATOR_PATH_HAPTIC,
+                       VIBRATOR_INTERFACE_HAPTIC, METHOD_CLOSE,
                        "u", arr);
 }
 
-static int haptic_vibrate_monotone(unsigned int handle,
-                                                               int duration,
+static int haptic_is_supported(char *pattern)
+{
+       char *arr[1];
+
+       arr[0] = pattern;
+
+       return dbus_method_sync(VIBRATOR_BUS_NAME, VIBRATOR_PATH_HAPTIC,
+                       VIBRATOR_INTERFACE_HAPTIC, METHOD_IS_SUPPORTED,
+                       "s", arr);
+}
+
+static int haptic_vibrate_effect(unsigned int handle,
+                                                               char *pattern,
                                                                int feedback,
                                                                int priority)
 {
        char *arr[4];
        char buf_handle[32];
-       char buf_duration[32];
        char buf_feedback[32];
        char buf_priority[32];
 
        snprintf(buf_handle, sizeof(buf_handle), "%u", handle);
        arr[0] = buf_handle;
-       snprintf(buf_duration, sizeof(buf_duration), "%d", duration);
-       arr[1] = buf_duration;
+       arr[1] = pattern;
        snprintf(buf_feedback, sizeof(buf_feedback), "%d", feedback);
        arr[2] = buf_feedback;
        snprintf(buf_priority, sizeof(buf_priority), "%d", priority);
        arr[3] = buf_priority;
 
-       return dbus_method_sync(DEVICED_BUS_NAME, DEVICED_PATH_HAPTIC,
-                       DEVICED_INTERFACE_HAPTIC, METHOD_VIBRATE_MONOTONE,
-                       "uiii", arr);
+       return dbus_method_sync(VIBRATOR_BUS_NAME, VIBRATOR_PATH_HAPTIC,
+                       VIBRATOR_INTERFACE_HAPTIC, METHOD_VIBRATE_EFFECT,
+                       "usii", arr);
 }
 
 static int haptic_vibrate_stop(unsigned int handle)
@@ -149,8 +153,8 @@ static int haptic_vibrate_stop(unsigned int handle)
        snprintf(buf_handle, sizeof(buf_handle), "%u", handle);
        arr[0] = buf_handle;
 
-       return dbus_method_sync(DEVICED_BUS_NAME, DEVICED_PATH_HAPTIC,
-                       DEVICED_INTERFACE_HAPTIC, METHOD_STOP,
+       return dbus_method_sync(VIBRATOR_BUS_NAME, VIBRATOR_PATH_HAPTIC,
+                       VIBRATOR_INTERFACE_HAPTIC, METHOD_STOP,
                        "u", arr);
 }
 
@@ -162,21 +166,6 @@ static int get_priority(feedback_pattern_e pattern)
        return HAPTIC_PRIORITY_MIDDLE;
 }
 
-static int get_duration(feedback_pattern_e pattern)
-{
-       if (pattern == FEEDBACK_PATTERN_SIP)
-               return SIP_DURATION;
-#ifdef MOBILE
-       if (pattern == (feedback_pattern_e)FEEDBACK_PATTERN_MOBILE_SIP_BACKSPACE)
-               return SIP_DURATION;
-#endif
-#ifdef WEARABLE
-       if (pattern == (feedback_pattern_e)FEEDBACK_PATTERN_WEARABLE_SIP_BACKSPACE)
-               return SIP_DURATION;
-#endif
-       return DEFAULT_DURATION;
-}
-
 static void vibrator_init(void)
 {
        int ret;
@@ -196,41 +185,33 @@ static void vibrator_init(void)
 
        /* Set vibration handle */
        v_handle = (unsigned int)ret;
-
-       /* get vibration data */
-       feedback_load_config(VIBRATION_CONF_FILE, &vib_info);
 }
 
 static void vibrator_exit(void)
 {
        int ret;
 
-       if (v_handle > 0) {
+       if ((int)v_handle > 0) {
                ret = haptic_close(v_handle);
                if (ret < 0)
                        _E("haptic_close is failed : %d", ret); //LCOV_EXCL_LINE
                v_handle = 0;
        }
 
-       /* free vibration data */
-       feedback_free_config(&vib_info);
 }
 
 static int vibrator_play(feedback_pattern_e pattern)
 {
-       struct stat buf;
-       unsigned char *pbuf;
-       int size;
+       char *temp;
+       char *data;
        int ret;
        int level;
-       int duration;
 
-       if (!v_handle) {
-               _E("Not initialize"); //LCOV_EXCL_LINE
-               return -EPERM;
-       }
-
-       if (v_handle == -ENOTSUP || v_handle == -EACCES) {
+       if ((int)v_handle <= 0) {
+               if (v_handle == 0) {
+                       _E("Not initialized"); //LCOV_EXCL_LINE
+                       return -ENOENT;
+               }
                _E("Not supported vibration"); //LCOV_EXCL_LINE
                return v_handle; //LCOV_EXCL_LINE System Error
        }
@@ -252,24 +233,39 @@ static int vibrator_play(feedback_pattern_e pattern)
                return 0;
        }
 
+       if (pattern <= FEEDBACK_PATTERN_NONE ||
+           pattern >= profile->max_pattern) {
+               _E("Not supported vibration pattern");
+               return -ENOTSUP;
+       }
+
        if (profile->get_strength_type)
                level = profile->get_strength_type(FEEDBACK_TYPE_VIBRATION, pattern);
        else
                level = DEFAULT_VIB_LEVEL * HAPTIC_FEEDBACK_STEP;
 
-       /* if it has a file path */
-       duration = get_duration(pattern);
-       ret = haptic_vibrate_monotone(v_handle, duration,
-                       level, get_priority(pattern));
+       temp = strdup(profile->str_pattern[pattern]);
+       data = trim_str(temp);
+       if (!data) {
+               free(temp);
+               _E("Not supported vibration pattern");
+               return -ENOTSUP;
+       }
+
+       _D("pattern : %s", data);
+
+       ret = haptic_vibrate_effect(v_handle, data, level, get_priority(pattern));
 
        if (ret < 0) {
                _E("fail to play vibration"); //LCOV_EXCL_LINE
-               if (ret == -ECOMM)
+               free(temp);
+               if (ret == -ECOMM || ret == -ENOTSUP)
                        return ret; //LCOV_EXCL_LINE System Error
                return -EPERM;
        }
 
-       _D("Play success! Data is %d", pattern);
+       _D("Play success! Data is %s", data);
+       free(temp);
        return 0;
 }
 
@@ -277,12 +273,11 @@ static int vibrator_stop(void)
 {
        int ret;
 
-       if (!v_handle) {
-               _E("Not initialize"); //LCOV_EXCL_LINE
-               return -EPERM;
-       }
-
-       if (v_handle == -ENOTSUP || v_handle == -EACCES) {
+       if ((int)v_handle <= 0) {
+               if (v_handle == 0) {
+                       _E("Not initialized"); //LCOV_EXCL_LINE
+                       return -ENOENT;
+               }
                _E("Not supported vibration"); //LCOV_EXCL_LINE
                return v_handle; //LCOV_EXCL_LINE System Error
        }
@@ -301,6 +296,7 @@ static int vibrator_stop(void)
 
 static int vibrator_is_supported(int pattern, bool *supported)
 {
+       char *temp;
        char *data;
        bool ret = true;
 
@@ -309,24 +305,42 @@ static int vibrator_is_supported(int pattern, bool *supported)
                return -EINVAL;
        }
 
-       if (!v_handle) {
-               _E("Not initialize"); //LCOV_EXCL_LINE
-               return -EPERM;
-       }
-
-       if (v_handle == -ENOTSUP || v_handle == -EACCES) {
+       if ((int)v_handle <= 0) {
+               if (v_handle == 0) {
+                       _E("Not initialized"); //LCOV_EXCL_LINE
+                       return -ENOENT;
+               }
                _E("Not supported vibration"); //LCOV_EXCL_LINE
                *supported = false; //LCOV_EXCL_LINE System Error
                return v_handle;
        }
 
+       if (pattern <= FEEDBACK_PATTERN_NONE ||
+           pattern >= profile->max_pattern) {
+               _E("Not supported vibration pattern");
+               *supported = false;
+               return 0;
+       }
+
        /* get vibration data */
-       data = get_data(pattern);
+       temp = strdup(profile->str_pattern[pattern]);
+       data = trim_str(temp);
        if (!data) {
-               _E("Not supported vibration pattern");
-               ret = false;
+               free(temp);
+               *supported = false;
+               return 0;
+       }
+
+       ret = haptic_is_supported(data);
+       free(temp);
+       if (ret < 0) {
+               _E("fail to get support information");
+               if (ret == -ECOMM)
+                       return ret;
+               return -EPERM;
        }
 
+       _D("is_supported : %d", ret);
        *supported = ret;
        return 0;
 }
@@ -334,57 +348,11 @@ static int vibrator_is_supported(int pattern, bool *supported)
 //LCOV_EXCL_START Not used function-Internal APIs TODO Will make iUTC
 static int vibrator_get_path(feedback_pattern_e pattern, char *buf, unsigned int buflen)
 {
-       char *data;
-       int ret = 0;
-
-       if (!buf || buflen <= 0)
-               return -EINVAL;
-
-       /* get vibration data */
-       data = get_data(pattern);
-       if (!data) {
-               _E("This pattern(%s) in vibrator type is not supported to play",
-                               profile->str_pattern[pattern]);
-               data = "NULL";
-               ret = -ENOENT;
-       }
-
-       snprintf(buf, buflen, "%s", data);
-       return ret;
+       return 0;
 }
 
 static int vibrator_set_path(feedback_pattern_e pattern, char *path)
 {
-       struct stat buf;
-
-       /*
-        * check the path is valid
-        * if path is null, reset vibration path
-        */
-       if (!path) {
-               if (vib_info.data[pattern].changed) {
-                       free(vib_info.data[pattern].changed);
-                       vib_info.data[pattern].changed = NULL;
-               }
-               return 0;
-       }
-
-       if (path && stat(path, &buf)) {
-               _E("%s is not presents", path);
-               return -errno;
-       }
-
-       if (vib_info.data[pattern].changed) {
-               free(vib_info.data[pattern].changed);
-               vib_info.data[pattern].changed = NULL;
-       }
-
-       /* if path is NULL, this pattern set to default file */
-       if (path)
-               vib_info.data[pattern].changed = strdup(path);
-
-       _D("The file of pattern(%s) is changed to [%s]",
-                       profile->str_pattern[pattern], path);
        return 0;
 }
 //LCOV_EXCL_STOP
index b52dcb5..77ec605 100644 (file)
@@ -1,38 +1,38 @@
 [Vibration]
-FEEDBACK_PATTERN_TAP=mono
-FEEDBACK_PATTERN_SIP=mono
-FEEDBACK_PATTERN_HOLD=mono
-FEEDBACK_PATTERN_MESSAGE=mono
-FEEDBACK_PATTERN_EMAIL=mono
-FEEDBACK_PATTERN_WAKEUP=mono
-FEEDBACK_PATTERN_SCHEDULE=mono
-FEEDBACK_PATTERN_TIMER=mono
-FEEDBACK_PATTERN_GENERAL=mono
-FEEDBACK_PATTERN_CHARGERCONN=mono
-FEEDBACK_PATTERN_LOWBATT=mono
-FEEDBACK_PATTERN_VIBRATION_ON=mono
-FEEDBACK_PATTERN_BT_CONNECTED=mono
-FEEDBACK_PATTERN_BT_DISCONNECTED=mono
-FEEDBACK_PATTERN_WEARABLE_SIP_BACKSPACE=mono
-FEEDBACK_PATTERN_WEARABLE_SIP_FUNCTION=mono
-FEEDBACK_PATTERN_WEARABLE_SIP_FJKEY=mono
-FEEDBACK_PATTERN_WEARABLE_CHARGERCONN_ON_CALL=mono
-FEEDBACK_PATTERN_WEARABLE_LOWBATT_ON_CALL=mono
-FEEDBACK_PATTERN_WEARABLE_CALLCONNECT=mono
-FEEDBACK_PATTERN_WEARABLE_DISCALLCONNECT=mono
-FEEDBACK_PATTERN_WEARABLE_BT_PAIRING=mono
-FEEDBACK_PATTERN_WEARABLE_BT_WAITING=mono
-FEEDBACK_PATTERN_WEARABLE_SAFETY_ALERT=mono
-FEEDBACK_PATTERN_WEARABLE_SEND_SOS_MESSAGE=mono
-FEEDBACK_PATTERN_WEARABLE_END_SOS_MESSAGE=mono
-FEEDBACK_PATTERN_WEARABLE_CMAS=mono
-FEEDBACK_PATTERN_WEARABLE_SPEED_UP=mono
-FEEDBACK_PATTERN_WEARABLE_SLOW_DOWN=mono
-FEEDBACK_PATTERN_WEARABLE_KEEP_THIS_PACE=mono
-FEEDBACK_PATTERN_WEARABLE_GOAL_ACHIEVED=mono
-FEEDBACK_PATTERN_WEARABLE_START_CUE=mono
-FEEDBACK_PATTERN_WEARABLE_HEALTH_PACE=mono
-FEEDBACK_PATTERN_WEARABLE_INACTIVE_TIME=mono
-FEEDBACK_PATTERN_WEARABLE_MEASURING_SUCCESS=mono
-FEEDBACK_PATTERN_WEARABLE_MEASURING_FAILURE=mono
-FEEDBACK_PATTERN_WEARABLE_3RD_APPLICATION=mono
+FEEDBACK_PATTERN_TAP=100D
+FEEDBACK_PATTERN_SIP=60D
+FEEDBACK_PATTERN_HOLD=100D
+FEEDBACK_PATTERN_MESSAGE=100D
+FEEDBACK_PATTERN_EMAIL=100D
+FEEDBACK_PATTERN_WAKEUP=100D
+FEEDBACK_PATTERN_SCHEDULE=100D
+FEEDBACK_PATTERN_TIMER=100D
+FEEDBACK_PATTERN_GENERAL=100D
+FEEDBACK_PATTERN_CHARGERCONN=100D
+FEEDBACK_PATTERN_LOWBATT=100D
+FEEDBACK_PATTERN_VIBRATION_ON=100D
+FEEDBACK_PATTERN_BT_CONNECTED=100D
+FEEDBACK_PATTERN_BT_DISCONNECTED=100D
+FEEDBACK_PATTERN_WEARABLE_SIP_BACKSPACE=100D
+FEEDBACK_PATTERN_WEARABLE_SIP_FUNCTION=100D
+FEEDBACK_PATTERN_WEARABLE_SIP_FJKEY=100D
+FEEDBACK_PATTERN_WEARABLE_CHARGERCONN_ON_CALL=100D
+FEEDBACK_PATTERN_WEARABLE_LOWBATT_ON_CALL=100D
+FEEDBACK_PATTERN_WEARABLE_CALLCONNECT=100D
+FEEDBACK_PATTERN_WEARABLE_DISCALLCONNECT=100D
+FEEDBACK_PATTERN_WEARABLE_BT_PAIRING=100D
+FEEDBACK_PATTERN_WEARABLE_BT_WAITING=100D
+FEEDBACK_PATTERN_WEARABLE_SAFETY_ALERT=100D
+FEEDBACK_PATTERN_WEARABLE_SEND_SOS_MESSAGE=100D
+FEEDBACK_PATTERN_WEARABLE_END_SOS_MESSAGE=100D
+FEEDBACK_PATTERN_WEARABLE_CMAS=100D
+FEEDBACK_PATTERN_WEARABLE_SPEED_UP=100D
+FEEDBACK_PATTERN_WEARABLE_SLOW_DOWN=100D
+FEEDBACK_PATTERN_WEARABLE_KEEP_THIS_PACE=100D
+FEEDBACK_PATTERN_WEARABLE_GOAL_ACHIEVED=100D
+FEEDBACK_PATTERN_WEARABLE_START_CUE=100D
+FEEDBACK_PATTERN_WEARABLE_HEALTH_PACE=100D
+FEEDBACK_PATTERN_WEARABLE_INACTIVE_TIME=100D
+FEEDBACK_PATTERN_WEARABLE_MEASURING_SUCCESS=100D
+FEEDBACK_PATTERN_WEARABLE_MEASURING_FAILURE=100D
+FEEDBACK_PATTERN_WEARABLE_3RD_APPLICATION=100D