2 * Copyright (c) 2011-2016 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;
37 void __config_engine_changed_cb(const char* engine_id, const char* setting, const char* language, bool support_silence, bool need_credential, void* user_data)
39 if (NULL != engine_id) SECURE_SLOG(LOG_DEBUG, TAG_STTC, "Engine id(%s)", engine_id);
40 if (NULL != setting) SECURE_SLOG(LOG_DEBUG, TAG_STTC, "Engine setting(%s)", setting);
41 if (NULL != language) SECURE_SLOG(LOG_DEBUG, TAG_STTC, "Language(%s)", language);
42 SLOG(LOG_DEBUG, TAG_STTC, "Silence(%s), Credential(%s)", support_silence ? "on" : "off", need_credential ? "need" : "no need");
44 if (NULL != g_config_changed_cb)
45 g_engine_changed_cb(g_config_changed_user_data);
48 void __config_lang_changed_cb(const char* before_language, const char* current_language, void* user_data)
50 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "Lang changed : lang(%s)", current_language);
52 if (NULL != g_config_changed_cb)
53 g_config_changed_cb(g_config_changed_user_data);
56 void __config_bool_changed_cb(stt_config_type_e type, bool bool_value, void* user_data)
58 SECURE_SLOG(LOG_DEBUG, TAG_STTC, " type(%d) bool(%s)", type, bool_value ? "on" : "off");
60 if (NULL != g_config_changed_cb)
61 g_config_changed_cb(g_config_changed_user_data);
64 int stt_setting_initialize(void)
66 SLOG(LOG_DEBUG, TAG_STTC, "===== Initialize STT Setting");
68 if (STT_SETTING_STATE_READY == g_state) {
69 SLOG(LOG_WARN, TAG_STTC, "[WARNING] STT Setting has already been initialized. ");
70 SLOG(LOG_DEBUG, TAG_STTC, "=====");
71 SLOG(LOG_DEBUG, TAG_STTC, " ");
72 return STT_SETTING_ERROR_NONE;
75 int ret = stt_config_mgr_initialize(getpid());
77 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to initialize config manager : %d", ret);
78 return STT_SETTING_ERROR_OPERATION_FAILED;
81 ret = stt_config_mgr_set_callback(getpid(), __config_engine_changed_cb, __config_lang_changed_cb, __config_bool_changed_cb, NULL);
83 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to set config changed : %d", ret);
84 return STT_SETTING_ERROR_OPERATION_FAILED;
87 g_state = STT_SETTING_STATE_READY;
89 g_engine_changed_cb = NULL;
90 g_engine_changed_user_data = NULL;
92 g_config_changed_cb = NULL;
93 g_config_changed_user_data = NULL;
95 SLOG(LOG_DEBUG, TAG_STTC, "=====");
96 SLOG(LOG_DEBUG, TAG_STTC, " ");
98 return STT_SETTING_ERROR_NONE;
101 int stt_setting_finalize()
103 SLOG(LOG_DEBUG, TAG_STTC, "===== Finalize STT Setting");
105 stt_config_mgr_finalize(getpid());
107 g_state = STT_SETTING_STATE_NONE;
109 SLOG(LOG_DEBUG, TAG_STTC, "=====");
110 SLOG(LOG_DEBUG, TAG_STTC, " ");
112 return STT_SETTING_ERROR_NONE;
115 bool __config_mgr_get_engine_list(const char* engine_id, const char* engine_name, const char* setting, bool support_silence, void* user_data)
117 return g_engine_cb(engine_id, engine_name, setting, g_user_data);
120 int stt_setting_foreach_supported_engines(stt_setting_supported_engine_cb callback, void* user_data)
122 SLOG(LOG_DEBUG, TAG_STTC, "===== Foreach supported engines");
124 if (STT_SETTING_STATE_NONE == g_state) {
125 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
126 SLOG(LOG_DEBUG, TAG_STTC, "=====");
127 SLOG(LOG_DEBUG, TAG_STTC, " ");
128 return STT_SETTING_ERROR_INVALID_STATE;
131 if (NULL == callback) {
132 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Callback is NULL");
133 SLOG(LOG_DEBUG, TAG_STTC, "=====");
134 SLOG(LOG_DEBUG, TAG_STTC, " ");
135 return STT_SETTING_ERROR_INVALID_PARAMETER;
138 g_engine_cb = callback;
139 g_user_data = user_data;
141 int ret = stt_config_mgr_get_engine_list(__config_mgr_get_engine_list, NULL);
143 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
145 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Foreach supported engines");
148 SLOG(LOG_DEBUG, TAG_STTC, "=====");
149 SLOG(LOG_DEBUG, TAG_STTC, " ");
154 int stt_setting_get_engine(char** engine_id)
156 SLOG(LOG_DEBUG, TAG_STTC, "===== Get current engine");
158 if (STT_SETTING_STATE_NONE == g_state) {
159 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
160 SLOG(LOG_DEBUG, TAG_STTC, "=====");
161 SLOG(LOG_DEBUG, TAG_STTC, " ");
162 return STT_SETTING_ERROR_INVALID_STATE;
165 if (NULL == engine_id) {
166 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Engine id is NULL");
167 SLOG(LOG_DEBUG, TAG_STTC, "=====");
168 SLOG(LOG_DEBUG, TAG_STTC, " ");
169 return STT_SETTING_ERROR_INVALID_PARAMETER;
172 int ret = stt_config_mgr_get_engine(engine_id);
174 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
176 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get current engine");
179 SLOG(LOG_DEBUG, TAG_STTC, "=====");
180 SLOG(LOG_DEBUG, TAG_STTC, " ");
185 int stt_setting_set_engine(const char* engine_id)
187 SLOG(LOG_DEBUG, TAG_STTC, "===== Set current engine");
189 if (STT_SETTING_STATE_NONE == g_state) {
190 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
191 SLOG(LOG_DEBUG, TAG_STTC, "=====");
192 SLOG(LOG_DEBUG, TAG_STTC, " ");
193 return STT_SETTING_ERROR_INVALID_STATE;
196 if (NULL == engine_id) {
197 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Engine id is NULL");
198 SLOG(LOG_DEBUG, TAG_STTC, "=====");
199 SLOG(LOG_DEBUG, TAG_STTC, " ");
200 return STT_SETTING_ERROR_INVALID_PARAMETER;
203 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "New engine id : %s", engine_id);
205 int ret = stt_config_mgr_set_engine(engine_id);
207 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
209 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set current engine");
212 SLOG(LOG_DEBUG, TAG_STTC, "=====");
213 SLOG(LOG_DEBUG, TAG_STTC, " ");
218 int stt_setting_foreach_supported_languages(stt_setting_supported_language_cb callback, void* user_data)
220 SLOG(LOG_DEBUG, TAG_STTC, "===== Foreach supported languages");
222 if (STT_SETTING_STATE_NONE == g_state) {
223 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
224 SLOG(LOG_DEBUG, TAG_STTC, "=====");
225 SLOG(LOG_DEBUG, TAG_STTC, " ");
226 return STT_SETTING_ERROR_INVALID_STATE;
229 if (NULL == callback) {
230 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Param is NULL");
231 SLOG(LOG_DEBUG, TAG_STTC, "=====");
232 SLOG(LOG_DEBUG, TAG_STTC, " ");
233 return STT_SETTING_ERROR_INVALID_PARAMETER;
236 char* current_engine;
237 int ret = stt_config_mgr_get_engine(¤t_engine);
239 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to get current engine : %d", ret);
243 ret = stt_config_mgr_get_language_list(current_engine, (stt_config_supported_langauge_cb)callback, user_data);
245 if (NULL != current_engine)
246 free(current_engine);
249 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
251 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Foreach supported languages");
254 SLOG(LOG_DEBUG, TAG_STTC, "=====");
255 SLOG(LOG_DEBUG, TAG_STTC, " ");
260 int stt_setting_get_default_language(char** language)
262 SLOG(LOG_DEBUG, TAG_STTC, "===== Get default language");
264 if (STT_SETTING_STATE_NONE == g_state) {
265 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
266 SLOG(LOG_DEBUG, TAG_STTC, "=====");
267 SLOG(LOG_DEBUG, TAG_STTC, " ");
268 return STT_SETTING_ERROR_INVALID_STATE;
271 if (NULL == language) {
272 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input parameter is NULL");
273 SLOG(LOG_DEBUG, TAG_STTC, "=====");
274 SLOG(LOG_DEBUG, TAG_STTC, " ");
275 return STT_SETTING_ERROR_INVALID_PARAMETER;
278 int ret = stt_config_mgr_get_default_language(language);
280 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
282 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Default language : %s", *language);
285 SLOG(LOG_DEBUG, TAG_STTC, "=====");
286 SLOG(LOG_DEBUG, TAG_STTC, " ");
291 int stt_setting_set_default_language(const char* language)
293 SLOG(LOG_DEBUG, TAG_STTC, "===== Set default language");
295 if (STT_SETTING_STATE_NONE == g_state) {
296 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
297 SLOG(LOG_DEBUG, TAG_STTC, "=====");
298 SLOG(LOG_DEBUG, TAG_STTC, " ");
299 return STT_SETTING_ERROR_INVALID_STATE;
302 if (NULL == language) {
303 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input parameter is NULL");
304 SLOG(LOG_DEBUG, TAG_STTC, "=====");
305 SLOG(LOG_DEBUG, TAG_STTC, " ");
306 return STT_SETTING_ERROR_INVALID_PARAMETER;
309 int ret = stt_config_mgr_set_default_language(language);
311 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
313 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set default language : %s", language);
316 SLOG(LOG_DEBUG, TAG_STTC, "=====");
317 SLOG(LOG_DEBUG, TAG_STTC, " ");
322 int stt_setting_set_auto_language(bool value)
324 SLOG(LOG_DEBUG, TAG_STTC, "===== Set auto voice");
326 if (STT_SETTING_STATE_NONE == g_state) {
327 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
328 SLOG(LOG_DEBUG, TAG_STTC, "=====");
329 SLOG(LOG_DEBUG, TAG_STTC, " ");
330 return STT_SETTING_ERROR_INVALID_STATE;
333 if (value != true && value != false) {
334 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Invalid value");
335 SLOG(LOG_DEBUG, TAG_STTC, "=====");
336 SLOG(LOG_DEBUG, TAG_STTC, " ");
337 return STT_SETTING_ERROR_INVALID_PARAMETER;
340 int ret = stt_config_mgr_set_auto_language(value);
342 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
344 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set auto language (%s)", value ? "on" : "off");
347 SLOG(LOG_DEBUG, TAG_STTC, "=====");
348 SLOG(LOG_DEBUG, TAG_STTC, " ");
353 int stt_setting_get_auto_language(bool* value)
355 SLOG(LOG_DEBUG, TAG_STTC, "===== Get auto language");
357 if (STT_SETTING_STATE_NONE == g_state) {
358 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
359 SLOG(LOG_DEBUG, TAG_STTC, "=====");
360 SLOG(LOG_DEBUG, TAG_STTC, " ");
361 return STT_SETTING_ERROR_INVALID_STATE;
365 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Param is NULL");
366 SLOG(LOG_DEBUG, TAG_STTC, "=====");
367 SLOG(LOG_DEBUG, TAG_STTC, " ");
368 return STT_SETTING_ERROR_INVALID_PARAMETER;
371 int ret = stt_config_mgr_get_auto_language(value);
373 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
376 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get auto language (%s)", *value ? "true" : "false");
379 SLOG(LOG_DEBUG, TAG_STTC, "=====");
380 SLOG(LOG_DEBUG, TAG_STTC, " ");
385 int stt_setting_get_silence_detection(bool* value)
387 SLOG(LOG_DEBUG, TAG_STTC, "===== Get silence detection");
389 if (STT_SETTING_STATE_NONE == g_state) {
390 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
391 SLOG(LOG_DEBUG, TAG_STTC, "=====");
392 SLOG(LOG_DEBUG, TAG_STTC, " ");
393 return STT_SETTING_ERROR_INVALID_STATE;
397 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] param is NULL");
398 SLOG(LOG_DEBUG, TAG_STTC, "=====");
399 SLOG(LOG_DEBUG, TAG_STTC, " ");
400 return STT_SETTING_ERROR_INVALID_PARAMETER;
403 int ret = stt_config_mgr_get_silence_detection(value);
405 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);
407 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get silence detection(%s)", *value ? "true" : "false");
410 SLOG(LOG_DEBUG, TAG_STTC, "=====");
411 SLOG(LOG_DEBUG, TAG_STTC, " ");
416 int stt_setting_set_silence_detection(bool value)
418 SLOG(LOG_DEBUG, TAG_STTC, "===== Set silence detection");
420 if (STT_SETTING_STATE_NONE == g_state) {
421 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
422 SLOG(LOG_DEBUG, TAG_STTC, "=====");
423 SLOG(LOG_DEBUG, TAG_STTC, " ");
424 return STT_SETTING_ERROR_INVALID_STATE;
427 int ret = stt_config_mgr_set_silence_detection(value);
429 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);
431 SECURE_SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set silence detection(%s)", value ? "true" : "false");
434 SLOG(LOG_DEBUG, TAG_STTC, "=====");
435 SLOG(LOG_DEBUG, TAG_STTC, " ");
440 int stt_setting_set_engine_changed_cb(stt_setting_engine_changed_cb callback, void* user_data)
442 if (NULL == callback) {
443 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input param is NULL");
444 return STT_SETTING_ERROR_INVALID_PARAMETER;
447 g_engine_changed_cb = callback;
448 g_engine_changed_user_data = user_data;
450 return STT_SETTING_ERROR_NONE;
453 int stt_setting_unset_engine_changed_cb()
455 g_engine_changed_cb = NULL;
456 g_engine_changed_user_data = NULL;
458 return STT_SETTING_ERROR_NONE;
461 int stt_setting_set_config_changed_cb(stt_setting_config_changed_cb callback, void* user_data)
463 if (NULL == callback) {
464 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input param is NULL");
465 return STT_SETTING_ERROR_INVALID_PARAMETER;
468 g_config_changed_cb = callback;
469 g_config_changed_user_data = user_data;
471 return STT_SETTING_ERROR_NONE;
474 int stt_setting_unset_config_changed_cb()
476 g_config_changed_cb = NULL;
477 g_config_changed_user_data = NULL;
479 return STT_SETTING_ERROR_NONE;