2 * Copyright (c) 2011-2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include "vcd_client_data.h"
22 #include "vcd_config.h"
23 #include "vcd_engine_agent.h"
25 #include "vcd_recorder.h"
29 * Internal data structure
37 /* engine load info */
40 bool is_command_ready;
43 vc_engine_callback_s* callbacks;
46 typedef struct _vcengine_info {
57 /** vc engine agent init */
58 static bool g_agent_init;
60 /** current engine information */
61 static vcengine_s g_dynamic_engine;
63 static char* g_default_lang;
65 bool __supported_language_cb(const char* language, void* user_data);
71 /** get engine info */
72 int __internal_get_engine_info(vce_request_callback_s* callback);
75 * VCS Engine Agent Interfaces
77 int vcd_engine_agent_init()
79 if (true == g_agent_init) {
80 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] Already initialized");
81 return VCD_ERROR_NONE;
84 /* init dynamic engine */
85 g_dynamic_engine.engine_uuid = NULL;
86 g_dynamic_engine.engine_name = NULL;
87 g_dynamic_engine.engine_path = NULL;
89 g_dynamic_engine.is_set = false;
90 g_dynamic_engine.is_loaded = false;
91 g_dynamic_engine.handle = NULL;
92 g_dynamic_engine.is_command_ready = false;
94 g_dynamic_engine.callbacks = (vc_engine_callback_s*)calloc(1, sizeof(vc_engine_callback_s));
95 if (NULL == g_dynamic_engine.callbacks) {
96 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent] Fail to allocate memory");
97 return VCD_ERROR_OUT_OF_MEMORY;
102 if (0 != vcd_config_get_default_language(&g_default_lang)) {
103 SLOG(LOG_WARN, TAG_VCD, "[Server WARNING] There is No default voice in config");
104 /* Set default voice */
105 g_default_lang = strdup(VC_BASE_LANGUAGE);
108 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent SUCCESS] Engine Agent Initialize");
113 int vcd_engine_agent_release()
115 if (false == g_agent_init) {
116 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
117 return VCD_ERROR_OPERATION_FAILED;
120 /* unload current engine */
121 vcd_engine_agent_unload_current_engine();
123 /* release current engine data */
124 if (NULL != g_dynamic_engine.callbacks) {
125 free(g_dynamic_engine.callbacks);
126 g_dynamic_engine.callbacks = NULL;
129 g_agent_init = false;
131 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent SUCCESS] Engine Agent release");
136 bool vcd_engine_is_available_engine()
138 if (true == g_dynamic_engine.is_loaded)
144 int __internal_get_engine_info(vce_request_callback_s* callback)
146 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] inside __internal_get_engine_info");
148 if (NULL == callback) {
149 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Invalid engine");
150 return VCD_ERROR_ENGINE_NOT_FOUND;
153 if (NULL == callback->get_info) {
154 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Invalid engine");
155 return VCD_ERROR_ENGINE_NOT_FOUND;
158 if (0 != callback->get_info(&(g_dynamic_engine.engine_uuid), &(g_dynamic_engine.engine_name))) {
159 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to get engine info");
160 return VCD_ERROR_ENGINE_NOT_FOUND;
163 if (NULL != g_dynamic_engine.callbacks) {
164 free(g_dynamic_engine.callbacks);
165 g_dynamic_engine.callbacks = NULL;
167 g_dynamic_engine.callbacks = (vc_engine_callback_s*)calloc(1, sizeof(vc_engine_callback_s));
168 if (NULL == g_dynamic_engine.callbacks) {
169 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to allocate memory");
170 return VCD_ERROR_OUT_OF_MEMORY;
173 g_dynamic_engine.callbacks->get_info = callback->get_info;
174 g_dynamic_engine.callbacks->get_recording_format = callback->get_recording_format;
175 g_dynamic_engine.callbacks->foreach_langs = callback->foreach_langs;
176 g_dynamic_engine.callbacks->is_lang_supported = callback->is_lang_supported;
177 g_dynamic_engine.callbacks->initialize = callback->initialize;
178 g_dynamic_engine.callbacks->deinitialize = callback->deinitialize;
179 g_dynamic_engine.callbacks->set_language = callback->set_language;
180 g_dynamic_engine.callbacks->set_commands = callback->set_commands;
181 g_dynamic_engine.callbacks->unset_commands = callback->unset_commands;
183 g_dynamic_engine.callbacks->start = callback->start;
184 g_dynamic_engine.callbacks->set_recording = callback->set_recording;
185 g_dynamic_engine.callbacks->stop = callback->stop;
186 g_dynamic_engine.callbacks->cancel = callback->cancel;
187 g_dynamic_engine.callbacks->set_domain = callback->set_domain;
188 g_dynamic_engine.callbacks->set_audio_type = callback->set_audio_type;
189 g_dynamic_engine.callbacks->process_text = callback->process_text;
190 g_dynamic_engine.callbacks->process_list_event = callback->process_list_event;
191 g_dynamic_engine.callbacks->process_haptic_event = callback->process_haptic_event;
193 g_dynamic_engine.callbacks->private_data_set = NULL;
194 g_dynamic_engine.callbacks->private_data_request = NULL;
195 g_dynamic_engine.callbacks->nlu_base_info_request = NULL;
197 SLOG(LOG_DEBUG, TAG_VCD, "@@@ Valid Engine");
198 SLOG(LOG_DEBUG, TAG_VCD, "Engine uuid : %s", g_dynamic_engine.engine_uuid);
199 SLOG(LOG_DEBUG, TAG_VCD, "Engine name : %s", g_dynamic_engine.engine_name);
200 SLOG(LOG_DEBUG, TAG_VCD, "@@@");
205 int vcd_engine_agent_load_current_engine(vce_request_callback_s* callback)
207 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] load current engine START");
209 if (false == g_agent_init) {
210 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
211 return VCD_ERROR_OPERATION_FAILED;
214 if (true == g_dynamic_engine.is_loaded) {
215 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent] Engine has already been loaded");
219 if (NULL == callback) {
220 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Invalid engine");
221 return VCD_ERROR_ENGINE_NOT_FOUND;
224 /* Get current engine info */
225 int ret = __internal_get_engine_info(callback);
227 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to get engine info");
231 /* Check all engine functions */
232 if (NULL == g_dynamic_engine.callbacks->get_info ||
233 NULL == g_dynamic_engine.callbacks->get_recording_format ||
234 NULL == g_dynamic_engine.callbacks->foreach_langs ||
235 NULL == g_dynamic_engine.callbacks->is_lang_supported ||
236 NULL == g_dynamic_engine.callbacks->initialize ||
237 NULL == g_dynamic_engine.callbacks->deinitialize ||
238 NULL == g_dynamic_engine.callbacks->set_language ||
239 NULL == g_dynamic_engine.callbacks->set_commands ||
240 NULL == g_dynamic_engine.callbacks->unset_commands ||
241 NULL == g_dynamic_engine.callbacks->start ||
242 NULL == g_dynamic_engine.callbacks->set_recording ||
243 NULL == g_dynamic_engine.callbacks->stop ||
244 NULL == g_dynamic_engine.callbacks->cancel ||
245 NULL == g_dynamic_engine.callbacks->set_audio_type ||
246 NULL == g_dynamic_engine.callbacks->set_domain ||
247 NULL == g_dynamic_engine.callbacks->process_text ||
248 NULL == g_dynamic_engine.callbacks->process_list_event ||
249 NULL == g_dynamic_engine.callbacks->process_haptic_event) {
250 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] The current engine is NOT valid");
251 return VCD_ERROR_ENGINE_NOT_FOUND;
254 /* initalize engine */
255 ret = g_dynamic_engine.callbacks->initialize();
257 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to initialize vc engine service");
261 /* set the supported language */
262 if (true == g_dynamic_engine.callbacks->is_lang_supported(g_default_lang)) {
263 ret = g_dynamic_engine.callbacks->set_language(g_default_lang);
265 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to set the supported language");
269 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent SUCCESS] The %s has been loaded!!!", g_dynamic_engine.engine_name);
270 g_dynamic_engine.is_loaded = true;
272 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent WARNING] This engine do not support default language : lang(%s)", g_default_lang);
273 g_dynamic_engine.is_loaded = false;
274 return VCD_ERROR_OPERATION_FAILED;
277 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] load current engine FINISH");
282 int vcd_engine_agent_unload_current_engine()
284 if (false == g_agent_init) {
285 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
286 return VCD_ERROR_OPERATION_FAILED;
289 if (false == g_dynamic_engine.is_loaded) {
290 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] Engine has already been unloaded");
291 return VCD_ERROR_NONE;
294 /* shut down engine */
296 ret = g_dynamic_engine.callbacks->deinitialize();
298 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to deinitialize");
301 /* reset current engine data */
302 g_dynamic_engine.is_loaded = false;
309 * VCS Engine Interfaces for client
312 int vcd_engine_set_commands()
314 if (false == g_agent_init) {
315 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
316 return VCD_ERROR_OPERATION_FAILED;
321 if (true == g_dynamic_engine.is_loaded) {
322 /* Set dynamic command */
323 ret = g_dynamic_engine.callbacks->set_commands((vce_cmd_h)0);
325 SLOG(LOG_WARN, TAG_VCD, "[Engine Agent ERROR] Fail to set command of dynamic engine : error(%d)", ret);
326 g_dynamic_engine.is_command_ready = false;
328 g_dynamic_engine.is_command_ready = true;
331 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent SUCCESS] set command");
333 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] Dynamic engine is not available");
339 int vcd_engine_recognize_start(bool silence)
341 if (false == g_agent_init) {
342 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
343 return VCD_ERROR_OPERATION_FAILED;
347 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] silence is %s", silence ? "true" : "false");
349 if (true == g_dynamic_engine.is_loaded && true == g_dynamic_engine.is_command_ready) {
350 ret = g_dynamic_engine.callbacks->start(silence);
352 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent] Fail to start engine error(%d)", ret);
353 return VCD_ERROR_OPERATION_FAILED;
356 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] Engine is not available (Cannot start)");
357 return VCD_ERROR_OPERATION_FAILED;
360 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent SUCCESS] Engine start");
364 int vcd_engine_recognize_audio(const void* data, unsigned int length, vce_speech_detect_e* speech_detected)
366 if (false == g_agent_init) {
367 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
368 return VCD_ERROR_OPERATION_FAILED;
372 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Invalid Parameter");
373 return VCD_ERROR_INVALID_PARAMETER;
378 if (true == g_dynamic_engine.is_loaded) {
379 ret = g_dynamic_engine.callbacks->set_recording(data, length, speech_detected);
381 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to set recording dynamic engine error(%d)", ret);
382 if (VCE_ERROR_OUT_OF_NETWORK == ret) {
383 return VCD_ERROR_TIMED_OUT;
385 return VCD_ERROR_OPERATION_FAILED;
392 int vcd_engine_recognize_stop()
394 if (false == g_agent_init) {
395 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
396 return VCD_ERROR_OPERATION_FAILED;
399 if (true == g_dynamic_engine.is_loaded) {
401 ret = g_dynamic_engine.callbacks->stop();
403 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to stop dynamic engine error(%d)", ret);
404 return VCD_ERROR_OPERATION_FAILED;
407 SLOG(LOG_WARN, TAG_VCD, "[Engine Agent] Dynamic engine is not recording state");
408 return VCD_ERROR_OPERATION_FAILED;
414 int vcd_engine_recognize_cancel()
416 if (false == g_agent_init) {
417 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
418 return VCD_ERROR_OPERATION_FAILED;
422 if (true == g_dynamic_engine.is_loaded) {
423 ret = g_dynamic_engine.callbacks->cancel();
425 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to cancel dynamic engine error(%d)", ret);
426 return VCD_ERROR_OPERATION_FAILED;
433 int vcd_engine_set_audio_type(const char* audio)
435 if (false == g_agent_init) {
436 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
437 return VCD_ERROR_OPERATION_FAILED;
441 if (true == g_dynamic_engine.is_loaded) {
442 ret = g_dynamic_engine.callbacks->set_audio_type(audio);
444 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to set audio type(%d)", ret);
445 return VCD_ERROR_OPERATION_FAILED;
452 int vcd_engine_set_domain(int pid, const char* domain)
454 if (false == g_agent_init) {
455 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
456 return VCD_ERROR_OPERATION_FAILED;
460 if (true == g_dynamic_engine.is_loaded) {
461 ret = g_dynamic_engine.callbacks->set_domain(domain);
463 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to set domain (%d)", ret);
464 return VCD_ERROR_OPERATION_FAILED;
471 int vcd_engine_get_nlu_base_info(int pid, const char* key, char** value)
474 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Invalid Parameter");
475 return VCD_ERROR_INVALID_PARAMETER;
478 if (false == g_agent_init) {
479 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
480 return VCD_ERROR_OPERATION_FAILED;
484 if (true == g_dynamic_engine.is_loaded && NULL != g_dynamic_engine.callbacks->nlu_base_info_request) {
485 ret = g_dynamic_engine.callbacks->nlu_base_info_request(key, value);
487 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to get nlu base info (%d)", ret);
488 return VCD_ERROR_OPERATION_FAILED;
491 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Engine is not loaded or There is no nlu_base_info_request callback");
492 return VCD_ERROR_OPERATION_FAILED;
498 int vcd_engine_set_private_data(int pid, const char* key, const char* data)
500 if (false == g_agent_init) {
501 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
502 return VCD_ERROR_OPERATION_FAILED;
506 if (true == g_dynamic_engine.is_loaded && NULL != g_dynamic_engine.callbacks->private_data_set) {
507 ret = g_dynamic_engine.callbacks->private_data_set(key, data);
509 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to set private data (%d)", ret);
510 return VCD_ERROR_OPERATION_FAILED;
513 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Engine is not loaded or There is no private_data_set callback");
514 return VCD_ERROR_OPERATION_FAILED;
520 int vcd_engine_get_private_data(int pid, const char* key, char** data)
523 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Invalid Parameter");
524 return VCD_ERROR_INVALID_PARAMETER;
527 if (false == g_agent_init) {
528 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
529 return VCD_ERROR_OPERATION_FAILED;
533 if (true == g_dynamic_engine.is_loaded && NULL != g_dynamic_engine.callbacks->private_data_request) {
534 ret = g_dynamic_engine.callbacks->private_data_request(key, data);
536 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to get private data (%d)", ret);
537 return VCD_ERROR_OPERATION_FAILED;
540 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Engine is not loaded or There is no private_data_request callback");
541 return VCD_ERROR_OPERATION_FAILED;
547 int vcd_engine_process_text(int pid, const char* text)
549 if (false == g_agent_init) {
550 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
551 return VCD_ERROR_OPERATION_FAILED;
555 if (true == g_dynamic_engine.is_loaded) {
556 ret = g_dynamic_engine.callbacks->process_text(text);
558 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to process text (%d)", ret);
559 return VCD_ERROR_OPERATION_FAILED;
566 int vcd_engine_process_list_event(int pid, const char* event)
568 if (false == g_agent_init) {
569 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
570 return VCD_ERROR_OPERATION_FAILED;
574 if (true == g_dynamic_engine.is_loaded) {
575 ret = g_dynamic_engine.callbacks->process_list_event(event);
577 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to process list event (%d)", ret);
578 return VCD_ERROR_OPERATION_FAILED;
585 int vcd_engine_process_haptic_event(int pid, const char* event)
587 if (false == g_agent_init) {
588 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
589 return VCD_ERROR_OPERATION_FAILED;
593 if (true == g_dynamic_engine.is_loaded) {
594 ret = g_dynamic_engine.callbacks->process_haptic_event(event);
596 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to process haptic event (%d)", ret);
597 return VCD_ERROR_OPERATION_FAILED;
605 * VCS Engine Interfaces for client and setting
608 int vcd_engine_get_audio_format(const char* audio_id, vce_audio_type_e* types, int* rate, int* channels)
610 if (false == g_agent_init) {
611 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
612 return VCD_ERROR_OPERATION_FAILED;
615 if (true != g_dynamic_engine.is_loaded) {
616 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Engine is not loaded");
619 int ret = g_dynamic_engine.callbacks->get_recording_format(audio_id, types, rate, channels);
621 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] get recording format(%d)", ret);
622 return VCD_ERROR_OPERATION_FAILED;
628 bool __supported_language_cb(const char* language, void* user_data)
630 GList** lang_list = (GList**)user_data;
632 if (NULL == language || NULL == lang_list) {
633 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Input parameter is NULL in callback!!!!");
637 SLOG(LOG_DEBUG, TAG_VCD, "-- Language(%s)", language);
639 char* temp_lang = g_strdup(language);
641 *lang_list = g_list_append(*lang_list, temp_lang);
646 int vcd_engine_supported_langs(GList** lang_list)
648 if (false == g_agent_init) {
649 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
650 return VCD_ERROR_OPERATION_FAILED;
653 if (true != g_dynamic_engine.is_loaded) {
654 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Engine is not loaded");
657 int ret = g_dynamic_engine.callbacks->foreach_langs(__supported_language_cb, (void*)lang_list);
659 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] get language list error(%d)", ret);
660 return VCD_ERROR_OPERATION_FAILED;
667 int vcd_engine_get_current_language(char** lang)
669 if (false == g_agent_init) {
670 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
671 return VCD_ERROR_OPERATION_FAILED;
675 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Invalid Parameter");
676 return VCD_ERROR_INVALID_PARAMETER;
679 /* get default language */
680 *lang = g_strdup(g_default_lang);
685 int vcd_engine_set_current_language(const char* language)
687 if (false == g_agent_init) {
688 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
689 return VCD_ERROR_OPERATION_FAILED;
692 if (NULL == language) {
693 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Invalid Parameter");
694 return VCD_ERROR_INVALID_PARAMETER;
699 if (true == g_dynamic_engine.is_loaded) {
700 g_dynamic_engine.is_command_ready = false;
702 ret = g_dynamic_engine.callbacks->set_language(language);
704 SLOG(LOG_WARN, TAG_VCD, "[Engine Agent] Fail to set language of dynamic engine error(%d, %s)", ret, language);
707 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] Dynamic engine is not available (Cannot start)");
713 int vcd_engine_agent_get_foreach_command(vce_cmd_h vce_command, vce_command_cb callback, void* user_data)
715 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] Request foreach command from engine");
716 return vcd_client_foreach_command((client_foreach_command_cb)callback, user_data);
719 int vcd_engine_agent_get_command_count(vce_cmd_h vce_command)
721 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] Request command length from engine");
723 return vcd_client_get_length();
726 int vcd_engine_agent_get_audio_type(char** audio_type)
728 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] Request audio type");
730 return vcd_recorder_get(audio_type);
733 int vcd_engine_agent_set_private_data(const char* key, const char* data)
735 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] Request set private data");
736 vcdc_send_request_set_private_data(vcd_client_manager_get_pid(), key, data);
738 return VCD_ERROR_NONE;
741 int vcd_engine_agent_get_private_data(const char* key, char** data)
743 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] Request get private data");
744 vcdc_send_request_get_private_data(vcd_client_manager_get_pid(), key, data);
746 return VCD_ERROR_NONE;
749 int vcd_engine_agent_start_recording()
751 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] Request start recording");
753 int ret = vcd_recorder_start();
755 SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to start recorder : result(%d)", ret);
756 vcd_engine_recognize_cancel();
757 /* Send error cb to manager */
758 vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_OPERATION_FAILED, "voice_engine.error.proc_fail");
762 return VCD_ERROR_NONE;
765 int vcd_engine_agent_stop_recording()
767 SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] Request stop recording");
769 return vcd_recorder_stop();
772 int vcd_engine_agent_set_private_data_set_cb(vce_private_data_set_cb callback_func)
774 if (false == g_agent_init) {
775 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
776 return VCD_ERROR_OPERATION_FAILED;
779 if (false == g_dynamic_engine.is_loaded) {
780 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not loaded engine");
781 return VCD_ERROR_OPERATION_FAILED;
784 g_dynamic_engine.callbacks->private_data_set = callback_func;
786 return VCD_ERROR_NONE;
789 int vcd_engine_agent_set_private_data_requested_cb(vce_private_data_requested_cb callback_func)
791 if (false == g_agent_init) {
792 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
793 return VCD_ERROR_OPERATION_FAILED;
796 if (false == g_dynamic_engine.is_loaded) {
797 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not loaded engine");
798 return VCD_ERROR_OPERATION_FAILED;
801 g_dynamic_engine.callbacks->private_data_request = callback_func;
803 return VCD_ERROR_NONE;
806 int vcd_engine_agent_set_nlu_base_info_requested_cb(vce_nlu_base_info_requested_cb callback_func)
808 if (false == g_agent_init) {
809 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not Initialized");
810 return VCD_ERROR_OPERATION_FAILED;
813 if (false == g_dynamic_engine.is_loaded) {
814 SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Not loaded engine");
815 return VCD_ERROR_OPERATION_FAILED;
818 g_dynamic_engine.callbacks->nlu_base_info_request = callback_func;
820 return VCD_ERROR_NONE;