/*
-* Copyright (c) 2011-2014 Samsung Electronics Co., Ltd All Rights Reserved
+* Copyright (c) 2011-2016 Samsung Electronics Co., Ltd All Rights Reserved
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
bool use_network;
bool is_loaded;
-
+
/* engine base setting */
char* first_lang;
bool silence_detection;
bool support_silence_detection;
+ bool need_credential;
} sttengine_info_s;
/** stt engine agent init */
/** callback functions */
-void __result_cb(sttp_result_event_e event, const char* type, const char** data, int data_count,
+void __result_cb(sttp_result_event_e event, const char* type, const char** data, int data_count,
const char* msg, void* time_info, void *user_data);
-bool __result_time_cb(int index, sttp_result_time_event_e event, const char* text,
+bool __result_time_cb(int index, sttp_result_time_event_e event, const char* text,
long start_time, long end_time, void* user_data);
void __detect_silence_cb(sttp_silence_type_e type, void* user_data);
bool __supported_language_cb(const char* language, void* user_data);
-void __engine_info_cb(const char* engine_uuid, const char* engine_name, const char* setting_ug_name,
+void __engine_info_cb(const char* engine_uuid, const char* engine_name, const char* setting_ug_name,
bool use_network, void* user_data);
/*
-* Internal Interfaces
+* Internal Interfaces
*/
-
+
/** get engine info */
int __internal_get_engine_info(const char* filepath, sttengine_info_s** info);
/*
* STT Engine Agent Interfaces
*/
-int sttd_engine_agent_init(result_callback result_cb, result_time_callback time_cb,
+int sttd_engine_agent_init(result_callback result_cb, result_time_callback time_cb,
silence_dectection_callback silence_cb)
{
/* initialize static data */
if (NULL == result_cb || NULL == time_cb || NULL == silence_cb) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine agent ERROR] Invalid parameter");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine agent ERROR] Invalid parameter");
return STTD_ERROR_INVALID_PARAMETER;
}
g_recording_engine_id = -1;
if (0 != sttd_config_get_default_language(&(g_default_language))) {
- SLOG(LOG_WARN, TAG_STTD, "[Engine Agent WARNING] There is No default voice in config");
+ SLOG(LOG_WARN, TAG_STTD, "[Engine Agent WARNING] There is No default voice in config");
/* Set default voice */
g_default_language = strdup("en_US");
} else {
int temp;
if (0 != sttd_config_get_default_silence_detection(&temp)) {
- SLOG(LOG_WARN, TAG_STTD, "[Server WARNING] There is no silence detection in config");
+ SLOG(LOG_WARN, TAG_STTD, "[Server WARNING] There is no silence detection in config");
g_default_silence_detected = true;
} else {
g_default_silence_detected = (bool)temp;
client = iter->data;
g_engine_client_list = g_slist_remove_link(g_engine_client_list, iter);
- if (NULL != client)
+ if (NULL != client)
free(client);
iter = g_slist_nth(g_engine_client_list, 0);
/* Get handle data from list */
engine = iter->data;
g_engine_list = g_slist_remove_link(g_engine_list, iter);
-
+
/* Check engine unload */
if (engine->is_loaded) {
SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] Unload engine id(%d)", engine->engine_id);
- if (0 != stt_engine_deinitialize(engine->engine_id))
+ if (0 != stt_engine_deinitialize(engine->engine_id))
SECURE_SLOG(LOG_WARN, TAG_STTD, "[Engine Agent] Fail to deinitialize engine id(%d)", engine->engine_id);
if (0 != stt_engine_unload(engine->engine_id))
return 0;
}
-void __engine_info_cb(const char* engine_uuid, const char* engine_name, const char* setting_ug_name,
+void __engine_info_cb(const char* engine_uuid, const char* engine_name, const char* setting_ug_name,
bool use_network, void* user_data)
{
- sttengine_info_s* temp = (sttengine_info_s*)user_data;
+ sttengine_info_s* temp = (sttengine_info_s*)user_data;
temp->engine_uuid = g_strdup(engine_uuid);
temp->engine_name = g_strdup(engine_name);
int __internal_get_engine_info(const char* filepath, sttengine_info_s** info)
{
if (NULL == filepath || NULL == info) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
return STTD_ERROR_INVALID_PARAMETER;
}
char *error;
void* handle;
- handle = dlopen (filepath, RTLD_LAZY);
+ handle = dlopen(filepath, RTLD_LAZY);
if (!handle) {
- SECURE_SLOG(LOG_WARN, TAG_STTD, "[Engine Agent] Invalid engine : %s", filepath);
+ SECURE_SLOG(LOG_WARN, TAG_STTD, "[Engine Agent] Invalid engine : %s, error(%s)", filepath, (NULL == dlerror()) ? "NULL" : dlerror());
return STTD_ERROR_ENGINE_NOT_FOUND;
}
/* link engine to daemon */
dlsym(handle, "sttp_load_engine");
if ((error = dlerror()) != NULL) {
- SLOG(LOG_WARN, TAG_STTD, "[Engine Agent] Invalid engine. Fail to open sttp_load_engine : %s", error);
+ SLOG(LOG_WARN, TAG_STTD, "[Engine Agent] Invalid engine. Fail to open sttp_load_engine : %s", error);
dlclose(handle);
return STTD_ERROR_ENGINE_NOT_FOUND;
}
dlsym(handle, "sttp_unload_engine");
if ((error = dlerror()) != NULL) {
- SLOG(LOG_WARN, TAG_STTD, "[Engine Agent] Invalid engine. Fail to open sttp_unload_engine : %s", error);
+ SLOG(LOG_WARN, TAG_STTD, "[Engine Agent] Invalid engine. Fail to open sttp_unload_engine : %s", error);
dlclose(handle);
return STTD_ERROR_ENGINE_NOT_FOUND;
}
get_engine_info = (int (*)(sttpe_engine_info_cb, void*))dlsym(handle, "sttp_get_engine_info");
if ((error = dlerror()) != NULL || NULL == get_engine_info) {
- SLOG(LOG_WARN, TAG_STTD, "[Engine Agent WARNING] Invalid engine. Fail to open sttp_get_engine_info : %s", error);
+ SLOG(LOG_WARN, TAG_STTD, "[Engine Agent WARNING] Invalid engine. Fail to open sttp_get_engine_info : %s", error);
dlclose(handle);
return STTD_ERROR_ENGINE_NOT_FOUND;
}
/* get engine info */
if (0 != get_engine_info(__engine_info_cb, (void*)temp)) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to get engine info from engine");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to get engine info from engine");
dlclose(handle);
free(temp);
return STTD_ERROR_ENGINE_NOT_FOUND;
SECURE_SLOG(LOG_DEBUG, TAG_STTD, "Engine name : %s", temp->engine_name);
SECURE_SLOG(LOG_DEBUG, TAG_STTD, "Engine path : %s", temp->engine_path);
SECURE_SLOG(LOG_DEBUG, TAG_STTD, "Engine setting path : %s", temp->engine_setting_path);
- SECURE_SLOG(LOG_DEBUG, TAG_STTD, "Use network : %s", temp->use_network ? "true":"false");
+ SECURE_SLOG(LOG_DEBUG, TAG_STTD, "Use network : %s", temp->use_network ? "true" : "false");
SLOG(LOG_DEBUG, TAG_STTD, "-----");
SLOG(LOG_DEBUG, TAG_STTD, " ");
if (0 == strcmp(engine->engine_path, filepath)) {
return true;
}
-
+
iter = g_slist_next(iter);
}
}
closedir(dp);
} else {
- SLOG(LOG_WARN, TAG_STTD, "[Engine Agent WARNING] Fail to open default directory");
- }
-
- /* Get file name from downloadable engine directory */
- dp = opendir(STT_DOWNLOAD_ENGINE);
- if (NULL != dp) {
- do {
- ret = readdir_r(dp, &entry, &dirp);
- if (0 != ret) {
- SLOG(LOG_ERROR, TAG_STTD, "[File ERROR] Fail to read directory");
- break;
- }
-
- if (NULL != dirp) {
- sttengine_info_s* info;
- char* filepath;
- int filesize;
-
- filesize = strlen(STT_DOWNLOAD_ENGINE) + strlen(dirp->d_name) + 5;
- filepath = (char*)calloc(filesize, sizeof(char));
-
- if (NULL != filepath) {
- snprintf(filepath, filesize, "%s/%s", STT_DOWNLOAD_ENGINE, dirp->d_name);
- } else {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Memory not enouth!!");
- continue;
- }
-
- /* get its info and update engine list */
- if (0 == __internal_get_engine_info(filepath, &info)) {
- /* add engine info to g_engine_list */
- g_engine_list = g_slist_append(g_engine_list, info);
- }
-
- if (NULL != filepath)
- free(filepath);
- }
- } while (NULL != dirp);
-
- closedir(dp);
- } else {
- SLOG(LOG_WARN, TAG_STTD, "[Engine Agent WARNING] Fail to open downloadable directory");
+ SLOG(LOG_WARN, TAG_STTD, "[Engine Agent WARNING] Fail to open default directory");
}
if (0 >= g_slist_length(g_engine_list)) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] No Engine");
- return STTD_ERROR_ENGINE_NOT_FOUND;
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] No Engine");
+ return STTD_ERROR_ENGINE_NOT_FOUND;
}
__log_enginelist();
}
}
- if (cur_engine_uuid != NULL )
+ if (cur_engine_uuid != NULL)
free(cur_engine_uuid);
} else {
- SLOG(LOG_WARN, TAG_STTD, "[Engine Agent WARNING] There is not current engine from config");
+ SLOG(LOG_WARN, TAG_STTD, "[Engine Agent WARNING] There is not current engine from config");
}
if (false == is_default_engine) {
if (false == is_default_engine) {
if (0 != sttd_config_set_default_engine(engine->engine_uuid))
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to set default engine ");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to set default engine ");
}
}
} else {
data = iter->data;
- if (data->engine_id == engine_id)
+ if (data->engine_id == engine_id)
return data;
iter = g_slist_next(iter);
data = iter->data;
- if (0 == strcmp(data->engine_uuid, engine_uuid))
+ if (0 == strcmp(data->engine_uuid, engine_uuid))
return data;
iter = g_slist_next(iter);
/* Get handle data from list */
data = iter->data;
- if (uid == data->uid)
+ if (uid == data->uid)
return data;
iter = g_slist_next(iter);
sttengine_client_s *data;
data = __engine_agent_get_client(uid);
- if (NULL != data)
+ if (NULL != data)
return __engine_agent_get_engine_by_id(data->engine_id);
return NULL;
GSList *iter = NULL;
int client_count = 0;
sttengine_client_s *data = NULL;
-
+
if (0 < g_slist_length(g_engine_client_list)) {
iter = g_slist_nth(g_engine_client_list, 0);
int sttd_engine_agent_load_current_engine(int uid, const char* engine_uuid)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized" );
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
int before_engine = -1;
client = __engine_agent_get_client(uid);
-
+
if (NULL == client) {
client = (sttengine_client_s*)calloc(1, sizeof(sttengine_client_s));
if (NULL == client) {
/* initialize */
client->uid = uid;
client->engine_id = -1;
-
+
g_engine_client_list = g_slist_append(g_engine_client_list, client);
SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] Registered client(%d)", uid);
- }
+ }
if (NULL == engine_uuid) {
/* Set default engine */
ret = stt_engine_load(engine->engine_id, engine->engine_path);
if (0 != ret) {
SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to load engine : id(%d) path(%s)", engine->engine_id, engine->engine_path);
- return STTD_ERROR_OPERATION_FAILED;
+ return ret;
}
ret = stt_engine_initialize(engine->engine_id, __result_cb, __detect_silence_cb);
if (0 != ret) {
SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to initialize engine : id(%d) path(%s)", engine->engine_id, engine->engine_path);
- return STTD_ERROR_OPERATION_FAILED;
+ return ret;
}
ret = stt_engine_set_silence_detection(engine->engine_id, g_default_silence_detected);
free(tmp_lang);
} else {
SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to get first language from engine : %d %s", engine->engine_id, engine->engine_name);
- return STTD_ERROR_OPERATION_FAILED;
+ return ret;
}
#ifndef AUDIO_CREATE_ON_START
ret = stt_engine_get_audio_type(engine->engine_id, &atype, &rate, &channels);
if (0 != ret) {
SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to get audio type : %d %s", engine->engine_id, engine->engine_name);
- return STTD_ERROR_OPERATION_FAILED;
+ return ret;
}
- ret = sttd_recorder_create(engine->engine_id, atype, channels, rate);
+ ret = sttd_recorder_create(engine->engine_id, uid, atype, channels, rate);
if (0 != ret) {
SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to create recorder : %d %s", engine->engine_id, engine->engine_name);
- return STTD_ERROR_OPERATION_FAILED;
+ return ret;
}
#endif
engine->is_loaded = true;
- SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent SUCCESS] The %s(%d) has been loaded !!!", engine->engine_name, engine->engine_id);
+ SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent SUCCESS] The %s(%d) has been loaded !!!", engine->engine_name, engine->engine_id);
return 0;
}
int sttd_engine_agent_unload_current_engine(int uid)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized ");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized ");
return STTD_ERROR_OPERATION_FAILED;
}
bool sttd_engine_agent_is_default_engine()
{
- if (g_default_engine_id > 0)
+ if (g_default_engine_id > 0)
return true;
return false;
int sttd_engine_agent_get_engine_list(GSList** engine_list)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
iter = g_slist_next(iter);
- SECURE_SLOG(LOG_DEBUG, TAG_STTD, " -- Engine id(%s)", temp_engine->engine_id);
+ SECURE_SLOG(LOG_DEBUG, TAG_STTD, " -- Engine id(%s)", temp_engine->engine_id);
SECURE_SLOG(LOG_DEBUG, TAG_STTD, " Engine name(%s)", temp_engine->engine_name);
SECURE_SLOG(LOG_DEBUG, TAG_STTD, " Engine ug name(%s)", temp_engine->ug_name);
}
int sttd_engine_agent_get_current_engine(int uid, char** engine_uuid)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized" );
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
if (NULL == engine_uuid) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid parameter" );
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid parameter");
return STTD_ERROR_INVALID_PARAMETER;
}
}
if (false == engine->is_loaded) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
return STTD_ERROR_OPERATION_FAILED;
}
bool sttd_engine_agent_need_network(int uid)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized" );
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
sttengine_info_s* engine;
engine = __engine_agent_get_engine_by_uid(uid);
-
+
if (NULL != engine)
return engine->use_network;
}
if (false == engine->is_loaded) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
return STTD_ERROR_OPERATION_FAILED;
}
int ret = stt_engine_get_supported_langs(engine->engine_id, lang_list);
if (0 != ret) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] get language list error(%d)", ret);
- return STTD_ERROR_OPERATION_FAILED;
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] get language list error(%d)", ret);
}
- return 0;
+ return ret;
}
int sttd_engine_agent_get_default_lang(int uid, char** lang)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
if (NULL == lang) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
return STTD_ERROR_INVALID_PARAMETER;
}
}
if (false == engine->is_loaded) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
return STTD_ERROR_OPERATION_FAILED;
}
/* get default language */
bool is_valid = false;
- if (0 != stt_engine_is_valid_language(engine->engine_id, g_default_language, &is_valid)) {
+ int ret = -1;
+ ret = stt_engine_is_valid_language(engine->engine_id, g_default_language, &is_valid);
+ if (0 != ret) {
SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to check valid language");
- return STTD_ERROR_OPERATION_FAILED;
+ return ret;
}
if (true == is_valid) {
*lang = strdup(g_default_language);
- } else
+ } else
*lang = strdup(engine->first_lang);
return 0;
}
+int sttd_engine_agent_set_private_data(int uid, const char* key, const char* data)
+{
+ if (false == g_agent_init) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ return STTD_ERROR_OPERATION_FAILED;
+ }
+
+ if (NULL == key || NULL == data) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ sttengine_info_s* engine = NULL;
+ engine = __engine_agent_get_engine_by_uid(uid);
+
+ if (NULL == engine) {
+ SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] The engine of uid(%d) is not valid", uid);
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ if (false == engine->is_loaded) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ return STTD_ERROR_OPERATION_FAILED;
+ }
+
+ /* set private data */
+ int ret = -1;
+ ret = stt_engine_set_private_data(engine->engine_id, key, data);
+ if (0 != ret) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to set private data");
+ }
+
+ return ret;
+}
+
+int sttd_engine_agent_get_private_data(int uid, const char* key, char** data)
+{
+ if (false == g_agent_init) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ return STTD_ERROR_OPERATION_FAILED;
+ }
+
+ if (NULL == key || NULL == data) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ sttengine_info_s* engine = NULL;
+ engine = __engine_agent_get_engine_by_uid(uid);
+
+ if (NULL == engine) {
+ SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] The engine of uid(%d) is not valid", uid);
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ if (false == engine->is_loaded) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ return STTD_ERROR_OPERATION_FAILED;
+ }
+
+ /* get default language */
+ int ret = -1;
+ ret = stt_engine_get_private_data(engine->engine_id, key, data);
+ if (0 != ret) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to get private data");
+ }
+
+ return ret;
+}
+
int sttd_engine_agent_get_option_supported(int uid, bool* silence)
{
if (false == g_agent_init) {
}
if (NULL == silence) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
return STTD_ERROR_INVALID_PARAMETER;
}
}
if (false == engine->is_loaded) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
return STTD_ERROR_OPERATION_FAILED;
}
return 0;
}
+int sttd_engine_agent_is_credential_needed(int uid, bool* credential)
+{
+ if (false == g_agent_init) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ return STTD_ERROR_OPERATION_FAILED;
+ }
+
+ if (NULL == credential) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ sttengine_info_s* engine = NULL;
+ engine = __engine_agent_get_engine_by_uid(uid);
+
+ if (NULL == engine) {
+ SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] uid(%d) is not valid", uid);
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ if (false == engine->is_loaded) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ return STTD_ERROR_OPERATION_FAILED;
+ }
+
+ bool temp = false;
+ int ret;
+
+ ret = stt_engine_need_app_credential(engine->engine_id, &temp);
+ if (0 != ret) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to get to support recognition type : %d", ret);
+ return ret;
+ }
+
+ *credential = temp;
+ return 0;
+}
+
int sttd_engine_agent_is_recognition_type_supported(int uid, const char* type, bool* support)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
if (NULL == type || NULL == support) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
return STTD_ERROR_INVALID_PARAMETER;
}
}
if (false == engine->is_loaded) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
return STTD_ERROR_OPERATION_FAILED;
}
ret = stt_engine_support_recognition_type(engine->engine_id, type, &temp);
if (0 != ret) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to get to support recognition type : %d", ret);
- return STTD_ERROR_OPERATION_FAILED;
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to get to support recognition type : %d", ret);
+ return ret;
}
*support = temp;
}
}
}
-
+
return 0;
}
-int sttd_engine_agent_recognize_start_engine(int uid, const char* lang, const char* recognition_type,
- int silence, void* user_param)
+int sttd_engine_agent_recognize_start_engine(int uid, const char* lang, const char* recognition_type,
+ int silence, const char* credential, void* user_param)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
-
+
if (NULL == lang || NULL == recognition_type) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
return STTD_ERROR_INVALID_PARAMETER;
}
}
if (false == engine->is_loaded) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
return STTD_ERROR_OPERATION_FAILED;
}
if (0 != __set_option(engine, silence)) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to set options");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to set options");
return STTD_ERROR_OPERATION_FAILED;
}
char* temp = NULL;
if (0 == strncmp(lang, "default", strlen("default"))) {
bool is_valid = false;
- if (0 != stt_engine_is_valid_language(engine->engine_id, g_default_language, &is_valid)) {
+ ret = stt_engine_is_valid_language(engine->engine_id, g_default_language, &is_valid);
+ if (0 != ret) {
SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to check valid language");
- return STTD_ERROR_OPERATION_FAILED;
+ return ret;
}
if (true == is_valid) {
SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] Start engine");
- ret = stt_engine_recognize_start(engine->engine_id, temp, recognition_type, user_param);
+ ret = stt_engine_recognize_start(engine->engine_id, temp, recognition_type, credential, user_param);
if (NULL != temp) free(temp);
if (0 != ret) {
SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Recognition start error(%d)", ret);
sttd_recorder_destroy(engine->engine_id);
- return STTD_ERROR_OPERATION_FAILED;
+ return ret;
}
#ifdef AUDIO_CREATE_ON_START
ret = stt_engine_get_audio_type(engine->engine_id, &atype, &rate, &channels);
if (0 != ret) {
SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to get audio type : %d %s", engine->engine_id, engine->engine_name);
- return STTD_ERROR_OPERATION_FAILED;
+ return ret;
}
SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] Create recorder");
- ret = sttd_recorder_create(engine->engine_id, atype, channels, rate);
+ ret = sttd_recorder_create(engine->engine_id, uid, atype, channels, rate);
if (0 != ret) {
SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to create recorder : %d %s", engine->engine_id, engine->engine_name);
- return STTD_ERROR_OPERATION_FAILED;
+ return ret;
}
#endif
}
g_recording_engine_id = engine->engine_id;
- SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] g_recording_engine_id : %d", g_recording_engine_id);
+ SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] g_recording_engine_id : %d", g_recording_engine_id);
#endif
return 0;
}
if (false == engine->is_loaded) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
return STTD_ERROR_OPERATION_FAILED;
}
}
g_recording_engine_id = engine->engine_id;
- SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] g_recording_engine_id : %d", g_recording_engine_id);
+ SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] g_recording_engine_id : %d", g_recording_engine_id);
return 0;
}
int sttd_engine_agent_set_recording_data(int uid, const void* data, unsigned int length)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
if (NULL == data || 0 == length) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
return STTD_ERROR_INVALID_PARAMETER;
}
}
if (false == engine->is_loaded) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
return STTD_ERROR_OPERATION_FAILED;
}
int ret = stt_engine_set_recording_data(engine->engine_id, data, length);
if (0 != ret) {
- SLOG(LOG_WARN, TAG_STTD, "[Engine Agent WARNING] set recording error(%d)", ret);
- return STTD_ERROR_OPERATION_FAILED;
+ SLOG(LOG_WARN, TAG_STTD, "[Engine Agent WARNING] set recording error(%d)", ret);
}
- return 0;
+ return ret;
}
int sttd_engine_agent_recognize_stop_recorder(int uid)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
}
if (false == engine->is_loaded) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
return STTD_ERROR_OPERATION_FAILED;
}
int ret;
ret = sttd_recorder_stop(engine->engine_id);
if (0 != ret) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to stop recorder : result(%d)", ret);
- return STTD_ERROR_OPERATION_FAILED;
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to stop recorder : result(%d)", ret);
+ return ret;
}
#ifdef AUDIO_CREATE_ON_START
int sttd_engine_agent_recognize_stop_engine(int uid)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
}
if (false == engine->is_loaded) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
return STTD_ERROR_OPERATION_FAILED;
}
int ret;
ret = stt_engine_recognize_stop(engine->engine_id);
if (0 != ret) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] stop recognition error(%d)", ret);
- return STTD_ERROR_OPERATION_FAILED;
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] stop recognition error(%d)", ret);
+ return ret;
}
SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent Success] Stop engine");
int sttd_engine_agent_recognize_cancel(int uid)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
}
if (false == engine->is_loaded) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
return STTD_ERROR_OPERATION_FAILED;
}
int ret;
ret = stt_engine_recognize_cancel(engine->engine_id);
if (0 != ret) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] cancel recognition error(%d)", ret);
- return STTD_ERROR_OPERATION_FAILED;
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] cancel recognition error(%d)", ret);
+ return ret;
}
SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] Stop recorder");
ret = sttd_recorder_stop(engine->engine_id);
if (0 != ret) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to stop recorder : result(%d)", ret);
- return STTD_ERROR_OPERATION_FAILED;
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to stop recorder : result(%d)", ret);
+ return ret;
}
#ifdef AUDIO_CREATE_ON_START
int sttd_engine_agent_set_default_engine(const char* engine_uuid)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
if (NULL == engine_uuid) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
return STTD_ERROR_INVALID_PARAMETER;
}
data = iter->data;
if (true == data->use_default_engine) {
- SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] uid(%d) change engine from id(%d) to id(%d)",
+ SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] uid(%d) change engine from id(%d) to id(%d)",
data->uid, data->engine_id, engine->engine_id);
if (0 != sttd_engine_agent_load_current_engine(data->uid, NULL)) {
- SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to load current engine : uid(%d)", data->uid);
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to load current engine : uid(%d)", data->uid);
}
}
int sttd_engine_agent_set_default_language(const char* language)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
if (NULL == language) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Invalid Parameter");
return STTD_ERROR_INVALID_PARAMETER;
}
int sttd_engine_agent_set_silence_detection(bool value)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
int sttd_engine_agent_check_app_agreed(int uid, const char* appid, bool* result)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
return STTD_ERROR_OPERATION_FAILED;
}
}
if (false == engine->is_loaded) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not loaded engine");
return STTD_ERROR_OPERATION_FAILED;
}
int ret;
ret = stt_engine_check_app_agreed(engine->engine_id, appid, result);
if (0 != ret) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] cancel recognition error(%d)", ret);
- return STTD_ERROR_OPERATION_FAILED;
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] cancel recognition error(%d)", ret);
+ return ret;
}
-
+
SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] Get engine right : %s", *result ? "true" : "false");
return 0;
}
+static void __recorder_destroy(void* data)
+{
+ sttp_result_event_e event = (sttp_result_event_e)data;
+
+ SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] Destroy recorder by ecore_thread_safe func");
+
+ if (0 != sttd_recorder_destroy(g_recording_engine_id)) {
+ SECURE_SLOG(LOG_WARN, TAG_STTD, "[Engine Agent] Fail to destroy recorder(%d)", g_recording_engine_id);
+ }
+
+ if (event == STTP_RESULT_EVENT_FINAL_RESULT || event == STTP_RESULT_EVENT_ERROR) {
+ g_recording_engine_id = -1;
+ }
+}
+
+
/*
* STT Engine Callback Functions ` *
*/
-void __result_cb(sttp_result_event_e event, const char* type, const char** data, int data_count,
+void __result_cb(sttp_result_event_e event, const char* type, const char** data, int data_count,
const char* msg, void* time_info, void *user_data)
{
if (false == g_agent_init) {
#ifdef AUDIO_CREATE_ON_START
if (event == STTP_RESULT_EVENT_ERROR) {
+#if 1
+ ecore_main_loop_thread_safe_call_async(__recorder_destroy, (void*)event);
+#else
SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] Destroy recorder");
if (0 != sttd_recorder_destroy(g_recording_engine_id))
SECURE_SLOG(LOG_WARN, TAG_STTD, "[Engine Agent] Fail to destroy recorder(%d)", g_recording_engine_id);
+#endif
}
#endif
+#ifndef AUDIO_CREATE_ON_START
if (event == STTP_RESULT_EVENT_FINAL_RESULT || event == STTP_RESULT_EVENT_ERROR) {
g_recording_engine_id = -1;
}
-
+#endif
return;
}
void __detect_silence_cb(sttp_silence_type_e type, void* user_data)
{
if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Silence Callback : Not Initialized");
+ SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Silence Callback : Not Initialized");
return;
}
SLOG(LOG_DEBUG, TAG_STTD, "--------------- engine list -------------------");
- int i = 1;
+ int i = 1;
while (NULL != iter) {
/* Get handle data from list */
data = iter->data;
}
return 0;
-}
\ No newline at end of file
+}