Modification for Tizen Coding Rule
[platform/core/multimedia/libmm-sound.git] / common / mm_sound_utils.c
1 /*
2  * libmm-sound
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Seungbae Shin <seungbae.shin@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #include <sys/types.h>
23 #include <fcntl.h>
24 #include <stdio.h>
25 #include <unistd.h>
26 #include <errno.h>
27 #include <glib.h>
28
29 #include <vconf.h>
30 #include <mm_types.h>
31 #include <mm_error.h>
32 #include <mm_debug.h>
33 #include "../include/mm_sound_private.h"
34 #include "../include/mm_sound_utils.h"
35
36 #define VCONF_KEY_VOLUME_PREFIX                         "file/private/sound/volume"
37 #define VCONF_KEY_VOLUME_TYPE_SYSTEM            VCONF_KEY_VOLUME_PREFIX"/system"
38 #define VCONF_KEY_VOLUME_TYPE_NOTIFICATION      VCONF_KEY_VOLUME_PREFIX"/notification"
39 #define VCONF_KEY_VOLUME_TYPE_ALARM                     VCONF_KEY_VOLUME_PREFIX"/alarm"
40 #define VCONF_KEY_VOLUME_TYPE_RINGTONE          VCONF_KEY_VOLUME_PREFIX"/ringtone"
41 #define VCONF_KEY_VOLUME_TYPE_MEDIA                     VCONF_KEY_VOLUME_PREFIX"/media"
42 #define VCONF_KEY_VOLUME_TYPE_CALL                      VCONF_KEY_VOLUME_PREFIX"/call"
43 #define VCONF_KEY_VOLUME_TYPE_VOIP                      VCONF_KEY_VOLUME_PREFIX"/voip"
44 #define VCONF_KEY_VOLUME_TYPE_VOICE             VCONF_KEY_VOLUME_PREFIX"/voice"
45 #define VCONF_KEY_VOLUME_TYPE_ANDROID           VCONF_KEY_VOLUME_PREFIX"/fixed"
46
47 static char *g_volume_vconf[VOLUME_TYPE_MAX] = {
48         VCONF_KEY_VOLUME_TYPE_SYSTEM,           /* VOLUME_TYPE_SYSTEM */
49         VCONF_KEY_VOLUME_TYPE_NOTIFICATION,     /* VOLUME_TYPE_NOTIFICATION */
50         VCONF_KEY_VOLUME_TYPE_ALARM,            /* VOLUME_TYPE_ALARM */
51         VCONF_KEY_VOLUME_TYPE_RINGTONE,         /* VOLUME_TYPE_RINGTONE */
52         VCONF_KEY_VOLUME_TYPE_MEDIA,            /* VOLUME_TYPE_MEDIA */
53         VCONF_KEY_VOLUME_TYPE_CALL,                     /* VOLUME_TYPE_CALL */
54         VCONF_KEY_VOLUME_TYPE_VOIP,                     /* VOLUME_TYPE_VOIP */
55         VCONF_KEY_VOLUME_TYPE_VOICE,            /* VOLUME_TYPE_VOICE */
56         VCONF_KEY_VOLUME_TYPE_ANDROID           /* VOLUME_TYPE_FIXED */
57 };
58 static char *g_volume_str[VOLUME_TYPE_MAX] = {
59         "SYSTEM",
60         "NOTIFICATION",
61         "ALARM",
62         "RINGTONE",
63         "MEDIA",
64         "CALL",
65         "VOIP",
66         "VOICE",
67         "FIXED",
68 };
69
70 EXPORT_API
71 int mm_sound_util_volume_get_value_by_type(volume_type_t type, unsigned int *value)
72 {
73         int ret = MM_ERROR_NONE;
74         int vconf_value = 0;
75
76         /* Get volume value from VCONF */
77         if (vconf_get_int(g_volume_vconf[type], &vconf_value)) {
78                 debug_error("vconf_get_int(%s) failed..\n", g_volume_vconf[type]);
79                 return MM_ERROR_SOUND_INTERNAL;
80         }
81
82         *value = vconf_value;
83         if (ret == MM_ERROR_NONE)
84                 debug_log("volume_get_value %s %d",  g_volume_str[type], *value);
85
86         return ret;
87 }
88
89 EXPORT_API
90 bool mm_sound_util_is_process_alive(pid_t pid)
91 {
92         gchar *tmp = NULL;
93         int ret = -1;
94
95         if (pid > 999999 || pid < 2)
96                 return false;
97
98         if ((tmp = g_strdup_printf("/proc/%d", pid))) {
99                 ret = access(tmp, F_OK);
100                 g_free(tmp);
101         }
102
103         if (ret == -1) {
104                 if (errno == ENOENT) {
105                         debug_warning("/proc/%d not exist", pid);
106                         return false;
107                 } else {
108                         debug_error("/proc/%d access errno[%d]", pid, errno);
109
110                         /* FIXME: error occured but file exists */
111                         return true;
112                 }
113         }
114
115         return true;
116 }