2 * Copyright (c) 2011-2014 Samsung Electronics Co., Ltd All Rights Reserved
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 * http://www.apache.org/licenses/LICENSE-2.0
7 * Unless required by applicable law or agreed to in writing, software
8 * distributed under the License is distributed on an "AS IS" BASIS,
9 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10 * See the License for the specific language governing permissions and
11 * limitations under the License.
16 #include <libxml/parser.h>
18 #include <sys/types.h>
21 #include "stt_config_mgr.h"
23 #include "stt_setting.h"
26 static stt_setting_state_e g_state = STT_SETTING_STATE_NONE;
28 static stt_setting_supported_engine_cb g_engine_cb;
29 static void* g_user_data;
31 static stt_setting_config_changed_cb g_config_changed_cb;
32 static void* g_config_changed_user_data;
34 static stt_setting_engine_changed_cb g_engine_changed_cb;
35 static void* g_engine_changed_user_data;
42 void __config_engine_changed_cb(const char* engine_id, const char* setting, const char* language, bool support_silence, bool need_credential, void* user_data)
44 if (NULL != engine_id) SECURE_SLOG(LOG_DEBUG, TAG_STTC, "Engine id(%s)", engine_id);
45 if (NULL != setting) SECURE_SLOG(LOG_DEBUG, TAG_STTC, "Engine setting(%s)", setting);
46 if (NULL != language) SECURE_SLOG(LOG_DEBUG, TAG_STTC, "Language(%s)", language);
47 SLOG(LOG_DEBUG, TAG_STTC, "Silence(%s), Credential(%s)", support_silence ? "on" : "off", need_credential ? "need" : "no need");
49 if (NULL != g_config_changed_cb)
50 g_engine_changed_cb(g_config_changed_user_data);
53 void __config_lang_changed_cb(const char* before_language, const char* current_language, void* user_data)
55 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "Lang changed : lang(%s)", current_language);
57 if (NULL != g_config_changed_cb)
58 g_config_changed_cb(g_config_changed_user_data);
61 void __config_bool_changed_cb(stt_config_type_e type, bool bool_value, void* user_data)
63 SECURE_SLOG(LOG_DEBUG, TAG_STTC, " type(%d) bool(%s)", type, bool_value ? "on" : "off");
65 if (NULL != g_config_changed_cb)
66 g_config_changed_cb(g_config_changed_user_data);
69 int stt_setting_initialize(void)
71 SLOG(LOG_DEBUG, TAG_STTC, "===== Initialize STT Setting");
73 if (STT_SETTING_STATE_READY == g_state) {
74 SLOG(LOG_WARN, TAG_STTC, "[WARNING] STT Setting has already been initialized. ");
75 SLOG(LOG_DEBUG, TAG_STTC, "=====");
76 SLOG(LOG_DEBUG, TAG_STTC, " ");
77 return STT_SETTING_ERROR_NONE;
80 int ret = stt_config_mgr_initialize(getpid());
82 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to initialize config manager : %d", ret);
83 return STT_SETTING_ERROR_OPERATION_FAILED;
86 ret = stt_config_mgr_set_callback(getpid(), __config_engine_changed_cb, __config_lang_changed_cb, __config_bool_changed_cb, NULL);
88 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to set config changed : %d", ret);
89 return STT_SETTING_ERROR_OPERATION_FAILED;
92 g_state = STT_SETTING_STATE_READY;
94 g_engine_changed_cb = NULL;
95 g_engine_changed_user_data = NULL;
97 g_config_changed_cb = NULL;
98 g_config_changed_user_data = NULL;
100 SLOG(LOG_DEBUG, TAG_STTC, "=====");
101 SLOG(LOG_DEBUG, TAG_STTC, " ");
103 return STT_SETTING_ERROR_NONE;
106 int stt_setting_finalize()
108 SLOG(LOG_DEBUG, TAG_STTC, "===== Finalize STT Setting");
110 stt_config_mgr_finalize(getpid());
112 g_state = STT_SETTING_STATE_NONE;
114 SLOG(LOG_DEBUG, TAG_STTC, "=====");
115 SLOG(LOG_DEBUG, TAG_STTC, " ");
117 return STT_SETTING_ERROR_NONE;
120 bool __config_mgr_get_engine_list(const char* engine_id, const char* engine_name, const char* setting, bool support_silence, void* user_data)
122 return g_engine_cb(engine_id, engine_name, setting, g_user_data);
125 int stt_setting_foreach_supported_engines(stt_setting_supported_engine_cb callback, void* user_data)
127 SLOG(LOG_DEBUG, TAG_STTC, "===== Foreach supported engines");
129 if (STT_SETTING_STATE_NONE == g_state) {
130 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
131 SLOG(LOG_DEBUG, TAG_STTC, "=====");
132 SLOG(LOG_DEBUG, TAG_STTC, " ");
133 return STT_SETTING_ERROR_INVALID_STATE;
136 if (NULL == callback) {
137 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Callback is NULL");
138 SLOG(LOG_DEBUG, TAG_STTC, "=====");
139 SLOG(LOG_DEBUG, TAG_STTC, " ");
140 return STT_SETTING_ERROR_INVALID_PARAMETER;
143 g_engine_cb = callback;
144 g_user_data = user_data;
146 int ret = stt_config_mgr_get_engine_list(__config_mgr_get_engine_list, NULL);
148 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
150 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Foreach supported engines");
153 SLOG(LOG_DEBUG, TAG_STTC, "=====");
154 SLOG(LOG_DEBUG, TAG_STTC, " ");
159 int stt_setting_get_engine(char** engine_id)
161 SLOG(LOG_DEBUG, TAG_STTC, "===== Get current engine");
163 if (STT_SETTING_STATE_NONE == g_state) {
164 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
165 SLOG(LOG_DEBUG, TAG_STTC, "=====");
166 SLOG(LOG_DEBUG, TAG_STTC, " ");
167 return STT_SETTING_ERROR_INVALID_STATE;
170 if (NULL == engine_id) {
171 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Engine id is NULL");
172 SLOG(LOG_DEBUG, TAG_STTC, "=====");
173 SLOG(LOG_DEBUG, TAG_STTC, " ");
174 return STT_SETTING_ERROR_INVALID_PARAMETER;
177 int ret = stt_config_mgr_get_engine(engine_id);
179 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
181 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get current engine");
184 SLOG(LOG_DEBUG, TAG_STTC, "=====");
185 SLOG(LOG_DEBUG, TAG_STTC, " ");
190 int stt_setting_set_engine(const char* engine_id)
192 SLOG(LOG_DEBUG, TAG_STTC, "===== Set current engine");
194 if (STT_SETTING_STATE_NONE == g_state) {
195 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
196 SLOG(LOG_DEBUG, TAG_STTC, "=====");
197 SLOG(LOG_DEBUG, TAG_STTC, " ");
198 return STT_SETTING_ERROR_INVALID_STATE;
201 if (NULL == engine_id) {
202 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Engine id is NULL");
203 SLOG(LOG_DEBUG, TAG_STTC, "=====");
204 SLOG(LOG_DEBUG, TAG_STTC, " ");
205 return STT_SETTING_ERROR_INVALID_PARAMETER;
208 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "New engine id : %s", engine_id);
210 int ret = stt_config_mgr_set_engine(engine_id);
212 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
214 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set current engine");
217 SLOG(LOG_DEBUG, TAG_STTC, "=====");
218 SLOG(LOG_DEBUG, TAG_STTC, " ");
223 int stt_setting_foreach_supported_languages(stt_setting_supported_language_cb callback, void* user_data)
225 SLOG(LOG_DEBUG, TAG_STTC, "===== Foreach supported languages");
227 if (STT_SETTING_STATE_NONE == g_state) {
228 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
229 SLOG(LOG_DEBUG, TAG_STTC, "=====");
230 SLOG(LOG_DEBUG, TAG_STTC, " ");
231 return STT_SETTING_ERROR_INVALID_STATE;
234 if (NULL == callback) {
235 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Param is NULL");
236 SLOG(LOG_DEBUG, TAG_STTC, "=====");
237 SLOG(LOG_DEBUG, TAG_STTC, " ");
238 return STT_SETTING_ERROR_INVALID_PARAMETER;
241 char* current_engine;
242 int ret = stt_config_mgr_get_engine(¤t_engine);
244 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to get current engine : %d", ret);
248 ret = stt_config_mgr_get_language_list(current_engine, (stt_config_supported_langauge_cb)callback, user_data);
250 if (NULL != current_engine)
251 free(current_engine);
254 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
256 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Foreach supported languages");
259 SLOG(LOG_DEBUG, TAG_STTC, "=====");
260 SLOG(LOG_DEBUG, TAG_STTC, " ");
265 int stt_setting_get_default_language(char** language)
267 SLOG(LOG_DEBUG, TAG_STTC, "===== Get default language");
269 if (STT_SETTING_STATE_NONE == g_state) {
270 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
271 SLOG(LOG_DEBUG, TAG_STTC, "=====");
272 SLOG(LOG_DEBUG, TAG_STTC, " ");
273 return STT_SETTING_ERROR_INVALID_STATE;
276 if (NULL == language) {
277 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input parameter is NULL");
278 SLOG(LOG_DEBUG, TAG_STTC, "=====");
279 SLOG(LOG_DEBUG, TAG_STTC, " ");
280 return STT_SETTING_ERROR_INVALID_PARAMETER;
283 int ret = stt_config_mgr_get_default_language(language);
285 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
287 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Default language : %s", *language);
290 SLOG(LOG_DEBUG, TAG_STTC, "=====");
291 SLOG(LOG_DEBUG, TAG_STTC, " ");
296 int stt_setting_set_default_language(const char* language)
298 SLOG(LOG_DEBUG, TAG_STTC, "===== Set default language");
300 if (STT_SETTING_STATE_NONE == g_state) {
301 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
302 SLOG(LOG_DEBUG, TAG_STTC, "=====");
303 SLOG(LOG_DEBUG, TAG_STTC, " ");
304 return STT_SETTING_ERROR_INVALID_STATE;
307 if (NULL == language) {
308 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input parameter is NULL");
309 SLOG(LOG_DEBUG, TAG_STTC, "=====");
310 SLOG(LOG_DEBUG, TAG_STTC, " ");
311 return STT_SETTING_ERROR_INVALID_PARAMETER;
314 int ret = stt_config_mgr_set_default_language(language);
316 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
318 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set default language : %s", language);
321 SLOG(LOG_DEBUG, TAG_STTC, "=====");
322 SLOG(LOG_DEBUG, TAG_STTC, " ");
327 int stt_setting_set_auto_language(bool value)
329 SLOG(LOG_DEBUG, TAG_STTC, "===== Set auto voice");
331 if (STT_SETTING_STATE_NONE == g_state) {
332 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
333 SLOG(LOG_DEBUG, TAG_STTC, "=====");
334 SLOG(LOG_DEBUG, TAG_STTC, " ");
335 return STT_SETTING_ERROR_INVALID_STATE;
338 if (value != true && value != false) {
339 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Invalid value");
340 SLOG(LOG_DEBUG, TAG_STTC, "=====");
341 SLOG(LOG_DEBUG, TAG_STTC, " ");
342 return STT_SETTING_ERROR_INVALID_PARAMETER;
345 int ret = stt_config_mgr_set_auto_language(value);
347 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
349 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set auto language (%s)", value ? "on" : "off");
352 SLOG(LOG_DEBUG, TAG_STTC, "=====");
353 SLOG(LOG_DEBUG, TAG_STTC, " ");
358 int stt_setting_get_auto_language(bool* value)
360 SLOG(LOG_DEBUG, TAG_STTC, "===== Get auto language");
362 if (STT_SETTING_STATE_NONE == g_state) {
363 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
364 SLOG(LOG_DEBUG, TAG_STTC, "=====");
365 SLOG(LOG_DEBUG, TAG_STTC, " ");
366 return STT_SETTING_ERROR_INVALID_STATE;
370 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Param is NULL");
371 SLOG(LOG_DEBUG, TAG_STTC, "=====");
372 SLOG(LOG_DEBUG, TAG_STTC, " ");
373 return STT_SETTING_ERROR_INVALID_PARAMETER;
376 int ret = stt_config_mgr_get_auto_language(value);
378 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
381 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get auto language (%s)", *value ? "true" : "false");
384 SLOG(LOG_DEBUG, TAG_STTC, "=====");
385 SLOG(LOG_DEBUG, TAG_STTC, " ");
390 int stt_setting_get_silence_detection(bool* value)
392 SLOG(LOG_DEBUG, TAG_STTC, "===== Get silence detection");
394 if (STT_SETTING_STATE_NONE == g_state) {
395 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
396 SLOG(LOG_DEBUG, TAG_STTC, "=====");
397 SLOG(LOG_DEBUG, TAG_STTC, " ");
398 return STT_SETTING_ERROR_INVALID_STATE;
402 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] param is NULL");
403 SLOG(LOG_DEBUG, TAG_STTC, "=====");
404 SLOG(LOG_DEBUG, TAG_STTC, " ");
405 return STT_SETTING_ERROR_INVALID_PARAMETER;
408 int ret = stt_config_mgr_get_silence_detection(value);
410 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);
412 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get silence detection(%s)", *value ? "true" : "false");
415 SLOG(LOG_DEBUG, TAG_STTC, "=====");
416 SLOG(LOG_DEBUG, TAG_STTC, " ");
421 int stt_setting_set_silence_detection(bool value)
423 SLOG(LOG_DEBUG, TAG_STTC, "===== Set silence detection");
425 if (STT_SETTING_STATE_NONE == g_state) {
426 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
427 SLOG(LOG_DEBUG, TAG_STTC, "=====");
428 SLOG(LOG_DEBUG, TAG_STTC, " ");
429 return STT_SETTING_ERROR_INVALID_STATE;
432 int ret = stt_config_mgr_set_silence_detection(value);
434 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);
436 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set silence detection(%s)", value ? "true" : "false");
439 SLOG(LOG_DEBUG, TAG_STTC, "=====");
440 SLOG(LOG_DEBUG, TAG_STTC, " ");
445 int stt_setting_set_engine_changed_cb(stt_setting_engine_changed_cb callback, void* user_data)
447 if (NULL == callback) {
448 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input param is NULL");
449 return STT_SETTING_ERROR_INVALID_PARAMETER;
452 g_engine_changed_cb = callback;
453 g_engine_changed_user_data = user_data;
455 return STT_SETTING_ERROR_NONE;
458 int stt_setting_unset_engine_changed_cb()
460 g_engine_changed_cb = NULL;
461 g_engine_changed_user_data = NULL;
463 return STT_SETTING_ERROR_NONE;
466 int stt_setting_set_config_changed_cb(stt_setting_config_changed_cb callback, void* user_data)
468 if (NULL == callback) {
469 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input param is NULL");
470 return STT_SETTING_ERROR_INVALID_PARAMETER;
473 g_config_changed_cb = callback;
474 g_config_changed_user_data = user_data;
476 return STT_SETTING_ERROR_NONE;
479 int stt_setting_unset_config_changed_cb()
481 g_config_changed_cb = NULL;
482 g_config_changed_user_data = NULL;
484 return STT_SETTING_ERROR_NONE;