Deallocate memory before setting new value
[platform/core/uifw/voice-control.git] / server / vcd_config.c
1 /*
2 * Copyright (c) 2011-2015 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 "vc_config_mgr.h"
18 #include "vcd_config.h"
19 #include "vcd_main.h"
20
21
22 static vcd_config_lang_changed_cb g_lang_cb;
23
24 static void* g_user_data;
25
26 static vcd_state_e g_state;
27
28 static int g_foreground_pid;
29
30 static int g_audio_streaming_mode;
31
32 #define COMMAND_TYPE_MAX        7
33
34 static int g_disabled_command_type = 0x00;
35
36 void __vcd_config_lang_changed_cb(const char* before_lang, const char* current_lang)
37 {
38         if (NULL != before_lang && NULL != current_lang && strncmp(before_lang, current_lang, strlen(before_lang))) {
39                 if (NULL != g_lang_cb)
40                         g_lang_cb(current_lang, g_user_data);
41                 else
42                         SLOG(LOG_ERROR, TAG_VCD, "Language changed callback is NULL");
43         }
44 }
45
46
47 int vcd_config_initialize(vcd_config_lang_changed_cb lang_cb, vcd_config_foreground_changed_cb fore_cb, void* user_data)
48 {
49         if (NULL == lang_cb) {
50                 SLOG(LOG_ERROR, TAG_VCD, "[Config] Invalid parameter");
51                 return VCD_ERROR_INVALID_PARAMETER;
52         }
53
54         int ret = -1;
55         ret = vc_config_mgr_initialize(getpid());
56         if (0 != ret) {
57                 SLOG(LOG_ERROR, TAG_VCD, "[Config] Fail to initialize config manager : %d", ret);
58                 return VCD_ERROR_OPERATION_FAILED;
59         }
60
61         ret = vc_config_mgr_set_lang_cb(getpid(), __vcd_config_lang_changed_cb);
62         if (0 != ret) {
63                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to set config changed callback : %d", ret);
64                 return VCD_ERROR_OPERATION_FAILED;
65         }
66
67         g_lang_cb = lang_cb;
68         g_user_data = user_data;
69
70         g_foreground_pid = VC_RUNTIME_INFO_NO_FOREGROUND;
71
72         return VCD_ERROR_NONE;
73 }
74
75 int vcd_config_finalize()
76 {
77         vc_config_mgr_unset_lang_cb(getpid());
78         vc_config_mgr_finalize(getpid());
79
80         return VCD_ERROR_NONE;
81 }
82
83 int vcd_config_get_default_language(char** language)
84 {
85         if (NULL == language)
86                 return VCD_ERROR_INVALID_PARAMETER;
87
88         if (0 != vc_config_mgr_get_default_language(language)) {
89                 SLOG(LOG_ERROR, TAG_VCD, "[Config ERROR] Fail to get language");
90                 return VCD_ERROR_OPERATION_FAILED;
91         }
92
93         return VCD_ERROR_NONE;
94 }
95
96 int vcd_config_set_default_language(const char* language)
97 {
98         if (NULL == language)
99                 return VCD_ERROR_INVALID_PARAMETER;
100
101         if (0 != vc_config_mgr_set_default_language(language)) {
102                 SLOG(LOG_ERROR, TAG_VCD, "[Config ERROR] Fail to get language");
103                 return VCD_ERROR_OPERATION_FAILED;
104         }
105
106         return VCD_ERROR_NONE;
107 }
108
109 int vcd_config_set_service_state(vcd_state_e state)
110 {
111         g_state = state;
112
113         SLOG(LOG_INFO, TAG_VCD, "[Config] Config is changed : %d", g_state);
114
115         return VCD_ERROR_NONE;
116 }
117
118 vcd_state_e vcd_config_get_service_state()
119 {
120         return g_state;
121 }
122
123 int vcd_config_get_foreground(int* pid)
124 {
125         *pid = g_foreground_pid;
126         return VCD_ERROR_NONE;
127 }
128
129 int vcd_config_set_foreground(int pid, bool value)
130 {
131         if (true == value) {
132                 g_foreground_pid = pid;
133         } else {
134                 if (pid == g_foreground_pid) {
135                         g_foreground_pid = VC_RUNTIME_INFO_NO_FOREGROUND;
136                 }
137         }
138         return VCD_ERROR_NONE;
139 }
140
141 int vcd_config_set_disabled_command_type(int disabled_cmd_type)
142 {
143         SLOG(LOG_INFO, TAG_VCD, "[INFO] Set disabled command type (%d)", disabled_cmd_type);
144
145         g_disabled_command_type = disabled_cmd_type;
146
147         return VCD_ERROR_NONE;
148 }
149
150 int vcd_config_get_command_type_enabled(int cmd_type)
151 {
152         if (cmd_type <= 0 || cmd_type >= COMMAND_TYPE_MAX) {
153                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Invalid command type");
154                 return VCD_ERROR_NONE;
155         }
156
157         if (~(g_disabled_command_type) & (1 << cmd_type))
158                 return 1;
159         else
160                 return VCD_ERROR_NONE;
161 }
162
163 int vcd_config_get_audio_streaming_mode(vcd_audio_streaming_mode_e* streaming_mode)
164 {
165         *streaming_mode = g_audio_streaming_mode;
166         return VCD_ERROR_NONE;
167 }
168
169 int vcd_config_set_audio_streaming_mode(vcd_audio_streaming_mode_e streaming_mode)
170 {
171         if (streaming_mode < VCD_AUDIO_STREAMING_MODE_VC_SERVICE || streaming_mode > VCD_AUDIO_STREAMING_MODE_OUTSIDE) {
172                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Invalid streaming mode(%d)", streaming_mode);
173                 return VCD_ERROR_INVALID_PARAMETER;
174         }
175
176         g_audio_streaming_mode = streaming_mode;
177         return VCD_ERROR_NONE;
178 }