[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
[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
--- /dev/null
+[Vibration]
+D1=60
+D2=100
--- /dev/null
+[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
dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, ¶m[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);
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;
}
#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;
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);
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) {
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)
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);
}
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)
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);
}
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;
/* 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
}
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;
}
{
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
}
static int vibrator_is_supported(int pattern, bool *supported)
{
+ char *temp;
char *data;
bool ret = true;
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;
}
//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
[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