runtime-info: Battery keys regard as disconnected in no battery model
[platform/core/api/runtime-info.git] / src / runtime_info_system.c
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <stdio.h>
18 #include <stdlib.h>
19 #include <string.h>
20
21 #include <vconf.h>
22 #include <dlog.h>
23
24 #include <runtime_info.h>
25 #include <runtime_info_private.h>
26
27 #ifdef LOG_TAG
28 #undef LOG_TAG
29 #endif
30
31 #define LOG_TAG "CAPI_SYSTEM_RUNTIME_INFO"
32
33 static const char *VCONF_FLIGHT_MODE = VCONFKEY_TELEPHONY_FLIGHT_MODE;
34 static const char *VCONF_AUDIO_JACK = VCONFKEY_SYSMAN_EARJACK;
35 static const char *VCONF_SOUND_ENABLED = VCONFKEY_SETAPPL_SOUND_STATUS_BOOL;
36 static const char *VCONF_VIBRATION_ENABLED = VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL;
37 static const char *VCONF_ROTATION_LOCK_ENABLED = VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL;
38 static const char *VCONF_BATTERY_CHARGING = VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW;
39 static const char *VCONF_TVOUT_CONNECTED = VCONFKEY_SYSMAN_EARJACK;
40 static const char *VCONF_AUDIO_JACK_STATUS = VCONFKEY_SYSMAN_EARJACK;
41 static const char *VCONF_SLIDING_KEYBOARD_STATUS = VCONFKEY_SYSMAN_SLIDING_KEYBOARD;
42 static const char *VCONF_USB_CONNECTED = VCONFKEY_SYSMAN_USB_STATUS;
43 static const char *VCONF_CHARGER_CONNECTED = VCONFKEY_SYSMAN_CHARGER_STATUS;
44
45
46 int runtime_info_flightmode_get_value(runtime_info_value_h value)
47 {
48         int vconf_value;
49
50         if (runtime_info_vconf_get_value_bool(VCONF_FLIGHT_MODE, &vconf_value))
51                 vconf_value = 0;
52
53         value->b = (bool)vconf_value;
54
55         return RUNTIME_INFO_ERROR_NONE;
56 }
57
58 int runtime_info_flightmode_set_event_cb(void)
59 {
60         return runtime_info_vconf_set_event_cb(VCONF_FLIGHT_MODE, RUNTIME_INFO_KEY_FLIGHT_MODE_ENABLED, 0);
61 }
62
63 void runtime_info_flightmode_unset_event_cb(void)
64 {
65         runtime_info_vconf_unset_event_cb(VCONF_FLIGHT_MODE, 0);
66 }
67
68 int runtime_info_audiojack_get_value(runtime_info_value_h value)
69 {
70         int vconf_value;
71
72         if (runtime_info_vconf_get_value_int(VCONF_AUDIO_JACK, &vconf_value))
73                 vconf_value = VCONFKEY_SYSMAN_EARJACK_REMOVED;
74
75         switch (vconf_value) {
76         case VCONFKEY_SYSMAN_EARJACK_3WIRE:
77         case VCONFKEY_SYSMAN_EARJACK_4WIRE:
78                 value->b = true;
79                 break;
80
81         default:
82                 value->b = false;
83                 break;
84         }
85
86         return RUNTIME_INFO_ERROR_NONE;
87 }
88
89 int runtime_info_audiojack_set_event_cb(void)
90 {
91         return runtime_info_vconf_set_event_cb(VCONF_AUDIO_JACK, RUNTIME_INFO_KEY_AUDIO_JACK_CONNECTED, 0);
92 }
93
94 void runtime_info_audiojack_unset_event_cb(void)
95 {
96         runtime_info_vconf_unset_event_cb(VCONF_AUDIO_JACK, 0);
97 }
98
99 int runtime_info_silent_mode_get_value(runtime_info_value_h value)
100 {
101         int sound, vib;
102
103         if (runtime_info_vconf_get_value_bool(VCONF_SOUND_ENABLED, &sound))
104                 return RUNTIME_INFO_ERROR_IO_ERROR;
105
106         if (runtime_info_vconf_get_value_bool(VCONF_VIBRATION_ENABLED, &vib))
107                 return RUNTIME_INFO_ERROR_IO_ERROR;
108
109         if (sound == 0 && vib == 0)
110                 value->b = true;
111         else
112                 value->b = false;
113
114         return RUNTIME_INFO_ERROR_NONE;
115 }
116
117 int runtime_info_silent_mode_set_event_cb(void)
118 {
119         int ret;
120
121         ret = runtime_info_vconf_set_event_cb(VCONF_SOUND_ENABLED, RUNTIME_INFO_KEY_SILENT_MODE_ENABLED, 0);
122         if (ret != RUNTIME_INFO_ERROR_NONE)
123                 return ret;
124
125         ret = runtime_info_vconf_set_event_cb(VCONF_VIBRATION_ENABLED, RUNTIME_INFO_KEY_SILENT_MODE_ENABLED, 1);
126         if (ret != RUNTIME_INFO_ERROR_NONE)
127                 runtime_info_vconf_unset_event_cb(VCONF_SOUND_ENABLED, 0);
128
129         return ret;
130 }
131
132 void runtime_info_silent_mode_unset_event_cb(void)
133 {
134         runtime_info_vconf_unset_event_cb(VCONF_SOUND_ENABLED, 0);
135         runtime_info_vconf_unset_event_cb(VCONF_VIBRATION_ENABLED, 1);
136 }
137
138 int runtime_info_vibration_enabled_get_value(runtime_info_value_h value)
139 {
140         int vconf_value;
141
142         if (runtime_info_vconf_get_value_bool(VCONF_VIBRATION_ENABLED, &vconf_value))
143                 vconf_value = 0;
144
145         value->b = (bool)vconf_value;
146
147         return RUNTIME_INFO_ERROR_NONE;
148 }
149
150 int runtime_info_vibration_enabled_set_event_cb(void)
151 {
152         return runtime_info_vconf_set_event_cb(VCONF_VIBRATION_ENABLED, RUNTIME_INFO_KEY_VIBRATION_ENABLED, 0);
153 }
154
155 void runtime_info_vibration_enabled_unset_event_cb(void)
156 {
157         runtime_info_vconf_unset_event_cb(VCONF_VIBRATION_ENABLED, 0);
158 }
159
160 int runtime_info_auto_rotation_enabled_get_value(runtime_info_value_h value)
161 {
162         int vconf_value;
163
164         if (runtime_info_vconf_get_value_bool(VCONF_ROTATION_LOCK_ENABLED, &vconf_value))
165                 vconf_value = 0;
166
167         value->b = (bool)vconf_value;
168
169         return RUNTIME_INFO_ERROR_NONE;
170 }
171
172 int runtime_info_auto_rotation_enabled_set_event_cb(void)
173 {
174         return runtime_info_vconf_set_event_cb(VCONF_ROTATION_LOCK_ENABLED, RUNTIME_INFO_KEY_AUTO_ROTATION_ENABLED, 0);
175 }
176
177 void runtime_info_auto_rotation_enabled_unset_event_cb(void)
178 {
179         runtime_info_vconf_unset_event_cb(VCONF_ROTATION_LOCK_ENABLED, 0);
180 }
181
182 int runtime_info_battery_charging_get_value(runtime_info_value_h value)
183 {
184         int vconf_value;
185
186         if (runtime_info_vconf_get_value_int(VCONF_BATTERY_CHARGING, &vconf_value))
187                 return RUNTIME_INFO_ERROR_IO_ERROR;
188
189         /* regard not supported as disconnected */
190         if (vconf_value == -ENOTSUP)
191                 vconf_value = false;
192
193         value->b = vconf_value;
194
195         return RUNTIME_INFO_ERROR_NONE;
196 }
197
198 int runtime_info_battery_charging_set_event_cb(void)
199 {
200         return runtime_info_vconf_set_event_cb(VCONF_BATTERY_CHARGING, RUNTIME_INFO_KEY_BATTERY_IS_CHARGING, 0);
201 }
202
203 void runtime_info_battery_charging_unset_event_cb(void)
204 {
205         runtime_info_vconf_unset_event_cb(VCONF_BATTERY_CHARGING, 0);
206 }
207
208
209 int runtime_info_tvout_connected_get_value(runtime_info_value_h value)
210 {
211         int vconf_value;
212
213         if (runtime_info_vconf_get_value_int(VCONF_TVOUT_CONNECTED, &vconf_value))
214                 vconf_value = VCONFKEY_SYSMAN_EARJACK_REMOVED;
215
216         switch (vconf_value) {
217         case VCONFKEY_SYSMAN_EARJACK_TVOUT:
218                 value->b = true;
219                 break;
220
221         default:
222                 value->b = false;
223                 break;
224         }
225
226         return RUNTIME_INFO_ERROR_NONE;
227 }
228
229 int runtime_info_tvout_connected_set_event_cb(void)
230 {
231         return runtime_info_vconf_set_event_cb(VCONF_TVOUT_CONNECTED, RUNTIME_INFO_KEY_TV_OUT_CONNECTED, 1);
232 }
233
234 void runtime_info_tvout_connected_unset_event_cb(void)
235 {
236         runtime_info_vconf_unset_event_cb(VCONF_TVOUT_CONNECTED, 1);
237 }
238
239
240 int runtime_info_audio_jack_status_get_value(runtime_info_value_h value)
241 {
242         int vconf_value;
243
244         if (runtime_info_vconf_get_value_int(VCONF_AUDIO_JACK_STATUS, &vconf_value))
245                 vconf_value = VCONFKEY_SYSMAN_EARJACK_REMOVED;
246
247         switch (vconf_value) {
248         case VCONFKEY_SYSMAN_EARJACK_3WIRE:
249                 value->i = RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_3WIRE;
250                 break;
251
252         case VCONFKEY_SYSMAN_EARJACK_4WIRE:
253                 value->i = RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_4WIRE;
254                 break;
255
256         default:
257                 value->i = RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED;
258                 break;
259         }
260
261         return RUNTIME_INFO_ERROR_NONE;
262 }
263
264 int runtime_info_audio_jack_status_set_event_cb(void)
265 {
266         return runtime_info_vconf_set_event_cb(VCONF_AUDIO_JACK_STATUS, RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, 2);
267 }
268
269 void runtime_info_audio_jack_status_unset_event_cb(void)
270 {
271         runtime_info_vconf_unset_event_cb(VCONF_AUDIO_JACK_STATUS, 2);
272 }
273
274
275 int runtime_info_sliding_keyboard_opened_get_value(runtime_info_value_h value)
276 {
277         int vconf_value;
278
279         if (runtime_info_vconf_get_value_int(VCONF_SLIDING_KEYBOARD_STATUS, &vconf_value))
280                 vconf_value = VCONFKEY_SYSMAN_SLIDING_KEYBOARD_NOT_SUPPORTED;
281
282         switch (vconf_value) {
283         case VCONFKEY_SYSMAN_SLIDING_KEYBOARD_NOT_AVAILABE:
284                 value->b = false;
285                 break;
286
287         case VCONFKEY_SYSMAN_SLIDING_KEYBOAED_AVAILABLE:
288                 value->b = true;
289                 break;
290
291         case VCONFKEY_SYSMAN_SLIDING_KEYBOARD_NOT_SUPPORTED:
292                 value->b = false;
293                 break;
294
295         default:
296                 return RUNTIME_INFO_ERROR_IO_ERROR;
297         }
298
299         return RUNTIME_INFO_ERROR_NONE;
300 }
301
302 int runtime_info_sliding_keyboard_opened_set_event_cb(void)
303 {
304         return runtime_info_vconf_set_event_cb(VCONF_SLIDING_KEYBOARD_STATUS, RUNTIME_INFO_KEY_SLIDING_KEYBOARD_OPENED, 0);
305 }
306
307 void runtime_info_sliding_keyboard_opened_unset_event_cb(void)
308 {
309         runtime_info_vconf_unset_event_cb(VCONF_SLIDING_KEYBOARD_STATUS, 0);
310 }
311
312
313 int runtime_info_usb_connected_get_value(runtime_info_value_h value)
314 {
315         int vconf_value;
316
317         if (runtime_info_vconf_get_value_int(VCONF_USB_CONNECTED, &vconf_value))
318                 vconf_value = VCONFKEY_SYSMAN_USB_DISCONNECTED;
319
320         switch (vconf_value) {
321         case VCONFKEY_SYSMAN_USB_DISCONNECTED:
322                 value->b = false;
323                 break;
324
325         case VCONFKEY_SYSMAN_USB_CONNECTED:
326                 value->b = false;
327                 break;
328
329         case VCONFKEY_SYSMAN_USB_AVAILABLE:
330                 value->b = true;
331                 break;
332
333         default:
334                 return RUNTIME_INFO_ERROR_IO_ERROR;
335         }
336
337         return RUNTIME_INFO_ERROR_NONE;
338 }
339
340 int runtime_info_usb_connected_set_event_cb(void)
341 {
342         return runtime_info_vconf_set_event_cb(VCONF_USB_CONNECTED, RUNTIME_INFO_KEY_USB_CONNECTED, 0);
343 }
344
345 void runtime_info_usb_connected_unset_event_cb(void)
346 {
347         runtime_info_vconf_unset_event_cb(VCONF_USB_CONNECTED, 0);
348 }
349
350 int runtime_info_charger_connected_get_value(runtime_info_value_h value)
351 {
352         int vconf_value;
353
354         if (runtime_info_vconf_get_value_int(VCONF_CHARGER_CONNECTED, &vconf_value))
355                 return RUNTIME_INFO_ERROR_IO_ERROR;
356
357         switch (vconf_value) {
358         case VCONFKEY_SYSMAN_CHARGER_DISCONNECTED:
359         /* regard not supported as disconnected */
360         case -ENOTSUP:
361                 value->b = false;
362                 break;
363
364         case VCONFKEY_SYSMAN_CHARGER_CONNECTED:
365                 value->b = true;
366                 break;
367
368         default:
369                 return RUNTIME_INFO_ERROR_IO_ERROR;
370         }
371
372         return RUNTIME_INFO_ERROR_NONE;
373 }
374
375 int runtime_info_charger_connected_set_event_cb(void)
376 {
377         return runtime_info_vconf_set_event_cb(VCONF_CHARGER_CONNECTED, RUNTIME_INFO_KEY_CHARGER_CONNECTED, 0);
378 }
379
380 void runtime_info_charger_connected_unset_event_cb(void)
381 {
382         runtime_info_vconf_unset_event_cb(VCONF_CHARGER_CONNECTED, 0);
383 }
384
385
386 int runtime_info_vibration_level_haptic_feedback_get_value(runtime_info_value_h value)
387 {
388         int vconf_value;
389
390         if (runtime_info_vconf_get_value_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vconf_value))
391                 return RUNTIME_INFO_ERROR_IO_ERROR;
392
393         value->i = vconf_value;
394
395         return RUNTIME_INFO_ERROR_NONE;
396 }
397
398 int runtime_info_vibration_level_haptic_feedback_set_event_cb(void)
399 {
400         return runtime_info_vconf_set_event_cb(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, RUNTIME_INFO_KEY_VIBRATION_LEVEL_HAPTIC_FEEDBACK, 0);
401 }
402
403 void runtime_info_vibration_level_haptic_feedback_unset_event_cb(void)
404 {
405         runtime_info_vconf_unset_event_cb(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, 0);
406 }
407
408