3 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
23 #include <system_info.h>
27 #include "feedback-internal.h"
31 #define BUZZ_CONVERTED 2
32 #define MAX_VIB_LEVEL 2
35 #ifndef VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL
36 #define VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL "db/setting/sound/vibrate_when_notification"
38 #ifndef VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL
39 #define VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL "db/setting/sound/haptic_feedback_on"
43 #ifndef VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT
44 #define VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT "db/setting/sound/noti/vibration_type"
47 #ifndef VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT
48 #define VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT "db/setting/disconnect_alert/type"
52 static const char *profile_str_type[] = {
54 "FEEDBACK_TYPE_SOUND",
55 "FEEDBACK_TYPE_VIBRATION",
58 static const struct pattern_field mobile_str_pattern[] = {
59 {"FEEDBACK_PATTERN_TAP", FEEDBACK_PATTERN_TAP},
60 {"FEEDBACK_PATTERN_SIP", FEEDBACK_PATTERN_SIP},
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},
77 {"FEEDBACK_PATTERN_HW_TAP", FEEDBACK_PATTERN_HW_TAP},
78 {"FEEDBACK_PATTERN_HW_HOLD", FEEDBACK_PATTERN_HW_HOLD},
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},
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},
106 {"FEEDBACK_PATTERN_OUTGOING_CALL", FEEDBACK_PATTERN_OUTGOING_CALL},
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},
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},
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},
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},
160 static const struct pattern_field wearable_str_pattern[] = {
161 {"FEEDBACK_PATTERN_TAP", FEEDBACK_PATTERN_TAP},
162 {"FEEDBACK_PATTERN_SIP", FEEDBACK_PATTERN_SIP},
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},
179 {"FEEDBACK_PATTERN_HW_TAP", FEEDBACK_PATTERN_HW_TAP},
180 {"FEEDBACK_PATTERN_HW_HOLD", FEEDBACK_PATTERN_HW_HOLD},
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},
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},
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},
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},
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},
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},
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},
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},
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},
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},
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 */
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},
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},
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},
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},
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},
664 FEEDBACK_STANDARD_START = 2000,
746 FEEDBACK_STANDARD_END,
747 } feedback_standard_pattern_e;
749 static const struct pattern_field wearable_str_standard[] = {
759 {"H_LIGHT", H_LIGHT},
765 {"CMAS_CA", CMAS_CA},
783 {"J_WB_10", J_WB_10},
801 {"K_WB_10", K_WB_10},
809 {"T_LIGHT", T_LIGHT},
822 static const struct pattern_field mobile_str_standard[] = {
837 {"CMAS_CA", CMAS_CA},
843 PROFILE_WEARABLE = 2,
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;
864 static int theater_mode;
865 static int goodnight_mode;
866 static int disconnect_alert_mode;
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"
874 static profile_e get_profile(void)
878 char *profile = NULL;
884 ret_val = system_info_get_platform_string(PROFILE, &profile);
886 _E("Cannot get profile(%d)", ret_val); //LCOV_EXCL_LINE system error
887 return PROFILE_NONE; //LCOV_EXCL_LINE
890 len = strlen(profile) + 1;
891 if (!strncmp(PROFILE_MOBILE_STRING, profile, len))
892 set = PROFILE_MOBILE;
894 else if (!strncmp(PROFILE_WEARABLE_STRING, profile, len))
895 set = PROFILE_WEARABLE;
896 else if (!strncmp(PROFILE_DA_STRING, profile, len))
899 set = PROFILE_COMMON;
906 //LCOV_EXCL_START unused function
907 static char *profile_get_name()
914 prof = get_profile();
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;
923 profile_name = PROFILE_COMMON_STRING;
929 /* Return how many patterns profile supports */
930 static int profile_get_num_of_pattern()
934 prof = get_profile();
936 if (prof == PROFILE_MOBILE)
937 return ARR_SIZE(mobile_str_pattern);
939 else if (prof == PROFILE_WEARABLE)
940 return ARR_SIZE(wearable_str_pattern);
942 return ARR_SIZE(all_str_pattern);
946 static int profile_get_num_of_standard(void)
948 static int size = -1;
954 prof = get_profile();
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);
967 static const char *profile_str_pattern(int pattern)
972 prof = get_profile();
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;
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;
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;
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;
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;
1004 static int profile_get_pattern_enum(char *pattern)
1010 prof = get_profile();
1012 len = strlen(pattern) + 1;
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;
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;
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;
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;
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;
1043 //LCOV_EXCL_START Not called Callback
1044 static void feedback_callstatus_cb(keynode_t *key, void* data)
1046 callstatus = vconf_keynode_get_int(key);
1049 static void feedback_lock_sndstatus_cb(keynode_t *key, void* data)
1051 lock_sndstatus = vconf_keynode_get_bool(key);
1054 static void feedback_camerastatus_cb(keynode_t *key, void* data)
1056 camerastatus = vconf_keynode_get_int(key);
1059 static void feedback_noti_vibstatus_cb(keynode_t *key, void* data)
1061 noti_vibstatus = vconf_keynode_get_bool(key);
1064 static void feedback_vib_cb(keynode_t *key, void* data)
1066 vib_level = vconf_keynode_get_int(key);
1069 static void feedback_noti_cb(keynode_t *key, void* data)
1071 noti_level = vconf_keynode_get_int(key);
1074 static void feedback_feedbackstatus_cb(keynode_t *key, void* data)
1076 feedbackstatus = vconf_keynode_get_bool(key);
1079 static void feedback_vib_when_ring_cb(keynode_t *key, void* data)
1081 vib_when_ring = vconf_keynode_get_bool(key);
1084 static void snd_noti_path_cb(keynode_t *key, void* data)
1086 char* path = vconf_keynode_get_str(key);
1092 if (stat(path, &st) < 0)
1094 snprintf(snd_noti_path, PATH_MAX, "%s", path);
1097 static void snd_call_path_cb(keynode_t *key, void* data)
1099 char* path = vconf_keynode_get_str(key);
1105 if (stat(path, &st) < 0)
1107 snprintf(snd_call_path, PATH_MAX, "%s", path);
1110 static void vib_noti_type_cb(keynode_t *key, void* data)
1112 vib_noti_index = vconf_keynode_get_int(key);
1115 static void vib_call_type_cb(keynode_t *key, void* data)
1117 vib_call_index = vconf_keynode_get_int(key);
1120 static void feedback_dnd_mode_cb(keynode_t *key, void* data)
1122 dnd_mode = vconf_keynode_get_bool(key);
1125 static void feedback_theater_mode_cb(keynode_t *key, void* data)
1127 theater_mode = vconf_keynode_get_bool(key);
1130 static void feedback_goodnight_mode_cb(keynode_t *key, void* data)
1132 goodnight_mode = vconf_keynode_get_bool(key);
1135 static void feedback_disconnect_alert_mode_cb(keynode_t *key, void* data)
1137 disconnect_alert_mode = vconf_keynode_get_int(key);
1141 static void profile_init(void)
1148 prof = get_profile();
1150 if (prof == PROFILE_COMMON || prof == PROFILE_DA)
1151 return; //LCOV_EXCL_LINE
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);
1158 _W("VCONFKEY_SETAPPL_SOUND_LOCK_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
1161 /* check call status */
1162 if (vconf_get_int(VCONFKEY_CALL_STATE, &callstatus) < 0)
1163 _W("VCONFKEY_CALL_STATE ==> FAIL!!"); //LCOV_EXCL_LINE
1165 /* check camera status */
1166 if (vconf_get_int(VCONFKEY_CAMERA_STATE, &camerastatus) < 0)
1167 _W("VCONFKEY_CAMERA_STATE ==> FAIL!!"); //LCOV_EXCL_LINE
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
1174 /* check vibration status */
1175 if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, ¬i_vibstatus) < 0)
1176 _W("VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
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
1182 /* check noti_level */
1183 if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, ¬i_level) < 0)
1184 _W("VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT ==> FAIL!!"); //LCOV_EXCL_LINE
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
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
1193 path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
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
1200 snprintf(snd_noti_path, PATH_MAX, "%s", path);
1204 snprintf(snd_noti_path, PATH_MAX, "NULL"); //LCOV_EXCL_LINE
1206 path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
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
1213 snprintf(snd_call_path, PATH_MAX, "%s", path);
1217 snprintf(snd_call_path, PATH_MAX, "NULL"); //LCOV_EXCL_LINE
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
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
1225 if (vconf_get_bool(VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL, &dnd_mode) < 0)
1226 _W("VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
1228 if (vconf_get_bool(VCONFKEY_SETAPPL_THEATER_MODE_ENABLE, &theater_mode) < 0)
1229 _W("VCONFKEY_SETAPPL_THEATER_MODE_ENABLE ==> FAIL!!"); //LCOV_EXCL_LINE
1231 if (vconf_get_bool(VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE, &goodnight_mode) < 0)
1232 _W("VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE ==> FAIL!!"); //LCOV_EXCL_LINE
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
1237 /* add watch for status value */
1238 ret_val = vconf_notify_key_changed(VCONFKEY_CALL_STATE, feedback_callstatus_cb, NULL);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
1282 _W("Add watch for VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT failed"); //LCOV_EXCL_LINE
1286 static void profile_exit(void)
1291 prof = get_profile();
1293 if (prof == PROFILE_COMMON || prof == PROFILE_DA)
1296 else if (prof == PROFILE_MOBILE) {
1297 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, feedback_lock_sndstatus_cb);
1299 _W("Remove watch for VCONFKEY_SETAPPL_SOUND_LOCK_BOOL failed"); //LCOV_EXCL_LINE
1303 ret_val = vconf_ignore_key_changed(VCONFKEY_CALL_STATE, feedback_callstatus_cb);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
1347 _W("Remove watch for VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT failed"); //LCOV_EXCL_LINE
1352 static int wearable_get_switched_pattern(int pattern)
1354 int changed_pattern = pattern;
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;
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;
1372 case FEEDBACK_PATTERN_WAKEUP:
1373 case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1375 changed_pattern = FEEDBACK_PATTERN_WAKEUP_ON_CALL;
1377 case FEEDBACK_PATTERN_TIMER:
1378 case FEEDBACK_PATTERN_INTERNAL_TIMER:
1380 changed_pattern = FEEDBACK_PATTERN_TIMER_ON_CALL;
1386 return changed_pattern;
1391 static int mobile_get_switched_pattern(int pattern)
1393 int changed_pattern = pattern;
1395 if (callstatus == VCONFKEY_CALL_OFF)
1396 return changed_pattern;
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;
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;
1426 return changed_pattern;
1430 static bool profile_get_switched_pattern(int pattern, int *switched)
1432 int changed_pattern = pattern;
1433 int prof = get_profile();
1435 if (!switched || prof == PROFILE_COMMON || prof == PROFILE_DA)
1439 if (prof == PROFILE_WEARABLE)
1440 changed_pattern = wearable_get_switched_pattern(changed_pattern);
1442 changed_pattern = mobile_get_switched_pattern(changed_pattern);
1444 if (changed_pattern != pattern) {
1445 *switched = changed_pattern;
1453 static bool mobile_is_notification_type(int 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:
1476 static bool wearable_is_notification_type(int 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:
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:
1513 static bool profile_is_notification_type(int pattern)
1517 prof = get_profile();
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);
1530 static int mobile_get_priority(int 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;
1548 return PRIORITY_MIDDLE;
1553 static int wearable_get_priority(int pattern)
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;
1583 static int profile_get_priority(int pattern)
1587 prof = get_profile();
1590 if (prof == PROFILE_MOBILE)
1591 return mobile_get_priority(pattern);
1592 else if (prof == PROFILE_WEARABLE)
1593 return wearable_get_priority(pattern);
1595 return PRIORITY_MIDDLE;
1600 static bool mobile_get_always_alert_case(int type, int pattern)
1605 case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
1606 case FEEDBACK_PATTERN_HOLD:
1607 if (CHECK_VIBRATION(type) && feedbackstatus)
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))
1617 case FEEDBACK_PATTERN_MESSAGE:
1618 case FEEDBACK_PATTERN_EMAIL:
1619 if (CHECK_VIBRATION(type) && noti_vibstatus)
1622 case FEEDBACK_PATTERN_TIMER:
1623 case FEEDBACK_PATTERN_INTERNAL_TIMER:
1624 case FEEDBACK_PATTERN_TIMER_ON_CALL:
1625 if (CHECK_VIBRATION(type))
1628 case FEEDBACK_PATTERN_WAKEUP:
1629 case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1630 case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
1632 case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
1633 case FEEDBACK_PATTERN_EMAIL_ON_CALL:
1634 case FEEDBACK_PATTERN_GENERAL_ON_CALL:
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))
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:
1652 case FEEDBACK_PATTERN_SCREEN_CAPTURE:
1653 if (CHECK_SOUND(type) && camerastatus && shutter_sndstatus)
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)
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))
1668 case FEEDBACK_PATTERN_CALLCONNECT:
1669 case FEEDBACK_PATTERN_DISCALLCONNECT:
1679 static bool wearable_is_system_type(int pattern)
1682 case FEEDBACK_PATTERN_POWERON ... FEEDBACK_PATTERN_HOURLY_ALERT:
1683 case FEEDBACK_PATTERN_TEMPERATURE_WARNING ... FEEDBACK_PATTERN_COOLDOWN_WARNING_2:
1689 static bool wearable_get_always_alert_case(int type, int pattern)
1693 if (CHECK_SOUND(type)) {
1694 if ((wearable_is_notification_type(pattern) || wearable_is_system_type(pattern)) &&
1696 _W("skip %s sound during call", profile_str_pattern(pattern));
1700 case FEEDBACK_PATTERN_WAKEUP:
1701 case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1702 case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
1704 case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
1705 case FEEDBACK_PATTERN_EMAIL_ON_CALL:
1706 case FEEDBACK_PATTERN_GENERAL_ON_CALL:
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:
1715 case FEEDBACK_PATTERN_SCREEN_CAPTURE:
1716 if (camerastatus && shutter_sndstatus)
1719 case FEEDBACK_PATTERN_OUTGOING_CALL:
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()) &&
1728 _W("alert %s vibration during call", profile_str_pattern(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:
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:
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:
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())
1817 case FEEDBACK_PATTERN_RINGER:
1818 case FEEDBACK_PATTERN_RINGER_STRONG_BUZZ:
1819 case FEEDBACK_PATTERN_RING_1 ... FEEDBACK_PATTERN_RING_10_STRONG_BUZZ:
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");
1830 case FEEDBACK_PATTERN_FIND_MY_GEAR:
1836 if (pattern > FEEDBACK_STANDARD_START && pattern < FEEDBACK_STANDARD_END)
1844 static bool common_get_always_alert_case(int type, int pattern)
1847 case FEEDBACK_PATTERN_SIP:
1848 case FEEDBACK_PATTERN_TIMER:
1849 if (CHECK_VIBRATION(type))
1852 case FEEDBACK_PATTERN_WAKEUP:
1861 static bool profile_get_always_alert_case(int type, int pattern)
1865 prof = get_profile();
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);
1873 return common_get_always_alert_case(type, pattern);
1878 static bool mobile_get_always_off_case(int type, int pattern)
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
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
1894 case FEEDBACK_PATTERN_TAP:
1895 case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
1896 if (CHECK_SOUND(type) && !is_touch_sndstatus())
1899 case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
1900 if (CHECK_SOUND(type) && !is_keytone_sndstatus())
1902 else if (CHECK_VIBRATION(type) && !feedbackstatus)
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)
1920 static bool wearable_get_always_off_case(int type, int pattern)
1924 if (CHECK_SOUND(type)) {
1925 if ((wearable_is_notification_type(pattern) || wearable_is_system_type(pattern)) &&
1927 _W("skip %d sound during call", pattern);
1931 if (goodnight_mode && wearable_is_system_type(pattern)) {
1932 _W("Skip %d sound in good night mode", pattern);
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");
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)
1950 case FEEDBACK_PATTERN_SIP ... FEEDBACK_PATTERN_SIP_FJKEY:
1951 if (theater_mode || goodnight_mode)
1954 case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
1955 if (!is_keytone_sndstatus() || theater_mode || goodnight_mode)
1958 case FEEDBACK_PATTERN_LOCK:
1959 case FEEDBACK_PATTERN_UNLOCK:
1960 if (!lock_sndstatus)
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)
1974 } else if (CHECK_VIBRATION(type)) {
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)
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)
1998 case FEEDBACK_PATTERN_BT_DISCONNECTED:
2010 static bool common_get_always_off_case(int type, int 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())
2018 case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
2019 if (CHECK_SOUND(type) && !is_keytone_sndstatus())
2029 static bool profile_get_always_off_case(int type, int pattern)
2033 prof = get_profile();
2035 if (prof == PROFILE_MOBILE)
2036 return mobile_get_always_off_case(type, pattern);
2038 else if (prof == PROFILE_WEARABLE)
2039 return wearable_get_always_off_case(type, pattern);
2041 return common_get_always_off_case(type, pattern);
2046 static int wearable_get_strong_buzz(int pattern)
2048 int changed_pattern = pattern;
2051 case FEEDBACK_PATTERN_BT_DISCONNECTED:
2052 if (disconnect_alert_mode % BUZZ_CONVERTED)
2053 changed_pattern = S2;
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;
2065 case FEEDBACK_PATTERN_SHEALTH_NOTICE:
2066 if (vib_call_index % BUZZ_CONVERTED)
2067 changed_pattern = J_WB;
2072 return changed_pattern;
2076 static int profile_get_strong_buzz(int pattern)
2078 int prof = get_profile();
2081 if (prof == PROFILE_WEARABLE)
2082 return wearable_get_strong_buzz(pattern);
2088 static int mobile_get_strength_type(int type, int pattern)
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;
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);
2106 return FEEDBACK_LEVEL(vib_level);
2114 static int wearable_get_strength_type(int type, int pattern)
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);
2146 if (pattern == FEEDBACK_PATTERN_FIND_MY_GEAR)
2147 return MAX_VIB_LEVEL;
2149 return FEEDBACK_LEVEL(noti_level);
2156 static int common_get_strength_type(int type, int pattern)
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;
2166 return VOLUME_TYPE_SYSTEM;
2167 } else if (CHECK_VIBRATION(type)) {
2168 return FEEDBACK_LEVEL(DEFAULT_VIB_LEVEL);
2175 static int profile_get_strength_type(int type, int pattern)
2179 prof = get_profile();
2181 if (prof == PROFILE_MOBILE)
2182 return mobile_get_strength_type(type, pattern);
2184 else if (prof == PROFILE_WEARABLE)
2185 return wearable_get_strength_type(type, pattern);
2187 return common_get_strength_type(type, pattern);
2192 static char *wearable_get_path(int pattern)
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;
2204 static char *profile_get_path(int pattern)
2206 int prof = get_profile();
2209 if (prof == PROFILE_WEARABLE)
2210 return wearable_get_path(pattern);
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,
2235 PROFILE_OPS_REGISTER(&feedback_profile_ops);