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_dbus.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 if (VC_SETTING_STATE_READY == g_state) {
91 SLOG(LOG_WARN, TAG_VCS, "[WARNING] VC Setting has already been initialized.");
92 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
96 int ret = vc_config_mgr_initialize(getpid() + VC_SETTING_CONFIG_HANDLE);
98 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Fail to initialize config manager");
99 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
100 return VC_ERROR_OPERATION_FAILED;
103 ret = vc_config_mgr_set_lang_cb(getpid() + VC_SETTING_CONFIG_HANDLE, __config_lang_changed_cb);
105 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Fail to initialize config manager");
106 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
107 vc_config_mgr_finalize(getpid() + VC_SETTING_CONFIG_HANDLE);
108 return VC_ERROR_OPERATION_FAILED;
111 ret = vc_config_mgr_set_enabled_cb(getpid() + VC_SETTING_CONFIG_HANDLE, __vc_setting_enabled_changed_cb);
112 ret = vc_config_mgr_set_engine_cb(getpid() + VC_SETTING_CONFIG_HANDLE, __vc_setting_engine_changed_cb);
114 g_state = VC_SETTING_STATE_READY;
116 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
118 return VC_ERROR_NONE;
121 int vc_setting_deinitialize()
123 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Deinitialize VC Setting");
125 if (VC_SETTING_STATE_READY != g_state) {
126 SLOG(LOG_WARN, TAG_VCS, "[WARNING] VC Setting is not initialized");
127 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
128 return VC_ERROR_INVALID_STATE;
131 vc_config_mgr_unset_lang_cb(getpid() + VC_SETTING_CONFIG_HANDLE);
132 vc_config_mgr_unset_engine_cb(getpid() + VC_SETTING_CONFIG_HANDLE);
133 vc_config_mgr_finalize(getpid() + VC_SETTING_CONFIG_HANDLE);
135 g_state = VC_SETTING_STATE_NONE;
137 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
139 return VC_ERROR_NONE;
142 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)
144 return g_engine_cb(engine_name, engine_id, setting_path, default_lang, non_fixed_support, g_engine_user_data);
147 int vc_setting_foreach_supported_engines(vc_setting_supported_engine_cb callback, void* user_data)
149 SLOG(LOG_DEBUG, TAG_VCS, "===== Foreach supported engines");
151 if (VC_SETTING_STATE_NONE == g_state) {
152 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
153 SLOG(LOG_DEBUG, TAG_VCS, "=====");
154 SLOG(LOG_DEBUG, TAG_VCS, " ");
155 return VC_ERROR_INVALID_STATE;
158 if (NULL == callback) {
159 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Callback is NULL");
160 SLOG(LOG_DEBUG, TAG_VCS, "=====");
161 SLOG(LOG_DEBUG, TAG_VCS, " ");
162 return VC_ERROR_INVALID_PARAMETER;
165 SLOG(LOG_DEBUG, TAG_VCS, "===== Foreach supported engines 11");
166 g_engine_cb = callback;
167 g_engine_user_data = user_data;
169 int ret = vc_config_mgr_get_engine_list(__config_mgr_get_engine_list, NULL);
171 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
173 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Foreach supported engines");
176 SLOG(LOG_DEBUG, TAG_VCS, "=====");
177 SLOG(LOG_DEBUG, TAG_VCS, " ");
182 int vc_setting_get_engine(char** engine_id)
184 SLOG(LOG_DEBUG, TAG_VCS, "===== Get current engine");
186 if (VC_SETTING_STATE_NONE == g_state) {
187 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
188 SLOG(LOG_DEBUG, TAG_VCS, "=====");
189 SLOG(LOG_DEBUG, TAG_VCS, " ");
190 return VC_ERROR_INVALID_STATE;
193 if (NULL == engine_id) {
194 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Engine id is NULL");
195 SLOG(LOG_DEBUG, TAG_VCS, "=====");
196 SLOG(LOG_DEBUG, TAG_VCS, " ");
197 return VC_ERROR_INVALID_PARAMETER;
200 int ret = vc_config_mgr_get_engine(engine_id);
202 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
204 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Get current engine");
207 SLOG(LOG_DEBUG, TAG_VCS, "=====");
208 SLOG(LOG_DEBUG, TAG_VCS, " ");
213 int vc_setting_set_engine(const char* engine_appid)
215 SLOG(LOG_DEBUG, TAG_VCS, "===== Set current engine");
217 if (VC_SETTING_STATE_NONE == g_state) {
218 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
219 SLOG(LOG_DEBUG, TAG_VCS, "=====");
220 SLOG(LOG_DEBUG, TAG_VCS, " ");
221 return VC_ERROR_INVALID_STATE;
224 if (NULL == engine_appid) {
225 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Engine appid is NULL");
226 SLOG(LOG_DEBUG, TAG_VCS, "=====");
227 SLOG(LOG_DEBUG, TAG_VCS, " ");
228 return VC_ERROR_INVALID_PARAMETER;
231 SECURE_SLOG(LOG_DEBUG, TAG_VCS, "New engine appid : %s", engine_appid);
233 int ret = vc_config_mgr_set_engine(engine_appid);
235 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
237 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Set current engine");
240 SLOG(LOG_DEBUG, TAG_VCS, "=====");
241 SLOG(LOG_DEBUG, TAG_VCS, " ");
246 int vc_setting_foreach_supported_languages(vc_setting_supported_language_cb callback, void* user_data)
248 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Foreach supported languages");
250 if (VC_SETTING_STATE_NONE == g_state) {
251 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
252 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
253 return VC_ERROR_INVALID_STATE;
256 if (NULL == callback) {
257 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Param is NULL");
258 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
259 return VC_ERROR_INVALID_PARAMETER;
262 int ret = vc_config_mgr_get_language_list((vc_supported_language_cb)callback, user_data);
264 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
266 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Foreach supported languages");
269 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
274 int vc_setting_get_language(char** language)
276 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get default language");
278 if (VC_SETTING_STATE_NONE == g_state) {
279 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
280 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
281 return VC_ERROR_INVALID_STATE;
284 if (NULL == language) {
285 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Input parameter is NULL");
286 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
287 return VC_ERROR_INVALID_PARAMETER;
290 int ret = vc_config_mgr_get_default_language(language);
292 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
294 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Get default language");
297 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
302 int vc_setting_set_language(const char* language)
304 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set default language");
306 if (VC_SETTING_STATE_NONE == g_state) {
307 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
308 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
309 return VC_ERROR_INVALID_STATE;
312 if (NULL == language) {
313 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Input parameter is NULL");
314 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
315 return VC_ERROR_INVALID_PARAMETER;
318 int ret = vc_config_mgr_set_default_language(language);
320 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
322 if (0 != vc_setting_dbus_open_connection()) {
323 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Fail to open connection");
324 return VC_ERROR_OPERATION_FAILED;
327 if (0 != vc_setting_dbus_request_hello()) {
328 SLOG(LOG_DEBUG, TAG_VCS, "[DEBUG] Daemon is not available");
330 ret = vc_setting_dbus_request_set_language(getpid(), language);
331 SLOG(LOG_DEBUG, TAG_VCS, "[DEBUG] Set default language (%d)", ret);
334 if (0 != vc_setting_dbus_close_connection()) {
335 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Fail to close connection");
336 return VC_ERROR_OPERATION_FAILED;
340 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
345 int vc_setting_set_auto_language(bool value)
347 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set auto voice");
349 if (VC_SETTING_STATE_NONE == g_state) {
350 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
351 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
352 return VC_ERROR_INVALID_STATE;
355 if (value != true && value != false) {
356 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Invalid value");
357 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
358 return VC_ERROR_INVALID_PARAMETER;
361 int ret = vc_config_mgr_set_auto_language(value);
363 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
365 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Set auto language (%s)", value ? "on" : "off");
368 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
373 int vc_setting_get_auto_language(bool* value)
375 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get auto language");
377 if (VC_SETTING_STATE_NONE == g_state) {
378 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
379 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
380 return VC_ERROR_INVALID_STATE;
384 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Param is NULL");
385 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
386 return VC_ERROR_INVALID_PARAMETER;
389 int ret = vc_config_mgr_get_auto_language(value);
391 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
393 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Get auto language (%s)", *value ? "true" : "false");
396 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
401 int vc_setting_set_enabled(bool value)
403 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set service enabled");
405 if (VC_SETTING_STATE_NONE == g_state) {
406 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
407 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
408 return VC_ERROR_INVALID_STATE;
411 if (value != true && value != false) {
412 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Invalid value");
413 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
414 return VC_ERROR_INVALID_PARAMETER;
417 int ret = vc_config_mgr_set_enabled(value);
419 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
421 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Set service enabled (%s)", value ? "on" : "off");
424 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
429 int vc_setting_get_enabled(bool* value)
431 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get service enabled");
433 if (VC_SETTING_STATE_NONE == g_state) {
434 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
435 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
436 return VC_ERROR_INVALID_STATE;
440 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Param is NULL");
441 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
442 return VC_ERROR_INVALID_PARAMETER;
445 int ret = vc_config_mgr_get_enabled(value);
447 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
450 SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Get service enabled (%s)", *value ? "on" : "off");
453 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
458 int vc_setting_set_enabled_changed_cb(vc_setting_enabled_changed_cb callback, void* user_data)
460 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set service enabled callback");
462 if (VC_SETTING_STATE_NONE == g_state) {
463 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
464 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
465 return VC_ERROR_INVALID_STATE;
468 if (NULL == callback) {
469 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Param is NULL");
470 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
471 return VC_ERROR_INVALID_PARAMETER;
474 g_enabled_changed_cb = callback;
475 g_enabled_changed_user_data = user_data;
477 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
482 int vc_setting_unset_enabled_changed_cb()
484 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset service enabled callback");
486 if (VC_SETTING_STATE_NONE == g_state) {
487 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
488 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
489 return VC_ERROR_INVALID_STATE;
492 g_enabled_changed_cb = NULL;
493 g_enabled_changed_user_data = NULL;
495 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
500 int vc_setting_set_current_language_changed_cb(vc_setting_current_language_changed_cb callback, void* user_data)
502 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set current language changed callback");
504 if (VC_SETTING_STATE_NONE == g_state) {
505 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
506 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
507 return VC_ERROR_INVALID_STATE;
510 if (NULL == callback) {
511 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Param is NULL");
512 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
513 return VC_ERROR_INVALID_PARAMETER;
516 g_current_language_changed_cb = callback;
517 g_current_language_changed_user_data = user_data;
519 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
524 int vc_setting_unset_current_language_changed_cb()
526 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset current language changed callback");
528 if (VC_SETTING_STATE_NONE == g_state) {
529 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
530 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
531 return VC_ERROR_INVALID_STATE;
534 g_current_language_changed_cb = NULL;
535 g_current_language_changed_user_data = NULL;
537 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
542 int vc_setting_set_engine_changed_cb(vc_setting_engine_changed_cb callback, void *user_data)
544 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set engine changed callback");
546 if (NULL == callback) {
547 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Input param is NULL");
548 return VC_ERROR_INVALID_PARAMETER;
551 g_engine_changed_cb = callback;
552 g_engine_changed_user_data = user_data;
554 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
558 int vc_setting_unset_engine_changed_cb()
560 SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset engine changed callback");
562 if (VC_SETTING_STATE_NONE == g_state) {
563 SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
564 SLOG(LOG_DEBUG, TAG_VCS, "@@@");
565 return VC_ERROR_INVALID_STATE;
568 g_engine_changed_cb = NULL;
569 g_engine_changed_user_data = NULL;
571 SLOG(LOG_DEBUG, TAG_VCS, "@@@");