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 common_str_pattern[] = {
402 {"FEEDBACK_PATTERN_TAP", FEEDBACK_PATTERN_TAP},
403 {"FEEDBACK_PATTERN_SIP", FEEDBACK_PATTERN_SIP},
405 {"FEEDBACK_PATTERN_KEY0", FEEDBACK_PATTERN_KEY0},
406 {"FEEDBACK_PATTERN_KEY1", FEEDBACK_PATTERN_KEY1},
407 {"FEEDBACK_PATTERN_KEY2", FEEDBACK_PATTERN_KEY2},
408 {"FEEDBACK_PATTERN_KEY3", FEEDBACK_PATTERN_KEY3},
409 {"FEEDBACK_PATTERN_KEY4", FEEDBACK_PATTERN_KEY4},
410 {"FEEDBACK_PATTERN_KEY5", FEEDBACK_PATTERN_KEY5},
411 {"FEEDBACK_PATTERN_KEY6", FEEDBACK_PATTERN_KEY6},
412 {"FEEDBACK_PATTERN_KEY7", FEEDBACK_PATTERN_KEY7},
413 {"FEEDBACK_PATTERN_KEY8", FEEDBACK_PATTERN_KEY8},
414 {"FEEDBACK_PATTERN_KEY9", FEEDBACK_PATTERN_KEY9},
415 {"FEEDBACK_PATTERN_KEY_STAR", FEEDBACK_PATTERN_KEY_STAR},
416 {"FEEDBACK_PATTERN_KEY_SHARP", FEEDBACK_PATTERN_KEY_SHARP},
417 {"FEEDBACK_PATTERN_KEY_BACK", FEEDBACK_PATTERN_KEY_BACK},
418 {"FEEDBACK_PATTERN_HOLD", FEEDBACK_PATTERN_HOLD},
420 {"FEEDBACK_PATTERN_HW_TAP", FEEDBACK_PATTERN_HW_TAP},
421 {"FEEDBACK_PATTERN_HW_HOLD", FEEDBACK_PATTERN_HW_HOLD},
423 {"FEEDBACK_PATTERN_MESSAGE", FEEDBACK_PATTERN_MESSAGE},
425 {"FEEDBACK_PATTERN_EMAIL", FEEDBACK_PATTERN_EMAIL},
427 {"FEEDBACK_PATTERN_WAKEUP", FEEDBACK_PATTERN_WAKEUP},
429 {"FEEDBACK_PATTERN_SCHEDULE", FEEDBACK_PATTERN_SCHEDULE},
431 {"FEEDBACK_PATTERN_TIMER", FEEDBACK_PATTERN_TIMER},
433 {"FEEDBACK_PATTERN_GENERAL", FEEDBACK_PATTERN_GENERAL},
435 {"FEEDBACK_PATTERN_POWERON", FEEDBACK_PATTERN_POWERON},
436 {"FEEDBACK_PATTERN_POWEROFF", FEEDBACK_PATTERN_POWEROFF},
437 {"FEEDBACK_PATTERN_CHARGERCONN", FEEDBACK_PATTERN_CHARGERCONN},
439 {"FEEDBACK_PATTERN_CHARGING_ERROR", FEEDBACK_PATTERN_CHARGING_ERROR},
441 {"FEEDBACK_PATTERN_FULLCHARGED", FEEDBACK_PATTERN_FULLCHARGED},
443 {"FEEDBACK_PATTERN_LOWBATT", FEEDBACK_PATTERN_LOWBATT},
445 {"FEEDBACK_PATTERN_LOCK", FEEDBACK_PATTERN_LOCK},
446 {"FEEDBACK_PATTERN_UNLOCK", FEEDBACK_PATTERN_UNLOCK},
448 {"FEEDBACK_PATTERN_VIBRATION_ON", FEEDBACK_PATTERN_VIBRATION_ON},
449 {"FEEDBACK_PATTERN_SILENT_OFF", FEEDBACK_PATTERN_SILENT_OFF},
450 {"FEEDBACK_PATTERN_BT_CONNECTED", FEEDBACK_PATTERN_BT_CONNECTED},
451 {"FEEDBACK_PATTERN_BT_DISCONNECTED", FEEDBACK_PATTERN_BT_DISCONNECTED},
453 {"FEEDBACK_PATTERN_LIST_REORDER", FEEDBACK_PATTERN_LIST_REORDER},
454 {"FEEDBACK_PATTERN_LIST_SLIDER", FEEDBACK_PATTERN_LIST_SLIDER},
455 {"FEEDBACK_PATTERN_VOLUME_KEY", FEEDBACK_PATTERN_VOLUME_KEY},
459 FEEDBACK_STANDARD_START = 2000,
541 FEEDBACK_STANDARD_END,
542 } feedback_standard_pattern_e;
544 static const struct pattern_field wearable_str_standard[] = {
554 {"H_LIGHT", H_LIGHT},
560 {"CMAS_CA", CMAS_CA},
578 {"J_WB_10", J_WB_10},
596 {"K_WB_10", K_WB_10},
604 {"T_LIGHT", T_LIGHT},
617 static const struct pattern_field mobile_str_standard[] = {
632 {"CMAS_CA", CMAS_CA},
638 PROFILE_WEARABLE = 2,
642 static int callstatus;
643 static int lock_sndstatus;
644 static int camerastatus;
645 static int shutter_sndstatus;
646 static int noti_vibstatus;
647 static int vib_level;
648 static int noti_level;
649 static int feedbackstatus;
650 static int vib_when_ring;
651 static int vib_noti_index;
652 static int vib_call_index;
653 static char snd_noti_path[PATH_MAX];
654 static char snd_call_path[PATH_MAX];
655 static char *profile_name = NULL;
658 static int theater_mode;
659 static int goodnight_mode;
660 static int disconnect_alert_mode;
662 #define PROFILE "tizen.org/feature/profile"
663 #define PROFILE_MOBILE_STRING "mobile"
664 #define PROFILE_WEARABLE_STRING "wearable"
665 #define PROFILE_COMMON_STRING "common"
667 static profile_e get_profile(void)
671 char *profile = NULL;
677 ret_val = system_info_get_platform_string(PROFILE, &profile);
679 _E("Cannot get profile(%d)", ret_val); //LCOV_EXCL_LINE system error
680 return PROFILE_NONE; //LCOV_EXCL_LINE
683 len = strlen(profile) + 1;
684 if (!strncmp(PROFILE_MOBILE_STRING, profile, len))
685 set = PROFILE_MOBILE;
687 else if (!strncmp(PROFILE_WEARABLE_STRING, profile, len))
688 set = PROFILE_WEARABLE;
690 set = PROFILE_COMMON;
697 //LCOV_EXCL_START unused function
698 static char *profile_get_name()
705 prof = get_profile();
707 if (prof == PROFILE_MOBILE)
708 profile_name = PROFILE_MOBILE_STRING;
709 else if (prof == PROFILE_WEARABLE)
710 profile_name = PROFILE_WEARABLE_STRING;
712 profile_name = PROFILE_COMMON_STRING;
718 /* Return how many patterns profile supports */
719 static int profile_get_num_of_pattern()
723 prof = get_profile();
725 if (prof == PROFILE_MOBILE)
726 return ARR_SIZE(mobile_str_pattern);
728 else if (prof == PROFILE_WEARABLE)
729 return ARR_SIZE(wearable_str_pattern);
731 return ARR_SIZE(common_str_pattern);
735 static int profile_get_num_of_standard(void)
737 static int size = -1;
743 prof = get_profile();
746 if (prof == PROFILE_MOBILE)
747 size = ARR_SIZE(mobile_str_standard);
748 else if (prof == PROFILE_WEARABLE)
749 size = ARR_SIZE(wearable_str_standard);
756 static const char *profile_str_pattern(int pattern)
761 prof = get_profile();
764 if (prof == PROFILE_MOBILE) {
765 for (i = 0; i < profile_get_num_of_pattern(); i++) {
766 if (pattern == mobile_str_pattern[i].id)
767 return mobile_str_pattern[i].string;
769 for (i = 0; i < profile_get_num_of_standard(); i++) {
770 if (pattern == mobile_str_standard[i].id)
771 return mobile_str_standard[i].string;
773 } else if (prof == PROFILE_WEARABLE) {
774 for (i = 0; i < profile_get_num_of_pattern(); i++) {
775 if (pattern == wearable_str_pattern[i].id)
776 return wearable_str_pattern[i].string;
778 for (i = 0; i < profile_get_num_of_standard(); i++) {
779 if (pattern == wearable_str_standard[i].id)
780 return wearable_str_standard[i].string;
784 for (i = 0; i < profile_get_num_of_pattern(); i++) {
785 if (pattern == common_str_pattern[i].id)
786 return common_str_pattern[i].string;
793 static int profile_get_pattern_enum(char *pattern)
799 prof = get_profile();
801 len = strlen(pattern);
803 if (prof == PROFILE_MOBILE) {
804 for (i = 0; i < profile_get_num_of_pattern(); i++) {
805 if (!strncmp(pattern, mobile_str_pattern[i].string, len))
806 return mobile_str_pattern[i].id;
808 for (i = 0; i < profile_get_num_of_standard(); i++) {
809 if (!strncmp(pattern, mobile_str_standard[i].string, len))
810 return mobile_str_standard[i].id;
812 } else if (prof == PROFILE_WEARABLE) {
813 for (i = 0; i < profile_get_num_of_pattern(); i++) {
814 if (!strncmp(pattern, wearable_str_pattern[i].string, len))
815 return wearable_str_pattern[i].id;
817 for (i = 0; i < profile_get_num_of_standard(); i++) {
818 if (!strncmp(pattern, wearable_str_standard[i].string, len))
819 return wearable_str_standard[i].id;
822 for (i = 0; i < profile_get_num_of_pattern(); i++) {
823 if (!strncmp(pattern, common_str_pattern[i].string, len))
824 return common_str_pattern[i].id;
832 //LCOV_EXCL_START Not called Callback
833 static void feedback_callstatus_cb(keynode_t *key, void* data)
835 callstatus = vconf_keynode_get_int(key);
838 static void feedback_lock_sndstatus_cb(keynode_t *key, void* data)
840 lock_sndstatus = vconf_keynode_get_bool(key);
843 static void feedback_camerastatus_cb(keynode_t *key, void* data)
845 camerastatus = vconf_keynode_get_int(key);
848 static void feedback_noti_vibstatus_cb(keynode_t *key, void* data)
850 noti_vibstatus = vconf_keynode_get_bool(key);
853 static void feedback_vib_cb(keynode_t *key, void* data)
855 vib_level = vconf_keynode_get_int(key);
858 static void feedback_noti_cb(keynode_t *key, void* data)
860 noti_level = vconf_keynode_get_int(key);
863 static void feedback_feedbackstatus_cb(keynode_t *key, void* data)
865 feedbackstatus = vconf_keynode_get_bool(key);
868 static void feedback_vib_when_ring_cb(keynode_t *key, void* data)
870 vib_when_ring = vconf_keynode_get_bool(key);
873 static void snd_noti_path_cb(keynode_t *key, void* data)
875 char* path = vconf_keynode_get_str(key);
881 if (stat(path, &st) < 0)
883 snprintf(snd_noti_path, PATH_MAX, "%s", path);
886 static void snd_call_path_cb(keynode_t *key, void* data)
888 char* path = vconf_keynode_get_str(key);
894 if (stat(path, &st) < 0)
896 snprintf(snd_call_path, PATH_MAX, "%s", path);
899 static void vib_noti_type_cb(keynode_t *key, void* data)
901 vib_noti_index = vconf_keynode_get_int(key);
904 static void vib_call_type_cb(keynode_t *key, void* data)
906 vib_call_index = vconf_keynode_get_int(key);
909 static void feedback_dnd_mode_cb(keynode_t *key, void* data)
911 dnd_mode = vconf_keynode_get_bool(key);
914 static void feedback_theater_mode_cb(keynode_t *key, void* data)
916 theater_mode = vconf_keynode_get_bool(key);
919 static void feedback_goodnight_mode_cb(keynode_t *key, void* data)
921 goodnight_mode = vconf_keynode_get_bool(key);
924 static void feedback_disconnect_alert_mode_cb(keynode_t *key, void* data)
926 disconnect_alert_mode = vconf_keynode_get_int(key);
930 static void profile_init(void)
937 prof = get_profile();
939 if (prof == PROFILE_COMMON)
940 return; //LCOV_EXCL_LINE
942 else if (prof == PROFILE_MOBILE) {
943 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, &lock_sndstatus) < 0)
944 _W("VCONFKEY_SETAPPL_SOUND_LOCK_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
945 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, feedback_lock_sndstatus_cb, NULL);
947 _W("VCONFKEY_SETAPPL_SOUND_LOCK_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
950 /* check call status */
951 if (vconf_get_int(VCONFKEY_CALL_STATE, &callstatus) < 0)
952 _W("VCONFKEY_CALL_STATE ==> FAIL!!"); //LCOV_EXCL_LINE
954 /* check camera status */
955 if (vconf_get_int(VCONFKEY_CAMERA_STATE, &camerastatus) < 0)
956 _W("VCONFKEY_CAMERA_STATE ==> FAIL!!"); //LCOV_EXCL_LINE
958 /* shutter sound policy */
959 /* This vconf is read just once, because this value is not changed in running time. */
960 if (vconf_get_int(VCONFKEY_CAMERA_SHUTTER_SOUND_POLICY, &shutter_sndstatus) < 0)
961 _W("VCONFKEY_CAMERA_SHUTTER_SOUND_POLICY ==> FAIL!!"); //LCOV_EXCL_LINE
963 /* check vibration status */
964 if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, ¬i_vibstatus) < 0)
965 _W("VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
967 /* check vib_level */
968 if (vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vib_level) < 0)
969 _W("VCONFKEY_FEEDBACK_VIBRATION_LEVEL_INT ==> FAIL!!"); //LCOV_EXCL_LINE
971 /* check noti_level */
972 if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, ¬i_level) < 0)
973 _W("VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT ==> FAIL!!"); //LCOV_EXCL_LINE
976 if (vconf_get_bool(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, &feedbackstatus) < 0)
977 _W("VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
979 if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL, &vib_when_ring) < 0)
980 _W("VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
982 path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
984 if (stat(path, &st) < 0) {
985 free(path); //LCOV_EXCL_LINE
986 path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_RINGTONE_DEFAULT_PATH_STR); //LCOV_EXCL_LINE
989 snprintf(snd_noti_path, PATH_MAX, "%s", path);
993 snprintf(snd_noti_path, PATH_MAX, "NULL"); //LCOV_EXCL_LINE
995 path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
997 if (stat(path, &st) < 0) {
998 free(path); //LCOV_EXCL_LINE
999 path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_DEFAULT_PATH_STR); //LCOV_EXCL_LINE
1002 snprintf(snd_call_path, PATH_MAX, "%s", path);
1006 snprintf(snd_call_path, PATH_MAX, "NULL"); //LCOV_EXCL_LINE
1008 if (vconf_get_int(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT, &vib_call_index) < 0)
1009 _W("VCONFKEY_SETAPPL_SETAPPL_CALL_VIBRATION_PATTERN_INT ==> FAIL!!"); //LCOV_EXCL_LINE
1011 if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT, &vib_noti_index) < 0)
1012 _W("VCONFKEY_SETAPPL_SETAPPL_NOTI_VIBRATION_PATTERN_INT ==> FAIL!!"); //LCOV_EXCL_LINE
1014 if (vconf_get_bool(VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL, &dnd_mode) < 0)
1015 _W("VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL ==> FAIL!!"); //LCOV_EXCL_LINE
1017 if (vconf_get_bool(VCONFKEY_SETAPPL_THEATER_MODE_ENABLE, &theater_mode) < 0)
1018 _W("VCONFKEY_SETAPPL_THEATER_MODE_ENABLE ==> FAIL!!"); //LCOV_EXCL_LINE
1020 if (vconf_get_bool(VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE, &goodnight_mode) < 0)
1021 _W("VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE ==> FAIL!!"); //LCOV_EXCL_LINE
1023 if (vconf_get_int(VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT, &disconnect_alert_mode) < 0)
1024 _W("VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT ==> FAIL!!"); //LCOV_EXCL_LINE
1026 /* add watch for status value */
1027 ret_val = vconf_notify_key_changed(VCONFKEY_CALL_STATE, feedback_callstatus_cb, NULL);
1029 _W("Add watch for VCONFKEY_CALL_STATE failed"); //LCOV_EXCL_LINE
1030 ret_val = vconf_notify_key_changed(VCONFKEY_CAMERA_STATE, feedback_camerastatus_cb, NULL);
1032 _W("Add watch for VCONFKEY_CAMERA_STATE failed"); //LCOV_EXCL_LINE
1033 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, feedback_noti_vibstatus_cb, NULL);
1035 _W("Add watch for VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL failed"); //LCOV_EXCL_LINE
1036 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, feedback_vib_cb, NULL);
1038 _W("Add watch for VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT failed"); //LCOV_EXCL_LINE
1039 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, feedback_noti_cb, NULL);
1041 _W("Add watch for VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT failed"); //LCOV_EXCL_LINE
1042 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, feedback_feedbackstatus_cb, NULL);
1044 _W("Add watch for VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL failed"); //LCOV_EXCL_LINE
1045 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL, feedback_vib_when_ring_cb, NULL);
1047 _W("Add watch for VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL failed"); //LCOV_EXCL_LINE
1048 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, snd_noti_path_cb, NULL);
1050 _W("Add watch for VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR failed"); //LCOV_EXCL_LINE
1051 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, snd_call_path_cb, NULL);
1053 _W("Add watch for VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR failed"); //LCOV_EXCL_LINE
1054 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT, vib_noti_type_cb, NULL);
1056 _W("Add watch for VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT failed"); //LCOV_EXCL_LINE
1057 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT, vib_call_type_cb, NULL);
1059 _W("Add watch for VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT failed"); //LCOV_EXCL_LINE
1060 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL, feedback_dnd_mode_cb, NULL);
1062 _W("Add watch for VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL failed"); //LCOV_EXCL_LINE
1063 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_THEATER_MODE_ENABLE, feedback_theater_mode_cb, NULL);
1065 _W("Add watch for VCONFKEY_SETAPPL_THEATER_MODE_ENABLE failed"); //LCOV_EXCL_LINE
1066 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE, feedback_goodnight_mode_cb, NULL);
1068 _W("Add watch for VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE failed"); //LCOV_EXCL_LINE
1069 ret_val = vconf_notify_key_changed(VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT, feedback_disconnect_alert_mode_cb, NULL);
1071 _W("Add watch for VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT failed"); //LCOV_EXCL_LINE
1075 static void profile_exit(void)
1080 prof = get_profile();
1082 if (prof == PROFILE_COMMON)
1085 else if (prof == PROFILE_MOBILE) {
1086 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, feedback_lock_sndstatus_cb);
1088 _W("Remove watch for VCONFKEY_SETAPPL_SOUND_LOCK_BOOL failed"); //LCOV_EXCL_LINE
1092 ret_val = vconf_ignore_key_changed(VCONFKEY_CALL_STATE, feedback_callstatus_cb);
1094 _W("Remove watch for VCONFKEY_CALL_STATE failed"); //LCOV_EXCL_LINE
1095 ret_val = vconf_ignore_key_changed(VCONFKEY_CAMERA_STATE, feedback_camerastatus_cb);
1097 _W("Remove watch for VCONFKEY_CAMERA_STATE failed"); //LCOV_EXCL_LINE
1098 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL, feedback_noti_vibstatus_cb);
1100 _W("Remove watch for VCONFKEY_SETAPPL_VIBRATE_WHEN_NOTIFICATION_BOOL failed"); //LCOV_EXCL_LINE
1101 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, feedback_vib_cb);
1103 _W("Remove watch for VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT failed"); //LCOV_EXCL_LINE
1104 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, feedback_noti_cb);
1106 _W("Remove watch for VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT failed"); //LCOV_EXCL_LINE
1107 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL, feedback_feedbackstatus_cb);
1109 _W("Remove watch for VCONFKEY_SETAPPL_HAPTIC_FEEDBACK_STATUS_BOOL failed"); //LCOV_EXCL_LINE
1110 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL, feedback_vib_when_ring_cb);
1112 _W("Remove watch for VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL failed"); //LCOV_EXCL_LINE
1113 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, snd_noti_path_cb);
1115 _W("Remove watch for VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR failed"); //LCOV_EXCL_LINE
1116 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, snd_call_path_cb);
1118 _W("Remove watch for VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR failed"); //LCOV_EXCL_LINE
1119 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT, vib_noti_type_cb);
1121 _W("Remove watch for VCONFKEY_SETAPPL_NOTI_VIBRATION_PATTERN_INT failed"); //LCOV_EXCL_LINE
1122 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT, vib_call_type_cb);
1124 _W("Remove watch for VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT failed"); //LCOV_EXCL_LINE
1125 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL, feedback_dnd_mode_cb);
1127 _W("Remove watch for VCONFKEY_SETAPPL_BLOCKMODE_WEARABLE_BOOL failed"); //LCOV_EXCL_LINE
1128 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_THEATER_MODE_ENABLE, feedback_theater_mode_cb);
1130 _W("Remove watch for VCONFKEY_SETAPPL_THEATER_MODE_ENABLE failed"); //LCOV_EXCL_LINE
1131 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE, feedback_goodnight_mode_cb);
1133 _W("Remove watch for VCONFKEY_SETAPPL_GOODNIGHT_MODE_ENABLE failed"); //LCOV_EXCL_LINE
1134 ret_val = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT, feedback_disconnect_alert_mode_cb);
1136 _W("Remove watch for VCONFKEY_SETAPPL_DISCONNECT_ALERT_TYPE_INT failed"); //LCOV_EXCL_LINE
1141 static int wearable_get_switched_pattern(int pattern)
1143 int changed_pattern = pattern;
1145 switch (changed_pattern) {
1146 case FEEDBACK_PATTERN_RINGER:
1147 case FEEDBACK_PATTERN_RINGER_STRONG_BUZZ:
1148 changed_pattern = FEEDBACK_PATTERN_RING_1 + vib_call_index;
1150 case FEEDBACK_PATTERN_MESSAGE:
1151 case FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ:
1152 case FEEDBACK_PATTERN_EMAIL:
1153 case FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ:
1154 case FEEDBACK_PATTERN_GENERAL:
1155 case FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ:
1156 case FEEDBACK_PATTERN_3RD_APPLICATION:
1157 case FEEDBACK_PATTERN_COMMUNICATION:
1158 case FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ:
1159 changed_pattern = FEEDBACK_PATTERN_NOTIFICATION_1 + vib_noti_index;
1161 case FEEDBACK_PATTERN_WAKEUP:
1162 case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1164 changed_pattern = FEEDBACK_PATTERN_WAKEUP_ON_CALL;
1166 case FEEDBACK_PATTERN_TIMER:
1167 case FEEDBACK_PATTERN_INTERNAL_TIMER:
1169 changed_pattern = FEEDBACK_PATTERN_TIMER_ON_CALL;
1175 return changed_pattern;
1180 static int mobile_get_switched_pattern(int pattern)
1182 int changed_pattern = pattern;
1184 if (callstatus == VCONFKEY_CALL_OFF)
1185 return changed_pattern;
1187 if (is_sound_mode() &&
1188 pattern != FEEDBACK_PATTERN_WAKEUP && pattern != FEEDBACK_PATTERN_INTERNAL_WAKEUP &&
1189 pattern != FEEDBACK_PATTERN_TIMER && pattern != FEEDBACK_PATTERN_INTERNAL_TIMER)
1190 return changed_pattern;
1192 /* in case of call connected or connecting */
1193 _D("Call status is connected or connecting."); //LCOV_EXCL_LINE
1194 if (changed_pattern == FEEDBACK_PATTERN_MESSAGE)
1195 changed_pattern = FEEDBACK_PATTERN_MESSAGE_ON_CALL;
1196 else if(changed_pattern == FEEDBACK_PATTERN_EMAIL)
1197 changed_pattern = FEEDBACK_PATTERN_EMAIL_ON_CALL;
1198 else if ((changed_pattern == FEEDBACK_PATTERN_WAKEUP) || (pattern == FEEDBACK_PATTERN_INTERNAL_WAKEUP))
1199 changed_pattern = FEEDBACK_PATTERN_WAKEUP_ON_CALL;
1200 else if (changed_pattern == FEEDBACK_PATTERN_SCHEDULE)
1201 changed_pattern = FEEDBACK_PATTERN_SCHEDULE_ON_CALL;
1202 else if ((changed_pattern == FEEDBACK_PATTERN_TIMER) || (pattern == FEEDBACK_PATTERN_INTERNAL_TIMER))
1203 changed_pattern = FEEDBACK_PATTERN_TIMER_ON_CALL;
1204 else if (changed_pattern == FEEDBACK_PATTERN_GENERAL)
1205 changed_pattern = FEEDBACK_PATTERN_GENERAL_ON_CALL;
1206 else if (changed_pattern == FEEDBACK_PATTERN_CHARGERCONN)
1207 changed_pattern = FEEDBACK_PATTERN_CHARGERCONN_ON_CALL;
1208 else if (changed_pattern == FEEDBACK_PATTERN_CHARGING_ERROR)
1209 changed_pattern = FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL;
1210 else if (changed_pattern == FEEDBACK_PATTERN_FULLCHARGED)
1211 changed_pattern = FEEDBACK_PATTERN_FULLCHARGED_ON_CALL;
1212 else if (changed_pattern == FEEDBACK_PATTERN_LOWBATT)
1213 changed_pattern = FEEDBACK_PATTERN_LOWBATT_ON_CALL;
1215 return changed_pattern;
1219 static bool profile_get_switched_pattern(int pattern, int *switched)
1221 int changed_pattern = pattern;
1222 int prof = get_profile();
1224 if (!switched || prof == PROFILE_COMMON)
1228 if (prof == PROFILE_WEARABLE)
1229 changed_pattern = wearable_get_switched_pattern(changed_pattern);
1231 changed_pattern = mobile_get_switched_pattern(changed_pattern);
1233 if (changed_pattern != pattern) {
1234 *switched = changed_pattern;
1242 static bool mobile_is_notification_type(int pattern)
1245 case FEEDBACK_PATTERN_WAKEUP:
1246 case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1247 case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
1248 case FEEDBACK_PATTERN_TIMER:
1249 case FEEDBACK_PATTERN_INTERNAL_TIMER:
1250 case FEEDBACK_PATTERN_TIMER_ON_CALL:
1251 case FEEDBACK_PATTERN_MESSAGE ... FEEDBACK_PATTERN_EMAIL_ON_CALL:
1252 case FEEDBACK_PATTERN_SCHEDULE:
1253 case FEEDBACK_PATTERN_SCHEDULE_ON_CALL:
1254 case FEEDBACK_PATTERN_GENERAL ... FEEDBACK_PATTERN_LOWBATT_ON_CALL:
1255 case FEEDBACK_PATTERN_SAFETY_ALERT:
1256 case FEEDBACK_PATTERN_CMAS:
1257 case FEEDBACK_PATTERN_CMAS_CA:
1265 static bool wearable_is_notification_type(int pattern)
1268 case FEEDBACK_PATTERN_WAKEUP:
1269 case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1270 case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
1271 case FEEDBACK_PATTERN_TIMER:
1272 case FEEDBACK_PATTERN_INTERNAL_TIMER:
1273 case FEEDBACK_PATTERN_TIMER_ON_CALL:
1275 case FEEDBACK_PATTERN_MESSAGE ... FEEDBACK_PATTERN_EMAIL_ON_CALL:
1276 case FEEDBACK_PATTERN_SCHEDULE:
1277 case FEEDBACK_PATTERN_SCHEDULE_ON_CALL:
1278 case FEEDBACK_PATTERN_GENERAL:
1279 case FEEDBACK_PATTERN_GENERAL_ON_CALL:
1280 case FEEDBACK_PATTERN_SMART_ALERT:
1281 case FEEDBACK_PATTERN_SAFETY_ALERT:
1282 case FEEDBACK_PATTERN_CMAS:
1283 case FEEDBACK_PATTERN_CMAS_CA:
1284 case FEEDBACK_PATTERN_3RD_APPLICATION:
1285 case FEEDBACK_PATTERN_TEMPERATURE_WARNING:
1286 case FEEDBACK_PATTERN_COOLDOWN_WARNING_1:
1287 case FEEDBACK_PATTERN_COOLDOWN_WARNING_2:
1288 case FEEDBACK_PATTERN_COMMUNICATION:
1289 case FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ:
1290 case FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ:
1291 case FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ:
1292 case FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ:
1293 case FEEDBACK_PATTERN_SCHEDULE_STRONG_BUZZ:
1294 case FEEDBACK_PATTERN_NOTIFICATION_1 ... FEEDBACK_PATTERN_NOTIFICATION_8_STRONG_BUZZ:
1295 case FEEDBACK_PATTERN_ALARM_1 ... FEEDBACK_PATTERN_ALARM_8_STRONG_BUZZ:
1302 static bool profile_is_notification_type(int pattern)
1306 prof = get_profile();
1309 if (prof == PROFILE_MOBILE)
1310 return mobile_is_notification_type(pattern);
1311 else if (prof == PROFILE_WEARABLE)
1312 return wearable_is_notification_type(pattern);
1319 static int mobile_get_priority(int pattern)
1322 case FEEDBACK_PATTERN_TAP ... FEEDBACK_PATTERN_HW_HOLD:
1323 return PRIORITY_MIN;
1324 case FEEDBACK_PATTERN_WAKEUP:
1325 case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1326 case FEEDBACK_PATTERN_SCHEDULE:
1327 case FEEDBACK_PATTERN_TIMER:
1328 case FEEDBACK_PATTERN_INTERNAL_TIMER:
1329 case FEEDBACK_PATTERN_CMAS:
1330 case FEEDBACK_PATTERN_CMAS_CA:
1331 return PRIORITY_HIGH;
1332 case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
1333 case FEEDBACK_PATTERN_RINGER:
1334 return PRIORITY_TOP;
1337 return PRIORITY_MIDDLE;
1342 static int wearable_get_priority(int pattern)
1344 if (pattern == FEEDBACK_PATTERN_CMAS ||
1345 pattern == FEEDBACK_PATTERN_CMAS_CA ||
1346 pattern == FEEDBACK_PATTERN_RINGER ||
1347 pattern == FEEDBACK_PATTERN_RINGER_STRONG_BUZZ ||
1348 (pattern >= FEEDBACK_PATTERN_RING_1 && pattern <= FEEDBACK_PATTERN_RING_10_STRONG_BUZZ) ||
1349 pattern == FEEDBACK_PATTERN_FIND_MY_GEAR)
1350 return PRIORITY_TOP;
1351 else if (pattern == FEEDBACK_PATTERN_WAKEUP || pattern == FEEDBACK_PATTERN_INTERNAL_WAKEUP ||
1352 pattern == FEEDBACK_PATTERN_WAKEUP_ON_CALL ||
1353 pattern == FEEDBACK_PATTERN_SCHEDULE || pattern == FEEDBACK_PATTERN_SCHEDULE_ON_CALL ||
1354 pattern == FEEDBACK_PATTERN_TIMER || pattern == FEEDBACK_PATTERN_INTERNAL_TIMER ||
1355 pattern == FEEDBACK_PATTERN_TIMER_ON_CALL ||
1356 (pattern >= FEEDBACK_PATTERN_ALARM_1 && pattern <= FEEDBACK_PATTERN_ALARM_10_STRONG_BUZZ))
1357 return PRIORITY_HIGH;
1358 else if (pattern >= FEEDBACK_PATTERN_TAP && pattern <= FEEDBACK_PATTERN_HW_HOLD)
1359 return PRIORITY_MIN;
1360 else if (pattern == FEEDBACK_PATTERN_END_EFFECT)
1361 return PRIORITY_MIN;
1362 else if (pattern >= FEEDBACK_PATTERN_END_EFFECT_FINE && pattern <= FEEDBACK_PATTERN_FUNCTION)
1363 return PRIORITY_MIN;
1364 else if (pattern == FEEDBACK_PATTERN_VOICE_START || pattern == FEEDBACK_PATTERN_VOICE_STOP)
1365 return PRIORITY_MIN;
1366 else if (pattern >= FEEDBACK_PATTERN_BOS && pattern <= FEEDBACK_PATTERN_UDS)
1367 return PRIORITY_MIN;
1368 return PRIORITY_MIDDLE;
1372 static int profile_get_priority(int pattern)
1376 prof = get_profile();
1379 if (prof == PROFILE_MOBILE)
1380 return mobile_get_priority(pattern);
1381 else if (prof == PROFILE_WEARABLE)
1382 return wearable_get_priority(pattern);
1384 return PRIORITY_MIDDLE;
1389 static bool mobile_get_always_alert_case(int type, int pattern)
1394 case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
1395 case FEEDBACK_PATTERN_HOLD:
1396 if (CHECK_VIBRATION(type) && feedbackstatus)
1399 case FEEDBACK_PATTERN_SIP:
1400 case FEEDBACK_PATTERN_SIP_BACKSPACE:
1401 case FEEDBACK_PATTERN_SIP_FUNCTION:
1402 case FEEDBACK_PATTERN_SIP_FJKEY:
1403 if (CHECK_VIBRATION(type))
1406 case FEEDBACK_PATTERN_MESSAGE:
1407 case FEEDBACK_PATTERN_EMAIL:
1408 if (CHECK_VIBRATION(type) && noti_vibstatus)
1411 case FEEDBACK_PATTERN_TIMER:
1412 case FEEDBACK_PATTERN_INTERNAL_TIMER:
1413 case FEEDBACK_PATTERN_TIMER_ON_CALL:
1414 if (CHECK_VIBRATION(type))
1417 case FEEDBACK_PATTERN_WAKEUP:
1418 case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1419 case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
1421 case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
1422 case FEEDBACK_PATTERN_EMAIL_ON_CALL:
1423 case FEEDBACK_PATTERN_GENERAL_ON_CALL:
1425 case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
1426 case FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL:
1427 case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
1428 case FEEDBACK_PATTERN_MMS:
1429 case FEEDBACK_PATTERN_HOURLY_ALERT:
1430 /* no matter sound profile */
1431 if (CHECK_VIBRATION(type))
1434 case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
1435 case FEEDBACK_PATTERN_SMART_ALERT:
1436 case FEEDBACK_PATTERN_END_SOS_MESSAGE:
1437 case FEEDBACK_PATTERN_CMAS:
1438 case FEEDBACK_PATTERN_CMAS_CA:
1439 case FEEDBACK_PATTERN_OUTGOING_CALL:
1441 case FEEDBACK_PATTERN_SCREEN_CAPTURE:
1442 if (CHECK_SOUND(type) && camerastatus && shutter_sndstatus)
1445 case FEEDBACK_PATTERN_RINGER:
1446 if (CHECK_VIBRATION(type) && (is_vibration_mode() || is_sound_mode()) &&
1447 vconf_get_int(VCONFKEY_RECORDER_STATE, &ret_val) == 0 &&
1448 ret_val == VCONFKEY_RECORDER_STATE_RECORDING)
1451 case FEEDBACK_PATTERN_TEMPERATURE_WARNING:
1452 case FEEDBACK_PATTERN_COOLDOWN_WARNING_1:
1453 case FEEDBACK_PATTERN_COOLDOWN_WARNING_2:
1454 if (CHECK_VIBRATION(type))
1457 case FEEDBACK_PATTERN_CALLCONNECT:
1458 case FEEDBACK_PATTERN_DISCALLCONNECT:
1468 static bool wearable_is_system_type(int pattern)
1471 case FEEDBACK_PATTERN_POWERON ... FEEDBACK_PATTERN_HOURLY_ALERT:
1472 case FEEDBACK_PATTERN_TEMPERATURE_WARNING ... FEEDBACK_PATTERN_COOLDOWN_WARNING_2:
1478 static bool wearable_get_always_alert_case(int type, int pattern)
1482 if (CHECK_SOUND(type)) {
1483 if ((wearable_is_notification_type(pattern) || wearable_is_system_type(pattern)) &&
1485 _W("skip %s sound during call", profile_str_pattern(pattern));
1489 case FEEDBACK_PATTERN_WAKEUP:
1490 case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1491 case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
1493 case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
1494 case FEEDBACK_PATTERN_EMAIL_ON_CALL:
1495 case FEEDBACK_PATTERN_GENERAL_ON_CALL:
1497 case FEEDBACK_PATTERN_SMART_ALERT:
1498 case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
1499 case FEEDBACK_PATTERN_END_SOS_MESSAGE:
1500 case FEEDBACK_PATTERN_CMAS:
1501 case FEEDBACK_PATTERN_CMAS_CA:
1502 case FEEDBACK_PATTERN_NFC_SUCCESS:
1504 case FEEDBACK_PATTERN_SCREEN_CAPTURE:
1505 if (camerastatus && shutter_sndstatus)
1508 case FEEDBACK_PATTERN_OUTGOING_CALL:
1513 } else if (CHECK_VIBRATION(type)) {
1514 if ((wearable_is_notification_type(pattern) || wearable_is_system_type(pattern)) &&
1515 (is_sound_mode() || is_vibration_mode()) &&
1517 _W("alert %s vibration during call", profile_str_pattern(pattern));
1521 case FEEDBACK_PATTERN_TAP:
1522 case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
1523 case FEEDBACK_PATTERN_HOLD:
1524 case FEEDBACK_PATTERN_END_EFFECT:
1525 case FEEDBACK_PATTERN_END_EFFECT_FINE ... FEEDBACK_PATTERN_FUNCTION:
1526 case FEEDBACK_PATTERN_VOICE_START:
1527 case FEEDBACK_PATTERN_VOICE_STOP:
1528 case FEEDBACK_PATTERN_PICKER:
1529 case FEEDBACK_PATTERN_PICKER_FINISH:
1530 case FEEDBACK_PATTERN_ON_OFF_SWITCH:
1531 case FEEDBACK_PATTERN_REORDER:
1532 case FEEDBACK_PATTERN_CURSOR_MOVE:
1536 case FEEDBACK_PATTERN_MESSAGE:
1537 case FEEDBACK_PATTERN_EMAIL:
1538 case FEEDBACK_PATTERN_GENERAL:
1539 case FEEDBACK_PATTERN_SCHEDULE:
1540 case FEEDBACK_PATTERN_COMMUNICATION:
1541 case FEEDBACK_PATTERN_MESSAGE_STRONG_BUZZ:
1542 case FEEDBACK_PATTERN_EMAIL_STRONG_BUZZ:
1543 case FEEDBACK_PATTERN_GENERAL_STRONG_BUZZ:
1544 case FEEDBACK_PATTERN_COMMUNICATION_STRONG_BUZZ:
1545 case FEEDBACK_PATTERN_SCHEDULE_STRONG_BUZZ:
1546 case FEEDBACK_PATTERN_3RD_APPLICATION:
1547 case FEEDBACK_PATTERN_NOTIFICATION_1 ... FEEDBACK_PATTERN_NOTIFICATION_10_STRONG_BUZZ:
1551 case FEEDBACK_PATTERN_SIP:
1552 case FEEDBACK_PATTERN_SIP_BACKSPACE:
1553 case FEEDBACK_PATTERN_SIP_FUNCTION:
1554 case FEEDBACK_PATTERN_SIP_FJKEY:
1555 case FEEDBACK_PATTERN_TIMER:
1556 case FEEDBACK_PATTERN_INTERNAL_TIMER:
1557 case FEEDBACK_PATTERN_TIMER_ON_CALL:
1558 case FEEDBACK_PATTERN_WAKEUP:
1559 case FEEDBACK_PATTERN_INTERNAL_WAKEUP:
1560 case FEEDBACK_PATTERN_WAKEUP_ON_CALL:
1561 case FEEDBACK_PATTERN_MESSAGE_ON_CALL:
1562 case FEEDBACK_PATTERN_EMAIL_ON_CALL:
1563 case FEEDBACK_PATTERN_GENERAL_ON_CALL:
1564 case FEEDBACK_PATTERN_WAKEUP_STRONG_BUZZ:
1565 case FEEDBACK_PATTERN_TIMER_STRONG_BUZZ:
1566 case FEEDBACK_PATTERN_ALARM_1 ... FEEDBACK_PATTERN_ALARM_10_STRONG_BUZZ:
1567 case FEEDBACK_PATTERN_MMS:
1568 case FEEDBACK_PATTERN_HOURLY_ALERT:
1569 case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
1570 case FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL:
1571 case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
1572 case FEEDBACK_PATTERN_TEMPERATURE_WARNING:
1573 case FEEDBACK_PATTERN_COOLDOWN_WARNING_1:
1574 case FEEDBACK_PATTERN_COOLDOWN_WARNING_2:
1575 case FEEDBACK_PATTERN_BT_DISCONNECTED:
1576 case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
1577 case FEEDBACK_PATTERN_END_SOS_MESSAGE:
1578 case FEEDBACK_PATTERN_SMART_ALERT:
1579 case FEEDBACK_PATTERN_CMAS:
1580 case FEEDBACK_PATTERN_CMAS_CA:
1581 case FEEDBACK_PATTERN_OUTGOING_CALL:
1582 case FEEDBACK_PATTERN_FALL_DETECTION_1:
1583 case FEEDBACK_PATTERN_FALL_DETECTION_2:
1585 case FEEDBACK_PATTERN_SPEED_UP:
1586 case FEEDBACK_PATTERN_SLOW_DOWN:
1587 case FEEDBACK_PATTERN_KEEP_THIS_PACE:
1588 case FEEDBACK_PATTERN_GOAL_ACHIEVED:
1589 case FEEDBACK_PATTERN_EXERCISE_COUNT:
1590 case FEEDBACK_PATTERN_BREATHING_EXHALE:
1591 case FEEDBACK_PATTERN_START_CUE:
1592 case FEEDBACK_PATTERN_INACTIVE_TIME:
1593 case FEEDBACK_PATTERN_SHEALTH_NOTICE:
1594 case FEEDBACK_PATTERN_SHEALTH_GENTLE_ALERT:
1595 case FEEDBACK_PATTERN_HEALTH_PACE:
1596 case FEEDBACK_PATTERN_SHEALTH_START:
1597 case FEEDBACK_PATTERN_SHEALTH_PAUSE:
1598 case FEEDBACK_PATTERN_SHEALTH_STOP:
1599 case FEEDBACK_PATTERN_INACTIVE_FINE:
1600 case FEEDBACK_PATTERN_MEDITATION:
1601 case FEEDBACK_PATTERN_MEDITATION_INTERVAL:
1602 /* except mute case */
1603 if (is_sound_mode() || is_vibration_mode())
1606 case FEEDBACK_PATTERN_RINGER:
1607 case FEEDBACK_PATTERN_RINGER_STRONG_BUZZ:
1608 case FEEDBACK_PATTERN_RING_1 ... FEEDBACK_PATTERN_RING_10_STRONG_BUZZ:
1611 /* check if the state of voice recorder is recording */
1612 if ((is_sound_mode() || is_vibration_mode()) &&
1613 vconf_get_int(VCONFKEY_RECORDER_STATE, &ret_val) == 0 &&
1614 ret_val == VCONFKEY_RECORDER_STATE_RECORDING) {
1615 _D("voice recording status is RECORDING");
1619 case FEEDBACK_PATTERN_FIND_MY_GEAR:
1625 if (pattern > FEEDBACK_STANDARD_START && pattern < FEEDBACK_STANDARD_END)
1633 static bool common_get_always_alert_case(int type, int pattern)
1636 case FEEDBACK_PATTERN_SIP:
1637 case FEEDBACK_PATTERN_TIMER:
1638 if (CHECK_VIBRATION(type))
1641 case FEEDBACK_PATTERN_WAKEUP:
1650 static bool profile_get_always_alert_case(int type, int pattern)
1654 prof = get_profile();
1657 if (prof == PROFILE_MOBILE)
1658 return mobile_get_always_alert_case(type, pattern);
1659 else if (prof == PROFILE_WEARABLE)
1660 return wearable_get_always_alert_case(type, pattern);
1662 return common_get_always_alert_case(type, pattern);
1667 static bool mobile_get_always_off_case(int type, int pattern)
1671 /* check if the state of voice recorder is recording */
1672 if (vconf_get_int(VCONFKEY_RECORDER_STATE, &ret_val) < 0) {
1673 _W("fail to get media sound status, status will be zero"); //LCOV_EXCL_LINE
1674 ret_val = 0; //LCOV_EXCL_LINE
1677 if (CHECK_SOUND(type) && ret_val == VCONFKEY_RECORDER_STATE_RECORDING) {
1678 _D("voice recording status is RECORDING"); //LCOV_EXCL_LINE
1679 return true; //LCOV_EXCL_LINE
1683 case FEEDBACK_PATTERN_TAP:
1684 case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
1685 if (CHECK_SOUND(type) && !is_touch_sndstatus())
1688 case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
1689 if (CHECK_SOUND(type) && !is_keytone_sndstatus())
1691 else if (CHECK_VIBRATION(type) && !feedbackstatus)
1694 case FEEDBACK_PATTERN_LOCK:
1695 case FEEDBACK_PATTERN_UNLOCK:
1696 case FEEDBACK_PATTERN_LOCK_SWIPE:
1697 case FEEDBACK_PATTERN_UNLOCK_SWIPE:
1698 if (CHECK_SOUND(type) && !lock_sndstatus)
1709 static bool wearable_get_always_off_case(int type, int pattern)
1713 if (CHECK_SOUND(type)) {
1714 if ((wearable_is_notification_type(pattern) || wearable_is_system_type(pattern)) &&
1716 _W("skip %d sound during call", pattern);
1720 if (goodnight_mode && wearable_is_system_type(pattern)) {
1721 _W("Skip %d sound in good night mode", pattern);
1725 /* check if the state of voice recorder is recording */
1726 if (vconf_get_int(VCONFKEY_RECORDER_STATE, &ret_val) == 0 &&
1727 ret_val == VCONFKEY_RECORDER_STATE_RECORDING) {
1728 _D("voice recording status is RECORDING");
1733 case FEEDBACK_PATTERN_TAP:
1734 case FEEDBACK_PATTERN_MAX_CHARACTER:
1735 case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
1736 if (!is_touch_sndstatus() || theater_mode || goodnight_mode)
1739 case FEEDBACK_PATTERN_SIP ... FEEDBACK_PATTERN_SIP_FJKEY:
1740 if (theater_mode || goodnight_mode)
1743 case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
1744 if (!is_keytone_sndstatus() || theater_mode || goodnight_mode)
1747 case FEEDBACK_PATTERN_LOCK:
1748 case FEEDBACK_PATTERN_UNLOCK:
1749 if (!lock_sndstatus)
1752 case FEEDBACK_PATTERN_BT_DISCONNECTED:
1753 case FEEDBACK_PATTERN_LOWBATT:
1754 case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
1755 case FEEDBACK_PATTERN_CHARGERCONN:
1756 case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
1757 if (dnd_mode || theater_mode || goodnight_mode)
1763 } else if (CHECK_VIBRATION(type)) {
1765 case FEEDBACK_PATTERN_TAP:
1766 case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
1767 case FEEDBACK_PATTERN_HOLD:
1768 case FEEDBACK_PATTERN_END_EFFECT:
1769 case FEEDBACK_PATTERN_END_EFFECT_FINE ... FEEDBACK_PATTERN_FUNCTION:
1770 case FEEDBACK_PATTERN_VOICE_START:
1771 case FEEDBACK_PATTERN_VOICE_STOP:
1772 case FEEDBACK_PATTERN_PICKER:
1773 case FEEDBACK_PATTERN_PICKER_FINISH:
1774 case FEEDBACK_PATTERN_ON_OFF_SWITCH:
1775 case FEEDBACK_PATTERN_REORDER:
1776 case FEEDBACK_PATTERN_CURSOR_MOVE:
1777 if (!feedbackstatus)
1780 case FEEDBACK_PATTERN_LOWBATT:
1781 case FEEDBACK_PATTERN_LOWBATT_ON_CALL:
1782 case FEEDBACK_PATTERN_CHARGERCONN:
1783 case FEEDBACK_PATTERN_CHARGERCONN_ON_CALL:
1784 if (dnd_mode || theater_mode || goodnight_mode)
1787 case FEEDBACK_PATTERN_BT_DISCONNECTED:
1799 static bool common_get_always_off_case(int type, int pattern)
1802 case FEEDBACK_PATTERN_TAP ... FEEDBACK_PATTERN_SIP:
1803 case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
1804 if (CHECK_SOUND(type) && !is_touch_sndstatus())
1807 case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
1808 if (CHECK_SOUND(type) && !is_keytone_sndstatus())
1818 static bool profile_get_always_off_case(int type, int pattern)
1822 prof = get_profile();
1824 if (prof == PROFILE_MOBILE)
1825 return mobile_get_always_off_case(type, pattern);
1827 else if (prof == PROFILE_WEARABLE)
1828 return wearable_get_always_off_case(type, pattern);
1830 return common_get_always_off_case(type, pattern);
1835 static int wearable_get_strong_buzz(int pattern)
1837 int changed_pattern = pattern;
1840 case FEEDBACK_PATTERN_BT_DISCONNECTED:
1841 if (disconnect_alert_mode % BUZZ_CONVERTED)
1842 changed_pattern = S2;
1844 case FEEDBACK_PATTERN_SEND_SOS_MESSAGE:
1845 case FEEDBACK_PATTERN_KEEP_THIS_PACE:
1846 case FEEDBACK_PATTERN_SHEALTH_GENTLE_ALERT:
1847 case FEEDBACK_PATTERN_HEALTH_PACE:
1848 case FEEDBACK_PATTERN_GOAL_ACHIEVED:
1849 case FEEDBACK_PATTERN_INACTIVE_TIME:
1850 case FEEDBACK_PATTERN_INACTIVE_FINE:
1851 if (vib_call_index % BUZZ_CONVERTED)
1852 changed_pattern = J_WHB;
1854 case FEEDBACK_PATTERN_SHEALTH_NOTICE:
1855 if (vib_call_index % BUZZ_CONVERTED)
1856 changed_pattern = J_WB;
1861 return changed_pattern;
1865 static int profile_get_strong_buzz(int pattern)
1867 int prof = get_profile();
1870 if (prof == PROFILE_WEARABLE)
1871 return wearable_get_strong_buzz(pattern);
1877 static int mobile_get_strength_type(int type, int pattern)
1879 if (CHECK_SOUND(type)) {
1880 if (pattern == FEEDBACK_PATTERN_TAP)
1881 return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_TOUCH;
1882 else if (pattern >= FEEDBACK_PATTERN_KEY0 && pattern <= FEEDBACK_PATTERN_KEY_BACK)
1883 return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_DIALER;
1884 else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY)
1885 return VOLUME_TYPE_RINGTONE;
1886 else if (camerastatus && shutter_sndstatus && pattern == FEEDBACK_PATTERN_SCREEN_CAPTURE)
1887 return VOLUME_TYPE_FIXED;
1889 return VOLUME_TYPE_SYSTEM;
1890 } else if (CHECK_VIBRATION(type)) {
1891 if (pattern >= FEEDBACK_PATTERN_MESSAGE &&
1892 pattern <= FEEDBACK_PATTERN_GENERAL)
1893 return FEEDBACK_LEVEL(noti_level);
1895 return FEEDBACK_LEVEL(vib_level);
1903 static int wearable_get_strength_type(int type, int pattern)
1905 if (CHECK_SOUND(type)) {
1906 if (pattern == FEEDBACK_PATTERN_TAP)
1907 return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_TOUCH;
1908 else if (pattern >= FEEDBACK_PATTERN_KEY0 && pattern <= FEEDBACK_PATTERN_KEY_BACK)
1909 return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_DIALER;
1910 else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY || pattern == FEEDBACK_PATTERN_SILENT_OFF ||
1911 (pattern >= FEEDBACK_PATTERN_RING_1 && pattern <= FEEDBACK_PATTERN_RING_8_STRONG_BUZZ))
1912 return VOLUME_TYPE_RINGTONE;
1913 else if (camerastatus && shutter_sndstatus && pattern == FEEDBACK_PATTERN_SCREEN_CAPTURE)
1914 return VOLUME_TYPE_FIXED;
1915 else if (pattern == FEEDBACK_PATTERN_INACTIVE_FINE ||
1916 pattern == FEEDBACK_PATTERN_INACTIVE_TIME ||
1917 pattern == FEEDBACK_PATTERN_HEALTH_PACE)
1918 return VOLUME_TYPE_NOTIFICATION;
1919 else if (pattern == FEEDBACK_PATTERN_GOAL_ACHIEVED ||
1920 pattern == FEEDBACK_PATTERN_KEEP_THIS_PACE ||
1921 pattern == FEEDBACK_PATTERN_EXERCISE_COUNT ||
1922 pattern == FEEDBACK_PATTERN_START_CUE)
1923 return VOLUME_TYPE_MEDIA;
1924 return VOLUME_TYPE_SYSTEM;
1925 } else if (CHECK_VIBRATION(type)) {
1926 if ((pattern >= FEEDBACK_PATTERN_TAP && pattern <= FEEDBACK_PATTERN_HW_HOLD) ||
1927 pattern == FEEDBACK_PATTERN_END_EFFECT ||
1928 (pattern == FEEDBACK_PATTERN_VOICE_START || pattern == FEEDBACK_PATTERN_VOICE_STOP) ||
1929 (pattern >= FEEDBACK_PATTERN_END_EFFECT_FINE && pattern <= FEEDBACK_PATTERN_FUNCTION) ||
1930 (pattern == FEEDBACK_PATTERN_ON_OFF_SWITCH) ||
1931 (pattern == FEEDBACK_PATTERN_CURSOR_MOVE || pattern == FEEDBACK_PATTERN_PICKER)) {
1932 _D("use default level");
1933 return FEEDBACK_LEVEL(DEFAULT_VIB_LEVEL);
1935 if (pattern == FEEDBACK_PATTERN_FIND_MY_GEAR)
1936 return MAX_VIB_LEVEL;
1938 return FEEDBACK_LEVEL(noti_level);
1945 static int common_get_strength_type(int type, int pattern)
1947 if (CHECK_SOUND(type)) {
1948 if (pattern == FEEDBACK_PATTERN_TAP)
1949 return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_TOUCH;
1950 else if (pattern >= FEEDBACK_PATTERN_KEY0 && pattern <= FEEDBACK_PATTERN_KEY_BACK)
1951 return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_DIALER;
1952 else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY)
1953 return VOLUME_TYPE_RINGTONE;
1955 return VOLUME_TYPE_SYSTEM;
1956 } else if (CHECK_VIBRATION(type)) {
1957 return FEEDBACK_LEVEL(DEFAULT_VIB_LEVEL);
1964 static int profile_get_strength_type(int type, int pattern)
1968 prof = get_profile();
1970 if (prof == PROFILE_MOBILE)
1971 return mobile_get_strength_type(type, pattern);
1973 else if (prof == PROFILE_WEARABLE)
1974 return wearable_get_strength_type(type, pattern);
1976 return common_get_strength_type(type, pattern);
1981 static char *wearable_get_path(int pattern)
1985 if (pattern >= FEEDBACK_PATTERN_RING_1 && pattern <= FEEDBACK_PATTERN_RING_8_STRONG_BUZZ)
1986 data = snd_call_path;
1987 else if (pattern >= FEEDBACK_PATTERN_NOTIFICATION_1 && pattern <= FEEDBACK_PATTERN_NOTIFICATION_8_STRONG_BUZZ)
1988 data = snd_noti_path;
1993 static char *profile_get_path(int pattern)
1995 int prof = get_profile();
1998 if (prof == PROFILE_WEARABLE)
1999 return wearable_get_path(pattern);
2004 static const struct profile_ops feedback_profile_ops = {
2005 .profile = profile_get_name,
2006 .init = profile_init,
2007 .exit = profile_exit,
2008 .get_switched_pattern = profile_get_switched_pattern,
2009 .get_always_alert_case = profile_get_always_alert_case,
2010 .get_always_off_case = profile_get_always_off_case,
2011 .get_strength_type = profile_get_strength_type,
2012 .get_priority = profile_get_priority,
2013 .get_strong_buzz = profile_get_strong_buzz,
2014 .is_notification_type = profile_is_notification_type,
2015 .max_type = FEEDBACK_TYPE_END,
2016 .max_pattern = FEEDBACK_PATTERN_INTERNAL_END,
2017 .str_type = profile_str_type,
2018 .get_num_of_pattern = profile_get_num_of_pattern,
2019 .str_pattern = profile_str_pattern,
2020 .get_pattern_enum = profile_get_pattern_enum,
2021 .get_path = profile_get_path,
2024 PROFILE_OPS_REGISTER(&feedback_profile_ops);