X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=server%2Fsttd_server.c;h=5b4e0463755989e52be2e03fc026863dc70d590d;hb=refs%2Fheads%2Faccepted%2Ftizen_mobile;hp=aaee98675f571f06bb61589770f81fd7111d6372;hpb=97ec8f067306caecf6bc7275ee58b92eb4f60c0f;p=platform%2Fcore%2Fuifw%2Fstt.git diff --git a/server/sttd_server.c b/server/sttd_server.c old mode 100644 new mode 100755 index aaee986..5b4e046 --- a/server/sttd_server.c +++ b/server/sttd_server.c @@ -87,23 +87,23 @@ static void __cancel_recognition_internal() g_recording_timer = NULL; } + int ret = 0; int uid = 0; uid = stt_client_get_current_recognition(); - if (0 != uid) { - /* 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); - } + app_state_e state = 0; + ret = sttd_client_get_state(uid, &state); - /* change uid state */ - sttd_client_set_state(uid, APP_STATE_READY); - stt_client_unset_current_recognition(); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] uid is NOT valid "); + return; + } - ret = sttdc_send_set_state(uid, (int)APP_STATE_READY); + if (0 != uid && (APP_STATE_PROCESSING == state || APP_STATE_RECORDING == state)) { + /* cancel engine recognition */ + ret = sttd_server_cancel(uid); if (0 != ret) { - SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to send state change : result(%d)", ret); + SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to cancel : result(%d)", ret); } } else { SLOG(LOG_WARN, TAG_STTD, "[Server WARNING] uid is NOT valid"); @@ -179,7 +179,7 @@ void __cancel_by_no_record(void *data) return; } -void __server_recognition_result_callback(stte_result_event_e event, const char* type, +int __server_recognition_result_callback(stte_result_event_e event, const char* type, const char** data, int data_count, const char* msg, void *user_data) { // critical section @@ -196,7 +196,7 @@ void __server_recognition_result_callback(stte_result_event_e event, const char* SLOG(LOG_DEBUG, TAG_STTD, "====="); SLOG(LOG_DEBUG, TAG_STTD, " "); pthread_mutex_unlock(&stte_result_mutex); - return; + return STTD_ERROR_OPERATION_FAILED; } SLOG(LOG_DEBUG, TAG_STTD, "[Server] uid (%d), event(%d)", uid, event); @@ -217,6 +217,9 @@ void __server_recognition_result_callback(stte_result_event_e event, const char* sttd_config_time_save(); sttd_config_time_reset(); + sttd_client_set_state(uid, APP_STATE_READY); + stt_client_unset_current_recognition(); + if (NULL == data || 0 == data_count) { if (0 != sttdc_send_result(uid, event, NULL, 0, msg)) { SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to send result"); @@ -238,8 +241,8 @@ void __server_recognition_result_callback(stte_result_event_e event, const char* } /* change state of uid */ - sttd_client_set_state(uid, APP_STATE_READY); - stt_client_unset_current_recognition(); +// sttd_client_set_state(uid, APP_STATE_READY); +// 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); @@ -266,6 +269,17 @@ void __server_recognition_result_callback(stte_result_event_e event, const char* } sttd_config_time_reset(); + int ret = 0; + if (APP_STATE_RECORDING == state) { + ret = sttd_engine_agent_recognize_cancel(); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to cancel: result(%d)", ret); + } + } + + sttd_client_set_state(uid, APP_STATE_READY); + stt_client_unset_current_recognition(); + if (0 != sttdc_send_result(uid, event, NULL, 0, msg)) { SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to send result "); @@ -277,8 +291,8 @@ void __server_recognition_result_callback(stte_result_event_e event, const char* } /* change state of uid */ - sttd_client_set_state(uid, APP_STATE_READY); - stt_client_unset_current_recognition(); +// sttd_client_set_state(uid, APP_STATE_READY); +// stt_client_unset_current_recognition(); } else { /* nothing */ } @@ -287,7 +301,7 @@ void __server_recognition_result_callback(stte_result_event_e event, const char* SLOG(LOG_DEBUG, TAG_STTD, " "); pthread_mutex_unlock(&stte_result_mutex); - return; + return STTD_ERROR_NONE; } bool __server_result_time_callback(int index, stte_result_time_event_e event, const char* text, long start_time, long end_time, void* user_data) @@ -310,7 +324,7 @@ bool __server_result_time_callback(int index, stte_result_time_event_e event, co return true; } -void __server_speech_status_callback(stte_speech_status_e status, void *user_param) +int __server_speech_status_callback(stte_speech_status_e status, void *user_param) { SLOG(LOG_DEBUG, TAG_STTD, "===== Speech status detected Callback"); @@ -319,16 +333,17 @@ void __server_speech_status_callback(stte_speech_status_e status, void *user_par app_state_e state; if (0 != sttd_client_get_state(uid, &state)) { SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] uid is not valid "); - return; + return STTD_ERROR_OPERATION_FAILED; } if (APP_STATE_RECORDING != state) { SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Current state is not recording"); - return; + return STTD_ERROR_INVALID_STATE; } if (STTE_SPEECH_STATUS_BEGINNING_POINT_DETECTED == status) { SLOG(LOG_DEBUG, TAG_STTD, "Begin Speech detected"); + sttdc_send_speech_status(uid, status); } else if (STTE_SPEECH_STATUS_END_POINT_DETECTED == status) { SLOG(LOG_DEBUG, TAG_STTD, "End Speech detected"); ecore_main_loop_thread_safe_call_async(__stop_by_silence, NULL); @@ -340,13 +355,15 @@ void __server_speech_status_callback(stte_speech_status_e status, void *user_par SLOG(LOG_DEBUG, TAG_STTD, "====="); SLOG(LOG_DEBUG, TAG_STTD, " "); - return; + return STTD_ERROR_NONE; } -void __server_error_callback(stte_error_e error, const char* msg) +int __server_error_callback(stte_error_e error, const char* msg) { SLOG(LOG_DEBUG, TAG_STTD, "[Server] Error Callback is called"); - return; + ecore_main_loop_thread_safe_call_async(__cancel_by_error, NULL); + + return STTD_ERROR_NONE; } void __sttd_server_engine_changed_cb(const char* engine_id, const char* language, bool support_silence, bool need_credential, void* user_data) @@ -358,6 +375,7 @@ void __sttd_server_engine_changed_cb(const char* engine_id, const char* language SLOG(LOG_DEBUG, 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(); @@ -385,6 +403,7 @@ void __sttd_server_engine_changed_cb(const char* engine_id, const char* language 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; } @@ -420,51 +439,10 @@ void __sttd_server_silence_changed_cb(bool value, void* user_data) /* * Daemon function */ - -static void __sig_handler(int signo) -{ - /* restore signal handler */ - signal(signo, SIG_DFL); - - /* Send error signal to clients */ - int* client_list = NULL; - int client_count = 0; - int i = 0; - if (0 != sttd_client_get_list(&client_list, &client_count)) { - if (NULL != client_list) { - free(client_list); - client_list = NULL; - } - } - - if (NULL != client_list) { - for (i = 0; i < client_count; i++) { - sttdc_send_error_signal(client_list[i], STTD_ERROR_SERVICE_RESET, "Service Reset"); - } - - free(client_list); - client_list = NULL; - } - - /* invoke signal again */ - raise(signo); -} - -static void __register_sig_handler() -{ - signal(SIGSEGV, __sig_handler); - signal(SIGABRT, __sig_handler); - signal(SIGTERM, __sig_handler); - signal(SIGINT, __sig_handler); - signal(SIGQUIT, __sig_handler); -} - int sttd_initialize(stte_request_callback_s *callback) { int ret = 0; - __register_sig_handler(); - if (0 != pthread_mutex_init(&stte_result_mutex, NULL)) { SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to initialize stte result mutex."); } @@ -535,9 +513,7 @@ int sttd_finalize() static void __read_proc() { DIR *dp = NULL; - struct dirent entry; struct dirent *dirp = NULL; - int ret = -1; int tmp; GList *iter = NULL; @@ -554,11 +530,7 @@ static void __read_proc() SLOG(LOG_ERROR, TAG_STTD, "[ERROR] Fail to open proc"); } else { do { - ret = readdir_r(dp, &entry, &dirp); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_STTD, "[ERROR] Fail to readdir"); - break; - } + dirp = readdir(dp); if (NULL != dirp) { tmp = atoi(dirp->d_name); @@ -679,6 +651,7 @@ static Eina_Bool __quit_ecore_loop(void *data) stt_network_finalize(); sttd_finalize(); + sttd_dbus_close_connection(); ecore_main_loop_quit(); SLOG(LOG_DEBUG, TAG_STTD, "");