#include "sttd_recorder.h"
#include "sttd_server.h"
+
+#define CLIENT_CLEAN_UP_TIME 500
+
+
static pthread_mutex_t stte_result_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t stte_result_time_mutex = PTHREAD_MUTEX_INITIALIZER;
static double g_recording_timeout = 60;
+static Ecore_Timer* g_check_client_timer = NULL;
Ecore_Timer* g_recording_timer = NULL;
Ecore_Timer* g_processing_timer = NULL;
*/
void __stop_by_silence(void *data)
{
- SLOG(LOG_DEBUG, TAG_STTD, "===== Stop by silence detection");
+ SLOG(LOG_INFO, TAG_STTD, "===== Stop by silence detection");
int uid = 0;
SLOG(LOG_WARN, TAG_STTD, "[Server WARNING] uid is NOT valid");
}
- SLOG(LOG_DEBUG, TAG_STTD, "=====");
+ SLOG(LOG_INFO, TAG_STTD, "=====");
SLOG(LOG_DEBUG, TAG_STTD, " ");
return;
}
if (0 != uid && (APP_STATE_PROCESSING == state || APP_STATE_RECORDING == state)) {
+ SLOG(LOG_INFO, TAG_STTD, "===== cancel by internal");
/* cancel engine recognition */
ret = sttd_server_cancel(uid);
if (0 != ret) {
static void __cancel_by_error(void *data)
{
- SLOG(LOG_DEBUG, TAG_STTD, "===== Cancel by error");
+ SLOG(LOG_INFO, TAG_STTD, "===== Cancel by error");
__cancel_recognition_internal();
void __server_audio_interrupt_callback()
{
- SLOG(LOG_DEBUG, TAG_STTD, "===== Cancel by sound interrupt");
+ SLOG(LOG_INFO, TAG_STTD, "===== Cancel by sound interrupt");
__cancel_recognition_internal();
void __cancel_by_no_record(void *data)
{
- SLOG(LOG_DEBUG, TAG_STTD, "===== Cancel by no record");
+ SLOG(LOG_INFO, TAG_STTD, "===== Cancel by no record");
__cancel_recognition_internal();
// critical section
pthread_mutex_lock(&stte_result_mutex);
- SLOG(LOG_DEBUG, TAG_STTD, "===== RESULT event[%d] type[%s] data[%p] data_count[%d]", event, type, data, data_count);
+ SLOG(LOG_INFO, TAG_STTD, "===== RESULT event[%d] type[%s] data[%p] data_count[%d]", event, type, data, data_count);
/* check uid */
int uid = stt_client_get_current_recognition();
return STTD_ERROR_OPERATION_FAILED;
}
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] uid (%d), event(%d)", uid, event);
+ SLOG(LOG_INFO, TAG_STTD, "[Server] uid (%d), event(%d)", uid, event);
/* send result to client */
if (STTE_RESULT_EVENT_FINAL_RESULT == event) {
if (APP_STATE_PROCESSING != state) {
SLOG(LOG_WARN, TAG_STTD, "[Server WARNING] Current state is NOT 'Processing'.");
}
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] the size of result from engine is '%d'", data_count);
+ SLOG(LOG_INFO, TAG_STTD, "[Server] the size of result from engine is '%d'", data_count);
/* Delete timer for processing time out */
if (NULL != g_processing_timer) {
+ ecore_thread_main_loop_begin();
+ SLOG(LOG_INFO, TAG_STTD, "[INFO] Delete g_processing_timer");
ecore_timer_del(g_processing_timer);
g_processing_timer = NULL;
+ ecore_thread_main_loop_end();
}
sttd_config_time_save();
sttd_config_time_reset();
+ sttd_recorder_clear();
+
sttd_client_set_state(uid, APP_STATE_READY);
stt_client_unset_current_recognition();
// stt_client_unset_current_recognition();
} else if (STTE_RESULT_EVENT_PARTIAL_RESULT == event) {
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] The partial result from engine is event[%d] data_count[%d]", event, data_count);
+ SLOG(LOG_INFO, TAG_STTD, "[Server] The partial result from engine is event[%d] data_count[%d]", event, data_count);
sttd_config_time_save();
sttd_config_time_reset();
/* Delete timer for processing time out */
if (NULL != g_processing_timer) {
+ ecore_thread_main_loop_begin();
+ SLOG(LOG_INFO, TAG_STTD, "[INFO] Delete g_processing_timer");
ecore_timer_del(g_processing_timer);
g_processing_timer = NULL;
+ ecore_thread_main_loop_end();
}
sttd_config_time_reset();
/* nothing */
}
- SLOG(LOG_DEBUG, TAG_STTD, "=====");
+ SLOG(LOG_INFO, TAG_STTD, "=====");
SLOG(LOG_DEBUG, TAG_STTD, " ");
pthread_mutex_unlock(&stte_result_mutex);
{
pthread_mutex_lock(&stte_result_time_mutex);
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] index(%d) event(%d) text(%s) start(%ld) end(%ld)",
+ SECURE_SLOG(LOG_INFO, TAG_STTD, "[Server] index(%d) event(%d) text(%s) start(%ld) end(%ld)",
index, event, text, start_time, end_time);
int ret;
int __server_speech_status_callback(stte_speech_status_e status, void *user_param)
{
- SLOG(LOG_DEBUG, TAG_STTD, "===== Speech status detected Callback");
+ SLOG(LOG_INFO, TAG_STTD, "===== Speech status detected Callback");
int uid = stt_client_get_current_recognition();
if (0 != uid) {
return STTD_ERROR_OPERATION_FAILED;
}
- if (APP_STATE_RECORDING != state) {
- SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Current state is not recording");
+ if (APP_STATE_RECORDING != state && APP_STATE_PROCESSING != state) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Current state is not recording, state(%d), status(%d)", state, status);
return STTD_ERROR_INVALID_STATE;
}
ecore_main_loop_thread_safe_call_async(__stop_by_silence, NULL);
}
} else {
- SLOG(LOG_WARN, TAG_STTD, "[Server WARNING] Current recogntion uid is not valid ");
+ SLOG(LOG_WARN, TAG_STTD, "[Server WARNING] Current recognition uid is not valid ");
}
- SLOG(LOG_DEBUG, TAG_STTD, "=====");
+ SLOG(LOG_INFO, TAG_STTD, "=====");
SLOG(LOG_DEBUG, TAG_STTD, " ");
return STTD_ERROR_NONE;
int __server_error_callback(stte_error_e error, const char* msg)
{
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] Error Callback is called");
+ SLOG(LOG_INFO, TAG_STTD, "[Server] Error Callback is called");
ecore_main_loop_thread_safe_call_async(__cancel_by_error, NULL);
return STTD_ERROR_NONE;
SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Engine id is NULL");
return;
} else {
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] New default engine : %s", engine_id);
+ SLOG(LOG_INFO, TAG_STTD, "[Server] New default engine : %s", engine_id);
}
+#if 0
/* need to change state of app to ready */
int uid;
uid = stt_client_get_current_recognition();
ret = sttd_engine_agent_set_silence_detection(support_silence);
if (0 != ret)
SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to Result(%d)", ret);
+#endif
return;
}
SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] language is NULL");
return;
} else {
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] Get language changed : %s", language);
+ SLOG(LOG_INFO, TAG_STTD, "[Server] Get language changed : %s", language);
}
int ret = sttd_engine_agent_set_default_language(language);
void __sttd_server_silence_changed_cb(bool value, void* user_data)
{
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] Get silence detection changed : %s", value ? "on" : "off");
+ SLOG(LOG_INFO, TAG_STTD, "[Server] Get silence detection changed : %s", value ? "on" : "off");
int ret = 0;
ret = sttd_engine_agent_set_silence_detection(value);
return ret;
}
- SLOG(LOG_DEBUG, TAG_STTD, "[Server SUCCESS] initialize");
+ g_check_client_timer = ecore_timer_add(CLIENT_CLEAN_UP_TIME, sttd_cleanup_client, NULL);
+ if (NULL == g_check_client_timer) {
+ SLOG(LOG_WARN, TAG_STTD, "[Main Warning] Fail to create timer of client check");
+ }
+
+ SLOG(LOG_INFO, TAG_STTD, "[Server SUCCESS] initialize");
return 0;
}
sttd_engine_agent_release();
+ if (NULL != g_check_client_timer) {
+ ecore_timer_del(g_check_client_timer);
+ g_check_client_timer = NULL;
+
+ SLOG(LOG_INFO, TAG_STTD, "[INFO] Delete ecore timer handle");
+ }
+
+ SLOG(LOG_INFO, TAG_STTD, "[Server SUCCESS] finalize");
+
return STTD_ERROR_NONE;
}
}
if (NULL != client_list) {
- SLOG(LOG_DEBUG, TAG_STTD, "===== Clean up client ");
+ SLOG(LOG_INFO, TAG_STTD, "===== Clean up client ");
__read_proc();
#endif
}
- SLOG(LOG_DEBUG, TAG_STTD, "=====");
+ SLOG(LOG_INFO, TAG_STTD, "=====");
SLOG(LOG_DEBUG, TAG_STTD, " ");
free(client_list);
{
int ret = STTD_ERROR_NONE;
+ SLOG(LOG_INFO, TAG_STTD, "[Server] server initialize");
+
/* check if uid is valid */
app_state_e state;
if (0 == sttd_client_get_state(uid, &state)) {
return ret;
}
+ SLOG(LOG_INFO, TAG_STTD, "[Server Success] server initialize");
+
return STTD_ERROR_NONE;
}
static Eina_Bool __quit_ecore_loop(void *data)
{
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] Quit");
+ SLOG(LOG_INFO, TAG_STTD, "[Server] Quit");
stt_network_finalize();
sttd_finalize();
+ sttd_dbus_close_connection();
ecore_main_loop_quit();
- SLOG(LOG_DEBUG, TAG_STTD, "");
+ SLOG(LOG_INFO, TAG_STTD, "");
return EINA_FALSE;
}
int sttd_server_finalize(int uid)
{
+ SLOG(LOG_INFO, TAG_STTD, "[Server INFO] Enter Finalize");
+
/* check if uid is valid */
app_state_e state;
if (0 != sttd_client_get_state(uid, &state)) {
if (APP_STATE_PROCESSING == state) {
if (NULL != g_processing_timer) {
+ SLOG(LOG_INFO, TAG_STTD, "[INFO] Delete g_processing_timer");
ecore_timer_del(g_processing_timer);
g_processing_timer = NULL;
}
}
+ SLOG(LOG_INFO, TAG_STTD, "[Server INFO] stt_cancel is invoked while state is (%d)", state);
+
if (0 != sttd_engine_agent_recognize_cancel(uid)) {
SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to cancel recognition");
}
ecore_timer_add(0, __quit_ecore_loop, NULL);
}
+ SLOG(LOG_INFO, TAG_STTD, "[Server INFO] End Finalize");
+
return STTD_ERROR_NONE;
}
return STTD_ERROR_INVALID_STATE;
}
+ SLOG(LOG_INFO, TAG_STTD, "[Server INFO] get supported egnines");
+
int ret;
ret = sttd_engine_agent_get_engine_list(engine_list);
if (0 != ret) {
return STTD_ERROR_INVALID_STATE;
}
+ SLOG(LOG_INFO, TAG_STTD, "[Server INFO] set current egnines, uid(%d), engine_id(%s)", uid, engine_id);
+
int ret;
ret = sttd_engine_agent_load_current_engine(NULL);
if (0 != ret) {
return STTD_ERROR_INVALID_STATE;
}
+ SLOG(LOG_INFO, TAG_STTD, "[Server INFO] get current egnines, uid(%d)", uid);
+
int ret;
ret = sttd_engine_agent_get_current_engine(engine_id);
if (0 != ret) {
return STTD_ERROR_INVALID_STATE;
}
+ SLOG(LOG_INFO, TAG_STTD, "[Server INFO] check app agreed");
+
/* Ask engine available */
int ret;
bool temp = false;
return STTD_ERROR_INVALID_PARAMETER;
}
+ SLOG(LOG_INFO, TAG_STTD, "[Server INFO] get supported languages");
+
/* get language list from engine */
int ret = sttd_engine_agent_supported_langs(lang_list);
if (0 != ret) {
return ret;
}
- SLOG(LOG_DEBUG, TAG_STTD, "[Server SUCCESS] Get default language");
+ SLOG(LOG_INFO, TAG_STTD, "[Server SUCCESS] Get default language, current_lang(%s)", *current_lang);
return STTD_ERROR_NONE;
}
return ret;
}
- SLOG(LOG_DEBUG, TAG_STTD, "[Server SUCCESS] Set private data");
+ SLOG(LOG_INFO, TAG_STTD, "[Server SUCCESS] Set private data");
return STTD_ERROR_NONE;
}
return ret;
}
- SLOG(LOG_DEBUG, TAG_STTD, "[Server SUCCESS] Get private data, key(%s), data(%s)", key, *data);
+ SLOG(LOG_INFO, TAG_STTD, "[Server SUCCESS] Get private data, key(%s), data(%s)", key, *data);
return STTD_ERROR_NONE;
}
*support = (int)temp;
- SLOG(LOG_DEBUG, TAG_STTD, "[Server SUCCESS] recognition type supporting is %s", *support ? "true" : "false");
+ SLOG(LOG_INFO, TAG_STTD, "[Server SUCCESS] recognition type supporting is %s", *support ? "true" : "false");
return STTD_ERROR_NONE;
}
Eina_Bool __stop_by_recording_timeout(void *data)
{
- SLOG(LOG_DEBUG, TAG_STTD, "===== Stop by timeout");
+ SLOG(LOG_INFO, TAG_STTD, "===== Stop by timeout");
- g_recording_timer = NULL;
+ if (NULL != g_recording_timer) {
+ ecore_timer_del(g_recording_timer);
+ g_recording_timer = NULL;
+ }
int uid = 0;
uid = stt_client_get_current_recognition();
}
}
- SLOG(LOG_DEBUG, TAG_STTD, "=====");
+ SLOG(LOG_INFO, TAG_STTD, "=====");
SLOG(LOG_DEBUG, TAG_STTD, " ");
return EINA_FALSE;
return;
}
- /* Notify uid state change */
- sttdc_send_set_state(uid, APP_STATE_RECORDING);
-
- SLOG(LOG_DEBUG, TAG_STTD, "[Server SUCCESS] Start recognition");
+ app_state_e temp_app_state;
+ if (0 != sttd_client_get_state(uid, &temp_app_state)) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] uid is NOT valid ");
+ return;
+ }
+ if (APP_STATE_READY != temp_app_state && 0 != stt_client_get_current_recognition()) {
+ /* Notify uid state change */
+ sttdc_send_set_state(uid, APP_STATE_RECORDING);
+ SLOG(LOG_DEBUG, TAG_STTD, "[Server SUCCESS] Start recognition");
+ }
}
void __sttd_start_sound_completed_cb(int id, void *user_data)
{
- SLOG(LOG_DEBUG, TAG_STTD, "===== Start sound completed");
+ SLOG(LOG_INFO, TAG_STTD, "===== Start sound completed");
/* After wav play callback, recorder start */
ecore_main_loop_thread_safe_call_async(__sttd_server_recorder_start, user_data);
- SLOG(LOG_DEBUG, TAG_STTD, "=====");
+ SLOG(LOG_INFO, TAG_STTD, "=====");
SLOG(LOG_DEBUG, TAG_STTD, " ");
return;
}
}
}
+ if (NULL != g_recording_timer) {
+ ecore_timer_del(g_recording_timer);
+ g_recording_timer = NULL;
+ }
+
+ if (NULL != g_processing_timer) {
+ SLOG(LOG_INFO, TAG_STTD, "[INFO] Delete g_processing_timer");
+ ecore_timer_del(g_processing_timer);
+ g_processing_timer = NULL;
+ }
+
char* sound = NULL;
ret = sttd_client_get_start_sound(uid, &sound);
if (0 != ret) {
}
/* engine start recognition */
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] start : uid(%d), lang(%s), recog_type(%s)",
+ SLOG(LOG_INFO, TAG_STTD, "[Server] start : uid(%d), lang(%s), recog_type(%s)",
uid, lang, recognition_type);
if (NULL != sound)
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] start sound : %s", sound);
+ SLOG(LOG_INFO, TAG_STTD, "[Server] start sound : %s", sound);
/* 1. Set audio session */
ret = sttd_recorder_set_audio_session();
if (NULL != sound) {
int id = 0;
intptr_t puid = (intptr_t)uid;
- ret = wav_player_start(sound, SOUND_TYPE_MEDIA, __sttd_start_sound_completed_cb, (void*)puid, &id);
- if (WAV_PLAYER_ERROR_NONE != ret) {
- SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to play wav");
+ sound_stream_info_h wav_stream_info_h;
+ if (0 != sound_manager_create_stream_information(SOUND_STREAM_TYPE_MEDIA, NULL, NULL, &wav_stream_info_h)) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to create stream info for playing wav");
is_sound_done = true;
+ } else {
+ ret = wav_player_start_new(sound, wav_stream_info_h, __sttd_start_sound_completed_cb, (void*)puid, &id);
+ if (WAV_PLAYER_ERROR_NONE != ret) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to play wav");
+ is_sound_done = true;
+ }
+
+ if (0 != sound_manager_destroy_stream_information(wav_stream_info_h)) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to destroy stream info for playing wav");
+ }
}
free(sound);
sound = NULL;
g_recording_log_count = 0;
+ app_state_e temp_app_state;
+
if (true == is_sound_done) {
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] No sound play");
+ SLOG(LOG_INFO, TAG_STTD, "[Server] No sound play");
ret = sttd_engine_agent_recognize_start_recorder(uid);
if (0 != ret) {
sttd_recorder_unset_audio_session();
sttd_engine_agent_recognize_cancel();
- ecore_timer_del(g_recording_timer);
+ if (NULL != g_recording_timer) {
+ ecore_timer_del(g_recording_timer);
+ g_recording_timer = NULL;
+ }
sttd_client_set_state(uid, APP_STATE_READY);
SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to start recorder : result(%d)", ret);
return ret;
}
- /* Notify uid state change */
- sttdc_send_set_state(uid, APP_STATE_RECORDING);
+ if (0 != sttd_client_get_state(uid, &temp_app_state)) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] uid is NOT valid");
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+ if (APP_STATE_READY != temp_app_state && 0 != stt_client_get_current_recognition()) {
+ /* Notify uid state change */
+ sttdc_send_set_state(uid, APP_STATE_RECORDING);
+ }
- SLOG(LOG_DEBUG, TAG_STTD, "[Server SUCCESS] Start recognition");
+ SLOG(LOG_INFO, TAG_STTD, "[Server SUCCESS] Start recognition");
return STTD_RESULT_STATE_DONE;
}
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] Wait sound finish");
+ SLOG(LOG_INFO, TAG_STTD, "[Server] Wait sound finish");
return STTD_RESULT_STATE_NOT_DONE;
}
Eina_Bool __time_out_for_processing(void *data)
{
- g_processing_timer = NULL;
+ if (NULL != g_processing_timer) {
+ SLOG(LOG_INFO, TAG_STTD, "[INFO] Delete g_processing_timer");
+ ecore_timer_del(g_processing_timer);
+ g_processing_timer = NULL;
+ }
+
+ SLOG(LOG_INFO, TAG_STTD, "[Server INFO] Enter __time_out_for_processing");
/* current uid */
int uid = stt_client_get_current_recognition();
if (0 == uid) return EINA_FALSE;
+ SLOG(LOG_INFO, TAG_STTD, "[Server Info] stt cancel is invoked by timeout for processing");
+
/* Cancel engine */
int ret = sttd_engine_agent_recognize_cancel();
if (0 != ret) {
stt_client_unset_current_recognition();
+ SLOG(LOG_INFO, TAG_STTD, "[Server INFO] End __time_out_for_processing");
+
return EINA_FALSE;
}
void __sttd_stop_sound_completed_cb(int id, void *user_data)
{
- SLOG(LOG_DEBUG, TAG_STTD, "===== Stop sound completed");
+ SLOG(LOG_INFO, TAG_STTD, "===== Stop sound completed");
/* After wav play callback, engine stop */
ecore_main_loop_thread_safe_call_async(__sttd_server_engine_stop, user_data);
g_recording_timer = NULL;
}
+ if (NULL != g_processing_timer) {
+ SLOG(LOG_INFO, TAG_STTD, "[INFO] Delete g_processing_timer");
+ ecore_timer_del(g_processing_timer);
+ g_processing_timer = NULL;
+ }
+
char* sound = NULL;
if (0 != sttd_client_get_stop_sound(uid, &sound)) {
SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to get start beep sound");
return STTD_ERROR_OPERATION_FAILED;
}
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] stop sound path : %s", sound);
+ SLOG(LOG_INFO, TAG_STTD, "[Server] stop sound path : %s", sound);
int ret;
/* 1. Stop recorder */
if (NULL != sound) {
int id = 0;
intptr_t puid = (intptr_t)uid;
- ret = wav_player_start(sound, SOUND_TYPE_MEDIA, __sttd_stop_sound_completed_cb, (void*)puid, &id);
- if (WAV_PLAYER_ERROR_NONE != ret) {
- SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to play wav");
+ sound_stream_info_h wav_stream_info_h;
+ if (0 != sound_manager_create_stream_information(SOUND_STREAM_TYPE_MEDIA, NULL, NULL, &wav_stream_info_h)) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to create stream info for playing wav");
} else {
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] Play wav : %s", sound);
- }
+ ret = wav_player_start_new(sound, wav_stream_info_h, __sttd_stop_sound_completed_cb, (void*)puid, &id);
+ if (WAV_PLAYER_ERROR_NONE != ret) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to play wav");
+ } else {
+ SLOG(LOG_DEBUG, TAG_STTD, "[Server] Play wav : %s", sound);
+ }
+ if (0 != sound_manager_destroy_stream_information(wav_stream_info_h)) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to destroy stream info for playing wav");
+ }
+ }
free(sound);
+ SLOG(LOG_INFO, TAG_STTD, "[INFO] Add g_processing_timer");
g_processing_timer = ecore_timer_add(g_processing_timeout, __time_out_for_processing, NULL);
return STTD_RESULT_STATE_NOT_DONE;
} else {
- SLOG(LOG_DEBUG, TAG_STTD, "[Server] No sound play");
+ SLOG(LOG_INFO, TAG_STTD, "[Server] No sound play");
/* Unset audio session */
ret = sttd_recorder_unset_audio_session();
/* Notify uid state change */
sttdc_send_set_state(uid, APP_STATE_PROCESSING);
- SLOG(LOG_DEBUG, TAG_STTD, "[Server SUCCESS] Stop recognition");
+ SLOG(LOG_INFO, TAG_STTD, "[Server SUCCESS] Stop recognition");
+ SLOG(LOG_INFO, TAG_STTD, "[INFO] Add g_processing_timer");
g_processing_timer = ecore_timer_add(g_processing_timeout, __time_out_for_processing, NULL);
return STTD_RESULT_STATE_DONE;
int sttd_server_cancel(int uid)
{
+ SLOG(LOG_INFO, TAG_STTD, "[Server INFO] Enter sttd_server_cancel");
+
+ /* check if uid is valid */
+ app_state_e state;
+ if (0 != sttd_client_get_state(uid, &state)) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] uid is NOT valid ");
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ /* check uid state */
+ if (APP_STATE_READY == state) {
+ SLOG(LOG_WARN, TAG_STTD, "[Server WARNING] Current state is ready");
+ return STTD_ERROR_NONE;
+ }
+
+ stt_client_unset_current_recognition();
+
+ if (NULL != g_recording_timer) {
+ ecore_timer_del(g_recording_timer);
+ g_recording_timer = NULL;
+ }
+
+ if (NULL != g_processing_timer) {
+ SLOG(LOG_INFO, TAG_STTD, "[INFO] Delete g_processing_timer");
+ ecore_timer_del(g_processing_timer);
+ g_processing_timer = NULL;
+ }
+
+ if (APP_STATE_RECORDING == state) {
+ /* Unset audio session */
+ int ret = sttd_recorder_unset_audio_session();
+ if (0 != ret) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to unset session : %d", ret);
+ return ret;
+ }
+ }
+
+ /* change uid state */
+ sttd_client_set_state(uid, APP_STATE_READY);
+
+ SLOG(LOG_INFO, TAG_STTD, "[Server Info] stt cancel is invoked by app's request");
+
+ /* cancel engine recognition */
+ int ret = sttd_engine_agent_recognize_cancel();
+ if (0 != ret) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to cancel : result(%d)", ret);
+ return ret;
+ }
+
+ /* Notify uid state change */
+ sttdc_send_set_state(uid, APP_STATE_READY);
+
+ SLOG(LOG_INFO, TAG_STTD, "[Server INFO] End sttd_server_cancel");
+
+ return STTD_ERROR_NONE;
+}
+
+int sttd_server_start_file(int uid, const char* lang, const char* recognition_type, int silence, const char* appid, const char* credential,
+ const char* filepath, stte_audio_type_e audio_type, int sample_rate)
+{
+ if (NULL == lang || NULL == recognition_type || NULL == filepath) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Input parameter is NULL");
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ /* check if uid is valid */
+ app_state_e state;
+ if (0 != sttd_client_get_state(uid, &state)) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] uid is NOT valid ");
+ return STTD_ERROR_INVALID_PARAMETER;
+ }
+
+ /* check uid state */
+ if (APP_STATE_READY != state) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] sttd_server_start : current state is not ready");
+ return STTD_ERROR_INVALID_STATE;
+ }
+
+ int ret = 0;
+ if (false == stt_client_get_app_agreed(uid)) {
+ bool temp = false;
+ ret = sttd_engine_agent_check_app_agreed(appid, &temp);
+ if (0 != ret) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to get engine available : %d", ret);
+ return ret;
+ }
+
+ if (false == temp) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server] App(%s) NOT confirmed that engine is available", appid);
+ return STTD_ERROR_PERMISSION_DENIED;
+ }
+
+ stt_client_set_app_agreed(uid);
+ }
+
+ /* check if engine use network */
+ if (true == sttd_engine_agent_need_network()) {
+ if (false == stt_network_is_connected()) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Disconnect network. Current engine needs to network connection.");
+ return STTD_ERROR_OUT_OF_NETWORK;
+ }
+ }
+
+ if (0 != stt_client_set_current_recognition(uid)) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Current STT is busy because of recording or processing");
+ return STTD_ERROR_RECORDER_BUSY;
+ }
+
+ /* engine start recognition */
+ SLOG(LOG_DEBUG, TAG_STTD, "[Server] start : uid(%d), lang(%s), recog_type(%s), appid(%s), file(%s), audio_type(%d), sample_rate(%d)", uid, lang, recognition_type, appid, filepath, audio_type, sample_rate);
+
+ /* 1. Set audio session */
+ ret = sttd_recorder_set_audio_session();
+ if (0 != ret) {
+ stt_client_unset_current_recognition();
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to set session : %d", ret);
+ return ret;
+ }
+
+ /* 2. Start engine to recognize */
+ ret = sttd_engine_agent_recognize_start_engine(uid, lang, recognition_type, silence, appid, credential, NULL);
+ if (0 != ret) {
+ stt_client_unset_current_recognition();
+ sttd_recorder_unset_audio_session();
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to start engine : result(%d)", ret);
+ return ret;
+ }
+
+ sttd_client_set_state(uid, APP_STATE_RECORDING);
+ sttdc_send_set_state(uid, APP_STATE_RECORDING);
+
+ /* 3. Start to send pcm from file to engine */
+ ret = sttd_engine_agent_recognize_start_file(uid, filepath);
+ if (0 != ret) {
+ stt_client_unset_current_recognition();
+ sttd_recorder_unset_audio_session();
+ sttd_engine_agent_recognize_cancel();
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to start file : result(%d)", ret);
+ return ret;
+ }
+
+ /* 4. Stop to send pcm from file */
+ ret = sttd_engine_agent_recognize_stop_file();
+ if (0 != ret) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to stop recorder : result(%d)", ret);
+ stt_client_unset_current_recognition();
+ sttd_recorder_unset_audio_session();
+ sttd_engine_agent_recognize_cancel();
+ return ret;
+ }
+
+ /* 5. change & notify uid state */
+ sttd_client_set_state(uid, APP_STATE_PROCESSING);
+ sttdc_send_set_state(uid, APP_STATE_PROCESSING);
+
+ /* 6. Unset audio session */
+ ret = sttd_recorder_unset_audio_session();
+ if (0 != ret) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to unset session : %d", ret);
+ stt_client_unset_current_recognition();
+ return ret;
+ }
+
+ /* 7. Stop engine */
+ ret = sttd_engine_agent_recognize_stop_engine();
+ if (0 != ret) {
+ SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to stop engine : result(%d)", ret);
+ stt_client_unset_current_recognition();
+ return ret;
+ }
+
+ return STTD_ERROR_NONE;
+}
+
+int sttd_server_cancel_file(int uid)
+{
/* check if uid is valid */
app_state_e state;
if (0 != sttd_client_get_state(uid, &state)) {
}
if (NULL != g_processing_timer) {
+ SLOG(LOG_INFO, TAG_STTD, "[INFO] Delete g_processing_timer");
ecore_timer_del(g_processing_timer);
g_processing_timer = NULL;
}
return STTD_ERROR_NONE;
}
+