2 * Copyright (c) 2011-2019 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #include "vc_config_mgr.h"
20 #include "vc_setting_tidl.h"
21 #include "voice_control_common.h"
22 #include "voice_control_setting.h"
25 * @brief Enumerations of mode.
28 VC_SETTING_STATE_NONE = 0,
29 VC_SETTING_STATE_READY
32 #define VC_SETTING_CONFIG_HANDLE 30000000
34 static vc_setting_state_e g_state = VC_SETTING_STATE_NONE;
36 static vc_setting_supported_engine_cb g_engine_cb = NULL;
37 static void* g_engine_user_data = NULL;
39 static vc_setting_engine_changed_cb g_engine_changed_cb = NULL;
40 static void* g_engine_changed_user_data = NULL;
42 static vc_setting_enabled_changed_cb g_enabled_changed_cb = NULL;
43 static void* g_enabled_changed_user_data = NULL;
45 static vc_setting_current_language_changed_cb g_current_language_changed_cb = NULL;
46 static void* g_current_language_changed_user_data = NULL;
48 void __config_lang_changed_cb(const char* before_lang, const char* current_lang)
50 SLOG(LOG_DEBUG, TAG_VCS, "Lang changed : before(%s) current(%s)", before_lang, current_lang);
52 if (NULL != g_current_language_changed_cb) {
53 g_current_language_changed_cb(before_lang, current_lang, g_current_language_changed_user_data);
57 void __vc_setting_state_changed_cb(int before_state, int current_state, void* user_data)
59 SLOG(LOG_DEBUG, TAG_VCS, "Service State changed : Before(%d) Current(%d)",
60 before_state, current_state);
64 void __vc_setting_enabled_changed_cb(bool enabled)
66 SLOG(LOG_DEBUG, TAG_VCS, "Service enabled changed : %s", enabled ? "on" : "off");
68 if (NULL != g_enabled_changed_cb) {
69 g_enabled_changed_cb(enabled, g_enabled_changed_user_data);
75 void __vc_setting_engine_changed_cb(const char* engine_appid)
77 SLOG(LOG_DEBUG, TAG_VCS, "Service enabled changed : engine appid(%s)", engine_appid);
79 if (NULL != g_engine_changed_cb) {
80 g_engine_changed_cb(engine_appid, g_engine_changed_user_data);
86 int vc_setting_initialize(void)
88 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Initialize VC Setting");
90 RETVM_IF(VC_SETTING_STATE_READY == g_state, VC_ERROR_NONE, TAG_VCS, "[WARNING] VC Setting has already been initialized.");
92 int ret = vc_config_mgr_initialize(getpid() + VC_SETTING_CONFIG_HANDLE);
94 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Fail to initialize config manager");
95 return VC_ERROR_OPERATION_FAILED;
98 ret = vc_config_mgr_set_lang_cb(getpid() + VC_SETTING_CONFIG_HANDLE, __config_lang_changed_cb);
100 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Fail to initialize config manager");
101 vc_config_mgr_finalize(getpid() + VC_SETTING_CONFIG_HANDLE);
102 return VC_ERROR_OPERATION_FAILED;
105 ret = vc_config_mgr_set_enabled_cb(getpid() + VC_SETTING_CONFIG_HANDLE, __vc_setting_enabled_changed_cb);
106 ret = vc_config_mgr_set_engine_cb(getpid() + VC_SETTING_CONFIG_HANDLE, __vc_setting_engine_changed_cb);
108 g_state = VC_SETTING_STATE_READY;
110 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Initialize VC Setting DONE");
112 return VC_ERROR_NONE;
115 int vc_setting_deinitialize()
117 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Deinitialize VC Setting");
119 RETVM_IF(VC_SETTING_STATE_READY != g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[WARNING] VC Setting is not initialized");
121 vc_config_mgr_unset_lang_cb(getpid() + VC_SETTING_CONFIG_HANDLE);
122 vc_config_mgr_unset_engine_cb(getpid() + VC_SETTING_CONFIG_HANDLE);
123 vc_config_mgr_finalize(getpid() + VC_SETTING_CONFIG_HANDLE);
125 g_state = VC_SETTING_STATE_NONE;
127 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Deinitialize VC Setting DONE");
129 return VC_ERROR_NONE;
132 static bool __config_mgr_get_engine_list(const char *engine_name, const char *engine_id, const char *setting_path, const char *default_lang, bool non_fixed_support, void *user_data)
134 return g_engine_cb(engine_name, engine_id, setting_path, default_lang, non_fixed_support, g_engine_user_data);
137 int vc_setting_foreach_supported_engines(vc_setting_supported_engine_cb callback, void* user_data)
139 SLOG(LOG_DEBUG, TAG_VCS, "===== Foreach supported engines");
141 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
143 RETVM_IF(NULL == callback, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
145 SLOG(LOG_DEBUG, TAG_VCS, "===== Foreach supported engines 11");
146 g_engine_cb = callback;
147 g_engine_user_data = user_data;
149 int ret = vc_config_mgr_get_engine_list(__config_mgr_get_engine_list, NULL);
151 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
153 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Foreach supported engines");
160 int vc_setting_get_engine(char** engine_id)
162 SLOG(LOG_DEBUG, TAG_VCS, "===== Get current engine");
164 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
166 RETVM_IF(NULL == engine_id, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Engine id is NULL");
168 int ret = vc_config_mgr_get_engine(engine_id);
170 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
172 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Get current engine");
179 int vc_setting_set_engine(const char* engine_appid)
181 SLOG(LOG_DEBUG, TAG_VCS, "===== Set current engine");
183 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
185 RETVM_IF(NULL == engine_appid, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Engine appid is NULL");
187 SECURE_SLOG(LOG_DEBUG, TAG_VCS, "New engine appid : %s", engine_appid);
189 int ret = vc_config_mgr_set_engine(engine_appid);
191 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
193 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Set current engine");
200 int vc_setting_foreach_supported_languages(vc_setting_supported_language_cb callback, void* user_data)
202 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Foreach supported languages");
204 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
206 RETVM_IF(NULL == callback, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
208 int ret = vc_config_mgr_get_language_list((vc_supported_language_cb)callback, user_data);
210 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
212 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Foreach supported languages");
215 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Foreach supported languages DONE");
220 int vc_setting_get_language(char** language)
222 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get default language");
224 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
226 RETVM_IF(NULL == language, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
228 int ret = vc_config_mgr_get_default_language(language);
230 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
232 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Get default language");
235 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get default language DONE");
240 int vc_setting_set_language(const char* language)
242 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set default language");
244 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
246 RETVM_IF(NULL == language, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
248 int ret = vc_config_mgr_set_default_language(language);
250 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
252 // TODO: Need to reorder.
253 if (0 != vc_setting_tidl_open_connection()) {
254 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Fail to open connection");
255 return VC_ERROR_OPERATION_FAILED;
258 if (0 != vc_setting_tidl_request_hello()) {
259 SLOG(LOG_DEBUG, TAG_VCS, "[DEBUG] Daemon is not available");
261 ret = vc_setting_tidl_request_set_language(getpid(), language);
262 SLOG(LOG_DEBUG, TAG_VCS, "[DEBUG] Set default language (%d)", ret);
265 if (0 != vc_setting_tidl_close_connection()) {
266 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Fail to close connection");
267 return VC_ERROR_OPERATION_FAILED;
271 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set default language DONE");
276 int vc_setting_set_auto_language(bool value)
278 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set auto voice");
280 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
282 if (value != true && value != false) {
283 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Invalid value");
284 return VC_ERROR_INVALID_PARAMETER;
287 int ret = vc_config_mgr_set_auto_language(value);
289 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
291 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Set auto language (%s)", value ? "on" : "off");
294 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set auto voice DONE");
299 int vc_setting_get_auto_language(bool* value)
301 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get auto language");
303 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
305 RETVM_IF(NULL == value, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
307 int ret = vc_config_mgr_get_auto_language(value);
309 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
311 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Get auto language (%s)", *value ? "true" : "false");
314 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get auto language DONE");
316 return VC_ERROR_NONE;
319 int vc_setting_set_enabled(bool value)
321 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set service enabled");
323 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
325 if (value != true && value != false) {
326 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Invalid value");
327 return VC_ERROR_INVALID_PARAMETER;
330 int ret = vc_config_mgr_set_enabled(value);
332 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
334 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Set service enabled (%s)", value ? "on" : "off");
337 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set service enabled DONE");
342 int vc_setting_get_enabled(bool* value)
344 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get service enabled");
346 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
348 RETVM_IF(NULL == value, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
350 int ret = vc_config_mgr_get_enabled(value);
352 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
355 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Get service enabled (%s)", *value ? "on" : "off");
358 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get service enabled DONE");
363 int vc_setting_set_enabled_changed_cb(vc_setting_enabled_changed_cb callback, void* user_data)
365 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set service enabled callback");
367 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
369 RETVM_IF(NULL == callback, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
371 g_enabled_changed_cb = callback;
372 g_enabled_changed_user_data = user_data;
374 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set service enabled callback DONE");
376 return VC_ERROR_NONE;
379 int vc_setting_unset_enabled_changed_cb()
381 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset service enabled callback");
383 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
385 g_enabled_changed_cb = NULL;
386 g_enabled_changed_user_data = NULL;
388 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset service enabled callback DONE");
390 return VC_ERROR_NONE;
393 int vc_setting_set_current_language_changed_cb(vc_setting_current_language_changed_cb callback, void* user_data)
395 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set current language changed callback");
397 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
399 RETVM_IF(NULL == callback, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
401 g_current_language_changed_cb = callback;
402 g_current_language_changed_user_data = user_data;
404 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set current language changed callback DONE");
406 return VC_ERROR_NONE;
409 int vc_setting_unset_current_language_changed_cb()
411 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset current language changed callback");
413 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
415 g_current_language_changed_cb = NULL;
416 g_current_language_changed_user_data = NULL;
418 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset current language changed callback");
420 return VC_ERROR_NONE;
423 int vc_setting_set_engine_changed_cb(vc_setting_engine_changed_cb callback, void *user_data)
425 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set engine changed callback");
427 RETVM_IF(NULL == callback, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
429 g_engine_changed_cb = callback;
430 g_engine_changed_user_data = user_data;
432 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set engine changed callback DONE");
433 return VC_ERROR_NONE;
436 int vc_setting_unset_engine_changed_cb()
438 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset engine changed callback");
440 RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
442 g_engine_changed_cb = NULL;
443 g_engine_changed_user_data = NULL;
445 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset engine changed callback DONE");
446 return VC_ERROR_NONE;