*/
typedef enum {
FEEDBACK_PATTERN_INTERNAL_NONE = FEEDBACK_PATTERN_NONE,
+ FEEDBACK_PATTERN_SIP_BACKSPACE = 2,
+ FEEDBACK_PATTERN_SIP_FUNCTION = 3,
+ FEEDBACK_PATTERN_SIP_FJKEY = 4,
+ FEEDBACK_PATTERN_MAX_CHARACTER = 5,
+ FEEDBACK_PATTERN_MULTI_TAP = 20,
FEEDBACK_PATTERN_MESSAGE_ON_CALL = 24, /**< feedback pattern when incoming a message on call */
FEEDBACK_PATTERN_EMAIL_ON_CALL = 26, /**< feedback pattern when incoming an email on call */
FEEDBACK_PATTERN_SCHEDULE_ON_CALL = 30, /**< feedback pattern when alert schedule alarm on call */
FEEDBACK_PATTERN_TIMER_ON_CALL = 32, /**< feedback pattern when alert timer on call */
FEEDBACK_PATTERN_GENERAL_ON_CALL = 34, /**< feedback pattern when alert general event on call */
-
+ FEEDBACK_PATTERN_SMART_ALERT = 35,
FEEDBACK_PATTERN_CHARGERCONN_ON_CALL = 39, /**< feedback pattern when connecting charger on call */
FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL = 41, /**< feedback pattern when occuring charging error on call */
FEEDBACK_PATTERN_FULLCHARGED_ON_CALL = 43, /**< feedback pattern when full charged on call */
FEEDBACK_PATTERN_LOWBATT_ON_CALL = 45, /**< feedback pattern when low battery on call */
-
+ FEEDBACK_PATTERN_LOCK_SWIPE = 48,
+ FEEDBACK_PATTERN_UNLOCK_SWIPE,
+ FEEDBACK_PATTERN_GEOMETRIC_LOCK,
+ FEEDBACK_PATTERN_CALLCONNECT,
+ FEEDBACK_PATTERN_DISCALLCONNECT,
FEEDBACK_PATTERN_OUTGOING_CALL = 53, /**< feedback pattern when connected outgoing call */
+ FEEDBACK_PATTERN_MINUTEMINDER,
+ FEEDBACK_PATTERN_BT_PAIRING = 59,
+ FEEDBACK_PATTERN_BT_WAITING,
FEEDBACK_PATTERN_SCREEN_CAPTURE = 61, /**< feedback pattern when screen capture */
- FEEDBACK_PATTERN_SEND_SOS_MESSAGE = 69, /**< feedback pattern when sending SOS message */
+ FEEDBACK_PATTERN_UV_PROCESSING = 95,
+ FEEDBACK_PATTERN_SHEALTH_START,
+ FEEDBACK_PATTERN_SHEALTH_PAUSE,
+ FEEDBACK_PATTERN_SHEALTH_STOP,
+ FEEDBACK_PATTERN_3RD_APPLICATION,
+ FEEDBACK_PATTERN_TICK,
+ FEEDBACK_PATTERN_TRANSITION_CIRCULAR,
+ FEEDBACK_PATTERN_TRANSITION_POP,
+ FEEDBACK_PATTERN_PROCESS,
+ FEEDBACK_PATTERN_MOVE_LIST,
+ FEEDBACK_PATTERN_DISMISS,
+ FEEDBACK_PATTERN_CLOCK_SECOND_HAND,
+ //SYSTEM_SHORT
+ //SYSTEM_ERROR
+ FEEDBACK_PATTERN_SPIRAL_DOWN = 109,
+ FEEDBACK_PATTERN_MOVE_LIST_2,
+ FEEDBACK_PATTERN_SPIRAL_UP,
+ //SYSTEM_LONG
+ //SYSTEM_MID
+ FEEDBACK_PATTERN_SILENCE = 114,
+ FEEDBACK_PATTERN_INACTIVE_TENSION,
+ FEEDBACK_PATTERN_INACTIVE_FINE,
+ //END_EFFECT
+ FEEDBACK_PATTERN_SHEALTH_NOTICE = 118,
+ FEEDBACK_PATTERN_SHEALTH_GENTLE_ALERT,
+ FEEDBACK_PATTERN_END_EFFECT_FINE,
+ FEEDBACK_PATTERN_CLICK_VALUE,
+ FEEDBACK_PATTERN_CLICK_FINE_TRAIN_1,
+ FEEDBACK_PATTERN_CLICK_FINE,
+ FEEDBACK_PATTERN_CLICK_SLIDER,
+ FEEDBACK_PATTERN_CLICK_MEDIUM,
+ FEEDBACK_PATTERN_CLICK_STRONG,
+ FEEDBACK_PATTERN_TURN_RIGHT,
+ FEEDBACK_PATTERN_TURN_LEFT,
+ FEEDBACK_PATTERN_FUNCTION = 129,
+// FEEDBACK_PATTERN_RINGER = 129, /**< Feedback pattern for incoming call */
+ FEEDBACK_PATTERN_VOICE_START,
+ FEEDBACK_PATTERN_VOICE_STOP,
+ FEEDBACK_PATTERN_COMMUNICATION,
+ FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ,
+ FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ,
+ //GENERAL_STRONG_BUZZ
+ FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ = 136,
+ FEEDBACK_PATTERN_SCHEDULE_STRONG_BUZZ,
+ FEEDBACK_PATTERN_WAKEUP_STRONG_BUZZ,
+ FEEDBACK_PATTERN_TIMER_STRONG_BUZZ,
+ FEEDBACK_PATTERN_RINGER_STRONG_BUZZ,
+ FEEDBACK_PATTERN_HEARTBEAT,
+ FEEDBACK_PATTERN_HEARTBEAT_FAST,
+ FEEDBACK_PATTERN_SETTING_ON,
+ FEEDBACK_PATTERN_SETTING_OFF,
+ FEEDBACK_PATTERN_CONNECT,
+ FEEDBACK_PATTERN_DISCONNECT = 146,
+// FEEDBACK_PATTERN_NOTIFICATION = 146, /**< Feedback pattern for notification */
+ FEEDBACK_PATTERN_FIND_MY_GEAR,
+ FEEDBACK_PATTERN_NOTIFICATION_1,
+ FEEDBACK_PATTERN_NOTIFICATION_1_STRONG_BUZZ,
+ FEEDBACK_PATTERN_NOTIFICATION_2,
+ FEEDBACK_PATTERN_NOTIFICATION_2_STRONG_BUZZ,
+ FEEDBACK_PATTERN_NOTIFICATION_3,
+ FEEDBACK_PATTERN_NOTIFICATION_3_STRONG_BUZZ,
+ FEEDBACK_PATTERN_NOTIFICATION_4,
+ FEEDBACK_PATTERN_NOTIFICATION_4_STRONG_BUZZ,
+ FEEDBACK_PATTERN_NOTIFICATION_5,
+ FEEDBACK_PATTERN_NOTIFICATION_5_STRONG_BUZZ,
+ FEEDBACK_PATTERN_NOTIFICATION_6,
+ FEEDBACK_PATTERN_NOTIFICATION_6_STRONG_BUZZ,
+ FEEDBACK_PATTERN_NOTIFICATION_7,
+ FEEDBACK_PATTERN_NOTIFICATION_7_STRONG_BUZZ,
+ FEEDBACK_PATTERN_NOTIFICATION_8,
+ FEEDBACK_PATTERN_NOTIFICATION_8_STRONG_BUZZ,
+ FEEDBACK_PATTERN_NOTIFICATION_9,
+ FEEDBACK_PATTERN_NOTIFICATION_9_STRONG_BUZZ,
+ FEEDBACK_PATTERN_NOTIFICATION_10,
+ FEEDBACK_PATTERN_NOTIFICATION_10_STRONG_BUZZ,
+ FEEDBACK_PATTERN_RING_1,
+ FEEDBACK_PATTERN_RING_1_STRONG_BUZZ,
+ FEEDBACK_PATTERN_RING_2,
+ FEEDBACK_PATTERN_RING_2_STRONG_BUZZ,
+ FEEDBACK_PATTERN_RING_3,
+ FEEDBACK_PATTERN_RING_3_STRONG_BUZZ,
+ FEEDBACK_PATTERN_RING_4,
+ FEEDBACK_PATTERN_RING_4_STRONG_BUZZ,
+ FEEDBACK_PATTERN_RING_5,
+ FEEDBACK_PATTERN_RING_5_STRONG_BUZZ,
+ FEEDBACK_PATTERN_RING_6,
+ FEEDBACK_PATTERN_RING_6_STRONG_BUZZ,
+ FEEDBACK_PATTERN_RING_7,
+ FEEDBACK_PATTERN_RING_7_STRONG_BUZZ,
+ FEEDBACK_PATTERN_RING_8,
+ FEEDBACK_PATTERN_RING_8_STRONG_BUZZ,
+ FEEDBACK_PATTERN_RING_9,
+ FEEDBACK_PATTERN_RING_9_STRONG_BUZZ,
+ FEEDBACK_PATTERN_RING_10,
+ FEEDBACK_PATTERN_RING_10_STRONG_BUZZ,
+
+ FEEDBACK_PATTERN_ALARM_1,
+ FEEDBACK_PATTERN_ALARM_1_STRONG_BUZZ,
+ FEEDBACK_PATTERN_ALARM_2,
+ FEEDBACK_PATTERN_ALARM_2_STRONG_BUZZ,
+ FEEDBACK_PATTERN_ALARM_3,
+ FEEDBACK_PATTERN_ALARM_3_STRONG_BUZZ,
+ FEEDBACK_PATTERN_ALARM_4,
+ FEEDBACK_PATTERN_ALARM_4_STRONG_BUZZ,
+ FEEDBACK_PATTERN_ALARM_5,
+ FEEDBACK_PATTERN_ALARM_5_STRONG_BUZZ,
+ FEEDBACK_PATTERN_ALARM_6,
+ FEEDBACK_PATTERN_ALARM_6_STRONG_BUZZ,
+ FEEDBACK_PATTERN_ALARM_7,
+ FEEDBACK_PATTERN_ALARM_7_STRONG_BUZZ,
+ FEEDBACK_PATTERN_ALARM_8,
+ FEEDBACK_PATTERN_ALARM_8_STRONG_BUZZ,
+ FEEDBACK_PATTERN_ALARM_9,
+ FEEDBACK_PATTERN_ALARM_9_STRONG_BUZZ,
+ FEEDBACK_PATTERN_ALARM_10,
+ FEEDBACK_PATTERN_ALARM_10_STRONG_BUZZ,
+ FEEDBACK_PATTERN_PICKER,
+ FEEDBACK_PATTERN_PICKER_FINISH,
+ FEEDBACK_PATTERN_ON_OFF_SWITCH,
+ FEEDBACK_PATTERN_REORDER,
+ FEEDBACK_PATTERN_CURSOR_MOVE,
- FEEDBACK_PATTERN_RINGER = 129, /**< Feedback pattern for incoming call */
- FEEDBACK_PATTERN_NOTIFICATION = 146, /**< Feedback pattern for notification */
- FEEDBACK_PATTERN_DEFAULT = 9999, /**< Feedback pattern for default information */
FEEDBACK_PATTERN_RESERVED_END = 10000,
// Add new pattern ids for Mobile and Wearable devices here
// ...
+ FEEDBACK_PATTERN_MMS = FEEDBACK_PATTERN_RESERVED_END,
+
+ FEEDBACK_PATTERN_HOURLY_ALERT,
+ FEEDBACK_PATTERN_SAFETY_ALERT,
+ FEEDBACK_PATTERN_ACCIDENT_DETECT,
+ FEEDBACK_PATTERN_SEND_SOS_MESSAGE,
+ FEEDBACK_PATTERN_END_SOS_MESSAGE,
+ FEEDBACK_PATTERN_EMERGENCY_BUZZER,
+ FEEDBACK_PATTERN_SAFETY_LOW_POWER,
+ FEEDBACK_PATTERN_CMAS,
+ FEEDBACK_PATTERN_RINGER,
+ FEEDBACK_PATTERN_NOTIFICATION,
+ FEEDBACK_PATTERN_INFO,
+ FEEDBACK_PATTERN_WARNING,
+ FEEDBACK_PATTERN_ERROR,
+ FEEDBACK_PATTERN_EMERGENCY,
+ FEEDBACK_PATTERN_INTERNAL_WAKEUP,
+ FEEDBACK_PATTERN_INTERNAL_TIMER,
+ FEEDBACK_PATTERN_TEMPERATURE_WARNING,
+ FEEDBACK_PATTERN_COOLDOWN_WARNING_1,
+ FEEDBACK_PATTERN_COOLDOWN_WARNING_2,
+ FEEDBACK_PATTERN_SPEED_UP,
+ FEEDBACK_PATTERN_SLOW_DOWN,
+ FEEDBACK_PATTERN_KEEP_THIS_PACE,
+ FEEDBACK_PATTERN_GOAL_ACHIEVED,
+ FEEDBACK_PATTERN_EXERCISE_COUNT,
+ FEEDBACK_PATTERN_START_CUE,
+ FEEDBACK_PATTERN_HEALTH_PACE,
+ FEEDBACK_PATTERN_INACTIVE_TIME,
+ FEEDBACK_PATTERN_CMAS_CA,
+ FEEDBACK_PATTERN_NFC_SUCCESS,
+
+ FEEDBACK_PATTERN_MEASURING_SUCCESS,
+ FEEDBACK_PATTERN_MEASURING_FAILURE,
+ FEEDBACK_PATTERN_MEDITATION, /**< Feedback pattern for meditation start/stop timer (Since 5.5) */
+ FEEDBACK_PATTERN_MEDITATION_INTERVAL, /**< Feedback pattern for meditation interval (notification) (Since 5.5) */
+
+ FEEDBACK_PATTERN_FALL_DETECTION_1,
+ FEEDBACK_PATTERN_FALL_DETECTION_2,
+
+ FEEDBACK_PATTERN_SMART_GESTURE,
+
FEEDBACK_PATTERN_MOBILE_END = 20000,
// Add new pattern ids for TV devices here
// ...
#include <stdlib.h>
#include <vconf.h>
#include <system_info.h>
+#include <sys/stat.h>
#include "feedback.h"
#include "feedback-internal.h"
#include "profiles.h"
#include "log.h"
+#define BUZZ_CONVERTED 2
+#define MAX_VIB_LEVEL 2
+
/* Temporary keys */
#ifndef VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL
#define VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL "db/setting/sound/vibrate_when_notification"
#define VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL "db/setting/sound/haptic_feedback_on"
#endif
+/* noti type */
+#ifndef VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT
+#define VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT "db/setting/sound/noti/vibration_type"
+#endif
+
+#ifndef VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT
+#define VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT "db/setting/disconnect_alert/type"
+#endif
+
static const char *profile_str_type[] = {
"FEEDBACK_TYPE_NONE",
{"FEEDBACK_PATTERN_SYSTEM_MID", FEEDBACK_PATTERN_SYSTEM_MID},
{"FEEDBACK_PATTERN_RINGER", FEEDBACK_PATTERN_RINGER},
{"FEEDBACK_PATTERN_NOTIFICATION", FEEDBACK_PATTERN_NOTIFICATION},
- {"FEEDBACK_PATTERN_DEFAULT", FEEDBACK_PATTERN_DEFAULT},
+
+ {"FEEDBACK_PATTERN_SIP_BACKSPACE", FEEDBACK_PATTERN_SIP_BACKSPACE},
+ {"FEEDBACK_PATTERN_SIP_FUNCTION", FEEDBACK_PATTERN_SIP_FUNCTION},
+ {"FEEDBACK_PATTERN_SIP_FJKEY", FEEDBACK_PATTERN_SIP_FJKEY},
+ {"FEEDBACK_PATTERN_MAX_CHARACTER", FEEDBACK_PATTERN_MAX_CHARACTER},
+ {"FEEDBACK_PATTERN_MULTI_TAP", FEEDBACK_PATTERN_MULTI_TAP},
+ {"FEEDBACK_PATTERN_HW_TAP", FEEDBACK_PATTERN_HW_TAP},
+ {"FEEDBACK_PATTERN_HW_HOLD", FEEDBACK_PATTERN_HW_HOLD},
+ {"FEEDBACK_PATTERN_SMART_ALERT", FEEDBACK_PATTERN_SMART_ALERT},
+ {"FEEDBACK_PATTERN_GEOMETRIC_LOCK", FEEDBACK_PATTERN_GEOMETRIC_LOCK},
+ {"FEEDBACK_PATTERN_CALLCONNECT", FEEDBACK_PATTERN_CALLCONNECT},
+ {"FEEDBACK_PATTERN_DISCALLCONNECT", FEEDBACK_PATTERN_DISCALLCONNECT},
+ {"FEEDBACK_PATTERN_MINUTEMINDER", FEEDBACK_PATTERN_MINUTEMINDER},
+ {"FEEDBACK_PATTERN_BT_PAIRING", FEEDBACK_PATTERN_BT_PAIRING},
+ {"FEEDBACK_PATTERN_BT_WAITING", FEEDBACK_PATTERN_BT_WAITING},
+ {"FEEDBACK_PATTERN_MMS", FEEDBACK_PATTERN_MMS},
+ {"FEEDBACK_PATTERN_HOURLY_ALERT", FEEDBACK_PATTERN_HOURLY_ALERT},
+ {"FEEDBACK_PATTERN_SAFETY_ALERT", FEEDBACK_PATTERN_SAFETY_ALERT},
+ {"FEEDBACK_PATTERN_ACCIDENT_DETECT", FEEDBACK_PATTERN_ACCIDENT_DETECT},
+ {"FEEDBACK_PATTERN_END_SOS_MESSAGE", FEEDBACK_PATTERN_END_SOS_MESSAGE},
+ {"FEEDBACK_PATTERN_EMERGENCY_BUZZER", FEEDBACK_PATTERN_EMERGENCY_BUZZER},
+ {"FEEDBACK_PATTERN_SAFETY_LOW_POWER", FEEDBACK_PATTERN_SAFETY_LOW_POWER},
+ {"FEEDBACK_PATTERN_CMAS", FEEDBACK_PATTERN_CMAS},
+ {"FEEDBACK_PATTERN_CMAS_CA", FEEDBACK_PATTERN_CMAS_CA},
+ {"FEEDBACK_PATTERN_INFO", FEEDBACK_PATTERN_INFO},
+ {"FEEDBACK_PATTERN_WARNING", FEEDBACK_PATTERN_WARNING},
+ {"FEEDBACK_PATTERN_ERROR", FEEDBACK_PATTERN_ERROR},
+ {"FEEDBACK_PATTERN_EMERGENCY", FEEDBACK_PATTERN_EMERGENCY},
+ {"FEEDBACK_PATTERN_INTERNAL_WAKEUP", FEEDBACK_PATTERN_INTERNAL_WAKEUP},
+ {"FEEDBACK_PATTERN_INTERNAL_TIMER", FEEDBACK_PATTERN_INTERNAL_TIMER},
+ {"FEEDBACK_PATTERN_TEMPERATURE_WARNING", FEEDBACK_PATTERN_TEMPERATURE_WARNING},
+ {"FEEDBACK_PATTERN_COOLDOWN_WARNING_1", FEEDBACK_PATTERN_COOLDOWN_WARNING_1},
+ {"FEEDBACK_PATTERN_COOLDOWN_WARNING_2", FEEDBACK_PATTERN_COOLDOWN_WARNING_2},
};
static const struct pattern_field wearable_str_pattern[] = {
{"FEEDBACK_PATTERN_SYSTEM_MID", FEEDBACK_PATTERN_SYSTEM_MID},
{"FEEDBACK_PATTERN_RINGER", FEEDBACK_PATTERN_RINGER},
{"FEEDBACK_PATTERN_NOTIFICATION", FEEDBACK_PATTERN_NOTIFICATION},
- {"FEEDBACK_PATTERN_DEFAULT", FEEDBACK_PATTERN_DEFAULT},
+
+ {"FEEDBACK_PATTERN_SIP_BACKSPACE", FEEDBACK_PATTERN_SIP_BACKSPACE},
+ {"FEEDBACK_PATTERN_SIP_FUNCTION", FEEDBACK_PATTERN_SIP_FUNCTION},
+ {"FEEDBACK_PATTERN_SIP_FJKEY", FEEDBACK_PATTERN_SIP_FJKEY},
+ {"FEEDBACK_PATTERN_MAX_CHARACTER", FEEDBACK_PATTERN_MAX_CHARACTER},
+ {"FEEDBACK_PATTERN_MULTI_TAP", FEEDBACK_PATTERN_MULTI_TAP},
+ {"FEEDBACK_PATTERN_HW_TAP", FEEDBACK_PATTERN_HW_TAP},
+ {"FEEDBACK_PATTERN_HW_HOLD", FEEDBACK_PATTERN_HW_HOLD},
+ {"FEEDBACK_PATTERN_SMART_ALERT", FEEDBACK_PATTERN_SMART_ALERT},
+ {"FEEDBACK_PATTERN_GEOMETRIC_LOCK", FEEDBACK_PATTERN_GEOMETRIC_LOCK},
+ {"FEEDBACK_PATTERN_CALLCONNECT", FEEDBACK_PATTERN_CALLCONNECT},
+ {"FEEDBACK_PATTERN_DISCALLCONNECT", FEEDBACK_PATTERN_DISCALLCONNECT},
+ {"FEEDBACK_PATTERN_MINUTEMINDER", FEEDBACK_PATTERN_MINUTEMINDER},
+ {"FEEDBACK_PATTERN_BT_PAIRING", FEEDBACK_PATTERN_BT_PAIRING},
+ {"FEEDBACK_PATTERN_BT_WAITING", FEEDBACK_PATTERN_BT_WAITING},
+
+ {"FEEDBACK_PATTERN_UV_PROCESSING", FEEDBACK_PATTERN_UV_PROCESSING},
+ {"FEEDBACK_PATTERN_SHEALTH_START", FEEDBACK_PATTERN_SHEALTH_START},
+ {"FEEDBACK_PATTERN_SHEALTH_PAUSE", FEEDBACK_PATTERN_SHEALTH_PAUSE},
+ {"FEEDBACK_PATTERN_SHEALTH_STOP", FEEDBACK_PATTERN_SHEALTH_STOP},
+ {"FEEDBACK_PATTERN_BREATHING_EXHALE", FEEDBACK_PATTERN_BREATHING_EXHALE},
+ {"FEEDBACK_PATTERN_3RD_APPLICATION", FEEDBACK_PATTERN_3RD_APPLICATION},
+ {"FEEDBACK_PATTERN_TICK", FEEDBACK_PATTERN_TICK},
+ {"FEEDBACK_PATTERN_TRANSITION_CIRCULAR", FEEDBACK_PATTERN_TRANSITION_CIRCULAR},
+ {"FEEDBACK_PATTERN_TRANSITION_POP", FEEDBACK_PATTERN_TRANSITION_POP},
+ {"FEEDBACK_PATTERN_PROCESS", FEEDBACK_PATTERN_PROCESS},
+ {"FEEDBACK_PATTERN_MOVE_LIST", FEEDBACK_PATTERN_MOVE_LIST},
+ {"FEEDBACK_PATTERN_DISMISS", FEEDBACK_PATTERN_DISMISS},
+ {"FEEDBACK_PATTERN_CLOCK_SECOND_HAND", FEEDBACK_PATTERN_CLOCK_SECOND_HAND},
+
+ {"FEEDBACK_PATTERN_SPIRAL_DOWN",FEEDBACK_PATTERN_SPIRAL_DOWN},
+ {"FEEDBACK_PATTERN_MOVE_LIST_2",FEEDBACK_PATTERN_MOVE_LIST_2},
+ {"FEEDBACK_PATTERN_SPIRAL_UP",FEEDBACK_PATTERN_SPIRAL_UP},
+
+ {"FEEDBACK_PATTERN_SILENCE",FEEDBACK_PATTERN_SILENCE},
+ {"FEEDBACK_PATTERN_INACTIVE_TENSION",FEEDBACK_PATTERN_INACTIVE_TENSION},
+ {"FEEDBACK_PATTERN_INACTIVE_FINE", FEEDBACK_PATTERN_INACTIVE_FINE},
+
+ {"FEEDBACK_PATTERN_END_EFFECT", FEEDBACK_PATTERN_END_EFFECT},
+ {"FEEDBACK_PATTERN_SHEALTH_NOTICE", FEEDBACK_PATTERN_SHEALTH_NOTICE},
+ {"FEEDBACK_PATTERN_SHEALTH_GENTLE_ALERT", FEEDBACK_PATTERN_SHEALTH_GENTLE_ALERT},
+ {"FEEDBACK_PATTERN_END_EFFECT_FINE", FEEDBACK_PATTERN_END_EFFECT_FINE},
+ {"FEEDBACK_PATTERN_CLICK_VALUE", FEEDBACK_PATTERN_CLICK_VALUE},
+ {"FEEDBACK_PATTERN_CLICK_FINE_TRAIN_1", FEEDBACK_PATTERN_CLICK_FINE_TRAIN_1},
+ {"FEEDBACK_PATTERN_CLICK_FINE", FEEDBACK_PATTERN_CLICK_FINE},
+ {"FEEDBACK_PATTERN_CLICK_SLIDER", FEEDBACK_PATTERN_CLICK_SLIDER},
+ {"FEEDBACK_PATTERN_CLICK_MEDIUM", FEEDBACK_PATTERN_CLICK_MEDIUM},
+ {"FEEDBACK_PATTERN_CLICK_STRONG", FEEDBACK_PATTERN_CLICK_STRONG},
+ {"FEEDBACK_PATTERN_TURN_RIGHT", FEEDBACK_PATTERN_TURN_RIGHT},
+ {"FEEDBACK_PATTERN_TURN_LEFT", FEEDBACK_PATTERN_TURN_LEFT},
+ {"FEEDBACK_PATTERN_FUNCTION", FEEDBACK_PATTERN_FUNCTION},
+ {"FEEDBACK_PATTERN_VOICE_START", FEEDBACK_PATTERN_VOICE_START},
+ {"FEEDBACK_PATTERN_VOICE_STOP", FEEDBACK_PATTERN_VOICE_STOP},
+ {"FEEDBACK_PATTERN_COMMUNICATION", FEEDBACK_PATTERN_COMMUNICATION},
+ {"FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ", FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ", FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ},
+
+ {"FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ", FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ", FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_SCHEDULE_STRONG_BUZZ", FEEDBACK_PATTERN_SCHEDULE_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_WAKEUP_STRONG_BUZZ", FEEDBACK_PATTERN_WAKEUP_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_TIMER_STRONG_BUZZ", FEEDBACK_PATTERN_TIMER_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_RINGER_STRONG_BUZZ", FEEDBACK_PATTERN_RINGER_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_HEARTBEAT", FEEDBACK_PATTERN_HEARTBEAT},
+ {"FEEDBACK_PATTERN_HEARTBEAT_FAST", FEEDBACK_PATTERN_HEARTBEAT_FAST},
+ {"FEEDBACK_PATTERN_SETTING_ON", FEEDBACK_PATTERN_SETTING_ON},
+ {"FEEDBACK_PATTERN_SETTING_OFF", FEEDBACK_PATTERN_SETTING_OFF},
+ {"FEEDBACK_PATTERN_CONNECT", FEEDBACK_PATTERN_CONNECT},
+ {"FEEDBACK_PATTERN_DISCONNECT", FEEDBACK_PATTERN_DISCONNECT},
+ {"FEEDBACK_PATTERN_FIND_MY_GEAR", FEEDBACK_PATTERN_FIND_MY_GEAR},
+ {"FEEDBACK_PATTERN_NOTIFICATION_1", FEEDBACK_PATTERN_NOTIFICATION_1},
+ {"FEEDBACK_PATTERN_NOTIFICATION_1_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_1_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_NOTIFICATION_2", FEEDBACK_PATTERN_NOTIFICATION_2},
+ {"FEEDBACK_PATTERN_NOTIFICATION_2_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_2_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_NOTIFICATION_3", FEEDBACK_PATTERN_NOTIFICATION_3},
+ {"FEEDBACK_PATTERN_NOTIFICATION_3_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_3_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_NOTIFICATION_4", FEEDBACK_PATTERN_NOTIFICATION_4},
+ {"FEEDBACK_PATTERN_NOTIFICATION_4_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_4_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_NOTIFICATION_5", FEEDBACK_PATTERN_NOTIFICATION_5},
+ {"FEEDBACK_PATTERN_NOTIFICATION_5_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_5_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_NOTIFICATION_6", FEEDBACK_PATTERN_NOTIFICATION_6},
+ {"FEEDBACK_PATTERN_NOTIFICATION_6_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_6_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_NOTIFICATION_7", FEEDBACK_PATTERN_NOTIFICATION_7},
+ {"FEEDBACK_PATTERN_NOTIFICATION_7_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_7_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_NOTIFICATION_8", FEEDBACK_PATTERN_NOTIFICATION_8}, /* Added pattern for notification */
+ {"FEEDBACK_PATTERN_NOTIFICATION_8_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_8_STRONG_BUZZ}, /* Added pattern for notification */
+ {"FEEDBACK_PATTERN_NOTIFICATION_9", FEEDBACK_PATTERN_NOTIFICATION_9}, /* Added pattern for notification */
+ {"FEEDBACK_PATTERN_NOTIFICATION_9_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_9_STRONG_BUZZ}, /* Added pattern for notification */
+ {"FEEDBACK_PATTERN_NOTIFICATION_10", FEEDBACK_PATTERN_NOTIFICATION_10}, /* Added pattern for notification */
+ {"FEEDBACK_PATTERN_NOTIFICATION_10_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_10_STRONG_BUZZ}, /* Added pattern for notification */
+
+ {"FEEDBACK_PATTERN_RING_1", FEEDBACK_PATTERN_RING_1},
+ {"FEEDBACK_PATTERN_RING_1_STRONG_BUZZ", FEEDBACK_PATTERN_RING_1_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_RING_2", FEEDBACK_PATTERN_RING_2},
+ {"FEEDBACK_PATTERN_RING_2_STRONG_BUZZ", FEEDBACK_PATTERN_RING_2_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_RING_3", FEEDBACK_PATTERN_RING_3},
+ {"FEEDBACK_PATTERN_RING_3_STRONG_BUZZ", FEEDBACK_PATTERN_RING_3_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_RING_4", FEEDBACK_PATTERN_RING_4},
+ {"FEEDBACK_PATTERN_RING_4_STRONG_BUZZ", FEEDBACK_PATTERN_RING_4_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_RING_5", FEEDBACK_PATTERN_RING_5},
+ {"FEEDBACK_PATTERN_RING_5_STRONG_BUZZ", FEEDBACK_PATTERN_RING_5_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_RING_6", FEEDBACK_PATTERN_RING_6},
+ {"FEEDBACK_PATTERN_RING_6_STRONG_BUZZ", FEEDBACK_PATTERN_RING_6_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_RING_7", FEEDBACK_PATTERN_RING_7},
+ {"FEEDBACK_PATTERN_RING_7_STRONG_BUZZ", FEEDBACK_PATTERN_RING_7_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_RING_8", FEEDBACK_PATTERN_RING_8}, /* Added pattern for ring */
+ {"FEEDBACK_PATTERN_RING_8_STRONG_BUZZ", FEEDBACK_PATTERN_RING_8_STRONG_BUZZ}, /* Added pattern for ring */
+ {"FEEDBACK_PATTERN_RING_9", FEEDBACK_PATTERN_RING_9}, /* Added pattern for ring */
+ {"FEEDBACK_PATTERN_RING_9_STRONG_BUZZ", FEEDBACK_PATTERN_RING_9_STRONG_BUZZ}, /* Added pattern for ring */
+ {"FEEDBACK_PATTERN_RING_10", FEEDBACK_PATTERN_RING_10}, /* Added pattern for ring */
+ {"FEEDBACK_PATTERN_RING_10_STRONG_BUZZ", FEEDBACK_PATTERN_RING_10_STRONG_BUZZ}, /* Added pattern for ring */
+ {"FEEDBACK_PATTERN_ALARM_1", FEEDBACK_PATTERN_ALARM_1},
+ {"FEEDBACK_PATTERN_ALARM_1_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_1_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_ALARM_2", FEEDBACK_PATTERN_ALARM_2},
+ {"FEEDBACK_PATTERN_ALARM_2_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_2_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_ALARM_3", FEEDBACK_PATTERN_ALARM_3},
+ {"FEEDBACK_PATTERN_ALARM_3_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_3_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_ALARM_4", FEEDBACK_PATTERN_ALARM_4},
+ {"FEEDBACK_PATTERN_ALARM_4_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_4_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_ALARM_5", FEEDBACK_PATTERN_ALARM_5},
+ {"FEEDBACK_PATTERN_ALARM_5_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_5_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_ALARM_6", FEEDBACK_PATTERN_ALARM_6},
+ {"FEEDBACK_PATTERN_ALARM_6_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_6_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_ALARM_7", FEEDBACK_PATTERN_ALARM_7},
+ {"FEEDBACK_PATTERN_ALARM_7_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_7_STRONG_BUZZ},
+ {"FEEDBACK_PATTERN_ALARM_8", FEEDBACK_PATTERN_ALARM_8}, /* Added pattern for alarm */
+ {"FEEDBACK_PATTERN_ALARM_8_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_8_STRONG_BUZZ}, /* Added pattern for alarm */
+ {"FEEDBACK_PATTERN_ALARM_9", FEEDBACK_PATTERN_ALARM_9}, /* Added pattern for alarm */
+ {"FEEDBACK_PATTERN_ALARM_9_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_9_STRONG_BUZZ}, /* Added pattern for alarm */
+ {"FEEDBACK_PATTERN_ALARM_10", FEEDBACK_PATTERN_ALARM_10}, /* Added pattern for alarm */
+ {"FEEDBACK_PATTERN_ALARM_10_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_10_STRONG_BUZZ}, /* Added pattern for alarm */
+ {"FEEDBACK_PATTERN_PICKER", FEEDBACK_PATTERN_PICKER},
+ {"FEEDBACK_PATTERN_PICKER_FINISH", FEEDBACK_PATTERN_PICKER_FINISH},
+ {"FEEDBACK_PATTERN_ON_OFF_SWITCH", FEEDBACK_PATTERN_ON_OFF_SWITCH},
+ {"FEEDBACK_PATTERN_REORDER", FEEDBACK_PATTERN_REORDER},
+ {"FEEDBACK_PATTERN_CURSOR_MOVE", FEEDBACK_PATTERN_CURSOR_MOVE},
+ {"FEEDBACK_PATTERN_MMS", FEEDBACK_PATTERN_MMS},
+ {"FEEDBACK_PATTERN_HOURLY_ALERT", FEEDBACK_PATTERN_HOURLY_ALERT},
+ {"FEEDBACK_PATTERN_SAFETY_ALERT", FEEDBACK_PATTERN_SAFETY_ALERT},
+ {"FEEDBACK_PATTERN_ACCIDENT_DETECT", FEEDBACK_PATTERN_ACCIDENT_DETECT},
+ {"FEEDBACK_PATTERN_END_SOS_MESSAGE", FEEDBACK_PATTERN_END_SOS_MESSAGE},
+ {"FEEDBACK_PATTERN_EMERGENCY_BUZZER", FEEDBACK_PATTERN_EMERGENCY_BUZZER},
+ {"FEEDBACK_PATTERN_SAFETY_LOW_POWER", FEEDBACK_PATTERN_SAFETY_LOW_POWER},
+ {"FEEDBACK_PATTERN_CMAS", FEEDBACK_PATTERN_CMAS},
+ {"FEEDBACK_PATTERN_CMAS_CA", FEEDBACK_PATTERN_CMAS_CA},
+ {"FEEDBACK_PATTERN_NOTIFICATION", FEEDBACK_PATTERN_NOTIFICATION},
+ {"FEEDBACK_PATTERN_INFO", FEEDBACK_PATTERN_INFO},
+ {"FEEDBACK_PATTERN_WARNING", FEEDBACK_PATTERN_WARNING},
+ {"FEEDBACK_PATTERN_ERROR", FEEDBACK_PATTERN_ERROR},
+ {"FEEDBACK_PATTERN_EMERGENCY", FEEDBACK_PATTERN_EMERGENCY},
+ {"FEEDBACK_PATTERN_INTERNAL_WAKEUP", FEEDBACK_PATTERN_INTERNAL_WAKEUP},
+ {"FEEDBACK_PATTERN_INTERNAL_TIMER", FEEDBACK_PATTERN_INTERNAL_TIMER},
+ {"FEEDBACK_PATTERN_TEMPERATURE_WARNING", FEEDBACK_PATTERN_TEMPERATURE_WARNING},
+ {"FEEDBACK_PATTERN_COOLDOWN_WARNING_1", FEEDBACK_PATTERN_COOLDOWN_WARNING_1},
+ {"FEEDBACK_PATTERN_COOLDOWN_WARNING_2", FEEDBACK_PATTERN_COOLDOWN_WARNING_2},
+ {"FEEDBACK_PATTERN_SPEED_UP", FEEDBACK_PATTERN_SPEED_UP},
+ {"FEEDBACK_PATTERN_SLOW_DOWN", FEEDBACK_PATTERN_SLOW_DOWN},
+ {"FEEDBACK_PATTERN_KEEP_THIS_PACE", FEEDBACK_PATTERN_KEEP_THIS_PACE},
+ {"FEEDBACK_PATTERN_GOAL_ACHIEVED", FEEDBACK_PATTERN_GOAL_ACHIEVED},
+ {"FEEDBACK_PATTERN_EXERCISE_COUNT", FEEDBACK_PATTERN_EXERCISE_COUNT},
+ {"FEEDBACK_PATTERN_START_CUE", FEEDBACK_PATTERN_START_CUE},
+ {"FEEDBACK_PATTERN_HEALTH_PACE", FEEDBACK_PATTERN_HEALTH_PACE},
+ {"FEEDBACK_PATTERN_INACTIVE_TIME", FEEDBACK_PATTERN_INACTIVE_TIME},
+ {"FEEDBACK_PATTERN_MEASURING_SUCCESS", FEEDBACK_PATTERN_MEASURING_SUCCESS},
+ {"FEEDBACK_PATTERN_MEASURING_FAILURE", FEEDBACK_PATTERN_MEASURING_FAILURE},
+ {"FEEDBACK_PATTERN_BOS", FEEDBACK_PATTERN_BOS},
+ {"FEEDBACK_PATTERN_EOS", FEEDBACK_PATTERN_EOS},
+ {"FEEDBACK_PATTERN_UDS", FEEDBACK_PATTERN_UDS},
+ {"FEEDBACK_PATTERN_NFC_SUCCESS", FEEDBACK_PATTERN_NFC_SUCCESS},
+ {"FEEDBACK_PATTERN_MEDITATION", FEEDBACK_PATTERN_MEDITATION},
+ {"FEEDBACK_PATTERN_MEDITATION_INTERVAL", FEEDBACK_PATTERN_MEDITATION_INTERVAL},
+ {"FEEDBACK_PATTERN_FALL_DETECTION_1", FEEDBACK_PATTERN_FALL_DETECTION_1},
+ {"FEEDBACK_PATTERN_FALL_DETECTION_2", FEEDBACK_PATTERN_FALL_DETECTION_2},
+ {"FEEDBACK_PATTERN_SMART_GESTURE",FEEDBACK_PATTERN_SMART_GESTURE},
};
static const struct pattern_field common_str_pattern[] = {
{"FEEDBACK_PATTERN_LIST_REORDER", FEEDBACK_PATTERN_LIST_REORDER},
{"FEEDBACK_PATTERN_LIST_SLIDER", FEEDBACK_PATTERN_LIST_SLIDER},
{"FEEDBACK_PATTERN_VOLUME_KEY", FEEDBACK_PATTERN_VOLUME_KEY},
- {"FEEDBACK_PATTERN_DEFAULT", FEEDBACK_PATTERN_DEFAULT},
+};
+
+typedef enum {
+ FEEDBACK_STANDARD_START = 2000,
+ A,
+ A_W = A,
+ A_W2,
+ B,
+ B_W = B,
+ C,
+ D,
+ E_W1 = D,
+ E,
+ E_W2 = E,
+ F,
+ F_W = F,
+ G,
+ G_W = G,
+ H,
+ H_LIGHT,
+ I,
+ J_W = I,
+ J,
+ J_WB = J,
+ K,
+ K_W = K,
+ L,
+ K_WB = L,
+ CMAS,
+ M,
+ J_W_2 = M,
+ J_WB_2,
+ J_W_3,
+ J_WB_3,
+ J_W_4,
+ J_WB_4,
+ J_W_5,
+ J_WB_5,
+ J_W_6,
+ J_WB_6,
+ J_W_7,
+ J_WB_7,
+ J_W_8,
+ J_WB_8,
+ J_W_9,
+ J_WB_9,
+ J_W_10,
+ J_WB_10,
+ K_W_2,
+ K_WB_2,
+ K_W_3,
+ K_WB_3,
+ K_W_4,
+ K_WB_4,
+ K_W_5,
+ K_WB_5,
+ K_W_6,
+ K_WB_6,
+ K_W_7,
+ K_WB_7,
+ K_W_8,
+ K_WB_8,
+ K_W_9,
+ K_WB_9,
+ K_W_10,
+ K_WB_10,
+ J_WW,
+ K_WW,
+ G_WB,
+ J_WH,
+ J_WHB,
+ K_W_N,
+ M1,
+ M2,
+ N,
+ O,
+ P,
+ Q,
+ R,
+ S,
+ S_B,
+ S2,
+ T,
+ T_LIGHT,
+ CMAS_CA,
+ FEEDBACK_STANDARD_END,
+} feedback_standard_pattern_e;
+
+static const struct pattern_field wearable_str_standard[] = {
+ {"A_W", A_W},
+ {"A_W2", A_W2},
+ {"B_W", B_W},
+ {"C", C},
+ {"E_W1", E_W1},
+ {"E_W2", E_W2},
+ {"F_W", F_W},
+ {"G_W", G_W},
+ {"H", H},
+ {"H_LIGHT", H_LIGHT},
+ {"J_W", J_W},
+ {"J_WB", J_WB},
+ {"K_W", K_W},
+ {"K_WB", K_WB},
+ {"CMAS", CMAS},
+ {"CMAS_CA", CMAS_CA},
+ {"J_W_2", J_W_2},
+ {"J_WB_2", J_WB_2},
+ {"J_W_3", J_W_3},
+ {"J_WB_3", J_WB_3},
+ {"J_W_4", J_W_4},
+ {"J_WB_4", J_WB_4},
+ {"J_W_5", J_W_5},
+ {"J_WB_5", J_WB_5},
+ {"J_W_6", J_W_6},
+ {"J_WB_6", J_WB_6},
+ {"J_W_7", J_W_7},
+ {"J_WB_7", J_WB_7},
+ {"J_W_8", J_W_8},
+ {"J_WB_8", J_WB_8},
+ {"J_W_9", J_W_9},
+ {"J_WB_9", J_WB_9},
+ {"J_W_10", J_W_10},
+ {"J_WB_10", J_WB_10},
+ {"K_W_2", K_W_2},
+ {"K_WB_2", K_WB_2},
+ {"K_W_3", K_W_3},
+ {"K_WB_3", K_WB_3},
+ {"K_W_4", K_W_4},
+ {"K_WB_4", K_WB_4},
+ {"K_W_5", K_W_5},
+ {"K_WB_5", K_WB_5},
+ {"K_W_6", K_W_6},
+ {"K_WB_6", K_WB_6},
+ {"K_W_7", K_W_7},
+ {"K_WB_7", K_WB_7},
+ {"K_W_8", K_W_8},
+ {"K_WB_8", K_WB_8},
+ {"K_W_9", K_W_9},
+ {"K_WB_9", K_WB_9},
+ {"K_W_10", K_W_10},
+ {"K_WB_10", K_WB_10},
+ {"J_WW", J_WW},
+ {"K_WW", K_WW},
+ {"G_WB", G_WB},
+ {"J_WH", J_WH},
+ {"J_WHB", J_WHB},
+ {"K_W_N", K_W_N},
+ {"T", T},
+ {"T_LIGHT", T_LIGHT},
+ {"M1", M1},
+ {"M2", M2},
+ {"N", N},
+ {"O", O},
+ {"P", P},
+ {"Q", Q},
+ {"R", R},
+ {"S", S},
+ {"S2", S2},
+ {"S_B", S_B},
+};
+
+static const struct pattern_field mobile_str_standard[] = {
+ {"A", A},
+ {"B", B},
+ {"C", C},
+ {"D", D},
+ {"E", E},
+ {"F", F},
+ {"G", G},
+ {"H", H},
+ {"I", I},
+ {"J", J},
+ {"K", K},
+ {"L", L},
+ {"M", M},
+ {"CMAS", CMAS},
+ {"CMAS_CA", CMAS_CA},
};
typedef enum {
static int vib_level;
static int noti_level;
static int feedbackstatus;
-
+static int vib_when_ring;
+static int vib_noti_index;
+static int vib_call_index;
+static char snd_noti_path[PATH_MAX];
+static char snd_call_path[PATH_MAX];
static char *profile_name = NULL;
+static int dnd_mode;
+static int theater_mode;
+static int goodnight_mode;
+static int disconnect_alert_mode;
+
#define PROFILE "tizen.org/feature/profile"
#define PROFILE_MOBILE_STRING "mobile"
#define PROFILE_WEARABLE_STRING "wearable"
//LCOV_EXCL_STOP
}
+static int profile_get_num_of_standard(void)
+{
+ static int size = -1;
+ int prof;
+
+ if (size >= 0)
+ return size;
+
+ prof = get_profile();
+
+ if (prof == PROFILE_MOBILE)
+ size = ARR_SIZE(mobile_str_standard);
+//LCOV_EXCL_START
+ else if (prof == PROFILE_WEARABLE)
+ size = ARR_SIZE(wearable_str_standard);
+ else
+ size = 0;
+//LCOV_EXCL_STOP
+ return size;
+}
+
static const char *profile_str_pattern(int pattern)
{
int prof;
if (pattern == mobile_str_pattern[i].id)
return mobile_str_pattern[i].string;
}
+ for (i = 0; i < profile_get_num_of_standard(); i++) {
+ if (pattern == mobile_str_standard[i].id)
+ return mobile_str_standard[i].string;
+ }
//LCOV_EXCL_START
} else if (prof == PROFILE_WEARABLE) {
for (i = 0; i < profile_get_num_of_pattern(); i++) {
if (pattern == wearable_str_pattern[i].id)
return wearable_str_pattern[i].string;
}
+ for (i = 0; i < profile_get_num_of_standard(); i++) {
+ if (pattern == wearable_str_standard[i].id)
+ return wearable_str_standard[i].string;
+ }
} else {
for (i = 0; i < profile_get_num_of_pattern(); i++) {
if (pattern == common_str_pattern[i].id)
if (!strncmp(pattern, mobile_str_pattern[i].string, len))
return mobile_str_pattern[i].id;
}
+ for (i = 0; i < profile_get_num_of_standard(); i++) {
+ if (!strncmp(pattern, mobile_str_standard[i].string, len))
+ return mobile_str_standard[i].id;
+ }
//LCOV_EXCL_START
} else if (prof == PROFILE_WEARABLE) {
for (i = 0; i < profile_get_num_of_pattern(); i++) {
if (!strncmp(pattern, wearable_str_pattern[i].string, len))
return wearable_str_pattern[i].id;
}
+ for (i = 0; i < profile_get_num_of_standard(); i++) {
+ if (!strncmp(pattern, wearable_str_standard[i].string, len))
+ return wearable_str_standard[i].id;
+ }
} else {
for (i = 0; i < profile_get_num_of_pattern(); i++) {
if (!strncmp(pattern, common_str_pattern[i].string, len))
{
feedbackstatus = vconf_keynode_get_bool(key);
}
+
+static void feedback_vib_when_ring_cb(keynode_t *key, void* data)
+{
+ vib_when_ring = vconf_keynode_get_bool(key);
+}
+
+static void snd_noti_path_cb(keynode_t *key, void* data)
+{
+ char* path = vconf_keynode_get_str(key);
+ struct stat st;
+
+ if (!path)
+ return;
+
+ if (stat(path, &st) < 0)
+ return;
+ snprintf(snd_noti_path, PATH_MAX, "%s", path);
+}
+
+static void snd_call_path_cb(keynode_t *key, void* data)
+{
+ char* path = vconf_keynode_get_str(key);
+ struct stat st;
+
+ if (!path)
+ return;
+
+ if (stat(path, &st) < 0)
+ return;
+ snprintf(snd_call_path, PATH_MAX, "%s", path);
+}
+
+static void vib_noti_type_cb(keynode_t *key, void* data)
+{
+ vib_noti_index = vconf_keynode_get_int(key);
+}
+
+static void vib_call_type_cb(keynode_t *key, void* data)
+{
+ vib_call_index = vconf_keynode_get_int(key);
+}
+
+static void feedback_dnd_mode_cb(keynode_t *key, void* data)
+{
+ dnd_mode = vconf_keynode_get_bool(key);
+}
+
+static void feedback_theater_mode_cb(keynode_t *key, void* data)
+{
+ theater_mode = vconf_keynode_get_bool(key);
+}
+
+static void feedback_goodnight_mode_cb(keynode_t *key, void* data)
+{
+ goodnight_mode = vconf_keynode_get_bool(key);
+}
+
+static void feedback_disconnect_alert_mode_cb(keynode_t *key, void* data)
+{
+ disconnect_alert_mode = vconf_keynode_get_int(key);
+}
//LCOV_EXCL_STOP
static void profile_init(void)
{
+ char *path;
+ struct stat st;
int prof;
int ret;
if (vconf_get_bool(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, &feedbackstatus) < 0)
_W("VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
+ if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL, &vib_when_ring) < 0)
+ _W("VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
+
+ path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
+ if (path) {
+ if (stat(path, &st) < 0) {
+ free(path);
+ path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_RINGTONE_DEFAULT_PATH_STR);
+ }
+ if (path) {
+ snprintf(snd_noti_path, PATH_MAX, "%s", path);
+ free(path);
+ }
+ } else
+ snprintf(snd_noti_path, PATH_MAX, "NULL");
+
+ path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
+ if (path) {
+ if (stat(path, &st) < 0) {
+ free(path);
+ path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_DEFAULT_PATH_STR);
+ }
+ if (path) {
+ snprintf(snd_call_path, PATH_MAX, "%s", path);
+ free(path);
+ }
+ } else
+ snprintf(snd_call_path, PATH_MAX, "NULL");
+
+ if (vconf_get_int(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT, &vib_call_index) < 0)
+ _W("VCONFKEY_SETAPPL_SETAPPL_CALL_VIBRATION_PATTERN_INT ==> FAIL!!"); //LCOV_EXCL_LINE
+
+ if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT, &vib_noti_index) < 0)
+ _W("VCONFKEY_SETAPPL_SETAPPL_NOTI_VIBRATION_PATTERN_INT ==> FAIL!!"); //LCOV_EXCL_LINE
+
+ if (vconf_get_bool(VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL, &dnd_mode) < 0)
+ _W("VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
+
+ if (vconf_get_bool(VCONFKEY_SETAPPL_THEATER_MODE_ENABLE, &theater_mode) < 0)
+ _W("VCONFKEY_SETAPPL_THEATER_MODE_ENABLE ==> FAIL!!"); //LCOV_EXCL_LINE
+
+ if (vconf_get_bool(VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE, &goodnight_mode) < 0)
+ _W("VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE ==> FAIL!!"); //LCOV_EXCL_LINE
+
+ if (vconf_get_int(VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT, &disconnect_alert_mode) < 0)
+ _W("VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT ==> FAIL!!"); //LCOV_EXCL_LINE
+
/* add watch for status value */
ret = vconf_notify_key_changed(VCONFKEY_CALL_STATE, feedback_callstatus_cb, NULL);
if (ret != 0)
ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, feedback_feedbackstatus_cb, NULL);
if (ret != 0)
_W("Add watch for VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL failed");
+ ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL, feedback_vib_when_ring_cb, NULL);
+ if (ret != 0)
+ _W("Add watch for VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL failed");
+ ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, snd_noti_path_cb, NULL);
+ if (ret != 0)
+ _W("Add watch for VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR failed");
+ ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, snd_call_path_cb, NULL);
+ if (ret != 0)
+ _W("Add watch for VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR failed");
+ ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT, vib_noti_type_cb, NULL);
+ if (ret != 0)
+ _W("Add watch for VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT failed");
+ ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT, vib_call_type_cb, NULL);
+ if (ret != 0)
+ _W("Add watch for VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT failed");
+ ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL, feedback_dnd_mode_cb, NULL);
+ if (ret != 0)
+ _W("Add watch for VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL failed");
+ ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_THEATER_MODE_ENABLE, feedback_theater_mode_cb, NULL);
+ if (ret != 0)
+ _W("Add watch for VCONFKEY_SETAPPL_THEATER_MODE_ENABLE failed");
+ ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE, feedback_goodnight_mode_cb, NULL);
+ if (ret != 0)
+ _W("Add watch for VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE failed");
+ ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT, feedback_disconnect_alert_mode_cb, NULL);
+ if (ret != 0)
+ _W("Add watch for VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT failed");
}
static void profile_exit(void)
ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, feedback_feedbackstatus_cb);
if (ret != 0)
_W("Remove watch for VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL failed");
+ ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL, feedback_vib_when_ring_cb);
+ if (ret != 0)
+ _W("Remove watch for VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL failed");
+ ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, snd_noti_path_cb);
+ if (ret != 0)
+ _W("Remove watch for VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR failed");
+ ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, snd_call_path_cb);
+ if (ret != 0)
+ _W("Remove watch for VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR failed");
+ ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT, vib_noti_type_cb);
+ if (ret != 0)
+ _W("Remove watch for VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT failed");
+ ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT, vib_call_type_cb);
+ if (ret != 0)
+ _W("Remove watch for VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT failed");
+ ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL, feedback_dnd_mode_cb);
+ if (ret != 0)
+ _W("Remove watch for VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL failed");
+ ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_THEATER_MODE_ENABLE, feedback_theater_mode_cb);
+ if (ret != 0)
+ _W("Remove watch for VCONFKEY_SETAPPL_THEATER_MODE_ENABLE failed");
+ ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE, feedback_goodnight_mode_cb);
+ if (ret != 0)
+ _W("Remove watch for VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE failed");
+ ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT, feedback_disconnect_alert_mode_cb);
+ if (ret != 0)
+ _W("Remove watch for VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT failed");
}
-static bool profile_get_switched_pattern(int pattern, int *switched)
+//LCOV_EXCL_START
+static int wearable_get_switched_pattern(int pattern)
{
- int prof;
+ int changed_pattern = pattern;
- prof = get_profile();
+ switch (changed_pattern) {
+ case FEEDBACK_PATTERN_RINGER:
+ case FEEDBACK_PATTERN_RINGER_STRONG_BUZZ:
+ changed_pattern = FEEDBACK_PATTERN_RING_1 + vib_call_index;
+ break;
+ case FEEDBACK_PATTERN_MESSAGE:
+ case FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_EMAIL:
+ case FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_GENERAL:
+ case FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_3RD_APPLICATION:
+ case FEEDBACK_PATTERN_COMMUNICATION:
+ case FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ:
+ changed_pattern = FEEDBACK_PATTERN_NOTIFICATION_1 + vib_noti_index;
+ break;
+ case FEEDBACK_PATTERN_WAKEUP:
+ case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
+ if (callstatus)
+ changed_pattern = FEEDBACK_PATTERN_WAKEUP_ON_CALL;
+ break;
+ case FEEDBACK_PATTERN_TIMER:
+ case FEEDBACK_PATTERN_INTERNAL_TIMER:
+ if (callstatus)
+ changed_pattern = FEEDBACK_PATTERN_TIMER_ON_CALL;
+ break;
+ default:
+ break;
+ }
- if (prof == PROFILE_COMMON)
- return false;
+ return changed_pattern;
+}
+//LCOV_EXCL_STOP
- if (!switched)
- return false;
+static int mobile_get_switched_pattern(int pattern)
+{
+ int changed_pattern = pattern;
if (callstatus == VCONFKEY_CALL_OFF)
- return false;
+ return changed_pattern;
+
+ if (is_sound_mode() &&
+ pattern != FEEDBACK_PATTERN_WAKEUP && pattern != FEEDBACK_PATTERN_INTERNAL_WAKEUP &&
+ pattern != FEEDBACK_PATTERN_TIMER && pattern != FEEDBACK_PATTERN_INTERNAL_TIMER)
+ return changed_pattern;
/* in case of call connected or connecting */
_D("Call status is connected or connecting."); //LCOV_EXCL_LINE
- if (pattern == FEEDBACK_PATTERN_MESSAGE)
- *switched = FEEDBACK_PATTERN_MESSAGE_ON_CALL;
- else if (pattern == FEEDBACK_PATTERN_EMAIL)
- *switched = FEEDBACK_PATTERN_EMAIL_ON_CALL;
- else if (pattern == FEEDBACK_PATTERN_WAKEUP)
- *switched = FEEDBACK_PATTERN_WAKEUP_ON_CALL;
- else if (pattern == FEEDBACK_PATTERN_SCHEDULE)
- *switched = FEEDBACK_PATTERN_SCHEDULE_ON_CALL;
- else if (pattern == FEEDBACK_PATTERN_TIMER)
- *switched = FEEDBACK_PATTERN_TIMER_ON_CALL;
- else if (pattern == FEEDBACK_PATTERN_GENERAL)
- *switched = FEEDBACK_PATTERN_GENERAL_ON_CALL;
- else if (pattern == FEEDBACK_PATTERN_CHARGERCONN)
- *switched = FEEDBACK_PATTERN_CHARGERCONN_ON_CALL;
- else if (pattern == FEEDBACK_PATTERN_CHARGING_ERROR)
- *switched = FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL;
- else if (pattern == FEEDBACK_PATTERN_FULLCHARGED)
- *switched = FEEDBACK_PATTERN_FULLCHARGED_ON_CALL;
- else if (pattern == FEEDBACK_PATTERN_LOWBATT)
- *switched = FEEDBACK_PATTERN_LOWBATT_ON_CALL;
- else
+ if (changed_pattern == FEEDBACK_PATTERN_MESSAGE)
+ changed_pattern = FEEDBACK_PATTERN_MESSAGE_ON_CALL;
+ else if(changed_pattern == FEEDBACK_PATTERN_EMAIL)
+ changed_pattern = FEEDBACK_PATTERN_EMAIL_ON_CALL;
+ else if ((changed_pattern == FEEDBACK_PATTERN_WAKEUP) || (pattern == FEEDBACK_PATTERN_INTERNAL_WAKEUP))
+ changed_pattern = FEEDBACK_PATTERN_WAKEUP_ON_CALL;
+ else if (changed_pattern == FEEDBACK_PATTERN_SCHEDULE)
+ changed_pattern = FEEDBACK_PATTERN_SCHEDULE_ON_CALL;
+ else if ((changed_pattern == FEEDBACK_PATTERN_TIMER) || (pattern == FEEDBACK_PATTERN_INTERNAL_TIMER))
+ changed_pattern = FEEDBACK_PATTERN_TIMER_ON_CALL;
+ else if (changed_pattern == FEEDBACK_PATTERN_GENERAL)
+ changed_pattern = FEEDBACK_PATTERN_GENERAL_ON_CALL;
+ else if (changed_pattern == FEEDBACK_PATTERN_CHARGERCONN)
+ changed_pattern = FEEDBACK_PATTERN_CHARGERCONN_ON_CALL;
+ else if (changed_pattern == FEEDBACK_PATTERN_CHARGING_ERROR)
+ changed_pattern = FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL;
+ else if (changed_pattern == FEEDBACK_PATTERN_FULLCHARGED)
+ changed_pattern = FEEDBACK_PATTERN_FULLCHARGED_ON_CALL;
+ else if (changed_pattern == FEEDBACK_PATTERN_LOWBATT)
+ changed_pattern = FEEDBACK_PATTERN_LOWBATT_ON_CALL;
+
+ return changed_pattern;
+}
+
+
+static bool profile_get_switched_pattern(int pattern, int *switched)
+{
+ int changed_pattern = pattern;
+ int prof = get_profile();
+
+ if (!switched || prof == PROFILE_COMMON)
return false;
- return true;
+ //LCOV_EXCL_START
+ if (prof == PROFILE_WEARABLE)
+ changed_pattern = wearable_get_switched_pattern(changed_pattern);
+ //LCOV_EXCL_STOP
+ else
+ changed_pattern = mobile_get_switched_pattern(changed_pattern);
+
+ if (changed_pattern != pattern) {
+ *switched = changed_pattern;
+ return true;
+ }
+ return false;
}
static bool mobile_is_notification_type(int pattern)
{
switch (pattern) {
case FEEDBACK_PATTERN_WAKEUP:
+ case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
case FEEDBACK_PATTERN_TIMER:
+ case FEEDBACK_PATTERN_INTERNAL_TIMER:
case FEEDBACK_PATTERN_TIMER_ON_CALL:
case FEEDBACK_PATTERN_MESSAGE ... FEEDBACK_PATTERN_EMAIL_ON_CALL:
case FEEDBACK_PATTERN_SCHEDULE:
case FEEDBACK_PATTERN_SCHEDULE_ON_CALL:
case FEEDBACK_PATTERN_GENERAL ... FEEDBACK_PATTERN_LOWBATT_ON_CALL:
+ case FEEDBACK_PATTERN_SAFETY_ALERT:
+ case FEEDBACK_PATTERN_CMAS:
+ case FEEDBACK_PATTERN_CMAS_CA:
return true;
}
return false;
}
+//LCOV_EXCL_START
static bool wearable_is_notification_type(int pattern)
{
switch (pattern) {
case FEEDBACK_PATTERN_WAKEUP:
+ case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
case FEEDBACK_PATTERN_TIMER:
+ case FEEDBACK_PATTERN_INTERNAL_TIMER:
case FEEDBACK_PATTERN_TIMER_ON_CALL:
return false;
case FEEDBACK_PATTERN_MESSAGE ... FEEDBACK_PATTERN_EMAIL_ON_CALL:
case FEEDBACK_PATTERN_SCHEDULE:
case FEEDBACK_PATTERN_SCHEDULE_ON_CALL:
- case FEEDBACK_PATTERN_GENERAL ... FEEDBACK_PATTERN_LOWBATT_ON_CALL:
+ case FEEDBACK_PATTERN_GENERAL:
+ case FEEDBACK_PATTERN_GENERAL_ON_CALL:
+ case FEEDBACK_PATTERN_SMART_ALERT:
+ case FEEDBACK_PATTERN_SAFETY_ALERT:
+ case FEEDBACK_PATTERN_CMAS:
+ case FEEDBACK_PATTERN_CMAS_CA:
+ case FEEDBACK_PATTERN_3RD_APPLICATION:
+ case FEEDBACK_PATTERN_TEMPERATURE_WARNING:
+ case FEEDBACK_PATTERN_COOLDOWN_WARNING_1:
+ case FEEDBACK_PATTERN_COOLDOWN_WARNING_2:
+ case FEEDBACK_PATTERN_COMMUNICATION:
+ case FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_SCHEDULE_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_NOTIFICATION_1 ... FEEDBACK_PATTERN_NOTIFICATION_8_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_ALARM_1 ... FEEDBACK_PATTERN_ALARM_8_STRONG_BUZZ:
return true;
}
return false;
}
+//LCOV_EXCL_STOP
static bool profile_is_notification_type(int pattern)
{
static int mobile_get_priority(int pattern)
{
switch (pattern) {
- case FEEDBACK_PATTERN_TAP ... FEEDBACK_PATTERN_KEY_BACK:
+ case FEEDBACK_PATTERN_TAP ... FEEDBACK_PATTERN_HW_HOLD:
return PRIORITY_MIN;
case FEEDBACK_PATTERN_WAKEUP:
+ case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
case FEEDBACK_PATTERN_SCHEDULE:
case FEEDBACK_PATTERN_TIMER:
+ case FEEDBACK_PATTERN_INTERNAL_TIMER:
+ case FEEDBACK_PATTERN_CMAS:
+ case FEEDBACK_PATTERN_CMAS_CA:
return PRIORITY_HIGH;
case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
case FEEDBACK_PATTERN_RINGER:
return PRIORITY_MIDDLE;
}
+//LCOV_EXCL_START
+static int wearable_get_priority(int pattern)
+{
+ if (pattern == FEEDBACK_PATTERN_CMAS ||
+ pattern == FEEDBACK_PATTERN_CMAS_CA ||
+ pattern == FEEDBACK_PATTERN_RINGER ||
+ pattern == FEEDBACK_PATTERN_RINGER_STRONG_BUZZ ||
+ (pattern >= FEEDBACK_PATTERN_RING_1 && pattern <= FEEDBACK_PATTERN_RING_10_STRONG_BUZZ) ||
+ pattern == FEEDBACK_PATTERN_FIND_MY_GEAR)
+ return PRIORITY_TOP;
+ else if (pattern == FEEDBACK_PATTERN_WAKEUP || pattern == FEEDBACK_PATTERN_INTERNAL_WAKEUP ||
+ pattern == FEEDBACK_PATTERN_WAKEUP_ON_CALL ||
+ pattern == FEEDBACK_PATTERN_SCHEDULE || pattern == FEEDBACK_PATTERN_SCHEDULE_ON_CALL ||
+ pattern == FEEDBACK_PATTERN_TIMER || pattern == FEEDBACK_PATTERN_INTERNAL_TIMER ||
+ pattern == FEEDBACK_PATTERN_TIMER_ON_CALL ||
+ (pattern >= FEEDBACK_PATTERN_ALARM_1 && pattern <= FEEDBACK_PATTERN_ALARM_10_STRONG_BUZZ))
+ return PRIORITY_HIGH;
+ else if (pattern >= FEEDBACK_PATTERN_TAP && pattern <= FEEDBACK_PATTERN_HW_HOLD)
+ return PRIORITY_MIN;
+ else if (pattern == FEEDBACK_PATTERN_END_EFFECT)
+ return PRIORITY_MIN;
+ else if (pattern >= FEEDBACK_PATTERN_END_EFFECT_FINE && pattern <= FEEDBACK_PATTERN_FUNCTION)
+ return PRIORITY_MIN;
+ else if (pattern == FEEDBACK_PATTERN_VOICE_START || pattern == FEEDBACK_PATTERN_VOICE_STOP)
+ return PRIORITY_MIN;
+ else if (pattern >= FEEDBACK_PATTERN_BOS && pattern <= FEEDBACK_PATTERN_UDS)
+ return PRIORITY_MIN;
+ return PRIORITY_MIDDLE;
+}
+//LCOV_EXCL_STOP
+
static int profile_get_priority(int pattern)
{
int prof;
if (prof == PROFILE_MOBILE)
return mobile_get_priority(pattern);
+//LCOV_EXCL_START
+ else if (prof == PROFILE_WEARABLE)
+ return wearable_get_priority(pattern);
else
return PRIORITY_MIDDLE;
+//LCOV_EXCL_STOP
}
static bool mobile_get_always_alert_case(int type, int pattern)
{
+ int ret;
+
switch (pattern) {
case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
case FEEDBACK_PATTERN_HOLD:
return true;
break;
case FEEDBACK_PATTERN_SIP:
+ case FEEDBACK_PATTERN_SIP_BACKSPACE:
+ case FEEDBACK_PATTERN_SIP_FUNCTION:
+ case FEEDBACK_PATTERN_SIP_FJKEY:
if (CHECK_VIBRATION(type))
return true;
break;
return true;
break;
case FEEDBACK_PATTERN_TIMER:
+ case FEEDBACK_PATTERN_INTERNAL_TIMER:
case FEEDBACK_PATTERN_TIMER_ON_CALL:
if (CHECK_VIBRATION(type))
return true;
break;
case FEEDBACK_PATTERN_WAKEUP:
+ case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
return true;
case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
case FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL:
case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
+ case FEEDBACK_PATTERN_MMS:
+ case FEEDBACK_PATTERN_HOURLY_ALERT:
/* no matter sound profile */
if (CHECK_VIBRATION(type))
return true;
break;
case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
+ case FEEDBACK_PATTERN_SMART_ALERT:
+ case FEEDBACK_PATTERN_END_SOS_MESSAGE:
+ case FEEDBACK_PATTERN_CMAS:
+ case FEEDBACK_PATTERN_CMAS_CA:
case FEEDBACK_PATTERN_OUTGOING_CALL:
return true;
case FEEDBACK_PATTERN_SCREEN_CAPTURE:
return true;
break;
case FEEDBACK_PATTERN_RINGER:
+ if (CHECK_VIBRATION(type) && (is_vibration_mode() || is_sound_mode()) &&
+ vconf_get_int(VCONFKEY_RECORDER_STATE, &ret) == 0 &&
+ ret == VCONFKEY_RECORDER_STATE_RECORDING)
+ return true;
+ break;
+ case FEEDBACK_PATTERN_TEMPERATURE_WARNING:
+ case FEEDBACK_PATTERN_COOLDOWN_WARNING_1:
+ case FEEDBACK_PATTERN_COOLDOWN_WARNING_2:
+ if (CHECK_VIBRATION(type))
+ return true;
+ break;
+ case FEEDBACK_PATTERN_CALLCONNECT:
+ case FEEDBACK_PATTERN_DISCALLCONNECT:
return true;
default:
break;
}
//LCOV_EXCL_START
+static bool wearable_is_system_type(int pattern)
+{
+ switch(pattern) {
+ case FEEDBACK_PATTERN_POWERON ... FEEDBACK_PATTERN_HOURLY_ALERT:
+ case FEEDBACK_PATTERN_TEMPERATURE_WARNING ... FEEDBACK_PATTERN_COOLDOWN_WARNING_2:
+ return true;
+ }
+ return false;
+}
+
static bool wearable_get_always_alert_case(int type, int pattern)
{
+ int ret;
+
if (CHECK_SOUND(type)) {
+ if ((wearable_is_notification_type(pattern) || wearable_is_system_type(pattern)) &&
+ callstatus) {
+ _W("skip %s sound during call", profile_str_pattern(pattern));
+ return false;
+ }
switch (pattern) {
case FEEDBACK_PATTERN_WAKEUP:
+ case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
return true;
case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
case FEEDBACK_PATTERN_EMAIL_ON_CALL:
case FEEDBACK_PATTERN_GENERAL_ON_CALL:
break;
+ case FEEDBACK_PATTERN_SMART_ALERT:
case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
+ case FEEDBACK_PATTERN_END_SOS_MESSAGE:
+ case FEEDBACK_PATTERN_CMAS:
+ case FEEDBACK_PATTERN_CMAS_CA:
+ case FEEDBACK_PATTERN_NFC_SUCCESS:
return true;
case FEEDBACK_PATTERN_SCREEN_CAPTURE:
if (camerastatus && shutter_sndstatus)
break;
}
} else if (CHECK_VIBRATION(type)) {
+ if ((wearable_is_notification_type(pattern) || wearable_is_system_type(pattern)) &&
+ (is_sound_mode() || is_vibration_mode()) &&
+ callstatus) {
+ _W("alert %s vibration during call", profile_str_pattern(pattern));
+ return true;
+ }
switch (pattern) {
case FEEDBACK_PATTERN_TAP:
case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
case FEEDBACK_PATTERN_HOLD:
+ case FEEDBACK_PATTERN_END_EFFECT:
+ case FEEDBACK_PATTERN_END_EFFECT_FINE ... FEEDBACK_PATTERN_FUNCTION:
+ case FEEDBACK_PATTERN_VOICE_START:
+ case FEEDBACK_PATTERN_VOICE_STOP:
+ case FEEDBACK_PATTERN_PICKER:
+ case FEEDBACK_PATTERN_PICKER_FINISH:
+ case FEEDBACK_PATTERN_ON_OFF_SWITCH:
+ case FEEDBACK_PATTERN_REORDER:
+ case FEEDBACK_PATTERN_CURSOR_MOVE:
if (feedbackstatus)
return true;
break;
case FEEDBACK_PATTERN_EMAIL:
case FEEDBACK_PATTERN_GENERAL:
case FEEDBACK_PATTERN_SCHEDULE:
+ case FEEDBACK_PATTERN_COMMUNICATION:
+ case FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_SCHEDULE_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_3RD_APPLICATION:
+ case FEEDBACK_PATTERN_NOTIFICATION_1 ... FEEDBACK_PATTERN_NOTIFICATION_10_STRONG_BUZZ:
if (noti_vibstatus)
return true;
break;
case FEEDBACK_PATTERN_SIP:
+ case FEEDBACK_PATTERN_SIP_BACKSPACE:
+ case FEEDBACK_PATTERN_SIP_FUNCTION:
+ case FEEDBACK_PATTERN_SIP_FJKEY:
case FEEDBACK_PATTERN_TIMER:
+ case FEEDBACK_PATTERN_INTERNAL_TIMER:
case FEEDBACK_PATTERN_TIMER_ON_CALL:
case FEEDBACK_PATTERN_WAKEUP:
+ case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
case FEEDBACK_PATTERN_EMAIL_ON_CALL:
case FEEDBACK_PATTERN_GENERAL_ON_CALL:
+ case FEEDBACK_PATTERN_WAKEUP_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_TIMER_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_ALARM_1 ... FEEDBACK_PATTERN_ALARM_10_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_MMS:
+ case FEEDBACK_PATTERN_HOURLY_ALERT:
case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
case FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL:
case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
+ case FEEDBACK_PATTERN_TEMPERATURE_WARNING:
+ case FEEDBACK_PATTERN_COOLDOWN_WARNING_1:
+ case FEEDBACK_PATTERN_COOLDOWN_WARNING_2:
case FEEDBACK_PATTERN_BT_DISCONNECTED:
case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
+ case FEEDBACK_PATTERN_END_SOS_MESSAGE:
+ case FEEDBACK_PATTERN_SMART_ALERT:
+ case FEEDBACK_PATTERN_CMAS:
+ case FEEDBACK_PATTERN_CMAS_CA:
case FEEDBACK_PATTERN_OUTGOING_CALL:
+ case FEEDBACK_PATTERN_FALL_DETECTION_1:
+ case FEEDBACK_PATTERN_FALL_DETECTION_2:
+ return true;
+ case FEEDBACK_PATTERN_SPEED_UP:
+ case FEEDBACK_PATTERN_SLOW_DOWN:
+ case FEEDBACK_PATTERN_KEEP_THIS_PACE:
+ case FEEDBACK_PATTERN_GOAL_ACHIEVED:
+ case FEEDBACK_PATTERN_EXERCISE_COUNT:
+ case FEEDBACK_PATTERN_BREATHING_EXHALE:
+ case FEEDBACK_PATTERN_START_CUE:
+ case FEEDBACK_PATTERN_INACTIVE_TIME:
+ case FEEDBACK_PATTERN_SHEALTH_NOTICE:
+ case FEEDBACK_PATTERN_SHEALTH_GENTLE_ALERT:
+ case FEEDBACK_PATTERN_HEALTH_PACE:
+ case FEEDBACK_PATTERN_SHEALTH_START:
+ case FEEDBACK_PATTERN_SHEALTH_PAUSE:
+ case FEEDBACK_PATTERN_SHEALTH_STOP:
+ case FEEDBACK_PATTERN_INACTIVE_FINE:
+ case FEEDBACK_PATTERN_MEDITATION:
+ case FEEDBACK_PATTERN_MEDITATION_INTERVAL:
+ /* except mute case */
+ if (is_sound_mode() || is_vibration_mode())
+ return true;
+ break;
+ case FEEDBACK_PATTERN_RINGER:
+ case FEEDBACK_PATTERN_RINGER_STRONG_BUZZ:
+ case FEEDBACK_PATTERN_RING_1 ... FEEDBACK_PATTERN_RING_10_STRONG_BUZZ:
+ if (vib_when_ring)
+ return true;
+ /* check if the state of voice recorder is recording */
+ if ((is_sound_mode() || is_vibration_mode()) &&
+ vconf_get_int(VCONFKEY_RECORDER_STATE, &ret) == 0 &&
+ ret == VCONFKEY_RECORDER_STATE_RECORDING) {
+ _D("voice recording status is RECORDING");
+ return true;
+ }
+ break;
+ case FEEDBACK_PATTERN_FIND_MY_GEAR:
return true;
default:
break;
}
+
+ if (pattern > FEEDBACK_STANDARD_START && pattern < FEEDBACK_STANDARD_END)
+ return true;
}
return false;
}
break;
case FEEDBACK_PATTERN_LOCK:
case FEEDBACK_PATTERN_UNLOCK:
+ case FEEDBACK_PATTERN_LOCK_SWIPE:
+ case FEEDBACK_PATTERN_UNLOCK_SWIPE:
if (CHECK_SOUND(type) && !lock_sndstatus)
return true;
break;
}
//LCOV_EXCL_START
-static bool wearable_is_system_type(int pattern)
-{
- switch (pattern) {
- case FEEDBACK_PATTERN_POWERON ... FEEDBACK_PATTERN_VOLUME_KEY:
- return true;
- }
- return false;
-}
-
static bool wearable_get_always_off_case(int type, int pattern)
{
int ret;
_W("skip %d sound during call", pattern);
return true;
}
+
+ if (goodnight_mode && wearable_is_system_type(pattern)) {
+ _W("Skip %d sound in good night mode", pattern);
+ return true;
+ }
+
/* check if the state of voice recorder is recording */
if (vconf_get_int(VCONFKEY_RECORDER_STATE, &ret) == 0 &&
ret == VCONFKEY_RECORDER_STATE_RECORDING) {
switch (pattern) {
case FEEDBACK_PATTERN_TAP:
+ case FEEDBACK_PATTERN_MAX_CHARACTER:
case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
- if (!is_touch_sndstatus())
+ if (!is_touch_sndstatus() || theater_mode || goodnight_mode)
+ return true;
+ break;
+ case FEEDBACK_PATTERN_SIP ... FEEDBACK_PATTERN_SIP_FJKEY:
+ if (theater_mode || goodnight_mode)
return true;
break;
case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
- if (!is_keytone_sndstatus())
+ if (!is_keytone_sndstatus() || theater_mode || goodnight_mode)
+ return true;
+ break;
+ case FEEDBACK_PATTERN_LOCK:
+ case FEEDBACK_PATTERN_UNLOCK:
+ if (!lock_sndstatus)
+ return true;
+ break;
+ case FEEDBACK_PATTERN_BT_DISCONNECTED:
+ case FEEDBACK_PATTERN_LOWBATT:
+ case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
+ case FEEDBACK_PATTERN_CHARGERCONN:
+ case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
+ if (dnd_mode || theater_mode || goodnight_mode)
return true;
break;
default:
case FEEDBACK_PATTERN_TAP:
case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
case FEEDBACK_PATTERN_HOLD:
+ case FEEDBACK_PATTERN_END_EFFECT:
+ case FEEDBACK_PATTERN_END_EFFECT_FINE ... FEEDBACK_PATTERN_FUNCTION:
+ case FEEDBACK_PATTERN_VOICE_START:
+ case FEEDBACK_PATTERN_VOICE_STOP:
+ case FEEDBACK_PATTERN_PICKER:
+ case FEEDBACK_PATTERN_PICKER_FINISH:
+ case FEEDBACK_PATTERN_ON_OFF_SWITCH:
+ case FEEDBACK_PATTERN_REORDER:
+ case FEEDBACK_PATTERN_CURSOR_MOVE:
if (!feedbackstatus)
return true;
break;
+ case FEEDBACK_PATTERN_LOWBATT:
+ case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
+ case FEEDBACK_PATTERN_CHARGERCONN:
+ case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
+ if (dnd_mode || theater_mode || goodnight_mode)
+ return true;
+ break;
+ case FEEDBACK_PATTERN_BT_DISCONNECTED:
+ if (goodnight_mode)
+ return true;
default:
break;
}
//LCOV_EXCL_STOP
}
+//LCOV_EXCL_START
+static int wearable_get_strong_buzz(int pattern)
+{
+ int changed_pattern = pattern;
+
+ switch (pattern) {
+ case FEEDBACK_PATTERN_BT_DISCONNECTED:
+ if (disconnect_alert_mode % BUZZ_CONVERTED)
+ changed_pattern = S2;
+ break;
+ case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
+ case FEEDBACK_PATTERN_KEEP_THIS_PACE:
+ case FEEDBACK_PATTERN_SHEALTH_GENTLE_ALERT:
+ case FEEDBACK_PATTERN_HEALTH_PACE:
+ case FEEDBACK_PATTERN_GOAL_ACHIEVED:
+ case FEEDBACK_PATTERN_INACTIVE_TIME:
+ case FEEDBACK_PATTERN_INACTIVE_FINE:
+ if (vib_call_index % BUZZ_CONVERTED)
+ changed_pattern = J_WHB;
+ break;
+ case FEEDBACK_PATTERN_SHEALTH_NOTICE:
+ if (vib_call_index % BUZZ_CONVERTED)
+ changed_pattern = J_WB;
+ break;
+ default:
+ break;
+ }
+ return changed_pattern;
+}
+//LCOV_EXCL_STOP
+
+static int profile_get_strong_buzz(int pattern)
+{
+ int prof = get_profile();
+
+//LCOV_EXCL_START
+ if (prof == PROFILE_WEARABLE)
+ return wearable_get_strong_buzz(pattern);
+//LCOV_EXCL_STOP
+ return pattern;
+}
+
static int mobile_get_strength_type(int type, int pattern)
{
if (CHECK_SOUND(type)) {
} else if (CHECK_VIBRATION(type)) {
if (pattern >= FEEDBACK_PATTERN_MESSAGE &&
pattern <= FEEDBACK_PATTERN_GENERAL)
- return (noti_level? (noti_level/2 + 1): 0);
+ return FEEDBACK_LEVEL(noti_level);
else
- return (vib_level? (vib_level/2 + 1): 0);
+ return FEEDBACK_LEVEL(vib_level);
}
return -EINVAL;
return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_TOUCH;
else if (pattern >= FEEDBACK_PATTERN_KEY0 && pattern <= FEEDBACK_PATTERN_KEY_BACK)
return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_DIALER;
- else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY || pattern == FEEDBACK_PATTERN_SILENT_OFF)
+ else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY || pattern == FEEDBACK_PATTERN_SILENT_OFF ||
+ (pattern >= FEEDBACK_PATTERN_RING_1 && pattern <= FEEDBACK_PATTERN_RING_8_STRONG_BUZZ))
return VOLUME_TYPE_RINGTONE;
else if (camerastatus && shutter_sndstatus && pattern == FEEDBACK_PATTERN_SCREEN_CAPTURE)
return VOLUME_TYPE_FIXED;
+ else if (pattern == FEEDBACK_PATTERN_INACTIVE_FINE ||
+ pattern == FEEDBACK_PATTERN_INACTIVE_TIME ||
+ pattern == FEEDBACK_PATTERN_HEALTH_PACE)
+ return VOLUME_TYPE_NOTIFICATION;
+ else if (pattern == FEEDBACK_PATTERN_GOAL_ACHIEVED ||
+ pattern == FEEDBACK_PATTERN_KEEP_THIS_PACE ||
+ pattern == FEEDBACK_PATTERN_EXERCISE_COUNT ||
+ pattern == FEEDBACK_PATTERN_START_CUE)
+ return VOLUME_TYPE_MEDIA;
return VOLUME_TYPE_SYSTEM;
} else if (CHECK_VIBRATION(type)) {
- if (pattern >= FEEDBACK_PATTERN_TAP && pattern <= FEEDBACK_PATTERN_HW_HOLD) {
+ if ((pattern >= FEEDBACK_PATTERN_TAP && pattern <= FEEDBACK_PATTERN_HW_HOLD) ||
+ pattern == FEEDBACK_PATTERN_END_EFFECT ||
+ (pattern == FEEDBACK_PATTERN_VOICE_START || pattern == FEEDBACK_PATTERN_VOICE_STOP) ||
+ (pattern >= FEEDBACK_PATTERN_END_EFFECT_FINE && pattern <= FEEDBACK_PATTERN_FUNCTION) ||
+ (pattern == FEEDBACK_PATTERN_ON_OFF_SWITCH) ||
+ (pattern == FEEDBACK_PATTERN_CURSOR_MOVE || pattern == FEEDBACK_PATTERN_PICKER)) {
_D("use default level");
- return (DEFAULT_VIB_LEVEL? (DEFAULT_VIB_LEVEL/2 + 1): 0);
- }
- /* if call status is ON, vibration magnitude is 20% */
- if (pattern != FEEDBACK_PATTERN_RINGER &&
- (callstatus == VCONFKEY_CALL_VOICE_ACTIVE || callstatus == VCONFKEY_CALL_VIDEO_ACTIVE)) {
- _W("force change weak level");
- return 1;
+ return FEEDBACK_LEVEL(DEFAULT_VIB_LEVEL);
}
- return (noti_level? (noti_level/2 + 1): 0);
+ if (pattern == FEEDBACK_PATTERN_FIND_MY_GEAR)
+ return MAX_VIB_LEVEL;
+
+ return FEEDBACK_LEVEL(noti_level);
}
return -EINVAL;
}
else
return VOLUME_TYPE_SYSTEM;
} else if (CHECK_VIBRATION(type)) {
- return (DEFAULT_VIB_LEVEL? (DEFAULT_VIB_LEVEL/2 + 1): 0);
+ return FEEDBACK_LEVEL(DEFAULT_VIB_LEVEL);
}
return -EINVAL;
//LCOV_EXCL_STOP
}
+//LCOV_EXCL_START
+static char *wearable_get_path(int pattern)
+{
+ char *data = NULL;
+
+ if (pattern >= FEEDBACK_PATTERN_RING_1 && pattern <= FEEDBACK_PATTERN_RING_8_STRONG_BUZZ)
+ data = snd_call_path;
+ else if (pattern >= FEEDBACK_PATTERN_NOTIFICATION_1 && pattern <= FEEDBACK_PATTERN_NOTIFICATION_8_STRONG_BUZZ)
+ data = snd_noti_path;
+ return data;
+}
+//LCOV_EXCL_STOP
+
+static char *profile_get_path(int pattern)
+{
+ int prof = get_profile();
+
+//LCOV_EXCL_START
+ if (prof == PROFILE_WEARABLE)
+ return wearable_get_path(pattern);
+//LCOV_EXCL_STOP
+ return NULL;
+}
+
static const struct profile_ops feedback_profile_ops = {
.profile = profile_get_name,
.init = profile_init,
.get_always_off_case = profile_get_always_off_case,
.get_strength_type = profile_get_strength_type,
.get_priority = profile_get_priority,
+ .get_strong_buzz = profile_get_strong_buzz,
.is_notification_type = profile_is_notification_type,
.max_type = FEEDBACK_TYPE_END,
.max_pattern = FEEDBACK_PATTERN_INTERNAL_END,
.get_num_of_pattern = profile_get_num_of_pattern,
.str_pattern = profile_str_pattern,
.get_pattern_enum = profile_get_pattern_enum,
+ .get_path = profile_get_path,
};
PROFILE_OPS_REGISTER(&feedback_profile_ops);
FEEDBACK_PATTERN_TAP=1,A_W
#A_W
FEEDBACK_PATTERN_SIP=1,A_W
+#A_W
+FEEDBACK_PATTERN_SIP_BACKSPACE=1,A_W
+#A_W
+FEEDBACK_PATTERN_SIP_FUNCTION=1,A_W
+#A_W
+FEEDBACK_PATTERN_SIP_FJKEY=1,A_W
#A_W2
FEEDBACK_PATTERN_HOLD=1,A_W2
#J_W
FEEDBACK_PATTERN_MESSAGE=1,J_W
+#C
+FEEDBACK_PATTERN_MESSAGE_ON_CALL=1,C
#J_W
FEEDBACK_PATTERN_EMAIL=1,J_W
+#C
+FEEDBACK_PATTERN_EMAIL_ON_CALL=1,C
#K_W
FEEDBACK_PATTERN_WAKEUP=1,K_W
+#C
+FEEDBACK_PATTERN_WAKEUP_ON_CALL=1,C
#K_W
FEEDBACK_PATTERN_SCHEDULE=1,K_W
+#C
+FEEDBACK_PATTERN_SCHEDULE_ON_CALL=1,C
#K_W
FEEDBACK_PATTERN_TIMER=1,K_W
+#C
+FEEDBACK_PATTERN_TIMER_ON_CALL=1,C
#J_W
FEEDBACK_PATTERN_GENERAL=1,J_W
+#C
+FEEDBACK_PATTERN_GENERAL_ON_CALL=1,C
+#C
+FEEDBACK_PATTERN_POWERON=1,C
+#H
+FEEDBACK_PATTERN_POWEROFF=1,H
#B_W
FEEDBACK_PATTERN_CHARGERCONN=1,B_W
#C
FEEDBACK_PATTERN_CHARGERCONN_ON_CALL=1,C
#G_W
+FEEDBACK_PATTERN_CHARGING_ERROR=1,G_W
+#C
+FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL=1,C
+#G_W
FEEDBACK_PATTERN_LOWBATT=1,G_W
#C
FEEDBACK_PATTERN_LOWBATT_ON_CALL=1,C
+#C
+FEEDBACK_PATTERN_CALLCONNECT=1,C
+#G_W
+FEEDBACK_PATTERN_DISCALLCONNECT=1,G_W
#H
FEEDBACK_PATTERN_VIBRATION_ON=1,H
-FEEDBACK_PATTERN_BT_CONNECTED=100D10000I2100F
#S
FEEDBACK_PATTERN_BT_DISCONNECTED=1,S
+#K_WB x N(AXXX)
+FEEDBACK_PATTERN_BT_PAIRING=A,K_WB
+#C
+FEEDBACK_PATTERN_MMS=1,C
+#J_WW
+FEEDBACK_PATTERN_SAFETY_ALERT=1,J_WW
+#J_WW
+FEEDBACK_PATTERN_ACCIDENT_DETECT=1,J_WW
#J_WH
FEEDBACK_PATTERN_SEND_SOS_MESSAGE=1,J_WH
-#D_F
-FEEDBACK_PATTERN_DEFAULT=1,DEFAULT
+#CMAS
+FEEDBACK_PATTERN_CMAS=1,CMAS
+#CMAS_CA
+FEEDBACK_PATTERN_CMAS_CA=1,CMAS_CA
+#K_W x N(AXXX)
+FEEDBACK_PATTERN_RINGER=A,K_W
+#B_W
+FEEDBACK_PATTERN_NOTIFICATION=1,B_W
+#C
+FEEDBACK_PATTERN_INFO=1,C
+#C
+FEEDBACK_PATTERN_SYSTEM_SHORT=1,C
+#H
+FEEDBACK_PATTERN_WARNING=1,H
+#H
+FEEDBACK_PATTERN_SYSTEM_LONG=1,H
+#G_W
+FEEDBACK_PATTERN_ERROR=1,G_W
+#K_W x N
+FEEDBACK_PATTERN_INTERNAL_WAKEUP=A,K_W
+#K_W x N
+FEEDBACK_PATTERN_INTERNAL_TIMER=A,K_W
+#G_WB
+FEEDBACK_PATTERN_TEMPERATURE_WARNING=1,G_WB
+#C
+FEEDBACK_PATTERN_COOLDOWN_WARNING_1=1,C
+#C
+FEEDBACK_PATTERN_COOLDOWN_WARNING_2=1,C
+#J_WH
+FEEDBACK_PATTERN_KEEP_THIS_PACE=1,J_WH
+#J_WH
+FEEDBACK_PATTERN_GOAL_ACHIEVED=1,J_WH
+#B_W
+FEEDBACK_PATTERN_EXERCISE_COUNT=1,B_W
+#E_W2
+FEEDBACK_PATTERN_BREATHING_EXHALE=1,E_W2
+#H
+FEEDBACK_PATTERN_START_CUE=1,H
+#J_WH
+FEEDBACK_PATTERN_HEALTH_PACE=1,J_WH
+#J_WH
+FEEDBACK_PATTERN_INACTIVE_TIME=1,J_WH
+#C
+FEEDBACK_PATTERN_MEASURING_SUCCESS=1,C
+#G_W
+FEEDBACK_PATTERN_MEASURING_FAILURE=1,G_W
+#C
+FEEDBACK_PATTERN_SHEALTH_START=1,C
+#B_W
+FEEDBACK_PATTERN_SHEALTH_PAUSE=1,B_W
+#C
+FEEDBACK_PATTERN_SHEALTH_STOP=1,C
+#J_W
+FEEDBACK_PATTERN_3RD_APPLICATION=1,J_W
+#J_WH
+FEEDBACK_PATTERN_INACTIVE_FINE=1,J_WH
+#C
+FEEDBACK_PATTERN_INACTIVE_TENSION=1,C
+#J_WW
+FEEDBACK_PATTERN_SHEALTH_NOTICE=1,J_WW
+#J_WW
+FEEDBACK_PATTERN_SHEALTH_GENTLE_ALERT=1,J_WW
+#E_W1
+FEEDBACK_PATTERN_END_EFFECT=1,E_W1
+#F_W
+FEEDBACK_PATTERN_CLICK_FINE=1,F_W
+#B_W
+FEEDBACK_PATTERN_CLICK_STRONG=1,B_W
+#E_W2
+FEEDBACK_PATTERN_FUNCTION=1,E_W2
+#B_W
+FEEDBACK_PATTERN_VOICE_START=1,B_W
+#B_W
+FEEDBACK_PATTERN_VOICE_STOP=1,B_W
+#J_W
+FEEDBACK_PATTERN_COMMUNICATION=1,J_W
+#J_WW
+FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ=1,J_WW
+#J_WW
+FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ=1,J_WW
+#J_WW
+FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ=1,J_WW
+#J_WW
+FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ=1,J_WW
+#K_WB
+FEEDBACK_PATTERN_SCHEDULE_STRONG_BUZZ=1,K_WB
+#K_WB x N(AXXX)
+FEEDBACK_PATTERN_WAKEUP_STRONG_BUZZ=A,K_WB
+#K_WB x N(AXXX)
+FEEDBACK_PATTERN_TIMER_STRONG_BUZZ=A,K_WB
+#K_WB x N(AXXX)
+FEEDBACK_PATTERN_RINGER_STRONG_BUZZ=A,K_WB
+#K_WB x N(AXXX)
+FEEDBACK_PATTERN_FIND_MY_GEAR=A,K_WB
+#J_W
+FEEDBACK_PATTERN_NOTIFICATION_1=1,J_W
+#J_WB
+FEEDBACK_PATTERN_NOTIFICATION_1_STRONG_BUZZ=1,J_WB
+#J_W_2
+FEEDBACK_PATTERN_NOTIFICATION_2=1,J_W_2
+#J_WB_2
+FEEDBACK_PATTERN_NOTIFICATION_2_STRONG_BUZZ=1,J_WB_2
+#J_W_3
+FEEDBACK_PATTERN_NOTIFICATION_3=1,J_W_3
+#J_WB_3
+FEEDBACK_PATTERN_NOTIFICATION_3_STRONG_BUZZ=1,J_WB_3
+#J_W_4
+FEEDBACK_PATTERN_NOTIFICATION_4=1,J_W_4
+#J_WB_4
+FEEDBACK_PATTERN_NOTIFICATION_4_STRONG_BUZZ=1,J_WB_4
+#J_W_5
+FEEDBACK_PATTERN_NOTIFICATION_5=1,J_W_5
+#J_WB_5
+FEEDBACK_PATTERN_NOTIFICATION_5_STRONG_BUZZ=1,J_WB_5
+#J_W_6
+FEEDBACK_PATTERN_NOTIFICATION_6=1,J_W_6
+#J_WB_6
+FEEDBACK_PATTERN_NOTIFICATION_6_STRONG_BUZZ=1,J_WB_6
+#J_W_7
+FEEDBACK_PATTERN_NOTIFICATION_7=1,J_W_7
+#J_WB_7
+FEEDBACK_PATTERN_NOTIFICATION_7_STRONG_BUZZ=1,J_WB_7
+#J_W_8
+FEEDBACK_PATTERN_NOTIFICATION_8=1,J_W_8
+#J_WB_8
+FEEDBACK_PATTERN_NOTIFICATION_8_STRONG_BUZZ=1,J_WB_8
+#J_W_9
+FEEDBACK_PATTERN_NOTIFICATION_9=1,J_W_9
+#J_WB_9
+FEEDBACK_PATTERN_NOTIFICATION_9_STRONG_BUZZ=1,J_WB_9
+#J_W_10
+FEEDBACK_PATTERN_NOTIFICATION_10=1,J_W_10
+#J_WB_10
+FEEDBACK_PATTERN_NOTIFICATION_10_STRONG_BUZZ=1,J_WB_10
+#K_W x N(AXXX)
+FEEDBACK_PATTERN_RING_1=A,K_W
+#K_WB x N(AXXX)
+FEEDBACK_PATTERN_RING_1_STRONG_BUZZ=A,K_WB
+#K_W_2 x N(AXXX)
+FEEDBACK_PATTERN_RING_2=A,K_W_2
+#K_WB_2 x N(AXXX)
+FEEDBACK_PATTERN_RING_2_STRONG_BUZZ=A,K_WB_2
+#K_W_3 x N(AXXX)
+FEEDBACK_PATTERN_RING_3=A,K_W_3
+#K_WB_3 x N(AXXX)
+FEEDBACK_PATTERN_RING_3_STRONG_BUZZ=A,K_WB_3
+#K_W_4 x N(AXXX)
+FEEDBACK_PATTERN_RING_4=A,K_W_4
+#K_WB_4 x N(AXXX)
+FEEDBACK_PATTERN_RING_4_STRONG_BUZZ=A,K_WB_4
+#K_W_5 x N(AXXX)
+FEEDBACK_PATTERN_RING_5=A,K_W_5
+#K_WB_5 x N(AXXX)
+FEEDBACK_PATTERN_RING_5_STRONG_BUZZ=A,K_WB_5
+#K_W_6 x N(AXXX)
+FEEDBACK_PATTERN_RING_6=A,K_W_6
+#K_WB_6 x N(AXXX)
+FEEDBACK_PATTERN_RING_6_STRONG_BUZZ=A,K_WB_6
+#K_W_7 x N(AXXX)
+FEEDBACK_PATTERN_RING_7=A,K_W_7
+#K_WB_7 x N(AXXX)
+FEEDBACK_PATTERN_RING_7_STRONG_BUZZ=A,K_WB_7
+#K_W_8 x N(AXXX)
+FEEDBACK_PATTERN_RING_8=A,K_W_8
+#K_WB_8 x N(AXXX)
+FEEDBACK_PATTERN_RING_8_STRONG_BUZZ=A,K_WB_8
+#K_W_9 x N(AXXX)
+FEEDBACK_PATTERN_RING_9=A,K_W_9
+#K_WB_9 x N(AXXX)
+FEEDBACK_PATTERN_RING_9_STRONG_BUZZ=A,K_WB_9
+#K_W_10 x N(AXXX)
+FEEDBACK_PATTERN_RING_10=A,K_W_10
+#K_WB_10 x N(AXXX)
+FEEDBACK_PATTERN_RING_10_STRONG_BUZZ=A,K_WB_10
+#K_W x N(AXXX)
+FEEDBACK_PATTERN_ALARM_1=A,K_W
+#K_WB x N(AXXX)
+FEEDBACK_PATTERN_ALARM_1_STRONG_BUZZ=A,K_WB
+#K_W_2 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_2=A,K_W_2
+#K_WB_2 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_2_STRONG_BUZZ=A,K_WB_2
+#K_W_3 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_3=A,K_W_3
+#K_WB_3 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_3_STRONG_BUZZ=A,K_WB_3
+#K_W_4 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_4=A,K_W_4
+#K_WB_4 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_4_STRONG_BUZZ=A,K_WB_4
+#K_W_5 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_5=A,K_W_5
+#K_WB_5 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_5_STRONG_BUZZ=A,K_WB_5
+#K_W_6 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_6=A,K_W_6
+#K_WB_6 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_6_STRONG_BUZZ=A,K_WB_6
+#K_W_7 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_7=A,K_W_7
+#K_WB_7 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_7_STRONG_BUZZ=A,K_WB_7
+#K_W_8 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_8=A,K_W_8
+#K_WB_8 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_8_STRONG_BUZZ=A,K_WB_8
+#K_W_9 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_9=A,K_W_9
+#K_WB_9 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_9_STRONG_BUZZ=A,K_WB_9
+#K_W_10 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_10=A,K_W_10
+#K_WB_10 x N(AXXX)
+FEEDBACK_PATTERN_ALARM_10_STRONG_BUZZ=A,K_WB_10
+#B_W
+FEEDBACK_PATTERN_BOS=1,B_W
+#B_W
+FEEDBACK_PATTERN_EOS=1,B_W
+#E_W1
+FEEDBACK_PATTERN_UDS=1,E_W1
+#O
+FEEDBACK_PATTERN_NFC_SUCCESS=1,O
+#H_LIGHT
+FEEDBACK_PATTERN_MEDITATION=1,H_LIGHT
+#T_LIGHT
+FEEDBACK_PATTERN_MEDITATION_INTERVAL=1,T_LIGHT
+#F_W
+FEEDBACK_PATTERN_PICKER=1,F_W
+#E_W2
+FEEDBACK_PATTERN_PICKER_FINISH=1,E_W2
+#P
+FEEDBACK_PATTERN_ON_OFF_SWITCH=1,P
+#R
+FEEDBACK_PATTERN_REORDER=1,R
+#F_W
+FEEDBACK_PATTERN_CURSOR_MOVE=1,F_W
+#M1
+FEEDBACK_PATTERN_FALL_DETECTION_1=1,M1
+#M2
+FEEDBACK_PATTERN_FALL_DETECTION_2=1,M2
+#Q
+FEEDBACK_PATTERN_SCREEN_CAPTURE=1,Q
+#N
+FEEDBACK_PATTERN_SMART_GESTURE=1,N