feedback: Add new feedback patterns
[platform/core/system/libsvi.git] / src / check.c
1 /*
2  * libfeedback
3  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Apache License, Version 2.0 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18
19 #include <stdio.h>
20 #include <stdlib.h>
21 #include <limits.h>
22 #include <vconf.h>
23 #include <system_info.h>
24 #include <sys/stat.h>
25
26 #include "feedback.h"
27 #include "feedback-internal.h"
28 #include "profiles.h"
29 #include "log.h"
30
31 #define BUZZ_CONVERTED 2
32 #define MAX_VIB_LEVEL  2
33
34 /* Temporary keys */
35 #ifndef VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL
36 #define VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL "db/setting/sound/vibrate_when_notification"
37 #endif
38 #ifndef VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL
39 #define VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL "db/setting/sound/haptic_feedback_on"
40 #endif
41
42 /* noti type */
43 #ifndef VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT
44 #define VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT "db/setting/sound/noti/vibration_type"
45 #endif
46
47 #ifndef VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT
48 #define VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT "db/setting/disconnect_alert/type"
49 #endif
50
51
52 static const char *profile_str_type[] = {
53         "FEEDBACK_TYPE_NONE",
54         "FEEDBACK_TYPE_SOUND",
55         "FEEDBACK_TYPE_VIBRATION",
56 };
57
58 static const struct pattern_field mobile_str_pattern[] = {
59         {"FEEDBACK_PATTERN_TAP", FEEDBACK_PATTERN_TAP},
60         {"FEEDBACK_PATTERN_SIP", FEEDBACK_PATTERN_SIP},
61
62         {"FEEDBACK_PATTERN_KEY0", FEEDBACK_PATTERN_KEY0},
63         {"FEEDBACK_PATTERN_KEY1", FEEDBACK_PATTERN_KEY1},
64         {"FEEDBACK_PATTERN_KEY2", FEEDBACK_PATTERN_KEY2},
65         {"FEEDBACK_PATTERN_KEY3", FEEDBACK_PATTERN_KEY3},
66         {"FEEDBACK_PATTERN_KEY4", FEEDBACK_PATTERN_KEY4},
67         {"FEEDBACK_PATTERN_KEY5", FEEDBACK_PATTERN_KEY5},
68         {"FEEDBACK_PATTERN_KEY6", FEEDBACK_PATTERN_KEY6},
69         {"FEEDBACK_PATTERN_KEY7", FEEDBACK_PATTERN_KEY7},
70         {"FEEDBACK_PATTERN_KEY8", FEEDBACK_PATTERN_KEY8},
71         {"FEEDBACK_PATTERN_KEY9", FEEDBACK_PATTERN_KEY9},
72         {"FEEDBACK_PATTERN_KEY_STAR", FEEDBACK_PATTERN_KEY_STAR},
73         {"FEEDBACK_PATTERN_KEY_SHARP", FEEDBACK_PATTERN_KEY_SHARP},
74         {"FEEDBACK_PATTERN_KEY_BACK", FEEDBACK_PATTERN_KEY_BACK},
75         {"FEEDBACK_PATTERN_HOLD", FEEDBACK_PATTERN_HOLD},
76
77         {"FEEDBACK_PATTERN_HW_TAP", FEEDBACK_PATTERN_HW_TAP},
78         {"FEEDBACK_PATTERN_HW_HOLD", FEEDBACK_PATTERN_HW_HOLD},
79
80         {"FEEDBACK_PATTERN_MESSAGE", FEEDBACK_PATTERN_MESSAGE},
81         {"FEEDBACK_PATTERN_MESSAGE_ON_CALL", FEEDBACK_PATTERN_MESSAGE_ON_CALL},
82         {"FEEDBACK_PATTERN_EMAIL", FEEDBACK_PATTERN_EMAIL},
83         {"FEEDBACK_PATTERN_EMAIL_ON_CALL", FEEDBACK_PATTERN_EMAIL_ON_CALL},
84         {"FEEDBACK_PATTERN_WAKEUP", FEEDBACK_PATTERN_WAKEUP},
85         {"FEEDBACK_PATTERN_WAKEUP_ON_CALL", FEEDBACK_PATTERN_WAKEUP_ON_CALL},
86         {"FEEDBACK_PATTERN_SCHEDULE", FEEDBACK_PATTERN_SCHEDULE},
87         {"FEEDBACK_PATTERN_SCHEDULE_ON_CALL", FEEDBACK_PATTERN_SCHEDULE_ON_CALL},
88         {"FEEDBACK_PATTERN_TIMER", FEEDBACK_PATTERN_TIMER},
89         {"FEEDBACK_PATTERN_TIMER_ON_CALL", FEEDBACK_PATTERN_TIMER_ON_CALL},
90         {"FEEDBACK_PATTERN_GENERAL", FEEDBACK_PATTERN_GENERAL},
91         {"FEEDBACK_PATTERN_GENERAL_ON_CALL", FEEDBACK_PATTERN_GENERAL_ON_CALL},
92
93         {"FEEDBACK_PATTERN_POWERON", FEEDBACK_PATTERN_POWERON},
94         {"FEEDBACK_PATTERN_POWEROFF", FEEDBACK_PATTERN_POWEROFF},
95         {"FEEDBACK_PATTERN_CHARGERCONN", FEEDBACK_PATTERN_CHARGERCONN},
96         {"FEEDBACK_PATTERN_CHARGERCONN_ON_CALL", FEEDBACK_PATTERN_CHARGERCONN_ON_CALL},
97         {"FEEDBACK_PATTERN_CHARGING_ERROR", FEEDBACK_PATTERN_CHARGING_ERROR},
98         {"FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL", FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL},
99         {"FEEDBACK_PATTERN_FULLCHARGED", FEEDBACK_PATTERN_FULLCHARGED},
100         {"FEEDBACK_PATTERN_FULLCHARGED_ON_CALL", FEEDBACK_PATTERN_FULLCHARGED_ON_CALL},
101         {"FEEDBACK_PATTERN_LOWBATT", FEEDBACK_PATTERN_LOWBATT},
102         {"FEEDBACK_PATTERN_LOWBATT_ON_CALL", FEEDBACK_PATTERN_LOWBATT_ON_CALL},
103         {"FEEDBACK_PATTERN_LOCK", FEEDBACK_PATTERN_LOCK},
104         {"FEEDBACK_PATTERN_UNLOCK", FEEDBACK_PATTERN_UNLOCK},
105
106         {"FEEDBACK_PATTERN_OUTGOING_CALL", FEEDBACK_PATTERN_OUTGOING_CALL},
107
108         {"FEEDBACK_PATTERN_VIBRATION_ON", FEEDBACK_PATTERN_VIBRATION_ON},
109         {"FEEDBACK_PATTERN_SILENT_OFF", FEEDBACK_PATTERN_SILENT_OFF},
110         {"FEEDBACK_PATTERN_BT_CONNECTED", FEEDBACK_PATTERN_BT_CONNECTED},
111         {"FEEDBACK_PATTERN_BT_DISCONNECTED", FEEDBACK_PATTERN_BT_DISCONNECTED},
112
113         {"FEEDBACK_PATTERN_SCREEN_CAPTURE", FEEDBACK_PATTERN_SCREEN_CAPTURE},
114         {"FEEDBACK_PATTERN_LIST_REORDER", FEEDBACK_PATTERN_LIST_REORDER},
115         {"FEEDBACK_PATTERN_LIST_SLIDER", FEEDBACK_PATTERN_LIST_SLIDER},
116         {"FEEDBACK_PATTERN_VOLUME_KEY", FEEDBACK_PATTERN_VOLUME_KEY},
117
118         {"FEEDBACK_PATTERN_SEND_SOS_MESSAGE", FEEDBACK_PATTERN_SEND_SOS_MESSAGE},
119         {"FEEDBACK_PATTERN_SYSTEM_SHORT", FEEDBACK_PATTERN_SYSTEM_SHORT},
120         {"FEEDBACK_PATTERN_SYSTEM_ERROR", FEEDBACK_PATTERN_SYSTEM_ERROR},
121         {"FEEDBACK_PATTERN_SYSTEM_LONG", FEEDBACK_PATTERN_SYSTEM_LONG},
122         {"FEEDBACK_PATTERN_SYSTEM_MID", FEEDBACK_PATTERN_SYSTEM_MID},
123         {"FEEDBACK_PATTERN_RINGER", FEEDBACK_PATTERN_RINGER},
124         {"FEEDBACK_PATTERN_NOTIFICATION", FEEDBACK_PATTERN_NOTIFICATION},
125
126         {"FEEDBACK_PATTERN_SIP_BACKSPACE", FEEDBACK_PATTERN_SIP_BACKSPACE},
127         {"FEEDBACK_PATTERN_SIP_FUNCTION", FEEDBACK_PATTERN_SIP_FUNCTION},
128         {"FEEDBACK_PATTERN_SIP_FJKEY", FEEDBACK_PATTERN_SIP_FJKEY},
129         {"FEEDBACK_PATTERN_MAX_CHARACTER", FEEDBACK_PATTERN_MAX_CHARACTER},
130         {"FEEDBACK_PATTERN_MULTI_TAP", FEEDBACK_PATTERN_MULTI_TAP},
131         {"FEEDBACK_PATTERN_HW_TAP", FEEDBACK_PATTERN_HW_TAP},
132         {"FEEDBACK_PATTERN_HW_HOLD", FEEDBACK_PATTERN_HW_HOLD},
133         {"FEEDBACK_PATTERN_SMART_ALERT", FEEDBACK_PATTERN_SMART_ALERT},
134         {"FEEDBACK_PATTERN_GEOMETRIC_LOCK", FEEDBACK_PATTERN_GEOMETRIC_LOCK},
135         {"FEEDBACK_PATTERN_CALLCONNECT", FEEDBACK_PATTERN_CALLCONNECT},
136         {"FEEDBACK_PATTERN_DISCALLCONNECT", FEEDBACK_PATTERN_DISCALLCONNECT},
137         {"FEEDBACK_PATTERN_MINUTEMINDER", FEEDBACK_PATTERN_MINUTEMINDER},
138         {"FEEDBACK_PATTERN_BT_PAIRING", FEEDBACK_PATTERN_BT_PAIRING},
139         {"FEEDBACK_PATTERN_BT_WAITING", FEEDBACK_PATTERN_BT_WAITING},
140         {"FEEDBACK_PATTERN_MMS", FEEDBACK_PATTERN_MMS},
141         {"FEEDBACK_PATTERN_HOURLY_ALERT", FEEDBACK_PATTERN_HOURLY_ALERT},
142         {"FEEDBACK_PATTERN_SAFETY_ALERT", FEEDBACK_PATTERN_SAFETY_ALERT},
143         {"FEEDBACK_PATTERN_ACCIDENT_DETECT", FEEDBACK_PATTERN_ACCIDENT_DETECT},
144         {"FEEDBACK_PATTERN_END_SOS_MESSAGE", FEEDBACK_PATTERN_END_SOS_MESSAGE},
145         {"FEEDBACK_PATTERN_EMERGENCY_BUZZER", FEEDBACK_PATTERN_EMERGENCY_BUZZER},
146         {"FEEDBACK_PATTERN_SAFETY_LOW_POWER", FEEDBACK_PATTERN_SAFETY_LOW_POWER},
147         {"FEEDBACK_PATTERN_CMAS", FEEDBACK_PATTERN_CMAS},
148         {"FEEDBACK_PATTERN_CMAS_CA", FEEDBACK_PATTERN_CMAS_CA},
149         {"FEEDBACK_PATTERN_INFO", FEEDBACK_PATTERN_INFO},
150         {"FEEDBACK_PATTERN_WARNING", FEEDBACK_PATTERN_WARNING},
151         {"FEEDBACK_PATTERN_ERROR", FEEDBACK_PATTERN_ERROR},
152         {"FEEDBACK_PATTERN_EMERGENCY", FEEDBACK_PATTERN_EMERGENCY},
153         {"FEEDBACK_PATTERN_INTERNAL_WAKEUP", FEEDBACK_PATTERN_INTERNAL_WAKEUP},
154         {"FEEDBACK_PATTERN_INTERNAL_TIMER", FEEDBACK_PATTERN_INTERNAL_TIMER},
155         {"FEEDBACK_PATTERN_TEMPERATURE_WARNING", FEEDBACK_PATTERN_TEMPERATURE_WARNING},
156         {"FEEDBACK_PATTERN_COOLDOWN_WARNING_1", FEEDBACK_PATTERN_COOLDOWN_WARNING_1},
157         {"FEEDBACK_PATTERN_COOLDOWN_WARNING_2", FEEDBACK_PATTERN_COOLDOWN_WARNING_2},
158 };
159
160 static const struct pattern_field wearable_str_pattern[] = {
161         {"FEEDBACK_PATTERN_TAP", FEEDBACK_PATTERN_TAP},
162         {"FEEDBACK_PATTERN_SIP", FEEDBACK_PATTERN_SIP},
163
164         {"FEEDBACK_PATTERN_KEY0", FEEDBACK_PATTERN_KEY0},
165         {"FEEDBACK_PATTERN_KEY1", FEEDBACK_PATTERN_KEY1},
166         {"FEEDBACK_PATTERN_KEY2", FEEDBACK_PATTERN_KEY2},
167         {"FEEDBACK_PATTERN_KEY3", FEEDBACK_PATTERN_KEY3},
168         {"FEEDBACK_PATTERN_KEY4", FEEDBACK_PATTERN_KEY4},
169         {"FEEDBACK_PATTERN_KEY5", FEEDBACK_PATTERN_KEY5},
170         {"FEEDBACK_PATTERN_KEY6", FEEDBACK_PATTERN_KEY6},
171         {"FEEDBACK_PATTERN_KEY7", FEEDBACK_PATTERN_KEY7},
172         {"FEEDBACK_PATTERN_KEY8", FEEDBACK_PATTERN_KEY8},
173         {"FEEDBACK_PATTERN_KEY9", FEEDBACK_PATTERN_KEY9},
174         {"FEEDBACK_PATTERN_KEY_STAR", FEEDBACK_PATTERN_KEY_STAR},
175         {"FEEDBACK_PATTERN_KEY_SHARP", FEEDBACK_PATTERN_KEY_SHARP},
176         {"FEEDBACK_PATTERN_KEY_BACK", FEEDBACK_PATTERN_KEY_BACK},
177         {"FEEDBACK_PATTERN_HOLD", FEEDBACK_PATTERN_HOLD},
178
179         {"FEEDBACK_PATTERN_HW_TAP", FEEDBACK_PATTERN_HW_TAP},
180         {"FEEDBACK_PATTERN_HW_HOLD", FEEDBACK_PATTERN_HW_HOLD},
181
182         {"FEEDBACK_PATTERN_MESSAGE", FEEDBACK_PATTERN_MESSAGE},
183         {"FEEDBACK_PATTERN_MESSAGE_ON_CALL", FEEDBACK_PATTERN_MESSAGE_ON_CALL},
184         {"FEEDBACK_PATTERN_EMAIL", FEEDBACK_PATTERN_EMAIL},
185         {"FEEDBACK_PATTERN_EMAIL_ON_CALL", FEEDBACK_PATTERN_EMAIL_ON_CALL},
186         {"FEEDBACK_PATTERN_WAKEUP", FEEDBACK_PATTERN_WAKEUP},
187         {"FEEDBACK_PATTERN_WAKEUP_ON_CALL", FEEDBACK_PATTERN_WAKEUP_ON_CALL},
188         {"FEEDBACK_PATTERN_SCHEDULE", FEEDBACK_PATTERN_SCHEDULE},
189         {"FEEDBACK_PATTERN_SCHEDULE_ON_CALL", FEEDBACK_PATTERN_SCHEDULE_ON_CALL},
190         {"FEEDBACK_PATTERN_TIMER", FEEDBACK_PATTERN_TIMER},
191         {"FEEDBACK_PATTERN_TIMER_ON_CALL", FEEDBACK_PATTERN_TIMER_ON_CALL},
192         {"FEEDBACK_PATTERN_GENERAL", FEEDBACK_PATTERN_GENERAL},
193         {"FEEDBACK_PATTERN_GENERAL_ON_CALL", FEEDBACK_PATTERN_GENERAL_ON_CALL},
194
195         {"FEEDBACK_PATTERN_POWERON", FEEDBACK_PATTERN_POWERON},
196         {"FEEDBACK_PATTERN_POWEROFF", FEEDBACK_PATTERN_POWEROFF},
197         {"FEEDBACK_PATTERN_CHARGERCONN", FEEDBACK_PATTERN_CHARGERCONN},
198         {"FEEDBACK_PATTERN_CHARGERCONN_ON_CALL", FEEDBACK_PATTERN_CHARGERCONN_ON_CALL},
199         {"FEEDBACK_PATTERN_CHARGING_ERROR", FEEDBACK_PATTERN_CHARGING_ERROR},
200         {"FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL", FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL},
201         {"FEEDBACK_PATTERN_FULLCHARGED", FEEDBACK_PATTERN_FULLCHARGED},
202         {"FEEDBACK_PATTERN_FULLCHARGED_ON_CALL", FEEDBACK_PATTERN_FULLCHARGED_ON_CALL},
203         {"FEEDBACK_PATTERN_LOWBATT", FEEDBACK_PATTERN_LOWBATT},
204         {"FEEDBACK_PATTERN_LOWBATT_ON_CALL", FEEDBACK_PATTERN_LOWBATT_ON_CALL},
205         {"FEEDBACK_PATTERN_LOCK", FEEDBACK_PATTERN_LOCK},
206         {"FEEDBACK_PATTERN_UNLOCK", FEEDBACK_PATTERN_UNLOCK},
207
208         {"FEEDBACK_PATTERN_VIBRATION_ON", FEEDBACK_PATTERN_VIBRATION_ON},
209         {"FEEDBACK_PATTERN_SILENT_OFF", FEEDBACK_PATTERN_SILENT_OFF},
210         {"FEEDBACK_PATTERN_BT_CONNECTED", FEEDBACK_PATTERN_BT_CONNECTED},
211         {"FEEDBACK_PATTERN_BT_DISCONNECTED", FEEDBACK_PATTERN_BT_DISCONNECTED},
212
213         {"FEEDBACK_PATTERN_SCREEN_CAPTURE", FEEDBACK_PATTERN_SCREEN_CAPTURE},
214         {"FEEDBACK_PATTERN_LIST_REORDER", FEEDBACK_PATTERN_LIST_REORDER},
215         {"FEEDBACK_PATTERN_LIST_SLIDER", FEEDBACK_PATTERN_LIST_SLIDER},
216         {"FEEDBACK_PATTERN_VOLUME_KEY", FEEDBACK_PATTERN_VOLUME_KEY},
217
218         {"FEEDBACK_PATTERN_SEND_SOS_MESSAGE", FEEDBACK_PATTERN_SEND_SOS_MESSAGE},
219         {"FEEDBACK_PATTERN_SYSTEM_SHORT", FEEDBACK_PATTERN_SYSTEM_SHORT},
220         {"FEEDBACK_PATTERN_SYSTEM_ERROR", FEEDBACK_PATTERN_SYSTEM_ERROR},
221         {"FEEDBACK_PATTERN_SYSTEM_LONG", FEEDBACK_PATTERN_SYSTEM_LONG},
222         {"FEEDBACK_PATTERN_SYSTEM_MID", FEEDBACK_PATTERN_SYSTEM_MID},
223         {"FEEDBACK_PATTERN_RINGER", FEEDBACK_PATTERN_RINGER},
224         {"FEEDBACK_PATTERN_NOTIFICATION", FEEDBACK_PATTERN_NOTIFICATION},
225
226         {"FEEDBACK_PATTERN_SIP_BACKSPACE", FEEDBACK_PATTERN_SIP_BACKSPACE},
227         {"FEEDBACK_PATTERN_SIP_FUNCTION", FEEDBACK_PATTERN_SIP_FUNCTION},
228         {"FEEDBACK_PATTERN_SIP_FJKEY", FEEDBACK_PATTERN_SIP_FJKEY},
229         {"FEEDBACK_PATTERN_MAX_CHARACTER", FEEDBACK_PATTERN_MAX_CHARACTER},
230         {"FEEDBACK_PATTERN_MULTI_TAP", FEEDBACK_PATTERN_MULTI_TAP},
231         {"FEEDBACK_PATTERN_HW_TAP", FEEDBACK_PATTERN_HW_TAP},
232         {"FEEDBACK_PATTERN_HW_HOLD", FEEDBACK_PATTERN_HW_HOLD},
233         {"FEEDBACK_PATTERN_SMART_ALERT", FEEDBACK_PATTERN_SMART_ALERT},
234         {"FEEDBACK_PATTERN_GEOMETRIC_LOCK", FEEDBACK_PATTERN_GEOMETRIC_LOCK},
235         {"FEEDBACK_PATTERN_CALLCONNECT", FEEDBACK_PATTERN_CALLCONNECT},
236         {"FEEDBACK_PATTERN_DISCALLCONNECT", FEEDBACK_PATTERN_DISCALLCONNECT},
237         {"FEEDBACK_PATTERN_MINUTEMINDER", FEEDBACK_PATTERN_MINUTEMINDER},
238         {"FEEDBACK_PATTERN_BT_PAIRING", FEEDBACK_PATTERN_BT_PAIRING},
239         {"FEEDBACK_PATTERN_BT_WAITING", FEEDBACK_PATTERN_BT_WAITING},
240
241         {"FEEDBACK_PATTERN_UV_PROCESSING", FEEDBACK_PATTERN_UV_PROCESSING},
242         {"FEEDBACK_PATTERN_SHEALTH_START", FEEDBACK_PATTERN_SHEALTH_START},
243         {"FEEDBACK_PATTERN_SHEALTH_PAUSE", FEEDBACK_PATTERN_SHEALTH_PAUSE},
244         {"FEEDBACK_PATTERN_SHEALTH_STOP", FEEDBACK_PATTERN_SHEALTH_STOP},
245         {"FEEDBACK_PATTERN_BREATHING_EXHALE", FEEDBACK_PATTERN_BREATHING_EXHALE},
246         {"FEEDBACK_PATTERN_3RD_APPLICATION", FEEDBACK_PATTERN_3RD_APPLICATION},
247         {"FEEDBACK_PATTERN_TICK", FEEDBACK_PATTERN_TICK},
248         {"FEEDBACK_PATTERN_TRANSITION_CIRCULAR", FEEDBACK_PATTERN_TRANSITION_CIRCULAR},
249         {"FEEDBACK_PATTERN_TRANSITION_POP", FEEDBACK_PATTERN_TRANSITION_POP},
250         {"FEEDBACK_PATTERN_PROCESS", FEEDBACK_PATTERN_PROCESS},
251         {"FEEDBACK_PATTERN_MOVE_LIST", FEEDBACK_PATTERN_MOVE_LIST},
252         {"FEEDBACK_PATTERN_DISMISS", FEEDBACK_PATTERN_DISMISS},
253         {"FEEDBACK_PATTERN_CLOCK_SECOND_HAND", FEEDBACK_PATTERN_CLOCK_SECOND_HAND},
254
255         {"FEEDBACK_PATTERN_SPIRAL_DOWN",FEEDBACK_PATTERN_SPIRAL_DOWN},
256         {"FEEDBACK_PATTERN_MOVE_LIST_2",FEEDBACK_PATTERN_MOVE_LIST_2},
257         {"FEEDBACK_PATTERN_SPIRAL_UP",FEEDBACK_PATTERN_SPIRAL_UP},
258
259         {"FEEDBACK_PATTERN_SILENCE",FEEDBACK_PATTERN_SILENCE},
260         {"FEEDBACK_PATTERN_INACTIVE_TENSION",FEEDBACK_PATTERN_INACTIVE_TENSION},
261         {"FEEDBACK_PATTERN_INACTIVE_FINE", FEEDBACK_PATTERN_INACTIVE_FINE},
262
263         {"FEEDBACK_PATTERN_END_EFFECT", FEEDBACK_PATTERN_END_EFFECT},
264         {"FEEDBACK_PATTERN_SHEALTH_NOTICE", FEEDBACK_PATTERN_SHEALTH_NOTICE},
265         {"FEEDBACK_PATTERN_SHEALTH_GENTLE_ALERT", FEEDBACK_PATTERN_SHEALTH_GENTLE_ALERT},
266         {"FEEDBACK_PATTERN_END_EFFECT_FINE", FEEDBACK_PATTERN_END_EFFECT_FINE},
267         {"FEEDBACK_PATTERN_CLICK_VALUE", FEEDBACK_PATTERN_CLICK_VALUE},
268         {"FEEDBACK_PATTERN_CLICK_FINE_TRAIN_1", FEEDBACK_PATTERN_CLICK_FINE_TRAIN_1},
269         {"FEEDBACK_PATTERN_CLICK_FINE", FEEDBACK_PATTERN_CLICK_FINE},
270         {"FEEDBACK_PATTERN_CLICK_SLIDER", FEEDBACK_PATTERN_CLICK_SLIDER},
271         {"FEEDBACK_PATTERN_CLICK_MEDIUM", FEEDBACK_PATTERN_CLICK_MEDIUM},
272         {"FEEDBACK_PATTERN_CLICK_STRONG", FEEDBACK_PATTERN_CLICK_STRONG},
273         {"FEEDBACK_PATTERN_TURN_RIGHT", FEEDBACK_PATTERN_TURN_RIGHT},
274         {"FEEDBACK_PATTERN_TURN_LEFT", FEEDBACK_PATTERN_TURN_LEFT},
275         {"FEEDBACK_PATTERN_FUNCTION", FEEDBACK_PATTERN_FUNCTION},
276         {"FEEDBACK_PATTERN_VOICE_START", FEEDBACK_PATTERN_VOICE_START},
277         {"FEEDBACK_PATTERN_VOICE_STOP", FEEDBACK_PATTERN_VOICE_STOP},
278         {"FEEDBACK_PATTERN_COMMUNICATION", FEEDBACK_PATTERN_COMMUNICATION},
279         {"FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ", FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ},
280         {"FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ", FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ},
281
282         {"FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ", FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ},
283         {"FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ", FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ},
284         {"FEEDBACK_PATTERN_SCHEDULE_STRONG_BUZZ", FEEDBACK_PATTERN_SCHEDULE_STRONG_BUZZ},
285         {"FEEDBACK_PATTERN_WAKEUP_STRONG_BUZZ", FEEDBACK_PATTERN_WAKEUP_STRONG_BUZZ},
286         {"FEEDBACK_PATTERN_TIMER_STRONG_BUZZ", FEEDBACK_PATTERN_TIMER_STRONG_BUZZ},
287         {"FEEDBACK_PATTERN_RINGER_STRONG_BUZZ", FEEDBACK_PATTERN_RINGER_STRONG_BUZZ},
288         {"FEEDBACK_PATTERN_HEARTBEAT", FEEDBACK_PATTERN_HEARTBEAT},
289         {"FEEDBACK_PATTERN_HEARTBEAT_FAST", FEEDBACK_PATTERN_HEARTBEAT_FAST},
290         {"FEEDBACK_PATTERN_SETTING_ON", FEEDBACK_PATTERN_SETTING_ON},
291         {"FEEDBACK_PATTERN_SETTING_OFF", FEEDBACK_PATTERN_SETTING_OFF},
292         {"FEEDBACK_PATTERN_CONNECT", FEEDBACK_PATTERN_CONNECT},
293         {"FEEDBACK_PATTERN_DISCONNECT", FEEDBACK_PATTERN_DISCONNECT},
294         {"FEEDBACK_PATTERN_FIND_MY_GEAR", FEEDBACK_PATTERN_FIND_MY_GEAR},
295         {"FEEDBACK_PATTERN_NOTIFICATION_1", FEEDBACK_PATTERN_NOTIFICATION_1},
296         {"FEEDBACK_PATTERN_NOTIFICATION_1_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_1_STRONG_BUZZ},
297         {"FEEDBACK_PATTERN_NOTIFICATION_2", FEEDBACK_PATTERN_NOTIFICATION_2},
298         {"FEEDBACK_PATTERN_NOTIFICATION_2_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_2_STRONG_BUZZ},
299         {"FEEDBACK_PATTERN_NOTIFICATION_3", FEEDBACK_PATTERN_NOTIFICATION_3},
300         {"FEEDBACK_PATTERN_NOTIFICATION_3_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_3_STRONG_BUZZ},
301         {"FEEDBACK_PATTERN_NOTIFICATION_4", FEEDBACK_PATTERN_NOTIFICATION_4},
302         {"FEEDBACK_PATTERN_NOTIFICATION_4_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_4_STRONG_BUZZ},
303         {"FEEDBACK_PATTERN_NOTIFICATION_5", FEEDBACK_PATTERN_NOTIFICATION_5},
304         {"FEEDBACK_PATTERN_NOTIFICATION_5_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_5_STRONG_BUZZ},
305         {"FEEDBACK_PATTERN_NOTIFICATION_6", FEEDBACK_PATTERN_NOTIFICATION_6},
306         {"FEEDBACK_PATTERN_NOTIFICATION_6_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_6_STRONG_BUZZ},
307         {"FEEDBACK_PATTERN_NOTIFICATION_7", FEEDBACK_PATTERN_NOTIFICATION_7},
308         {"FEEDBACK_PATTERN_NOTIFICATION_7_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_7_STRONG_BUZZ},
309         {"FEEDBACK_PATTERN_NOTIFICATION_8", FEEDBACK_PATTERN_NOTIFICATION_8}, /* Added pattern for notification */
310         {"FEEDBACK_PATTERN_NOTIFICATION_8_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_8_STRONG_BUZZ}, /* Added pattern for notification */
311         {"FEEDBACK_PATTERN_NOTIFICATION_9", FEEDBACK_PATTERN_NOTIFICATION_9}, /* Added pattern for notification */
312         {"FEEDBACK_PATTERN_NOTIFICATION_9_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_9_STRONG_BUZZ}, /* Added pattern for notification */
313         {"FEEDBACK_PATTERN_NOTIFICATION_10", FEEDBACK_PATTERN_NOTIFICATION_10}, /* Added pattern for notification */
314         {"FEEDBACK_PATTERN_NOTIFICATION_10_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_10_STRONG_BUZZ}, /* Added pattern for notification */
315
316         {"FEEDBACK_PATTERN_RING_1", FEEDBACK_PATTERN_RING_1},
317         {"FEEDBACK_PATTERN_RING_1_STRONG_BUZZ", FEEDBACK_PATTERN_RING_1_STRONG_BUZZ},
318         {"FEEDBACK_PATTERN_RING_2", FEEDBACK_PATTERN_RING_2},
319         {"FEEDBACK_PATTERN_RING_2_STRONG_BUZZ", FEEDBACK_PATTERN_RING_2_STRONG_BUZZ},
320         {"FEEDBACK_PATTERN_RING_3", FEEDBACK_PATTERN_RING_3},
321         {"FEEDBACK_PATTERN_RING_3_STRONG_BUZZ", FEEDBACK_PATTERN_RING_3_STRONG_BUZZ},
322         {"FEEDBACK_PATTERN_RING_4", FEEDBACK_PATTERN_RING_4},
323         {"FEEDBACK_PATTERN_RING_4_STRONG_BUZZ", FEEDBACK_PATTERN_RING_4_STRONG_BUZZ},
324         {"FEEDBACK_PATTERN_RING_5", FEEDBACK_PATTERN_RING_5},
325         {"FEEDBACK_PATTERN_RING_5_STRONG_BUZZ", FEEDBACK_PATTERN_RING_5_STRONG_BUZZ},
326         {"FEEDBACK_PATTERN_RING_6", FEEDBACK_PATTERN_RING_6},
327         {"FEEDBACK_PATTERN_RING_6_STRONG_BUZZ", FEEDBACK_PATTERN_RING_6_STRONG_BUZZ},
328         {"FEEDBACK_PATTERN_RING_7", FEEDBACK_PATTERN_RING_7},
329         {"FEEDBACK_PATTERN_RING_7_STRONG_BUZZ", FEEDBACK_PATTERN_RING_7_STRONG_BUZZ},
330         {"FEEDBACK_PATTERN_RING_8", FEEDBACK_PATTERN_RING_8}, /* Added pattern for ring */
331         {"FEEDBACK_PATTERN_RING_8_STRONG_BUZZ", FEEDBACK_PATTERN_RING_8_STRONG_BUZZ}, /* Added pattern for ring */
332         {"FEEDBACK_PATTERN_RING_9", FEEDBACK_PATTERN_RING_9}, /* Added pattern for ring */
333         {"FEEDBACK_PATTERN_RING_9_STRONG_BUZZ", FEEDBACK_PATTERN_RING_9_STRONG_BUZZ}, /* Added pattern for ring */
334         {"FEEDBACK_PATTERN_RING_10", FEEDBACK_PATTERN_RING_10}, /* Added pattern for ring */
335         {"FEEDBACK_PATTERN_RING_10_STRONG_BUZZ", FEEDBACK_PATTERN_RING_10_STRONG_BUZZ}, /* Added pattern for ring */
336         {"FEEDBACK_PATTERN_ALARM_1", FEEDBACK_PATTERN_ALARM_1},
337         {"FEEDBACK_PATTERN_ALARM_1_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_1_STRONG_BUZZ},
338         {"FEEDBACK_PATTERN_ALARM_2", FEEDBACK_PATTERN_ALARM_2},
339         {"FEEDBACK_PATTERN_ALARM_2_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_2_STRONG_BUZZ},
340         {"FEEDBACK_PATTERN_ALARM_3", FEEDBACK_PATTERN_ALARM_3},
341         {"FEEDBACK_PATTERN_ALARM_3_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_3_STRONG_BUZZ},
342         {"FEEDBACK_PATTERN_ALARM_4", FEEDBACK_PATTERN_ALARM_4},
343         {"FEEDBACK_PATTERN_ALARM_4_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_4_STRONG_BUZZ},
344         {"FEEDBACK_PATTERN_ALARM_5", FEEDBACK_PATTERN_ALARM_5},
345         {"FEEDBACK_PATTERN_ALARM_5_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_5_STRONG_BUZZ},
346         {"FEEDBACK_PATTERN_ALARM_6", FEEDBACK_PATTERN_ALARM_6},
347         {"FEEDBACK_PATTERN_ALARM_6_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_6_STRONG_BUZZ},
348         {"FEEDBACK_PATTERN_ALARM_7", FEEDBACK_PATTERN_ALARM_7},
349         {"FEEDBACK_PATTERN_ALARM_7_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_7_STRONG_BUZZ},
350         {"FEEDBACK_PATTERN_ALARM_8", FEEDBACK_PATTERN_ALARM_8}, /* Added pattern for alarm */
351         {"FEEDBACK_PATTERN_ALARM_8_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_8_STRONG_BUZZ}, /* Added pattern for alarm */
352         {"FEEDBACK_PATTERN_ALARM_9", FEEDBACK_PATTERN_ALARM_9}, /* Added pattern for alarm */
353         {"FEEDBACK_PATTERN_ALARM_9_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_9_STRONG_BUZZ}, /* Added pattern for alarm */
354         {"FEEDBACK_PATTERN_ALARM_10", FEEDBACK_PATTERN_ALARM_10}, /* Added pattern for alarm */
355         {"FEEDBACK_PATTERN_ALARM_10_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_10_STRONG_BUZZ}, /* Added pattern for alarm */
356         {"FEEDBACK_PATTERN_PICKER", FEEDBACK_PATTERN_PICKER},
357         {"FEEDBACK_PATTERN_PICKER_FINISH", FEEDBACK_PATTERN_PICKER_FINISH},
358         {"FEEDBACK_PATTERN_ON_OFF_SWITCH", FEEDBACK_PATTERN_ON_OFF_SWITCH},
359         {"FEEDBACK_PATTERN_REORDER", FEEDBACK_PATTERN_REORDER},
360         {"FEEDBACK_PATTERN_CURSOR_MOVE", FEEDBACK_PATTERN_CURSOR_MOVE},
361         {"FEEDBACK_PATTERN_MMS", FEEDBACK_PATTERN_MMS},
362         {"FEEDBACK_PATTERN_HOURLY_ALERT", FEEDBACK_PATTERN_HOURLY_ALERT},
363         {"FEEDBACK_PATTERN_SAFETY_ALERT", FEEDBACK_PATTERN_SAFETY_ALERT},
364         {"FEEDBACK_PATTERN_ACCIDENT_DETECT", FEEDBACK_PATTERN_ACCIDENT_DETECT},
365         {"FEEDBACK_PATTERN_END_SOS_MESSAGE", FEEDBACK_PATTERN_END_SOS_MESSAGE},
366         {"FEEDBACK_PATTERN_EMERGENCY_BUZZER", FEEDBACK_PATTERN_EMERGENCY_BUZZER},
367         {"FEEDBACK_PATTERN_SAFETY_LOW_POWER", FEEDBACK_PATTERN_SAFETY_LOW_POWER},
368         {"FEEDBACK_PATTERN_CMAS", FEEDBACK_PATTERN_CMAS},
369         {"FEEDBACK_PATTERN_CMAS_CA", FEEDBACK_PATTERN_CMAS_CA},
370         {"FEEDBACK_PATTERN_NOTIFICATION", FEEDBACK_PATTERN_NOTIFICATION},
371         {"FEEDBACK_PATTERN_INFO", FEEDBACK_PATTERN_INFO},
372         {"FEEDBACK_PATTERN_WARNING", FEEDBACK_PATTERN_WARNING},
373         {"FEEDBACK_PATTERN_ERROR", FEEDBACK_PATTERN_ERROR},
374         {"FEEDBACK_PATTERN_EMERGENCY", FEEDBACK_PATTERN_EMERGENCY},
375         {"FEEDBACK_PATTERN_INTERNAL_WAKEUP", FEEDBACK_PATTERN_INTERNAL_WAKEUP},
376         {"FEEDBACK_PATTERN_INTERNAL_TIMER", FEEDBACK_PATTERN_INTERNAL_TIMER},
377         {"FEEDBACK_PATTERN_TEMPERATURE_WARNING", FEEDBACK_PATTERN_TEMPERATURE_WARNING},
378         {"FEEDBACK_PATTERN_COOLDOWN_WARNING_1", FEEDBACK_PATTERN_COOLDOWN_WARNING_1},
379         {"FEEDBACK_PATTERN_COOLDOWN_WARNING_2", FEEDBACK_PATTERN_COOLDOWN_WARNING_2},
380         {"FEEDBACK_PATTERN_SPEED_UP", FEEDBACK_PATTERN_SPEED_UP},
381         {"FEEDBACK_PATTERN_SLOW_DOWN", FEEDBACK_PATTERN_SLOW_DOWN},
382         {"FEEDBACK_PATTERN_KEEP_THIS_PACE", FEEDBACK_PATTERN_KEEP_THIS_PACE},
383         {"FEEDBACK_PATTERN_GOAL_ACHIEVED", FEEDBACK_PATTERN_GOAL_ACHIEVED},
384         {"FEEDBACK_PATTERN_EXERCISE_COUNT", FEEDBACK_PATTERN_EXERCISE_COUNT},
385         {"FEEDBACK_PATTERN_START_CUE", FEEDBACK_PATTERN_START_CUE},
386         {"FEEDBACK_PATTERN_HEALTH_PACE", FEEDBACK_PATTERN_HEALTH_PACE},
387         {"FEEDBACK_PATTERN_INACTIVE_TIME", FEEDBACK_PATTERN_INACTIVE_TIME},
388         {"FEEDBACK_PATTERN_MEASURING_SUCCESS", FEEDBACK_PATTERN_MEASURING_SUCCESS},
389         {"FEEDBACK_PATTERN_MEASURING_FAILURE", FEEDBACK_PATTERN_MEASURING_FAILURE},
390         {"FEEDBACK_PATTERN_BOS", FEEDBACK_PATTERN_BOS},
391         {"FEEDBACK_PATTERN_EOS", FEEDBACK_PATTERN_EOS},
392         {"FEEDBACK_PATTERN_UDS", FEEDBACK_PATTERN_UDS},
393         {"FEEDBACK_PATTERN_NFC_SUCCESS", FEEDBACK_PATTERN_NFC_SUCCESS},
394         {"FEEDBACK_PATTERN_MEDITATION", FEEDBACK_PATTERN_MEDITATION},
395         {"FEEDBACK_PATTERN_MEDITATION_INTERVAL", FEEDBACK_PATTERN_MEDITATION_INTERVAL},
396         {"FEEDBACK_PATTERN_FALL_DETECTION_1", FEEDBACK_PATTERN_FALL_DETECTION_1},
397         {"FEEDBACK_PATTERN_FALL_DETECTION_2", FEEDBACK_PATTERN_FALL_DETECTION_2},
398         {"FEEDBACK_PATTERN_SMART_GESTURE",FEEDBACK_PATTERN_SMART_GESTURE},
399 };
400
401 static const struct pattern_field all_str_pattern[] = {
402         {"FEEDBACK_PATTERN_TAP", FEEDBACK_PATTERN_TAP},
403         {"FEEDBACK_PATTERN_SIP", FEEDBACK_PATTERN_SIP},
404         {"FEEDBACK_PATTERN_SIP_BACKSPACE", FEEDBACK_PATTERN_SIP_BACKSPACE},
405         {"FEEDBACK_PATTERN_SIP_FUNCTION", FEEDBACK_PATTERN_SIP_FUNCTION},
406         {"FEEDBACK_PATTERN_SIP_FJKEY", FEEDBACK_PATTERN_SIP_FJKEY},
407         {"FEEDBACK_PATTERN_MAX_CHARACTER", FEEDBACK_PATTERN_MAX_CHARACTER},
408         {"FEEDBACK_PATTERN_KEY0", FEEDBACK_PATTERN_KEY0},
409         {"FEEDBACK_PATTERN_KEY1", FEEDBACK_PATTERN_KEY1},
410         {"FEEDBACK_PATTERN_KEY2", FEEDBACK_PATTERN_KEY2},
411         {"FEEDBACK_PATTERN_KEY3", FEEDBACK_PATTERN_KEY3},
412         {"FEEDBACK_PATTERN_KEY4", FEEDBACK_PATTERN_KEY4},
413         {"FEEDBACK_PATTERN_KEY5", FEEDBACK_PATTERN_KEY5},
414         {"FEEDBACK_PATTERN_KEY6", FEEDBACK_PATTERN_KEY6},
415         {"FEEDBACK_PATTERN_KEY7", FEEDBACK_PATTERN_KEY7},
416         {"FEEDBACK_PATTERN_KEY8", FEEDBACK_PATTERN_KEY8},
417         {"FEEDBACK_PATTERN_KEY9", FEEDBACK_PATTERN_KEY9},
418         {"FEEDBACK_PATTERN_KEY_STAR", FEEDBACK_PATTERN_KEY_STAR},
419         {"FEEDBACK_PATTERN_KEY_SHARP", FEEDBACK_PATTERN_KEY_SHARP},
420         {"FEEDBACK_PATTERN_KEY_BACK", FEEDBACK_PATTERN_KEY_BACK},
421         {"FEEDBACK_PATTERN_HOLD", FEEDBACK_PATTERN_HOLD},
422         {"FEEDBACK_PATTERN_MULTI_TAP", FEEDBACK_PATTERN_MULTI_TAP},
423         {"FEEDBACK_PATTERN_HW_TAP", FEEDBACK_PATTERN_HW_TAP},
424         {"FEEDBACK_PATTERN_HW_HOLD", FEEDBACK_PATTERN_HW_HOLD},
425         {"FEEDBACK_PATTERN_MESSAGE", FEEDBACK_PATTERN_MESSAGE},
426         {"FEEDBACK_PATTERN_MESSAGE_ON_CALL", FEEDBACK_PATTERN_MESSAGE_ON_CALL},
427         {"FEEDBACK_PATTERN_EMAIL", FEEDBACK_PATTERN_EMAIL},
428         {"FEEDBACK_PATTERN_EMAIL_ON_CALL", FEEDBACK_PATTERN_EMAIL_ON_CALL},
429         {"FEEDBACK_PATTERN_WAKEUP", FEEDBACK_PATTERN_WAKEUP},
430         {"FEEDBACK_PATTERN_WAKEUP_ON_CALL", FEEDBACK_PATTERN_WAKEUP_ON_CALL},
431         {"FEEDBACK_PATTERN_SCHEDULE", FEEDBACK_PATTERN_SCHEDULE},
432         {"FEEDBACK_PATTERN_SCHEDULE_ON_CALL", FEEDBACK_PATTERN_SCHEDULE_ON_CALL},
433         {"FEEDBACK_PATTERN_TIMER", FEEDBACK_PATTERN_TIMER},
434         {"FEEDBACK_PATTERN_TIMER_ON_CALL", FEEDBACK_PATTERN_TIMER_ON_CALL},
435         {"FEEDBACK_PATTERN_GENERAL", FEEDBACK_PATTERN_GENERAL},
436         {"FEEDBACK_PATTERN_GENERAL_ON_CALL", FEEDBACK_PATTERN_GENERAL_ON_CALL},
437         {"FEEDBACK_PATTERN_SMART_ALERT", FEEDBACK_PATTERN_SMART_ALERT},
438         {"FEEDBACK_PATTERN_POWERON", FEEDBACK_PATTERN_POWERON},
439         {"FEEDBACK_PATTERN_POWEROFF", FEEDBACK_PATTERN_POWEROFF},
440         {"FEEDBACK_PATTERN_CHARGERCONN", FEEDBACK_PATTERN_CHARGERCONN},
441         {"FEEDBACK_PATTERN_CHARGERCONN_ON_CALL", FEEDBACK_PATTERN_CHARGERCONN_ON_CALL},
442         {"FEEDBACK_PATTERN_CHARGING_ERROR", FEEDBACK_PATTERN_CHARGING_ERROR},
443         {"FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL", FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL},
444         {"FEEDBACK_PATTERN_FULLCHARGED", FEEDBACK_PATTERN_FULLCHARGED},
445         {"FEEDBACK_PATTERN_FULLCHARGED_ON_CALL", FEEDBACK_PATTERN_FULLCHARGED_ON_CALL},
446         {"FEEDBACK_PATTERN_LOWBATT", FEEDBACK_PATTERN_LOWBATT},
447         {"FEEDBACK_PATTERN_LOWBATT_ON_CALL", FEEDBACK_PATTERN_LOWBATT_ON_CALL},
448         {"FEEDBACK_PATTERN_LOCK", FEEDBACK_PATTERN_LOCK},
449         {"FEEDBACK_PATTERN_UNLOCK", FEEDBACK_PATTERN_UNLOCK},
450         {"FEEDBACK_PATTERN_GEOMETRIC_LOCK", FEEDBACK_PATTERN_GEOMETRIC_LOCK},
451         {"FEEDBACK_PATTERN_CALLCONNECT", FEEDBACK_PATTERN_CALLCONNECT},
452         {"FEEDBACK_PATTERN_DISCALLCONNECT", FEEDBACK_PATTERN_DISCALLCONNECT},
453         {"FEEDBACK_PATTERN_OUTGOING_CALL", FEEDBACK_PATTERN_OUTGOING_CALL},
454         {"FEEDBACK_PATTERN_MINUTEMINDER", FEEDBACK_PATTERN_MINUTEMINDER},
455         {"FEEDBACK_PATTERN_VIBRATION_ON", FEEDBACK_PATTERN_VIBRATION_ON},
456         {"FEEDBACK_PATTERN_SILENT_OFF", FEEDBACK_PATTERN_SILENT_OFF},
457         {"FEEDBACK_PATTERN_BT_CONNECTED", FEEDBACK_PATTERN_BT_CONNECTED},
458         {"FEEDBACK_PATTERN_BT_DISCONNECTED", FEEDBACK_PATTERN_BT_DISCONNECTED},
459         {"FEEDBACK_PATTERN_BT_PAIRING", FEEDBACK_PATTERN_BT_PAIRING},
460         {"FEEDBACK_PATTERN_BT_WAITING", FEEDBACK_PATTERN_BT_WAITING},
461         {"FEEDBACK_PATTERN_SCREEN_CAPTURE", FEEDBACK_PATTERN_SCREEN_CAPTURE},
462         {"FEEDBACK_PATTERN_LIST_REORDER", FEEDBACK_PATTERN_LIST_REORDER},
463         {"FEEDBACK_PATTERN_LIST_SLIDER", FEEDBACK_PATTERN_LIST_SLIDER},
464         {"FEEDBACK_PATTERN_VOLUME_KEY", FEEDBACK_PATTERN_VOLUME_KEY},
465         {"FEEDBACK_PATTERN_UV_PROCESSING", FEEDBACK_PATTERN_UV_PROCESSING},
466         {"FEEDBACK_PATTERN_SHEALTH_START", FEEDBACK_PATTERN_SHEALTH_START},
467         {"FEEDBACK_PATTERN_SHEALTH_PAUSE", FEEDBACK_PATTERN_SHEALTH_PAUSE},
468         {"FEEDBACK_PATTERN_SHEALTH_STOP", FEEDBACK_PATTERN_SHEALTH_STOP},
469         {"FEEDBACK_PATTERN_3RD_APPLICATION", FEEDBACK_PATTERN_3RD_APPLICATION},
470
471         {"FEEDBACK_PATTERN_TICK", FEEDBACK_PATTERN_TICK},
472         {"FEEDBACK_PATTERN_TRANSITION_CIRCULAR", FEEDBACK_PATTERN_TRANSITION_CIRCULAR},
473         {"FEEDBACK_PATTERN_TRANSITION_POP", FEEDBACK_PATTERN_TRANSITION_POP},
474         {"FEEDBACK_PATTERN_PROCESS", FEEDBACK_PATTERN_PROCESS},
475         {"FEEDBACK_PATTERN_MOVE_LIST", FEEDBACK_PATTERN_MOVE_LIST},
476         {"FEEDBACK_PATTERN_DISMISS", FEEDBACK_PATTERN_DISMISS},
477         {"FEEDBACK_PATTERN_CLOCK_SECOND_HAND", FEEDBACK_PATTERN_CLOCK_SECOND_HAND},
478         {"FEEDBACK_PATTERN_SYSTEM_SHORT", FEEDBACK_PATTERN_SYSTEM_SHORT},
479         {"FEEDBACK_PATTERN_SYSTEM_ERROR", FEEDBACK_PATTERN_SYSTEM_ERROR},
480         {"FEEDBACK_PATTERN_SPIRAL_DOWN",FEEDBACK_PATTERN_SPIRAL_DOWN},
481         {"FEEDBACK_PATTERN_MOVE_LIST_2",FEEDBACK_PATTERN_MOVE_LIST_2},
482         {"FEEDBACK_PATTERN_SPIRAL_UP",FEEDBACK_PATTERN_SPIRAL_UP},
483         {"FEEDBACK_PATTERN_SYSTEM_LONG", FEEDBACK_PATTERN_SYSTEM_LONG},
484         {"FEEDBACK_PATTERN_SYSTEM_MID", FEEDBACK_PATTERN_SYSTEM_MID},
485         {"FEEDBACK_PATTERN_SILENCE",FEEDBACK_PATTERN_SILENCE},
486         {"FEEDBACK_PATTERN_INACTIVE_TENSION",FEEDBACK_PATTERN_INACTIVE_TENSION},
487         {"FEEDBACK_PATTERN_INACTIVE_FINE", FEEDBACK_PATTERN_INACTIVE_FINE},
488         {"FEEDBACK_PATTERN_END_EFFECT", FEEDBACK_PATTERN_END_EFFECT},
489         {"FEEDBACK_PATTERN_SHEALTH_NOTICE", FEEDBACK_PATTERN_SHEALTH_NOTICE},
490         {"FEEDBACK_PATTERN_SHEALTH_GENTLE_ALERT", FEEDBACK_PATTERN_SHEALTH_GENTLE_ALERT},
491         {"FEEDBACK_PATTERN_END_EFFECT_FINE", FEEDBACK_PATTERN_END_EFFECT_FINE},
492         {"FEEDBACK_PATTERN_CLICK_VALUE", FEEDBACK_PATTERN_CLICK_VALUE},
493         {"FEEDBACK_PATTERN_CLICK_FINE_TRAIN_1", FEEDBACK_PATTERN_CLICK_FINE_TRAIN_1},
494         {"FEEDBACK_PATTERN_CLICK_FINE", FEEDBACK_PATTERN_CLICK_FINE},
495         {"FEEDBACK_PATTERN_CLICK_SLIDER", FEEDBACK_PATTERN_CLICK_SLIDER},
496         {"FEEDBACK_PATTERN_CLICK_MEDIUM", FEEDBACK_PATTERN_CLICK_MEDIUM},
497         {"FEEDBACK_PATTERN_CLICK_STRONG", FEEDBACK_PATTERN_CLICK_STRONG},
498         {"FEEDBACK_PATTERN_TURN_RIGHT", FEEDBACK_PATTERN_TURN_RIGHT},
499         {"FEEDBACK_PATTERN_TURN_LEFT", FEEDBACK_PATTERN_TURN_LEFT},
500         {"FEEDBACK_PATTERN_FUNCTION", FEEDBACK_PATTERN_FUNCTION},
501         {"FEEDBACK_PATTERN_VOICE_START", FEEDBACK_PATTERN_VOICE_START},
502         {"FEEDBACK_PATTERN_VOICE_STOP", FEEDBACK_PATTERN_VOICE_STOP},
503         {"FEEDBACK_PATTERN_COMMUNICATION", FEEDBACK_PATTERN_COMMUNICATION},
504         {"FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ", FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ},
505         {"FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ", FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ},
506         {"FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ", FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ},
507         {"FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ", FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ},
508         {"FEEDBACK_PATTERN_SCHEDULE_STRONG_BUZZ", FEEDBACK_PATTERN_SCHEDULE_STRONG_BUZZ},
509         {"FEEDBACK_PATTERN_WAKEUP_STRONG_BUZZ", FEEDBACK_PATTERN_WAKEUP_STRONG_BUZZ},
510         {"FEEDBACK_PATTERN_TIMER_STRONG_BUZZ", FEEDBACK_PATTERN_TIMER_STRONG_BUZZ},
511         {"FEEDBACK_PATTERN_RINGER_STRONG_BUZZ", FEEDBACK_PATTERN_RINGER_STRONG_BUZZ},
512         {"FEEDBACK_PATTERN_HEARTBEAT", FEEDBACK_PATTERN_HEARTBEAT},
513         {"FEEDBACK_PATTERN_HEARTBEAT_FAST", FEEDBACK_PATTERN_HEARTBEAT_FAST},
514         {"FEEDBACK_PATTERN_SETTING_ON", FEEDBACK_PATTERN_SETTING_ON},
515         {"FEEDBACK_PATTERN_SETTING_OFF", FEEDBACK_PATTERN_SETTING_OFF},
516         {"FEEDBACK_PATTERN_CONNECT", FEEDBACK_PATTERN_CONNECT},
517         {"FEEDBACK_PATTERN_DISCONNECT", FEEDBACK_PATTERN_DISCONNECT},
518         {"FEEDBACK_PATTERN_FIND_MY_GEAR", FEEDBACK_PATTERN_FIND_MY_GEAR},
519         {"FEEDBACK_PATTERN_NOTIFICATION_1", FEEDBACK_PATTERN_NOTIFICATION_1},
520         {"FEEDBACK_PATTERN_NOTIFICATION_1_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_1_STRONG_BUZZ},
521         {"FEEDBACK_PATTERN_NOTIFICATION_2", FEEDBACK_PATTERN_NOTIFICATION_2},
522         {"FEEDBACK_PATTERN_NOTIFICATION_2_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_2_STRONG_BUZZ},
523         {"FEEDBACK_PATTERN_NOTIFICATION_3", FEEDBACK_PATTERN_NOTIFICATION_3},
524         {"FEEDBACK_PATTERN_NOTIFICATION_3_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_3_STRONG_BUZZ},
525         {"FEEDBACK_PATTERN_NOTIFICATION_4", FEEDBACK_PATTERN_NOTIFICATION_4},
526         {"FEEDBACK_PATTERN_NOTIFICATION_4_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_4_STRONG_BUZZ},
527         {"FEEDBACK_PATTERN_NOTIFICATION_5", FEEDBACK_PATTERN_NOTIFICATION_5},
528         {"FEEDBACK_PATTERN_NOTIFICATION_5_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_5_STRONG_BUZZ},
529         {"FEEDBACK_PATTERN_NOTIFICATION_6", FEEDBACK_PATTERN_NOTIFICATION_6},
530         {"FEEDBACK_PATTERN_NOTIFICATION_6_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_6_STRONG_BUZZ},
531         {"FEEDBACK_PATTERN_NOTIFICATION_7", FEEDBACK_PATTERN_NOTIFICATION_7},
532         {"FEEDBACK_PATTERN_NOTIFICATION_7_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_7_STRONG_BUZZ},
533         {"FEEDBACK_PATTERN_NOTIFICATION_8", FEEDBACK_PATTERN_NOTIFICATION_8}, /* Added pattern for notification */
534         {"FEEDBACK_PATTERN_NOTIFICATION_8_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_8_STRONG_BUZZ}, /* Added pattern for notification */
535         {"FEEDBACK_PATTERN_NOTIFICATION_9", FEEDBACK_PATTERN_NOTIFICATION_9}, /* Added pattern for notification */
536         {"FEEDBACK_PATTERN_NOTIFICATION_9_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_9_STRONG_BUZZ}, /* Added pattern for notification */
537         {"FEEDBACK_PATTERN_NOTIFICATION_10", FEEDBACK_PATTERN_NOTIFICATION_10}, /* Added pattern for notification */
538         {"FEEDBACK_PATTERN_NOTIFICATION_10_STRONG_BUZZ", FEEDBACK_PATTERN_NOTIFICATION_10_STRONG_BUZZ}, /* Added pattern for notification */
539         {"FEEDBACK_PATTERN_RING_1", FEEDBACK_PATTERN_RING_1},
540         {"FEEDBACK_PATTERN_RING_1_STRONG_BUZZ", FEEDBACK_PATTERN_RING_1_STRONG_BUZZ},
541         {"FEEDBACK_PATTERN_RING_2", FEEDBACK_PATTERN_RING_2},
542         {"FEEDBACK_PATTERN_RING_2_STRONG_BUZZ", FEEDBACK_PATTERN_RING_2_STRONG_BUZZ},
543         {"FEEDBACK_PATTERN_RING_3", FEEDBACK_PATTERN_RING_3},
544         {"FEEDBACK_PATTERN_RING_3_STRONG_BUZZ", FEEDBACK_PATTERN_RING_3_STRONG_BUZZ},
545         {"FEEDBACK_PATTERN_RING_4", FEEDBACK_PATTERN_RING_4},
546         {"FEEDBACK_PATTERN_RING_4_STRONG_BUZZ", FEEDBACK_PATTERN_RING_4_STRONG_BUZZ},
547         {"FEEDBACK_PATTERN_RING_5", FEEDBACK_PATTERN_RING_5},
548         {"FEEDBACK_PATTERN_RING_5_STRONG_BUZZ", FEEDBACK_PATTERN_RING_5_STRONG_BUZZ},
549         {"FEEDBACK_PATTERN_RING_6", FEEDBACK_PATTERN_RING_6},
550         {"FEEDBACK_PATTERN_RING_6_STRONG_BUZZ", FEEDBACK_PATTERN_RING_6_STRONG_BUZZ},
551         {"FEEDBACK_PATTERN_RING_7", FEEDBACK_PATTERN_RING_7},
552         {"FEEDBACK_PATTERN_RING_7_STRONG_BUZZ", FEEDBACK_PATTERN_RING_7_STRONG_BUZZ},
553         {"FEEDBACK_PATTERN_RING_8", FEEDBACK_PATTERN_RING_8}, /* Added pattern for ring */
554         {"FEEDBACK_PATTERN_RING_8_STRONG_BUZZ", FEEDBACK_PATTERN_RING_8_STRONG_BUZZ}, /* Added pattern for ring */
555         {"FEEDBACK_PATTERN_RING_9", FEEDBACK_PATTERN_RING_9}, /* Added pattern for ring */
556         {"FEEDBACK_PATTERN_RING_9_STRONG_BUZZ", FEEDBACK_PATTERN_RING_9_STRONG_BUZZ}, /* Added pattern for ring */
557         {"FEEDBACK_PATTERN_RING_10", FEEDBACK_PATTERN_RING_10}, /* Added pattern for ring */
558         {"FEEDBACK_PATTERN_RING_10_STRONG_BUZZ", FEEDBACK_PATTERN_RING_10_STRONG_BUZZ}, /* Added pattern for ring */
559         {"FEEDBACK_PATTERN_ALARM_1", FEEDBACK_PATTERN_ALARM_1},
560         {"FEEDBACK_PATTERN_ALARM_1_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_1_STRONG_BUZZ},
561         {"FEEDBACK_PATTERN_ALARM_2", FEEDBACK_PATTERN_ALARM_2},
562         {"FEEDBACK_PATTERN_ALARM_2_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_2_STRONG_BUZZ},
563         {"FEEDBACK_PATTERN_ALARM_3", FEEDBACK_PATTERN_ALARM_3},
564         {"FEEDBACK_PATTERN_ALARM_3_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_3_STRONG_BUZZ},
565         {"FEEDBACK_PATTERN_ALARM_4", FEEDBACK_PATTERN_ALARM_4},
566         {"FEEDBACK_PATTERN_ALARM_4_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_4_STRONG_BUZZ},
567         {"FEEDBACK_PATTERN_ALARM_5", FEEDBACK_PATTERN_ALARM_5},
568         {"FEEDBACK_PATTERN_ALARM_5_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_5_STRONG_BUZZ},
569         {"FEEDBACK_PATTERN_ALARM_6", FEEDBACK_PATTERN_ALARM_6},
570         {"FEEDBACK_PATTERN_ALARM_6_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_6_STRONG_BUZZ},
571         {"FEEDBACK_PATTERN_ALARM_7", FEEDBACK_PATTERN_ALARM_7},
572         {"FEEDBACK_PATTERN_ALARM_7_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_7_STRONG_BUZZ},
573         {"FEEDBACK_PATTERN_ALARM_8", FEEDBACK_PATTERN_ALARM_8}, /* Added pattern for alarm */
574         {"FEEDBACK_PATTERN_ALARM_8_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_8_STRONG_BUZZ}, /* Added pattern for alarm */
575         {"FEEDBACK_PATTERN_ALARM_9", FEEDBACK_PATTERN_ALARM_9}, /* Added pattern for alarm */
576         {"FEEDBACK_PATTERN_ALARM_9_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_9_STRONG_BUZZ}, /* Added pattern for alarm */
577         {"FEEDBACK_PATTERN_ALARM_10", FEEDBACK_PATTERN_ALARM_10}, /* Added pattern for alarm */
578         {"FEEDBACK_PATTERN_ALARM_10_STRONG_BUZZ", FEEDBACK_PATTERN_ALARM_10_STRONG_BUZZ}, /* Added pattern for alarm */
579         {"FEEDBACK_PATTERN_PICKER", FEEDBACK_PATTERN_PICKER},
580         {"FEEDBACK_PATTERN_PICKER_FINISH", FEEDBACK_PATTERN_PICKER_FINISH},
581         {"FEEDBACK_PATTERN_ON_OFF_SWITCH", FEEDBACK_PATTERN_ON_OFF_SWITCH},
582         {"FEEDBACK_PATTERN_REORDER", FEEDBACK_PATTERN_REORDER},
583         {"FEEDBACK_PATTERN_CURSOR_MOVE", FEEDBACK_PATTERN_CURSOR_MOVE},
584
585         {"FEEDBACK_PATTERN_MMS", FEEDBACK_PATTERN_MMS},
586         {"FEEDBACK_PATTERN_HOURLY_ALERT", FEEDBACK_PATTERN_HOURLY_ALERT},
587         {"FEEDBACK_PATTERN_SAFETY_ALERT", FEEDBACK_PATTERN_SAFETY_ALERT},
588         {"FEEDBACK_PATTERN_ACCIDENT_DETECT", FEEDBACK_PATTERN_ACCIDENT_DETECT},
589         {"FEEDBACK_PATTERN_SEND_SOS_MESSAGE", FEEDBACK_PATTERN_SEND_SOS_MESSAGE},
590         {"FEEDBACK_PATTERN_END_SOS_MESSAGE", FEEDBACK_PATTERN_END_SOS_MESSAGE},
591         {"FEEDBACK_PATTERN_EMERGENCY_BUZZER", FEEDBACK_PATTERN_EMERGENCY_BUZZER},
592         {"FEEDBACK_PATTERN_SAFETY_LOW_POWER", FEEDBACK_PATTERN_SAFETY_LOW_POWER},
593         {"FEEDBACK_PATTERN_CMAS", FEEDBACK_PATTERN_CMAS},
594         {"FEEDBACK_PATTERN_RINGER", FEEDBACK_PATTERN_RINGER},
595         {"FEEDBACK_PATTERN_NOTIFICATION", FEEDBACK_PATTERN_NOTIFICATION},
596         {"FEEDBACK_PATTERN_INFO", FEEDBACK_PATTERN_INFO},
597         {"FEEDBACK_PATTERN_WARNING", FEEDBACK_PATTERN_WARNING},
598         {"FEEDBACK_PATTERN_ERROR", FEEDBACK_PATTERN_ERROR},
599         {"FEEDBACK_PATTERN_EMERGENCY", FEEDBACK_PATTERN_EMERGENCY},
600         {"FEEDBACK_PATTERN_INTERNAL_WAKEUP", FEEDBACK_PATTERN_INTERNAL_WAKEUP},
601         {"FEEDBACK_PATTERN_INTERNAL_TIMER", FEEDBACK_PATTERN_INTERNAL_TIMER},
602         {"FEEDBACK_PATTERN_TEMPERATURE_WARNING", FEEDBACK_PATTERN_TEMPERATURE_WARNING},
603         {"FEEDBACK_PATTERN_COOLDOWN_WARNING_1", FEEDBACK_PATTERN_COOLDOWN_WARNING_1},
604         {"FEEDBACK_PATTERN_COOLDOWN_WARNING_2", FEEDBACK_PATTERN_COOLDOWN_WARNING_2},
605         {"FEEDBACK_PATTERN_SPEED_UP", FEEDBACK_PATTERN_SPEED_UP},
606         {"FEEDBACK_PATTERN_SLOW_DOWN", FEEDBACK_PATTERN_SLOW_DOWN},
607         {"FEEDBACK_PATTERN_KEEP_THIS_PACE", FEEDBACK_PATTERN_KEEP_THIS_PACE},
608         {"FEEDBACK_PATTERN_GOAL_ACHIEVED", FEEDBACK_PATTERN_GOAL_ACHIEVED},
609         {"FEEDBACK_PATTERN_EXERCISE_COUNT", FEEDBACK_PATTERN_EXERCISE_COUNT},
610         {"FEEDBACK_PATTERN_START_CUE", FEEDBACK_PATTERN_START_CUE},
611         {"FEEDBACK_PATTERN_HEALTH_PACE", FEEDBACK_PATTERN_HEALTH_PACE},
612         {"FEEDBACK_PATTERN_INACTIVE_TIME", FEEDBACK_PATTERN_INACTIVE_TIME},
613         {"FEEDBACK_PATTERN_CMAS_CA", FEEDBACK_PATTERN_CMAS_CA},
614         {"FEEDBACK_PATTERN_NFC_SUCCESS", FEEDBACK_PATTERN_NFC_SUCCESS},
615         {"FEEDBACK_PATTERN_MEASURING_SUCCESS", FEEDBACK_PATTERN_MEASURING_SUCCESS},
616         {"FEEDBACK_PATTERN_MEASURING_FAILURE", FEEDBACK_PATTERN_MEASURING_FAILURE},
617         {"FEEDBACK_PATTERN_MEDITATION", FEEDBACK_PATTERN_MEDITATION},
618         {"FEEDBACK_PATTERN_MEDITATION_INTERVAL", FEEDBACK_PATTERN_MEDITATION_INTERVAL},
619         {"FEEDBACK_PATTERN_FALL_DETECTION_1", FEEDBACK_PATTERN_FALL_DETECTION_1},
620         {"FEEDBACK_PATTERN_FALL_DETECTION_2", FEEDBACK_PATTERN_FALL_DETECTION_2},
621         {"FEEDBACK_PATTERN_SMART_GESTURE",FEEDBACK_PATTERN_SMART_GESTURE},
622         {"FEEDBACK_PATTERN_BREATHING_EXHALE", FEEDBACK_PATTERN_BREATHING_EXHALE},
623         {"FEEDBACK_PATTERN_BOS", FEEDBACK_PATTERN_BOS},
624         {"FEEDBACK_PATTERN_EOS", FEEDBACK_PATTERN_EOS},
625         {"FEEDBACK_PATTERN_UDS", FEEDBACK_PATTERN_UDS},
626
627         {"FEEDBACK_PATTERN_BASIC", FEEDBACK_PATTERN_BASIC},
628         {"FEEDBACK_PATTERN_TOGGLE_ON", FEEDBACK_PATTERN_TOGGLE_ON},
629         {"FEEDBACK_PATTERN_TOGGLE_OFF", FEEDBACK_PATTERN_TOGGLE_OFF},
630         {"FEEDBACK_PATTERN_LONG_PRESS_ON", FEEDBACK_PATTERN_LONG_PRESS_ON},
631         {"FEEDBACK_PATTERN_LONG_PRESS_OFF", FEEDBACK_PATTERN_LONG_PRESS_OFF},
632         {"FEEDBACK_PATTERN_INVALID", FEEDBACK_PATTERN_INVALID},
633         {"FEEDBACK_PATTERN_CONFIRM", FEEDBACK_PATTERN_CONFIRM},
634         {"FEEDBACK_PATTERN_POPUP", FEEDBACK_PATTERN_POPUP},
635         {"FEEDBACK_PATTERN_PREHEAT_ENDING", FEEDBACK_PATTERN_PREHEAT_ENDING},
636         {"FEEDBACK_PATTERN_TASK_ENDING", FEEDBACK_PATTERN_TASK_ENDING},
637         {"FEEDBACK_PATTERN_SCROLL", FEEDBACK_PATTERN_SCROLL},
638         {"FEEDBACK_PATTERN_PAGE_TURN", FEEDBACK_PATTERN_PAGE_TURN},
639         {"FEEDBACK_PATTERN_OP_START", FEEDBACK_PATTERN_OP_START},
640         {"FEEDBACK_PATTERN_OP_PAUSE", FEEDBACK_PATTERN_OP_PAUSE},
641         {"FEEDBACK_PATTERN_OP_STOP", FEEDBACK_PATTERN_OP_STOP},
642         {"FEEDBACK_PATTERN_DEFAULT", FEEDBACK_PATTERN_DEFAULT},
643         {"FEEDBACK_PATTERN_DEFAULT_LEVEL1", FEEDBACK_PATTERN_DEFAULT_LEVEL1},
644         {"FEEDBACK_PATTERN_LEVEL1", FEEDBACK_PATTERN_LEVEL1},
645         {"FEEDBACK_PATTERN_LEVEL2", FEEDBACK_PATTERN_LEVEL2},
646         {"FEEDBACK_PATTERN_LEVEL3", FEEDBACK_PATTERN_LEVEL3},
647         {"FEEDBACK_PATTERN_LEVEL4", FEEDBACK_PATTERN_LEVEL4},
648         {"FEEDBACK_PATTERN_LEVEL5", FEEDBACK_PATTERN_LEVEL5},
649         {"FEEDBACK_PATTERN_LEVEL6", FEEDBACK_PATTERN_LEVEL6},
650         {"FEEDBACK_PATTERN_LEVEL7", FEEDBACK_PATTERN_LEVEL7},
651         {"FEEDBACK_PATTERN_LEVEL8", FEEDBACK_PATTERN_LEVEL8},
652         {"FEEDBACK_PATTERN_LEVEL9", FEEDBACK_PATTERN_LEVEL9},
653         {"FEEDBACK_PATTERN_LEVEL10", FEEDBACK_PATTERN_LEVEL10},
654         {"FEEDBACK_PATTERN_TIMER_ENDING", FEEDBACK_PATTERN_TIMER_ENDING},
655         {"FEEDBACK_PATTERN_BURNER_DETECTED", FEEDBACK_PATTERN_BURNER_DETECTED},
656         {"FEEDBACK_PATTERN_BURNER_MOVED", FEEDBACK_PATTERN_BURNER_MOVED},
657         {"FEEDBACK_PATTERN_CONNECTED", FEEDBACK_PATTERN_CONNECTED},
658         {"FEEDBACK_PATTERN_DISCONNECTED", FEEDBACK_PATTERN_DISCONNECTED},
659         {"FEEDBACK_PATTERN_WELCOME", FEEDBACK_PATTERN_WELCOME},
660         {"FEEDBACK_PATTERN_AUTO_DOOR_OPEN", FEEDBACK_PATTERN_AUTO_DOOR_OPEN},
661 };
662
663 typedef enum {
664         FEEDBACK_STANDARD_START = 2000,
665         A,
666         A_W = A,
667         A_W2,
668         B,
669         B_W = B,
670         C,
671         D,
672         E_W1 = D,
673         E,
674         E_W2 = E,
675         F,
676         F_W = F,
677         G,
678         G_W = G,
679         H,
680         H_LIGHT,
681         I,
682         J_W = I,
683         J,
684         J_WB = J,
685         K,
686         K_W = K,
687         L,
688         K_WB = L,
689         CMAS,
690         M,
691         J_W_2 = M,
692         J_WB_2,
693         J_W_3,
694         J_WB_3,
695         J_W_4,
696         J_WB_4,
697         J_W_5,
698         J_WB_5,
699         J_W_6,
700         J_WB_6,
701         J_W_7,
702         J_WB_7,
703         J_W_8,
704         J_WB_8,
705         J_W_9,
706         J_WB_9,
707         J_W_10,
708         J_WB_10,
709         K_W_2,
710         K_WB_2,
711         K_W_3,
712         K_WB_3,
713         K_W_4,
714         K_WB_4,
715         K_W_5,
716         K_WB_5,
717         K_W_6,
718         K_WB_6,
719         K_W_7,
720         K_WB_7,
721         K_W_8,
722         K_WB_8,
723         K_W_9,
724         K_WB_9,
725         K_W_10,
726         K_WB_10,
727         J_WW,
728         K_WW,
729         G_WB,
730         J_WH,
731         J_WHB,
732         K_W_N,
733         M1,
734         M2,
735         N,
736         O,
737         P,
738         Q,
739         R,
740         S,
741         S_B,
742         S2,
743         T,
744         T_LIGHT,
745         CMAS_CA,
746         FEEDBACK_STANDARD_END,
747 } feedback_standard_pattern_e;
748
749 static const struct pattern_field wearable_str_standard[] = {
750         {"A_W", A_W},
751         {"A_W2", A_W2},
752         {"B_W", B_W},
753         {"C", C},
754         {"E_W1", E_W1},
755         {"E_W2", E_W2},
756         {"F_W", F_W},
757         {"G_W", G_W},
758         {"H", H},
759         {"H_LIGHT", H_LIGHT},
760         {"J_W", J_W},
761         {"J_WB", J_WB},
762         {"K_W", K_W},
763         {"K_WB", K_WB},
764         {"CMAS", CMAS},
765         {"CMAS_CA", CMAS_CA},
766         {"J_W_2", J_W_2},
767         {"J_WB_2", J_WB_2},
768         {"J_W_3", J_W_3},
769         {"J_WB_3", J_WB_3},
770         {"J_W_4", J_W_4},
771         {"J_WB_4", J_WB_4},
772         {"J_W_5", J_W_5},
773         {"J_WB_5", J_WB_5},
774         {"J_W_6", J_W_6},
775         {"J_WB_6", J_WB_6},
776         {"J_W_7", J_W_7},
777         {"J_WB_7", J_WB_7},
778         {"J_W_8", J_W_8},
779         {"J_WB_8", J_WB_8},
780         {"J_W_9", J_W_9},
781         {"J_WB_9", J_WB_9},
782         {"J_W_10", J_W_10},
783         {"J_WB_10", J_WB_10},
784         {"K_W_2", K_W_2},
785         {"K_WB_2", K_WB_2},
786         {"K_W_3", K_W_3},
787         {"K_WB_3", K_WB_3},
788         {"K_W_4", K_W_4},
789         {"K_WB_4", K_WB_4},
790         {"K_W_5", K_W_5},
791         {"K_WB_5", K_WB_5},
792         {"K_W_6", K_W_6},
793         {"K_WB_6", K_WB_6},
794         {"K_W_7", K_W_7},
795         {"K_WB_7", K_WB_7},
796         {"K_W_8", K_W_8},
797         {"K_WB_8", K_WB_8},
798         {"K_W_9", K_W_9},
799         {"K_WB_9", K_WB_9},
800         {"K_W_10", K_W_10},
801         {"K_WB_10", K_WB_10},
802         {"J_WW", J_WW},
803         {"K_WW", K_WW},
804         {"G_WB", G_WB},
805         {"J_WH", J_WH},
806         {"J_WHB", J_WHB},
807         {"K_W_N", K_W_N},
808         {"T", T},
809         {"T_LIGHT", T_LIGHT},
810         {"M1", M1},
811         {"M2", M2},
812         {"N", N},
813         {"O", O},
814         {"P", P},
815         {"Q", Q},
816         {"R", R},
817         {"S", S},
818         {"S2", S2},
819         {"S_B", S_B},
820 };
821
822 static const struct pattern_field mobile_str_standard[] = {
823         {"A", A},
824         {"B", B},
825         {"C", C},
826         {"D", D},
827         {"E", E},
828         {"F", F},
829         {"G", G},
830         {"H", H},
831         {"I", I},
832         {"J", J},
833         {"K", K},
834         {"L", L},
835         {"M", M},
836         {"CMAS", CMAS},
837         {"CMAS_CA", CMAS_CA},
838 };
839
840 typedef enum {
841         PROFILE_NONE = -1,
842         PROFILE_MOBILE = 1,
843         PROFILE_WEARABLE = 2,
844         PROFILE_DA = 3,
845         PROFILE_COMMON = 4,
846 } profile_e;
847
848 static int callstatus;
849 static int lock_sndstatus;
850 static int camerastatus;
851 static int shutter_sndstatus;
852 static int noti_vibstatus;
853 static int vib_level;
854 static int noti_level;
855 static int feedbackstatus;
856 static int vib_when_ring;
857 static int vib_noti_index;
858 static int vib_call_index;
859 static char snd_noti_path[PATH_MAX];
860 static char snd_call_path[PATH_MAX];
861 static char *profile_name = NULL;
862
863 static int dnd_mode;
864 static int theater_mode;
865 static int goodnight_mode;
866 static int disconnect_alert_mode;
867
868 #define PROFILE                 "tizen.org/feature/profile"
869 #define PROFILE_MOBILE_STRING   "mobile"
870 #define PROFILE_WEARABLE_STRING "wearable"
871 #define PROFILE_DA_STRING       "da"
872 #define PROFILE_COMMON_STRING   "common"
873
874 static profile_e get_profile(void)
875 {
876         int ret_val;
877         int len;
878         char *profile = NULL;
879         static int set = 0;
880
881         if (set != 0)
882                 return set;
883
884         ret_val = system_info_get_platform_string(PROFILE, &profile);
885         if (ret_val < 0) {
886                 _E("Cannot get profile(%d)", ret_val); //LCOV_EXCL_LINE system error
887                 return PROFILE_NONE; //LCOV_EXCL_LINE
888         }
889
890         len = strlen(profile) + 1;
891         if (!strncmp(PROFILE_MOBILE_STRING, profile, len))
892                 set = PROFILE_MOBILE;
893 //LCOV_EXCL_START
894         else if (!strncmp(PROFILE_WEARABLE_STRING, profile, len))
895                 set = PROFILE_WEARABLE;
896         else if (!strncmp(PROFILE_DA_STRING, profile, len))
897                 set = PROFILE_DA;
898         else
899                 set = PROFILE_COMMON;
900 //LCOV_EXCL_STOP
901
902         free(profile);
903         return set;
904 }
905
906 //LCOV_EXCL_START unused function
907 static char *profile_get_name()
908 {
909         int prof;
910
911         if (profile_name)
912                 return profile_name;
913
914         prof = get_profile();
915
916         if (prof == PROFILE_MOBILE)
917                 profile_name = PROFILE_MOBILE_STRING;
918         else if (prof == PROFILE_WEARABLE)
919                 profile_name = PROFILE_WEARABLE_STRING;
920         else if (prof == PROFILE_DA)
921                 profile_name = PROFILE_DA_STRING;
922         else
923                 profile_name = PROFILE_COMMON_STRING;
924
925         return profile_name;
926 }
927 //LCOV_EXCL_STOP
928
929 /* Return how many patterns profile supports */
930 static int profile_get_num_of_pattern()
931 {
932         int prof;
933
934         prof = get_profile();
935
936         if (prof == PROFILE_MOBILE)
937                 return ARR_SIZE(mobile_str_pattern);
938 //LCOV_EXCL_START
939         else if (prof == PROFILE_WEARABLE)
940                 return ARR_SIZE(wearable_str_pattern);
941         else
942                 return ARR_SIZE(all_str_pattern);
943 //LCOV_EXCL_STOP
944 }
945
946 static int profile_get_num_of_standard(void)
947 {
948         static int size = -1;
949         int prof;
950
951         if (size >= 0)
952                 return size;
953
954         prof = get_profile();
955
956 //LCOV_EXCL_START
957         if (prof == PROFILE_MOBILE)
958                 size = ARR_SIZE(mobile_str_standard);
959         else if (prof == PROFILE_WEARABLE)
960                 size = ARR_SIZE(wearable_str_standard);
961         else
962                 size = 0;
963 //LCOV_EXCL_STOP
964         return size;
965 }
966
967 static const char *profile_str_pattern(int pattern)
968 {
969         int prof;
970         int i;
971
972         prof = get_profile();
973
974 //LCOV_EXCL_START
975         if (prof == PROFILE_MOBILE) {
976                 for (i = 0; i < profile_get_num_of_pattern(); i++) {
977                         if (pattern == mobile_str_pattern[i].id)
978                                 return mobile_str_pattern[i].string;
979                 }
980                 for (i = 0; i < profile_get_num_of_standard(); i++) {
981                         if (pattern == mobile_str_standard[i].id)
982                                 return mobile_str_standard[i].string;
983                 }
984         } else if (prof == PROFILE_WEARABLE) {
985                 for (i = 0; i < profile_get_num_of_pattern(); i++) {
986                         if (pattern == wearable_str_pattern[i].id)
987                                 return wearable_str_pattern[i].string;
988                 }
989                 for (i = 0; i < profile_get_num_of_standard(); i++) {
990                         if (pattern == wearable_str_standard[i].id)
991                                 return wearable_str_standard[i].string;
992                 }
993         } else {
994 //LCOV_EXCL_STOP
995                 for (i = 0; i < profile_get_num_of_pattern(); i++) {
996                         if (pattern == all_str_pattern[i].id)
997                                 return all_str_pattern[i].string;
998                 }
999         }
1000         return "";
1001
1002 }
1003
1004 static int profile_get_pattern_enum(char *pattern)
1005 {
1006         int prof;
1007         int i;
1008         int len;
1009
1010         prof = get_profile();
1011
1012         len = strlen(pattern) + 1;
1013 //LCOV_EXCL_START
1014         if (prof == PROFILE_MOBILE) {
1015                 for (i = 0; i < profile_get_num_of_pattern(); i++) {
1016                         if (!strncmp(pattern, mobile_str_pattern[i].string, len))
1017                                 return mobile_str_pattern[i].id;
1018                 }
1019                 for (i = 0; i < profile_get_num_of_standard(); i++) {
1020                         if (!strncmp(pattern, mobile_str_standard[i].string, len))
1021                                 return mobile_str_standard[i].id;
1022                 }
1023         } else if (prof == PROFILE_WEARABLE) {
1024                 for (i = 0; i < profile_get_num_of_pattern(); i++) {
1025                         if (!strncmp(pattern, wearable_str_pattern[i].string, len))
1026                                 return wearable_str_pattern[i].id;
1027                 }
1028                 for (i = 0; i < profile_get_num_of_standard(); i++) {
1029                         if (!strncmp(pattern, wearable_str_standard[i].string, len))
1030                                 return wearable_str_standard[i].id;
1031                 }
1032         } else {
1033                 for (i = 0; i < profile_get_num_of_pattern(); i++) {
1034                         if (!strncmp(pattern, all_str_pattern[i].string, len))
1035                                 return all_str_pattern[i].id;
1036                 }
1037         }
1038 //LCOV_EXCL_STOP
1039
1040         return -1;
1041 }
1042
1043 //LCOV_EXCL_START Not called Callback
1044 static void feedback_callstatus_cb(keynode_t *key, void* data)
1045 {
1046         callstatus = vconf_keynode_get_int(key);
1047 }
1048
1049 static void feedback_lock_sndstatus_cb(keynode_t *key, void* data)
1050 {
1051         lock_sndstatus = vconf_keynode_get_bool(key);
1052 }
1053
1054 static void feedback_camerastatus_cb(keynode_t *key, void* data)
1055 {
1056         camerastatus = vconf_keynode_get_int(key);
1057 }
1058
1059 static void feedback_noti_vibstatus_cb(keynode_t *key, void* data)
1060 {
1061         noti_vibstatus = vconf_keynode_get_bool(key);
1062 }
1063
1064 static void feedback_vib_cb(keynode_t *key, void* data)
1065 {
1066         vib_level = vconf_keynode_get_int(key);
1067 }
1068
1069 static void feedback_noti_cb(keynode_t *key, void* data)
1070 {
1071         noti_level = vconf_keynode_get_int(key);
1072 }
1073
1074 static void feedback_feedbackstatus_cb(keynode_t *key, void* data)
1075 {
1076         feedbackstatus = vconf_keynode_get_bool(key);
1077 }
1078
1079 static void feedback_vib_when_ring_cb(keynode_t *key, void* data)
1080 {
1081         vib_when_ring = vconf_keynode_get_bool(key);
1082 }
1083
1084 static void snd_noti_path_cb(keynode_t *key, void* data)
1085 {
1086         char* path = vconf_keynode_get_str(key);
1087         struct stat st;
1088
1089         if (!path)
1090                 return;
1091
1092         if (stat(path, &st) < 0)
1093                 return;
1094         snprintf(snd_noti_path, PATH_MAX, "%s", path);
1095 }
1096
1097 static void snd_call_path_cb(keynode_t *key, void* data)
1098 {
1099         char* path = vconf_keynode_get_str(key);
1100         struct stat st;
1101
1102         if (!path)
1103                 return;
1104
1105         if (stat(path, &st) < 0)
1106                 return;
1107         snprintf(snd_call_path, PATH_MAX, "%s", path);
1108 }
1109
1110 static void vib_noti_type_cb(keynode_t *key, void* data)
1111 {
1112         vib_noti_index = vconf_keynode_get_int(key);
1113 }
1114
1115 static void vib_call_type_cb(keynode_t *key, void* data)
1116 {
1117         vib_call_index = vconf_keynode_get_int(key);
1118 }
1119
1120 static void feedback_dnd_mode_cb(keynode_t *key, void* data)
1121 {
1122         dnd_mode = vconf_keynode_get_bool(key);
1123 }
1124
1125 static void feedback_theater_mode_cb(keynode_t *key, void* data)
1126 {
1127         theater_mode = vconf_keynode_get_bool(key);
1128 }
1129
1130 static void feedback_goodnight_mode_cb(keynode_t *key, void* data)
1131 {
1132         goodnight_mode = vconf_keynode_get_bool(key);
1133 }
1134
1135 static void feedback_disconnect_alert_mode_cb(keynode_t *key, void* data)
1136 {
1137         disconnect_alert_mode = vconf_keynode_get_int(key);
1138 }
1139 //LCOV_EXCL_STOP
1140
1141 static void profile_init(void)
1142 {
1143         char *path;
1144         struct stat st;
1145         int prof;
1146         int ret_val;
1147
1148         prof = get_profile();
1149
1150         if (prof == PROFILE_COMMON || prof == PROFILE_DA)
1151                 return; //LCOV_EXCL_LINE
1152         //LCOV_EXCL_START
1153         else if (prof == PROFILE_MOBILE) {
1154                 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, &lock_sndstatus) < 0)
1155                         _W("VCONFKEY_SETAPPL_SOUND_LOCK_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
1156                 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, feedback_lock_sndstatus_cb, NULL);
1157                 if (ret_val != 0)
1158                         _W("VCONFKEY_SETAPPL_SOUND_LOCK_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
1159         }
1160
1161         /* check call status */
1162         if (vconf_get_int(VCONFKEY_CALL_STATE, &callstatus) < 0)
1163                 _W("VCONFKEY_CALL_STATE ==> FAIL!!"); //LCOV_EXCL_LINE
1164
1165         /* check camera status */
1166         if (vconf_get_int(VCONFKEY_CAMERA_STATE, &camerastatus) < 0)
1167                 _W("VCONFKEY_CAMERA_STATE ==> FAIL!!"); //LCOV_EXCL_LINE
1168
1169         /* shutter sound policy */
1170         /* This vconf is read just once, because this value is not changed in running time. */
1171         if (vconf_get_int(VCONFKEY_CAMERA_SHUTTER_SOUND_POLICY, &shutter_sndstatus) < 0)
1172                 _W("VCONFKEY_CAMERA_SHUTTER_SOUND_POLICY ==> FAIL!!"); //LCOV_EXCL_LINE
1173
1174         /* check vibration status */
1175         if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, &noti_vibstatus) < 0)
1176                 _W("VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
1177
1178         /* check vib_level */
1179         if (vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vib_level) < 0)
1180                 _W("VCONFKEY_FEEDBACK_VIBRATION_LEVEL_INT ==> FAIL!!"); //LCOV_EXCL_LINE
1181
1182         /* check noti_level */
1183         if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &noti_level) < 0)
1184                 _W("VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT ==> FAIL!!"); //LCOV_EXCL_LINE
1185
1186         /* feedback Init */
1187         if (vconf_get_bool(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, &feedbackstatus) < 0)
1188                 _W("VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
1189
1190         if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL, &vib_when_ring) < 0)
1191                 _W("VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
1192
1193         path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
1194         if (path) {
1195                 if (stat(path, &st) < 0) {
1196                         free(path); //LCOV_EXCL_LINE
1197                         path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_RINGTONE_DEFAULT_PATH_STR); //LCOV_EXCL_LINE
1198                 }
1199                 if (path) {
1200                         snprintf(snd_noti_path, PATH_MAX, "%s", path);
1201                         free(path);
1202                 }
1203         } else
1204                 snprintf(snd_noti_path, PATH_MAX, "NULL"); //LCOV_EXCL_LINE
1205
1206         path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
1207         if (path) {
1208                 if (stat(path, &st) < 0) {
1209                         free(path); //LCOV_EXCL_LINE
1210                         path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_DEFAULT_PATH_STR); //LCOV_EXCL_LINE
1211                 }
1212                 if (path) {
1213                         snprintf(snd_call_path, PATH_MAX, "%s", path);
1214                         free(path);
1215                 }
1216         } else
1217                 snprintf(snd_call_path, PATH_MAX, "NULL"); //LCOV_EXCL_LINE
1218
1219         if (vconf_get_int(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT, &vib_call_index) < 0)
1220                 _W("VCONFKEY_SETAPPL_SETAPPL_CALL_VIBRATION_PATTERN_INT ==> FAIL!!"); //LCOV_EXCL_LINE
1221
1222         if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT, &vib_noti_index) < 0)
1223                 _W("VCONFKEY_SETAPPL_SETAPPL_NOTI_VIBRATION_PATTERN_INT ==> FAIL!!"); //LCOV_EXCL_LINE
1224
1225         if (vconf_get_bool(VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL, &dnd_mode) < 0)
1226                 _W("VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
1227
1228         if (vconf_get_bool(VCONFKEY_SETAPPL_THEATER_MODE_ENABLE, &theater_mode) < 0)
1229                 _W("VCONFKEY_SETAPPL_THEATER_MODE_ENABLE ==> FAIL!!"); //LCOV_EXCL_LINE
1230
1231         if (vconf_get_bool(VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE, &goodnight_mode) < 0)
1232                 _W("VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE ==> FAIL!!"); //LCOV_EXCL_LINE
1233
1234         if (vconf_get_int(VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT, &disconnect_alert_mode) < 0)
1235                 _W("VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT ==> FAIL!!"); //LCOV_EXCL_LINE
1236
1237         /* add watch for status value */
1238         ret_val = vconf_notify_key_changed(VCONFKEY_CALL_STATE, feedback_callstatus_cb, NULL);
1239         if (ret_val != 0)
1240                 _W("Add watch for VCONFKEY_CALL_STATE failed"); //LCOV_EXCL_LINE
1241         ret_val = vconf_notify_key_changed(VCONFKEY_CAMERA_STATE, feedback_camerastatus_cb, NULL);
1242         if (ret_val != 0)
1243                 _W("Add watch for VCONFKEY_CAMERA_STATE failed"); //LCOV_EXCL_LINE
1244         ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, feedback_noti_vibstatus_cb, NULL);
1245         if (ret_val != 0)
1246                 _W("Add watch for VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL failed"); //LCOV_EXCL_LINE
1247         ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, feedback_vib_cb, NULL);
1248         if (ret_val != 0)
1249                 _W("Add watch for VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT failed"); //LCOV_EXCL_LINE
1250         ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, feedback_noti_cb, NULL);
1251         if (ret_val != 0)
1252                 _W("Add watch for VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT failed"); //LCOV_EXCL_LINE
1253         ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, feedback_feedbackstatus_cb, NULL);
1254         if (ret_val != 0)
1255                 _W("Add watch for VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL failed"); //LCOV_EXCL_LINE
1256         ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL, feedback_vib_when_ring_cb, NULL);
1257         if (ret_val != 0)
1258                 _W("Add watch for VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL failed"); //LCOV_EXCL_LINE
1259         ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, snd_noti_path_cb, NULL);
1260         if (ret_val != 0)
1261                 _W("Add watch for VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR failed"); //LCOV_EXCL_LINE
1262         ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, snd_call_path_cb, NULL);
1263         if (ret_val != 0)
1264                 _W("Add watch for VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR failed"); //LCOV_EXCL_LINE
1265         ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT, vib_noti_type_cb, NULL);
1266         if (ret_val != 0)
1267                 _W("Add watch for VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT failed"); //LCOV_EXCL_LINE
1268         ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT, vib_call_type_cb, NULL);
1269         if (ret_val != 0)
1270                 _W("Add watch for VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT failed"); //LCOV_EXCL_LINE
1271         ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL, feedback_dnd_mode_cb, NULL);
1272         if (ret_val != 0)
1273                 _W("Add watch for VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL failed"); //LCOV_EXCL_LINE
1274         ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_THEATER_MODE_ENABLE, feedback_theater_mode_cb, NULL);
1275         if (ret_val != 0)
1276                 _W("Add watch for VCONFKEY_SETAPPL_THEATER_MODE_ENABLE failed"); //LCOV_EXCL_LINE
1277         ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE, feedback_goodnight_mode_cb, NULL);
1278         if (ret_val != 0)
1279                 _W("Add watch for VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE failed"); //LCOV_EXCL_LINE
1280         ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT, feedback_disconnect_alert_mode_cb, NULL);
1281         if (ret_val != 0)
1282                 _W("Add watch for VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT failed"); //LCOV_EXCL_LINE
1283         //LCOV_EXCL_STOP
1284 }
1285
1286 static void profile_exit(void)
1287 {
1288         int prof;
1289         int ret_val;
1290
1291         prof = get_profile();
1292
1293         if (prof == PROFILE_COMMON || prof == PROFILE_DA)
1294                 return;
1295         //LCOV_EXCL_START
1296         else if (prof == PROFILE_MOBILE) {
1297                 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, feedback_lock_sndstatus_cb);
1298                 if (ret_val != 0)
1299                         _W("Remove watch for VCONFKEY_SETAPPL_SOUND_LOCK_BOOL failed"); //LCOV_EXCL_LINE
1300         }
1301
1302         /* remove watch */
1303         ret_val = vconf_ignore_key_changed(VCONFKEY_CALL_STATE, feedback_callstatus_cb);
1304         if (ret_val != 0)
1305                 _W("Remove watch for VCONFKEY_CALL_STATE failed"); //LCOV_EXCL_LINE
1306         ret_val = vconf_ignore_key_changed(VCONFKEY_CAMERA_STATE, feedback_camerastatus_cb);
1307         if (ret_val != 0)
1308                 _W("Remove watch for VCONFKEY_CAMERA_STATE failed"); //LCOV_EXCL_LINE
1309         ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, feedback_noti_vibstatus_cb);
1310         if (ret_val != 0)
1311                 _W("Remove watch for VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL failed"); //LCOV_EXCL_LINE
1312         ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, feedback_vib_cb);
1313         if (ret_val != 0)
1314                 _W("Remove watch for VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT failed"); //LCOV_EXCL_LINE
1315         ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, feedback_noti_cb);
1316         if (ret_val != 0)
1317                 _W("Remove watch for VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT failed"); //LCOV_EXCL_LINE
1318         ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, feedback_feedbackstatus_cb);
1319         if (ret_val != 0)
1320                 _W("Remove watch for VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL failed"); //LCOV_EXCL_LINE
1321         ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL, feedback_vib_when_ring_cb);
1322         if (ret_val != 0)
1323                 _W("Remove watch for VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL failed"); //LCOV_EXCL_LINE
1324         ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, snd_noti_path_cb);
1325         if (ret_val != 0)
1326                 _W("Remove watch for VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR failed"); //LCOV_EXCL_LINE
1327         ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, snd_call_path_cb);
1328         if (ret_val != 0)
1329                 _W("Remove watch for VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR failed"); //LCOV_EXCL_LINE
1330         ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT, vib_noti_type_cb);
1331         if (ret_val != 0)
1332                 _W("Remove watch for VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT failed"); //LCOV_EXCL_LINE
1333         ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT, vib_call_type_cb);
1334         if (ret_val != 0)
1335                 _W("Remove watch for VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT failed"); //LCOV_EXCL_LINE
1336         ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL, feedback_dnd_mode_cb);
1337         if (ret_val != 0)
1338                 _W("Remove watch for VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL failed"); //LCOV_EXCL_LINE
1339         ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_THEATER_MODE_ENABLE, feedback_theater_mode_cb);
1340         if (ret_val != 0)
1341                 _W("Remove watch for VCONFKEY_SETAPPL_THEATER_MODE_ENABLE failed"); //LCOV_EXCL_LINE
1342         ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE, feedback_goodnight_mode_cb);
1343         if (ret_val != 0)
1344                 _W("Remove watch for VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE failed"); //LCOV_EXCL_LINE
1345         ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT, feedback_disconnect_alert_mode_cb);
1346         if (ret_val != 0)
1347                 _W("Remove watch for VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT failed"); //LCOV_EXCL_LINE
1348         //LCOV_EXCL_STOP
1349 }
1350
1351 //LCOV_EXCL_START
1352 static int wearable_get_switched_pattern(int pattern)
1353 {
1354         int changed_pattern = pattern;
1355
1356         switch (changed_pattern) {
1357                 case FEEDBACK_PATTERN_RINGER:
1358                 case FEEDBACK_PATTERN_RINGER_STRONG_BUZZ:
1359                         changed_pattern = FEEDBACK_PATTERN_RING_1 + vib_call_index;
1360                         break;
1361                 case FEEDBACK_PATTERN_MESSAGE:
1362                 case FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ:
1363                 case FEEDBACK_PATTERN_EMAIL:
1364                 case FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ:
1365                 case FEEDBACK_PATTERN_GENERAL:
1366                 case FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ:
1367                 case FEEDBACK_PATTERN_3RD_APPLICATION:
1368                 case FEEDBACK_PATTERN_COMMUNICATION:
1369                 case FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ:
1370                         changed_pattern = FEEDBACK_PATTERN_NOTIFICATION_1 + vib_noti_index;
1371                         break;
1372                 case FEEDBACK_PATTERN_WAKEUP:
1373                 case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1374                         if (callstatus)
1375                                 changed_pattern = FEEDBACK_PATTERN_WAKEUP_ON_CALL;
1376                         break;
1377                 case FEEDBACK_PATTERN_TIMER:
1378                 case FEEDBACK_PATTERN_INTERNAL_TIMER:
1379                         if (callstatus)
1380                                 changed_pattern = FEEDBACK_PATTERN_TIMER_ON_CALL;
1381                         break;
1382                 default:
1383                         break;
1384         }
1385
1386         return changed_pattern;
1387 }
1388 //LCOV_EXCL_STOP
1389
1390 //LCOV_EXCL_START
1391 static int mobile_get_switched_pattern(int pattern)
1392 {
1393         int changed_pattern = pattern;
1394
1395         if (callstatus == VCONFKEY_CALL_OFF)
1396                 return changed_pattern;
1397
1398         if (is_sound_mode() &&
1399                 pattern != FEEDBACK_PATTERN_WAKEUP && pattern != FEEDBACK_PATTERN_INTERNAL_WAKEUP &&
1400                 pattern != FEEDBACK_PATTERN_TIMER && pattern != FEEDBACK_PATTERN_INTERNAL_TIMER)
1401                 return changed_pattern;
1402
1403         /* in case of call connected or connecting */
1404         _D("Call status is connected or connecting."); //LCOV_EXCL_LINE
1405         if (changed_pattern == FEEDBACK_PATTERN_MESSAGE)
1406                 changed_pattern = FEEDBACK_PATTERN_MESSAGE_ON_CALL;
1407         else if(changed_pattern == FEEDBACK_PATTERN_EMAIL)
1408                 changed_pattern = FEEDBACK_PATTERN_EMAIL_ON_CALL;
1409         else if ((changed_pattern == FEEDBACK_PATTERN_WAKEUP) || (pattern == FEEDBACK_PATTERN_INTERNAL_WAKEUP))
1410                 changed_pattern = FEEDBACK_PATTERN_WAKEUP_ON_CALL;
1411         else if (changed_pattern == FEEDBACK_PATTERN_SCHEDULE)
1412                 changed_pattern = FEEDBACK_PATTERN_SCHEDULE_ON_CALL;
1413         else if ((changed_pattern == FEEDBACK_PATTERN_TIMER) || (pattern == FEEDBACK_PATTERN_INTERNAL_TIMER))
1414                 changed_pattern = FEEDBACK_PATTERN_TIMER_ON_CALL;
1415         else if (changed_pattern == FEEDBACK_PATTERN_GENERAL)
1416                 changed_pattern = FEEDBACK_PATTERN_GENERAL_ON_CALL;
1417         else if (changed_pattern == FEEDBACK_PATTERN_CHARGERCONN)
1418                 changed_pattern = FEEDBACK_PATTERN_CHARGERCONN_ON_CALL;
1419         else if (changed_pattern == FEEDBACK_PATTERN_CHARGING_ERROR)
1420                 changed_pattern = FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL;
1421         else if (changed_pattern == FEEDBACK_PATTERN_FULLCHARGED)
1422                 changed_pattern = FEEDBACK_PATTERN_FULLCHARGED_ON_CALL;
1423         else if (changed_pattern == FEEDBACK_PATTERN_LOWBATT)
1424                 changed_pattern = FEEDBACK_PATTERN_LOWBATT_ON_CALL;
1425
1426         return changed_pattern;
1427 }
1428 //LCOV_EXCL_STOP
1429
1430 static bool profile_get_switched_pattern(int pattern, int *switched)
1431 {
1432         int changed_pattern = pattern;
1433         int prof = get_profile();
1434
1435         if (!switched || prof == PROFILE_COMMON || prof == PROFILE_DA)
1436                 return false;
1437
1438         //LCOV_EXCL_START
1439         if (prof == PROFILE_WEARABLE)
1440                 changed_pattern = wearable_get_switched_pattern(changed_pattern);
1441         else
1442                 changed_pattern = mobile_get_switched_pattern(changed_pattern);
1443
1444         if (changed_pattern != pattern) {
1445                 *switched = changed_pattern;
1446                 return true;
1447         }
1448         //LCOV_EXCL_STOP
1449         return false;
1450 }
1451
1452 //LCOV_EXCL_START
1453 static bool mobile_is_notification_type(int pattern)
1454 {
1455         switch (pattern) {
1456         case FEEDBACK_PATTERN_WAKEUP:
1457         case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1458         case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
1459         case FEEDBACK_PATTERN_TIMER:
1460         case FEEDBACK_PATTERN_INTERNAL_TIMER:
1461         case FEEDBACK_PATTERN_TIMER_ON_CALL:
1462         case FEEDBACK_PATTERN_MESSAGE ... FEEDBACK_PATTERN_EMAIL_ON_CALL:
1463         case FEEDBACK_PATTERN_SCHEDULE:
1464         case FEEDBACK_PATTERN_SCHEDULE_ON_CALL:
1465         case FEEDBACK_PATTERN_GENERAL ... FEEDBACK_PATTERN_LOWBATT_ON_CALL:
1466         case FEEDBACK_PATTERN_SAFETY_ALERT:
1467         case FEEDBACK_PATTERN_CMAS:
1468         case FEEDBACK_PATTERN_CMAS_CA:
1469                 return true;
1470         }
1471         return false;
1472 }
1473 //LCOV_EXCL_STOP
1474
1475 //LCOV_EXCL_START
1476 static bool wearable_is_notification_type(int pattern)
1477 {
1478         switch (pattern) {
1479         case FEEDBACK_PATTERN_WAKEUP:
1480         case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1481         case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
1482         case FEEDBACK_PATTERN_TIMER:
1483         case FEEDBACK_PATTERN_INTERNAL_TIMER:
1484         case FEEDBACK_PATTERN_TIMER_ON_CALL:
1485                 return false;
1486         case FEEDBACK_PATTERN_MESSAGE ... FEEDBACK_PATTERN_EMAIL_ON_CALL:
1487         case FEEDBACK_PATTERN_SCHEDULE:
1488         case FEEDBACK_PATTERN_SCHEDULE_ON_CALL:
1489         case FEEDBACK_PATTERN_GENERAL:
1490         case FEEDBACK_PATTERN_GENERAL_ON_CALL:
1491         case FEEDBACK_PATTERN_SMART_ALERT:
1492         case FEEDBACK_PATTERN_SAFETY_ALERT:
1493         case FEEDBACK_PATTERN_CMAS:
1494         case FEEDBACK_PATTERN_CMAS_CA:
1495         case FEEDBACK_PATTERN_3RD_APPLICATION:
1496         case FEEDBACK_PATTERN_TEMPERATURE_WARNING:
1497         case FEEDBACK_PATTERN_COOLDOWN_WARNING_1:
1498         case FEEDBACK_PATTERN_COOLDOWN_WARNING_2:
1499         case FEEDBACK_PATTERN_COMMUNICATION:
1500         case FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ:
1501         case FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ:
1502         case FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ:
1503         case FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ:
1504         case FEEDBACK_PATTERN_SCHEDULE_STRONG_BUZZ:
1505         case FEEDBACK_PATTERN_NOTIFICATION_1 ... FEEDBACK_PATTERN_NOTIFICATION_8_STRONG_BUZZ:
1506         case FEEDBACK_PATTERN_ALARM_1 ... FEEDBACK_PATTERN_ALARM_8_STRONG_BUZZ:
1507                 return true;
1508         }
1509         return false;
1510 }
1511 //LCOV_EXCL_STOP
1512
1513 static bool profile_is_notification_type(int pattern)
1514 {
1515         int prof;
1516
1517         prof = get_profile();
1518
1519 //LCOV_EXCL_START
1520         if (prof == PROFILE_MOBILE)
1521                 return mobile_is_notification_type(pattern);
1522         else if (prof == PROFILE_WEARABLE)
1523                 return wearable_is_notification_type(pattern);
1524         else
1525                 return false;
1526 //LCOV_EXCL_STOP
1527 }
1528
1529 //LCOV_EXCL_START
1530 static int mobile_get_priority(int pattern)
1531 {
1532         switch (pattern) {
1533         case FEEDBACK_PATTERN_TAP ... FEEDBACK_PATTERN_HW_HOLD:
1534                 return PRIORITY_MIN;
1535         case FEEDBACK_PATTERN_WAKEUP:
1536         case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1537         case FEEDBACK_PATTERN_SCHEDULE:
1538         case FEEDBACK_PATTERN_TIMER:
1539         case FEEDBACK_PATTERN_INTERNAL_TIMER:
1540         case FEEDBACK_PATTERN_CMAS:
1541         case FEEDBACK_PATTERN_CMAS_CA:
1542                 return PRIORITY_HIGH;
1543         case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
1544         case FEEDBACK_PATTERN_RINGER:
1545                 return PRIORITY_TOP;
1546         }
1547
1548         return PRIORITY_MIDDLE;
1549 }
1550 //LCOV_EXCL_STOP
1551
1552 //LCOV_EXCL_START
1553 static int wearable_get_priority(int pattern)
1554 {
1555         if (pattern == FEEDBACK_PATTERN_CMAS ||
1556         pattern == FEEDBACK_PATTERN_CMAS_CA ||
1557         pattern == FEEDBACK_PATTERN_RINGER ||
1558         pattern == FEEDBACK_PATTERN_RINGER_STRONG_BUZZ ||
1559         (pattern >= FEEDBACK_PATTERN_RING_1 && pattern <= FEEDBACK_PATTERN_RING_10_STRONG_BUZZ) ||
1560         pattern == FEEDBACK_PATTERN_FIND_MY_GEAR)
1561                 return PRIORITY_TOP;
1562         else if (pattern == FEEDBACK_PATTERN_WAKEUP || pattern == FEEDBACK_PATTERN_INTERNAL_WAKEUP ||
1563         pattern == FEEDBACK_PATTERN_WAKEUP_ON_CALL ||
1564         pattern == FEEDBACK_PATTERN_SCHEDULE || pattern == FEEDBACK_PATTERN_SCHEDULE_ON_CALL ||
1565         pattern == FEEDBACK_PATTERN_TIMER || pattern == FEEDBACK_PATTERN_INTERNAL_TIMER ||
1566         pattern == FEEDBACK_PATTERN_TIMER_ON_CALL ||
1567         (pattern >= FEEDBACK_PATTERN_ALARM_1 && pattern <= FEEDBACK_PATTERN_ALARM_10_STRONG_BUZZ))
1568                 return PRIORITY_HIGH;
1569         else if (pattern >= FEEDBACK_PATTERN_TAP && pattern <= FEEDBACK_PATTERN_HW_HOLD)
1570                 return PRIORITY_MIN;
1571         else if (pattern == FEEDBACK_PATTERN_END_EFFECT)
1572                 return PRIORITY_MIN;
1573         else if (pattern >= FEEDBACK_PATTERN_END_EFFECT_FINE && pattern <= FEEDBACK_PATTERN_FUNCTION)
1574                 return PRIORITY_MIN;
1575         else if (pattern == FEEDBACK_PATTERN_VOICE_START || pattern == FEEDBACK_PATTERN_VOICE_STOP)
1576                 return PRIORITY_MIN;
1577         else if (pattern >= FEEDBACK_PATTERN_BOS && pattern <= FEEDBACK_PATTERN_UDS)
1578                 return PRIORITY_MIN;
1579         return PRIORITY_MIDDLE;
1580 }
1581 //LCOV_EXCL_STOP
1582
1583 static int profile_get_priority(int pattern)
1584 {
1585         int prof;
1586
1587         prof = get_profile();
1588
1589 //LCOV_EXCL_START
1590         if (prof == PROFILE_MOBILE)
1591                 return mobile_get_priority(pattern);
1592         else if (prof == PROFILE_WEARABLE)
1593                 return wearable_get_priority(pattern);
1594         else
1595                 return PRIORITY_MIDDLE;
1596 //LCOV_EXCL_STOP
1597 }
1598
1599 //LCOV_EXCL_START
1600 static bool mobile_get_always_alert_case(int type, int pattern)
1601 {
1602         int ret_val;
1603
1604         switch (pattern) {
1605         case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
1606         case FEEDBACK_PATTERN_HOLD:
1607                 if (CHECK_VIBRATION(type) && feedbackstatus)
1608                         return true;
1609                 break;
1610         case FEEDBACK_PATTERN_SIP:
1611         case FEEDBACK_PATTERN_SIP_BACKSPACE:
1612         case FEEDBACK_PATTERN_SIP_FUNCTION:
1613         case FEEDBACK_PATTERN_SIP_FJKEY:
1614                 if (CHECK_VIBRATION(type))
1615                         return true;
1616                 break;
1617         case FEEDBACK_PATTERN_MESSAGE:
1618         case FEEDBACK_PATTERN_EMAIL:
1619                 if (CHECK_VIBRATION(type) && noti_vibstatus)
1620                         return true;
1621                 break;
1622         case FEEDBACK_PATTERN_TIMER:
1623         case FEEDBACK_PATTERN_INTERNAL_TIMER:
1624         case FEEDBACK_PATTERN_TIMER_ON_CALL:
1625                 if (CHECK_VIBRATION(type))
1626                         return true;
1627                 break;
1628         case FEEDBACK_PATTERN_WAKEUP:
1629         case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1630         case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
1631                 return true;
1632         case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
1633         case FEEDBACK_PATTERN_EMAIL_ON_CALL:
1634         case FEEDBACK_PATTERN_GENERAL_ON_CALL:
1635                 break;
1636         case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
1637         case FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL:
1638         case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
1639         case FEEDBACK_PATTERN_MMS:
1640         case FEEDBACK_PATTERN_HOURLY_ALERT:
1641                 /* no matter sound profile */
1642                 if (CHECK_VIBRATION(type))
1643                         return true;
1644                 break;
1645         case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
1646         case FEEDBACK_PATTERN_SMART_ALERT:
1647         case FEEDBACK_PATTERN_END_SOS_MESSAGE:
1648         case FEEDBACK_PATTERN_CMAS:
1649         case FEEDBACK_PATTERN_CMAS_CA:
1650         case FEEDBACK_PATTERN_OUTGOING_CALL:
1651                 return true;
1652         case FEEDBACK_PATTERN_SCREEN_CAPTURE:
1653                 if (CHECK_SOUND(type) && camerastatus && shutter_sndstatus)
1654                         return true;
1655                 break;
1656         case FEEDBACK_PATTERN_RINGER:
1657                 if (CHECK_VIBRATION(type) && (is_vibration_mode() || is_sound_mode()) &&
1658             vconf_get_int(VCONFKEY_RECORDER_STATE, &ret_val) == 0 &&
1659             ret_val == VCONFKEY_RECORDER_STATE_RECORDING)
1660                         return true;
1661                 break;
1662         case FEEDBACK_PATTERN_TEMPERATURE_WARNING:
1663         case FEEDBACK_PATTERN_COOLDOWN_WARNING_1:
1664         case FEEDBACK_PATTERN_COOLDOWN_WARNING_2:
1665                 if (CHECK_VIBRATION(type))
1666                         return true;
1667                 break;
1668         case FEEDBACK_PATTERN_CALLCONNECT:
1669         case FEEDBACK_PATTERN_DISCALLCONNECT:
1670                 return true;
1671         default:
1672                 break;
1673         }
1674         return false;
1675 }
1676 //LCOV_EXCL_STOP
1677
1678 //LCOV_EXCL_START
1679 static bool wearable_is_system_type(int pattern)
1680 {
1681         switch(pattern) {
1682         case FEEDBACK_PATTERN_POWERON ... FEEDBACK_PATTERN_HOURLY_ALERT:
1683         case FEEDBACK_PATTERN_TEMPERATURE_WARNING ... FEEDBACK_PATTERN_COOLDOWN_WARNING_2:
1684                 return true;
1685         }
1686         return false;
1687 }
1688
1689 static bool wearable_get_always_alert_case(int type, int pattern)
1690 {
1691         int ret_val;
1692
1693         if (CHECK_SOUND(type)) {
1694                 if ((wearable_is_notification_type(pattern) || wearable_is_system_type(pattern)) &&
1695             callstatus) {
1696                         _W("skip %s sound during call", profile_str_pattern(pattern));
1697                         return false;
1698                 }
1699                 switch (pattern) {
1700                 case FEEDBACK_PATTERN_WAKEUP:
1701                 case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1702                 case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
1703                         return true;
1704                 case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
1705                 case FEEDBACK_PATTERN_EMAIL_ON_CALL:
1706                 case FEEDBACK_PATTERN_GENERAL_ON_CALL:
1707                         break;
1708                 case FEEDBACK_PATTERN_SMART_ALERT:
1709                 case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
1710                 case FEEDBACK_PATTERN_END_SOS_MESSAGE:
1711                 case FEEDBACK_PATTERN_CMAS:
1712                 case FEEDBACK_PATTERN_CMAS_CA:
1713                 case FEEDBACK_PATTERN_NFC_SUCCESS:
1714                         return true;
1715                 case FEEDBACK_PATTERN_SCREEN_CAPTURE:
1716                         if (camerastatus && shutter_sndstatus)
1717                                 return true;
1718                         break;
1719                 case FEEDBACK_PATTERN_OUTGOING_CALL:
1720                         return true;
1721                 default:
1722                         break;
1723                 }
1724         } else if (CHECK_VIBRATION(type)) {
1725                 if ((wearable_is_notification_type(pattern) || wearable_is_system_type(pattern)) &&
1726             (is_sound_mode() || is_vibration_mode()) &&
1727             callstatus) {
1728                         _W("alert %s vibration during call", profile_str_pattern(pattern));
1729                         return true;
1730                 }
1731                 switch (pattern) {
1732                 case FEEDBACK_PATTERN_TAP:
1733                 case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
1734                 case FEEDBACK_PATTERN_HOLD:
1735                 case FEEDBACK_PATTERN_END_EFFECT:
1736                 case FEEDBACK_PATTERN_END_EFFECT_FINE ... FEEDBACK_PATTERN_FUNCTION:
1737                 case FEEDBACK_PATTERN_VOICE_START:
1738                 case FEEDBACK_PATTERN_VOICE_STOP:
1739                 case FEEDBACK_PATTERN_PICKER:
1740                 case FEEDBACK_PATTERN_PICKER_FINISH:
1741                 case FEEDBACK_PATTERN_ON_OFF_SWITCH:
1742                 case FEEDBACK_PATTERN_REORDER:
1743                 case FEEDBACK_PATTERN_CURSOR_MOVE:
1744                         if (feedbackstatus)
1745                                 return true;
1746                         break;
1747                 case FEEDBACK_PATTERN_MESSAGE:
1748                 case FEEDBACK_PATTERN_EMAIL:
1749                 case FEEDBACK_PATTERN_GENERAL:
1750                 case FEEDBACK_PATTERN_SCHEDULE:
1751                 case FEEDBACK_PATTERN_COMMUNICATION:
1752                 case FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ:
1753                 case FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ:
1754                 case FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ:
1755                 case FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ:
1756                 case FEEDBACK_PATTERN_SCHEDULE_STRONG_BUZZ:
1757                 case FEEDBACK_PATTERN_3RD_APPLICATION:
1758                 case FEEDBACK_PATTERN_NOTIFICATION_1 ... FEEDBACK_PATTERN_NOTIFICATION_10_STRONG_BUZZ:
1759                         if (noti_vibstatus)
1760                                 return true;
1761                         break;
1762                 case FEEDBACK_PATTERN_SIP:
1763                 case FEEDBACK_PATTERN_SIP_BACKSPACE:
1764                 case FEEDBACK_PATTERN_SIP_FUNCTION:
1765                 case FEEDBACK_PATTERN_SIP_FJKEY:
1766                 case FEEDBACK_PATTERN_TIMER:
1767                 case FEEDBACK_PATTERN_INTERNAL_TIMER:
1768                 case FEEDBACK_PATTERN_TIMER_ON_CALL:
1769                 case FEEDBACK_PATTERN_WAKEUP:
1770                 case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1771                 case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
1772                 case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
1773                 case FEEDBACK_PATTERN_EMAIL_ON_CALL:
1774                 case FEEDBACK_PATTERN_GENERAL_ON_CALL:
1775                 case FEEDBACK_PATTERN_WAKEUP_STRONG_BUZZ:
1776                 case FEEDBACK_PATTERN_TIMER_STRONG_BUZZ:
1777                 case FEEDBACK_PATTERN_ALARM_1 ... FEEDBACK_PATTERN_ALARM_10_STRONG_BUZZ:
1778                 case FEEDBACK_PATTERN_MMS:
1779                 case FEEDBACK_PATTERN_HOURLY_ALERT:
1780                 case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
1781                 case FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL:
1782                 case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
1783                 case FEEDBACK_PATTERN_TEMPERATURE_WARNING:
1784                 case FEEDBACK_PATTERN_COOLDOWN_WARNING_1:
1785                 case FEEDBACK_PATTERN_COOLDOWN_WARNING_2:
1786                 case FEEDBACK_PATTERN_BT_DISCONNECTED:
1787                 case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
1788                 case FEEDBACK_PATTERN_END_SOS_MESSAGE:
1789                 case FEEDBACK_PATTERN_SMART_ALERT:
1790                 case FEEDBACK_PATTERN_CMAS:
1791                 case FEEDBACK_PATTERN_CMAS_CA:
1792                 case FEEDBACK_PATTERN_OUTGOING_CALL:
1793                 case FEEDBACK_PATTERN_FALL_DETECTION_1:
1794                 case FEEDBACK_PATTERN_FALL_DETECTION_2:
1795                         return true;
1796                 case FEEDBACK_PATTERN_SPEED_UP:
1797                 case FEEDBACK_PATTERN_SLOW_DOWN:
1798                 case FEEDBACK_PATTERN_KEEP_THIS_PACE:
1799                 case FEEDBACK_PATTERN_GOAL_ACHIEVED:
1800                 case FEEDBACK_PATTERN_EXERCISE_COUNT:
1801                 case FEEDBACK_PATTERN_BREATHING_EXHALE:
1802                 case FEEDBACK_PATTERN_START_CUE:
1803                 case FEEDBACK_PATTERN_INACTIVE_TIME:
1804                 case FEEDBACK_PATTERN_SHEALTH_NOTICE:
1805                 case FEEDBACK_PATTERN_SHEALTH_GENTLE_ALERT:
1806                 case FEEDBACK_PATTERN_HEALTH_PACE:
1807                 case FEEDBACK_PATTERN_SHEALTH_START:
1808                 case FEEDBACK_PATTERN_SHEALTH_PAUSE:
1809                 case FEEDBACK_PATTERN_SHEALTH_STOP:
1810                 case FEEDBACK_PATTERN_INACTIVE_FINE:
1811                 case FEEDBACK_PATTERN_MEDITATION:
1812                 case FEEDBACK_PATTERN_MEDITATION_INTERVAL:
1813                         /* except mute case */
1814                         if (is_sound_mode() || is_vibration_mode())
1815                                 return true;
1816                         break;
1817                 case FEEDBACK_PATTERN_RINGER:
1818                 case FEEDBACK_PATTERN_RINGER_STRONG_BUZZ:
1819                 case FEEDBACK_PATTERN_RING_1 ... FEEDBACK_PATTERN_RING_10_STRONG_BUZZ:
1820                         if (vib_when_ring)
1821                 return true;
1822             /* check if the state of voice recorder is recording */
1823             if ((is_sound_mode() || is_vibration_mode()) &&
1824                 vconf_get_int(VCONFKEY_RECORDER_STATE, &ret_val) == 0 &&
1825                 ret_val == VCONFKEY_RECORDER_STATE_RECORDING) {
1826                 _D("voice recording status is RECORDING");
1827                 return true;
1828             }
1829             break;
1830                 case FEEDBACK_PATTERN_FIND_MY_GEAR:
1831                         return true;
1832                 default:
1833                         break;
1834                 }
1835
1836                 if (pattern > FEEDBACK_STANDARD_START && pattern < FEEDBACK_STANDARD_END)
1837                         return true;
1838         }
1839         return false;
1840 }
1841 //LCOV_EXCL_STOP
1842
1843 //LCOV_EXCL_START
1844 static bool common_get_always_alert_case(int type, int pattern)
1845 {
1846         switch (pattern) {
1847         case FEEDBACK_PATTERN_SIP:
1848         case FEEDBACK_PATTERN_TIMER:
1849                 if (CHECK_VIBRATION(type))
1850                         return true;
1851                 break;
1852         case FEEDBACK_PATTERN_WAKEUP:
1853                 return true;
1854         default:
1855                 break;
1856         }
1857         return false;
1858 }
1859 //LCOV_EXCL_STOP
1860
1861 static bool profile_get_always_alert_case(int type, int pattern)
1862 {
1863         int prof;
1864
1865         prof = get_profile();
1866
1867 //LCOV_EXCL_START
1868         if (prof == PROFILE_MOBILE)
1869                 return mobile_get_always_alert_case(type, pattern);
1870         else if (prof == PROFILE_WEARABLE)
1871                 return wearable_get_always_alert_case(type, pattern);
1872         else
1873                 return common_get_always_alert_case(type, pattern);
1874 //LCOV_EXCL_STOP
1875 }
1876
1877 //LCOV_EXCL_START
1878 static bool mobile_get_always_off_case(int type, int pattern)
1879 {
1880         int ret_val;
1881
1882         /* check if the state of voice recorder is recording */
1883         if (vconf_get_int(VCONFKEY_RECORDER_STATE, &ret_val) < 0) {
1884                 _W("fail to get media sound status, status will be zero"); //LCOV_EXCL_LINE
1885                 ret_val = 0; //LCOV_EXCL_LINE
1886         }
1887
1888         if (CHECK_SOUND(type) && ret_val == VCONFKEY_RECORDER_STATE_RECORDING) {
1889                 _D("voice recording status is RECORDING"); //LCOV_EXCL_LINE
1890                 return true; //LCOV_EXCL_LINE
1891         }
1892
1893         switch (pattern) {
1894         case FEEDBACK_PATTERN_TAP:
1895         case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
1896                 if (CHECK_SOUND(type) && !is_touch_sndstatus())
1897                         return true;
1898                 break;
1899         case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
1900                 if (CHECK_SOUND(type) && !is_keytone_sndstatus())
1901                         return true;
1902                 else if (CHECK_VIBRATION(type) && !feedbackstatus)
1903                         return true;
1904                 break;
1905         case FEEDBACK_PATTERN_LOCK:
1906         case FEEDBACK_PATTERN_UNLOCK:
1907         case FEEDBACK_PATTERN_LOCK_SWIPE:
1908         case FEEDBACK_PATTERN_UNLOCK_SWIPE:
1909                 if (CHECK_SOUND(type) && !lock_sndstatus)
1910                         return true;
1911                 break;
1912         default:
1913                 break;
1914         }
1915         return false;
1916 }
1917 //LCOV_EXCL_STOP
1918
1919 //LCOV_EXCL_START
1920 static bool wearable_get_always_off_case(int type, int pattern)
1921 {
1922         int ret_val;
1923
1924         if (CHECK_SOUND(type)) {
1925                 if ((wearable_is_notification_type(pattern) || wearable_is_system_type(pattern)) &&
1926                     callstatus) {
1927                         _W("skip %d sound during call", pattern);
1928                         return true;
1929                 }
1930
1931                 if (goodnight_mode && wearable_is_system_type(pattern)) {
1932                         _W("Skip %d sound in good night mode", pattern);
1933                         return true;
1934                 }
1935
1936                 /* check if the state of voice recorder is recording */
1937                 if (vconf_get_int(VCONFKEY_RECORDER_STATE, &ret_val) == 0 &&
1938                     ret_val == VCONFKEY_RECORDER_STATE_RECORDING) {
1939                         _D("voice recording status is RECORDING");
1940                         return true;
1941                 }
1942
1943                 switch (pattern) {
1944                 case FEEDBACK_PATTERN_TAP:
1945                 case FEEDBACK_PATTERN_MAX_CHARACTER:
1946                 case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
1947                         if (!is_touch_sndstatus() || theater_mode || goodnight_mode)
1948                                 return true;
1949                         break;
1950                 case FEEDBACK_PATTERN_SIP ... FEEDBACK_PATTERN_SIP_FJKEY:
1951                         if (theater_mode || goodnight_mode)
1952                                 return true;
1953                         break;
1954                 case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
1955                         if (!is_keytone_sndstatus() || theater_mode || goodnight_mode)
1956                                 return true;
1957                         break;
1958                 case FEEDBACK_PATTERN_LOCK:
1959                 case FEEDBACK_PATTERN_UNLOCK:
1960                         if (!lock_sndstatus)
1961                                 return true;
1962                         break;
1963                 case FEEDBACK_PATTERN_BT_DISCONNECTED:
1964                 case FEEDBACK_PATTERN_LOWBATT:
1965                 case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
1966                 case FEEDBACK_PATTERN_CHARGERCONN:
1967                 case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
1968                         if (dnd_mode || theater_mode || goodnight_mode)
1969                                 return true;
1970                         break;
1971                 default:
1972                         break;
1973                 }
1974         } else if (CHECK_VIBRATION(type)) {
1975                 switch (pattern) {
1976                 case FEEDBACK_PATTERN_TAP:
1977                 case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
1978                 case FEEDBACK_PATTERN_HOLD:
1979                 case FEEDBACK_PATTERN_END_EFFECT:
1980                 case FEEDBACK_PATTERN_END_EFFECT_FINE ... FEEDBACK_PATTERN_FUNCTION:
1981                 case FEEDBACK_PATTERN_VOICE_START:
1982                 case FEEDBACK_PATTERN_VOICE_STOP:
1983                 case FEEDBACK_PATTERN_PICKER:
1984                 case FEEDBACK_PATTERN_PICKER_FINISH:
1985                 case FEEDBACK_PATTERN_ON_OFF_SWITCH:
1986                 case FEEDBACK_PATTERN_REORDER:
1987                 case FEEDBACK_PATTERN_CURSOR_MOVE:
1988                         if (!feedbackstatus)
1989                                 return true;
1990                         break;
1991                 case FEEDBACK_PATTERN_LOWBATT:
1992                 case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
1993                 case FEEDBACK_PATTERN_CHARGERCONN:
1994                 case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
1995                         if (dnd_mode || theater_mode || goodnight_mode)
1996                                 return true;
1997                         break;
1998                 case FEEDBACK_PATTERN_BT_DISCONNECTED:
1999                         if (goodnight_mode)
2000                                 return true;
2001                 default:
2002                         break;
2003                 }
2004         }
2005         return false;
2006 }
2007 //LCOV_EXCL_STOP
2008
2009 //LCOV_EXCL_START
2010 static bool common_get_always_off_case(int type, int pattern)
2011 {
2012         switch (pattern) {
2013         case FEEDBACK_PATTERN_TAP ... FEEDBACK_PATTERN_SIP:
2014         case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
2015                 if (CHECK_SOUND(type) && !is_touch_sndstatus())
2016                         return true;
2017                 break;
2018         case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
2019                 if (CHECK_SOUND(type) && !is_keytone_sndstatus())
2020                         return true;
2021                 break;
2022         default:
2023                 break;
2024         }
2025         return false;
2026 }
2027 //LCOV_EXCL_STOP
2028
2029 static bool profile_get_always_off_case(int type, int pattern)
2030 {
2031         int prof;
2032
2033         prof = get_profile();
2034
2035         if (prof == PROFILE_MOBILE)
2036                 return mobile_get_always_off_case(type, pattern);
2037 //LCOV_EXCL_START
2038         else if (prof == PROFILE_WEARABLE)
2039                 return wearable_get_always_off_case(type, pattern);
2040         else
2041                 return common_get_always_off_case(type, pattern);
2042 //LCOV_EXCL_STOP
2043 }
2044
2045 //LCOV_EXCL_START
2046 static int wearable_get_strong_buzz(int pattern)
2047 {
2048         int changed_pattern = pattern;
2049
2050         switch (pattern) {
2051         case FEEDBACK_PATTERN_BT_DISCONNECTED:
2052                 if (disconnect_alert_mode % BUZZ_CONVERTED)
2053                         changed_pattern = S2;
2054                 break;
2055         case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
2056         case FEEDBACK_PATTERN_KEEP_THIS_PACE:
2057         case FEEDBACK_PATTERN_SHEALTH_GENTLE_ALERT:
2058         case FEEDBACK_PATTERN_HEALTH_PACE:
2059         case FEEDBACK_PATTERN_GOAL_ACHIEVED:
2060         case FEEDBACK_PATTERN_INACTIVE_TIME:
2061         case FEEDBACK_PATTERN_INACTIVE_FINE:
2062                 if (vib_call_index % BUZZ_CONVERTED)
2063                         changed_pattern = J_WHB;
2064                 break;
2065         case FEEDBACK_PATTERN_SHEALTH_NOTICE:
2066                 if (vib_call_index % BUZZ_CONVERTED)
2067                         changed_pattern = J_WB;
2068                 break;
2069         default:
2070                 break;
2071         }
2072         return changed_pattern;
2073 }
2074 //LCOV_EXCL_STOP
2075
2076 static int profile_get_strong_buzz(int pattern)
2077 {
2078         int prof = get_profile();
2079
2080 //LCOV_EXCL_START
2081         if (prof == PROFILE_WEARABLE)
2082                 return wearable_get_strong_buzz(pattern);
2083 //LCOV_EXCL_STOP
2084         return pattern;
2085 }
2086
2087 //LCOV_EXCL_START
2088 static int mobile_get_strength_type(int type, int pattern)
2089 {
2090         if (CHECK_SOUND(type)) {
2091                 if (pattern == FEEDBACK_PATTERN_TAP)
2092                         return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_TOUCH;
2093                 else if (pattern >= FEEDBACK_PATTERN_KEY0 && pattern <= FEEDBACK_PATTERN_KEY_BACK)
2094                         return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_DIALER;
2095                 else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY)
2096                         return VOLUME_TYPE_RINGTONE;
2097                 else if (camerastatus && shutter_sndstatus && pattern == FEEDBACK_PATTERN_SCREEN_CAPTURE)
2098                         return VOLUME_TYPE_FIXED;
2099                 else
2100                         return VOLUME_TYPE_SYSTEM;
2101         } else if (CHECK_VIBRATION(type)) {
2102                 if (pattern >= FEEDBACK_PATTERN_MESSAGE &&
2103                     pattern <= FEEDBACK_PATTERN_GENERAL)
2104                         return FEEDBACK_LEVEL(noti_level);
2105                 else
2106                         return FEEDBACK_LEVEL(vib_level);
2107         }
2108
2109         return -EINVAL;
2110 }
2111 //LCOV_EXCL_STOP
2112
2113 //LCOV_EXCL_START
2114 static int wearable_get_strength_type(int type, int pattern)
2115 {
2116         if (CHECK_SOUND(type)) {
2117                 if (pattern == FEEDBACK_PATTERN_TAP)
2118                         return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_TOUCH;
2119                 else if (pattern >= FEEDBACK_PATTERN_KEY0 && pattern <= FEEDBACK_PATTERN_KEY_BACK)
2120                         return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_DIALER;
2121                 else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY || pattern == FEEDBACK_PATTERN_SILENT_OFF ||
2122             (pattern >= FEEDBACK_PATTERN_RING_1 && pattern <= FEEDBACK_PATTERN_RING_8_STRONG_BUZZ))
2123                         return VOLUME_TYPE_RINGTONE;
2124                 else if (camerastatus && shutter_sndstatus && pattern == FEEDBACK_PATTERN_SCREEN_CAPTURE)
2125                         return VOLUME_TYPE_FIXED;
2126                 else if (pattern == FEEDBACK_PATTERN_INACTIVE_FINE ||
2127             pattern == FEEDBACK_PATTERN_INACTIVE_TIME ||
2128             pattern == FEEDBACK_PATTERN_HEALTH_PACE)
2129                         return VOLUME_TYPE_NOTIFICATION;
2130                 else if (pattern == FEEDBACK_PATTERN_GOAL_ACHIEVED ||
2131             pattern == FEEDBACK_PATTERN_KEEP_THIS_PACE ||
2132             pattern == FEEDBACK_PATTERN_EXERCISE_COUNT ||
2133             pattern == FEEDBACK_PATTERN_START_CUE)
2134                         return VOLUME_TYPE_MEDIA;
2135                 return VOLUME_TYPE_SYSTEM;
2136         } else if (CHECK_VIBRATION(type)) {
2137                 if ((pattern >= FEEDBACK_PATTERN_TAP && pattern <= FEEDBACK_PATTERN_HW_HOLD) ||
2138             pattern == FEEDBACK_PATTERN_END_EFFECT ||
2139             (pattern == FEEDBACK_PATTERN_VOICE_START || pattern == FEEDBACK_PATTERN_VOICE_STOP) ||
2140             (pattern >= FEEDBACK_PATTERN_END_EFFECT_FINE && pattern <= FEEDBACK_PATTERN_FUNCTION) ||
2141             (pattern == FEEDBACK_PATTERN_ON_OFF_SWITCH) ||
2142             (pattern == FEEDBACK_PATTERN_CURSOR_MOVE || pattern == FEEDBACK_PATTERN_PICKER)) {
2143                         _D("use default level");
2144                         return FEEDBACK_LEVEL(DEFAULT_VIB_LEVEL);
2145                 }
2146                 if (pattern == FEEDBACK_PATTERN_FIND_MY_GEAR)
2147             return MAX_VIB_LEVEL;
2148
2149                 return FEEDBACK_LEVEL(noti_level);
2150         }
2151         return -EINVAL;
2152 }
2153 //LCOV_EXCL_STOP
2154
2155 //LCOV_EXCL_START
2156 static int common_get_strength_type(int type, int pattern)
2157 {
2158         if (CHECK_SOUND(type)) {
2159                 if (pattern == FEEDBACK_PATTERN_TAP)
2160                         return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_TOUCH;
2161                 else if (pattern >= FEEDBACK_PATTERN_KEY0 && pattern <= FEEDBACK_PATTERN_KEY_BACK)
2162                         return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_DIALER;
2163                 else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY)
2164                         return VOLUME_TYPE_RINGTONE;
2165                 else
2166                         return VOLUME_TYPE_SYSTEM;
2167         } else if (CHECK_VIBRATION(type)) {
2168                 return FEEDBACK_LEVEL(DEFAULT_VIB_LEVEL);
2169         }
2170
2171         return -EINVAL;
2172 }
2173 //LCOV_EXCL_STOP
2174
2175 static int profile_get_strength_type(int type, int pattern)
2176 {
2177         int prof;
2178
2179         prof = get_profile();
2180
2181         if (prof == PROFILE_MOBILE)
2182                 return mobile_get_strength_type(type, pattern);
2183 //LCOV_EXCL_START
2184         else if (prof == PROFILE_WEARABLE)
2185                 return wearable_get_strength_type(type, pattern);
2186         else
2187                 return common_get_strength_type(type, pattern);
2188 //LCOV_EXCL_STOP
2189 }
2190
2191 //LCOV_EXCL_START
2192 static char *wearable_get_path(int pattern)
2193 {
2194         char *data = NULL;
2195
2196         if (pattern >= FEEDBACK_PATTERN_RING_1 && pattern <= FEEDBACK_PATTERN_RING_8_STRONG_BUZZ)
2197                 data = snd_call_path;
2198         else if (pattern >= FEEDBACK_PATTERN_NOTIFICATION_1 && pattern <= FEEDBACK_PATTERN_NOTIFICATION_8_STRONG_BUZZ)
2199                 data = snd_noti_path;
2200         return data;
2201 }
2202 //LCOV_EXCL_STOP
2203
2204 static char *profile_get_path(int pattern)
2205 {
2206         int prof = get_profile();
2207
2208 //LCOV_EXCL_START
2209         if (prof == PROFILE_WEARABLE)
2210                 return wearable_get_path(pattern);
2211 //LCOV_EXCL_STOP
2212         return NULL;
2213 }
2214
2215 static const struct profile_ops feedback_profile_ops = {
2216         .profile               = profile_get_name,
2217         .init                  = profile_init,
2218         .exit                  = profile_exit,
2219         .get_switched_pattern  = profile_get_switched_pattern,
2220         .get_always_alert_case = profile_get_always_alert_case,
2221         .get_always_off_case   = profile_get_always_off_case,
2222         .get_strength_type     = profile_get_strength_type,
2223         .get_priority          = profile_get_priority,
2224         .get_strong_buzz       = profile_get_strong_buzz,
2225         .is_notification_type  = profile_is_notification_type,
2226         .max_type              = FEEDBACK_TYPE_END,
2227         .max_pattern           = FEEDBACK_PATTERN_INTERNAL_END,
2228         .str_type              = profile_str_type,
2229         .get_num_of_pattern    = profile_get_num_of_pattern,
2230         .str_pattern           = profile_str_pattern,
2231         .get_pattern_enum      = profile_get_pattern_enum,
2232         .get_path              = profile_get_path,
2233 };
2234
2235 PROFILE_OPS_REGISTER(&feedback_profile_ops);