tizen 2.4 release
[framework/system/libfeedback.git] / common / src / check.c
1 /*
2  * libfeedback
3  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Apache License, Version 2.0 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18
19 #include <stdio.h>
20
21 #include "feedback.h"
22 #include "profiles.h"
23 #include "log.h"
24
25
26 static const char *common_str_type[] = {
27         "FEEDBACK_TYPE_NONE",
28         "FEEDBACK_TYPE_SOUND",
29         "FEEDBACK_TYPE_VIBRATION",
30 };
31
32 static const char *common_str_pattern[] = {
33         "FEEDBACK_PATTERN_TAP",
34         "FEEDBACK_PATTERN_SIP",
35         "",
36         "",
37         "",
38         "",
39         "FEEDBACK_PATTERN_KEY0",
40         "FEEDBACK_PATTERN_KEY1",
41         "FEEDBACK_PATTERN_KEY2",
42         "FEEDBACK_PATTERN_KEY3",
43         "FEEDBACK_PATTERN_KEY4",
44         "FEEDBACK_PATTERN_KEY5",
45         "FEEDBACK_PATTERN_KEY6",
46         "FEEDBACK_PATTERN_KEY7",
47         "FEEDBACK_PATTERN_KEY8",
48         "FEEDBACK_PATTERN_KEY9",
49         "FEEDBACK_PATTERN_KEY_STAR",
50         "FEEDBACK_PATTERN_KEY_SHARP",
51         "FEEDBACK_PATTERN_KEY_BACK",
52         "FEEDBACK_PATTERN_HOLD",
53         "",
54         "FEEDBACK_PATTERN_HW_TAP",
55         "FEEDBACK_PATTERN_HW_HOLD",
56
57         "FEEDBACK_PATTERN_MESSAGE",
58         "",
59         "FEEDBACK_PATTERN_EMAIL",
60         "",
61         "FEEDBACK_PATTERN_WAKEUP",
62         "",
63         "FEEDBACK_PATTERN_SCHEDULE",
64         "",
65         "FEEDBACK_PATTERN_TIMER",
66         "",
67         "FEEDBACK_PATTERN_GENERAL",
68         "",
69         "",
70
71         "FEEDBACK_PATTERN_POWERON",
72         "FEEDBACK_PATTERN_POWEROFF",
73         "FEEDBACK_PATTERN_CHARGERCONN",
74         "",
75         "FEEDBACK_PATTERN_CHARGING_ERROR",
76         "",
77         "FEEDBACK_PATTERN_FULLCHARGED",
78         "",
79         "FEEDBACK_PATTERN_LOWBATT",
80         "",
81         "FEEDBACK_PATTERN_LOCK",
82         "FEEDBACK_PATTERN_UNLOCK",
83         "",
84         "",
85         "",
86         "",
87         "",
88         "",
89         "",
90         "FEEDBACK_PATTERN_VIBRATION_ON",
91         "FEEDBACK_PATTERN_SILENT_OFF",
92         "FEEDBACK_PATTERN_BT_CONNECTED",
93         "FEEDBACK_PATTERN_BT_DISCONNECTED",
94         "",
95         "",
96         "",
97         "FEEDBACK_PATTERN_LIST_REORDER",
98         "FEEDBACK_PATTERN_LIST_SLIDER",
99         "FEEDBACK_PATTERN_VOLUME_KEY",
100 };
101
102 static bool common_get_always_alert_case(int type, int pattern)
103 {
104         switch (pattern) {
105         case FEEDBACK_PATTERN_SIP:
106         case FEEDBACK_PATTERN_TIMER:
107                 if (CHECK_VIBRATION(type))
108                         return true;
109                 break;
110         case FEEDBACK_PATTERN_WAKEUP:
111                 return true;
112         default:
113                 break;
114         }
115         return false;
116 }
117
118 static bool common_get_always_off_case(int type, int pattern)
119 {
120         switch (pattern) {
121         case FEEDBACK_PATTERN_TAP ... FEEDBACK_PATTERN_SIP:
122         case FEEDBACK_PATTERN_HOLD ... FEEDBACK_PATTERN_HW_HOLD:
123                 if (CHECK_SOUND(type) && !is_touch_sndstatus())
124                         return true;
125                 break;
126         case FEEDBACK_PATTERN_KEY0 ... FEEDBACK_PATTERN_KEY_BACK:
127                 if (CHECK_SOUND(type) && !is_keytone_sndstatus())
128                         return true;
129                 break;
130         default:
131                 break;
132         }
133         return false;
134 }
135
136 static int common_get_strength_type(int type, int pattern)
137 {
138         if (CHECK_SOUND(type)) {
139                 if (pattern == FEEDBACK_PATTERN_TAP)
140                         return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_TOUCH;
141                 else if (pattern >= FEEDBACK_PATTERN_KEY0 && pattern <= FEEDBACK_PATTERN_KEY_BACK)
142                         return VOLUME_TYPE_SYSTEM|VOLUME_GAIN_DIALER;
143                 else if (pattern == FEEDBACK_PATTERN_VOLUME_KEY)
144                         return VOLUME_TYPE_RINGTONE;
145                 else
146                         return VOLUME_TYPE_SYSTEM;
147         } else if (CHECK_VIBRATION(type)) {
148                 return DEFAULT_VIB_LEVEL * HAPTIC_FEEDBACK_STEP;
149         }
150
151         return -EINVAL;
152 }
153
154 static const struct profile_ops common_profile_ops = {
155         .profile               = "common",
156         .get_always_alert_case = common_get_always_alert_case,
157         .get_always_off_case   = common_get_always_off_case,
158         .get_strength_type     = common_get_strength_type,
159         .max_type              = FEEDBACK_TYPE_END,
160         .max_pattern           = FEEDBACK_PATTERN_END,
161         .str_type              = common_str_type,
162         .str_pattern           = common_str_pattern,
163 };
164
165 PROFILE_OPS_REGISTER(&common_profile_ops);