2 * Copyright (c) 2022 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.
22 #include "vc_mgr_client.h"
23 #include "vc_mgr_tidl.h"
24 #include "vc_mgr_proxy.h"
25 #include "vc_mgr_stub.h"
26 #include "vc_command.h"
30 bool connection_requesting;
31 bool register_callback_invoked;
32 rpc_port_proxy_vc_mgr_h rpc_h;
33 rpc_port_proxy_vc_mgr_notify_cb_h notify_cb_h;
34 rpc_port_proxy_vc_mgr_send_buffer_cb_h send_buffer_cb_h;
39 bool register_callback_requesting;
40 } vcd_mgr_tidl_info_s;
42 static vc_mgr_tidl_info_s* g_proxy_tidl_info = NULL;
44 static vcd_mgr_tidl_info_s* g_stub_tidl_info = NULL;
46 static pthread_mutex_t g_tidl_mutex = PTHREAD_MUTEX_INITIALIZER;
48 static rpc_port_stub_vcd_mgr_callback_s g_mgr_callback;
50 static int g_volume_count = 0;
53 extern void __vc_mgr_cb_all_result(vc_result_type_e type);
55 extern void __vc_mgr_cb_pre_result(int event, const char* pre_result);
57 extern void __vc_mgr_cb_system_result();
59 extern void __vc_mgr_cb_speech_detected();
61 extern int __vc_mgr_cb_error(int reason, int daemon_pid, char* msg);
63 extern int __vc_mgr_cb_set_volume(float volume);
65 extern int __vc_mgr_cb_service_state(int state);
67 extern int __vc_mgr_cb_set_foreground(int pid, bool value);
69 extern int __vc_mgr_cb_private_data_set(const char* key, const char* data);
71 extern int __vc_mgr_cb_private_data_requested(const char* key, char** data);
73 /* for TTS feedback */
74 extern int __vc_mgr_cb_feedback_audio_format(int rate, vc_audio_channel_e channel, vc_audio_type_e audio_type);
76 extern int __vc_mgr_cb_feedback_streaming(int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len);
79 extern int __vc_mgr_request_auth_enable(int pid);
81 extern int __vc_mgr_request_auth_disable(int pid);
83 extern int __vc_mgr_request_auth_start(int pid);
85 extern int __vc_mgr_request_auth_stop(int pid);
87 extern int __vc_mgr_request_auth_cancel(int pid);
89 extern int __vc_mgr_cb_dialog(int pid, const char* disp_text, const char* utt_text, bool continuous);
91 extern void __vc_mgr_cb_specific_engine_result(const char* engine_app_id, const char* event, const char* result);
93 static void __notify_cb(void *user_data, bundle *msg)
98 SLOG(LOG_DEBUG, TAG_VCM, "__notify_cb is invoked");
100 bundle_get_str(msg, VC_MANAGER_BUNDLE_METHOD, &method);
102 if (0 == strncmp(VCD_MANAGER_METHOD_SET_VOLUME, method, strlen(VCD_MANAGER_METHOD_SET_VOLUME))) {
103 bundle_get_str(msg, VC_MANAGER_BUNDLE_MESSAGE, &val);
109 if (10 == g_volume_count) {
110 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Set volume");
111 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set volume : volume(%f)", volume);
116 __vc_mgr_cb_set_volume(volume);
119 } /* VCD_MANAGER_METHOD_SET_VOLUME */
121 else if (0 == strncmp(VCD_MANAGER_METHOD_SET_SERVICE_STATE, method, strlen(VCD_MANAGER_METHOD_SET_SERVICE_STATE))) {
122 bundle_get_str(msg, VC_MANAGER_BUNDLE_MESSAGE, &val);
126 SLOG(LOG_INFO, TAG_VCM, "@@ state changed : %d", state);
127 __vc_mgr_cb_service_state(state);
129 } /* VCD_MANAGER_METHOD_SET_SERVICE_STATE */
131 else if (0 == strncmp(VCD_MANAGER_METHOD_SPEECH_DETECTED, method, strlen(VCD_MANAGER_METHOD_SPEECH_DETECTED))) {
132 SLOG(LOG_INFO, TAG_VCM, "@@@ Get Speech detected");
134 __vc_mgr_cb_speech_detected();
136 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
137 } /* VCD_MANAGER_METHOD_SPEECH_DETECTED */
139 else if (0 == strncmp(VCD_MANAGER_METHOD_ALL_RESULT, method, strlen(VCD_MANAGER_METHOD_ALL_RESULT))) {
140 SLOG(LOG_INFO, TAG_VCM, "@@@ Get All Result");
142 bundle_get_str(msg, VC_MANAGER_BUNDLE_MESSAGE, &val);
145 __vc_mgr_cb_all_result((vc_result_type_e)atoi(val));
148 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
149 } /* VCD_MANAGER_METHOD_ALL_RESULT */
151 else if (0 == strncmp(VCD_MANAGER_METHOD_PRE_RESULT, method, strlen(VCD_MANAGER_METHOD_PRE_RESULT))) {
152 SLOG(LOG_INFO, TAG_VCM, "@@@ Get Pre Result");
154 char* pre_result = NULL;
156 bundle_get_str(msg, VC_MANAGER_BUNDLE_EVENT, &event);
157 bundle_get_str(msg, VC_MANAGER_BUNDLE_PRE_RESULT, &pre_result);
159 if (NULL != pre_result) {
160 __vc_mgr_cb_pre_result((vc_pre_result_event_e)atoi(event), pre_result);
163 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
164 } /* VCD_MANAGER_METHOD_PRE_RESULT */
166 else if (0 == strncmp(VCD_MANAGER_METHOD_SPECIFIC_ENGINE_RESULT, method, strlen(VCD_MANAGER_METHOD_SPECIFIC_ENGINE_RESULT))) {
167 SLOG(LOG_INFO, TAG_VCM, "@@@ Get specific engine result");
168 char* engine_app_id = NULL;
172 bundle_get_str(msg, VC_MANAGER_BUNDLE_ENGINE_APP_ID, &engine_app_id);
173 bundle_get_str(msg, VC_MANAGER_BUNDLE_EVENT, &event);
174 bundle_get_str(msg, VC_MANAGER_BUNDLE_RESULT, &result);
176 if (NULL != result) {
177 gsize decodingSize=0;
178 gchar *gDecodedResult = (gchar *)g_base64_decode((const gchar *)result, &decodingSize);
181 SLOG(LOG_WARN, TAG_VCM, "@@@ Get specific engine result --> %s", gDecodedResult);
182 __vc_mgr_cb_specific_engine_result(engine_app_id, event, gDecodedResult);
183 g_free(gDecodedResult);
186 } /* VCD_MANAGER_METHOD_SPECIFIC_ENGINE_RESULT */
188 else if (0 == strncmp(VCD_MANAGER_METHOD_RESULT, method, strlen(VCD_MANAGER_METHOD_RESULT))) {
189 SLOG(LOG_INFO, TAG_VCM, "@@@ Get System Result");
191 __vc_mgr_cb_system_result();
193 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
195 } /* VCD_MANAGER_METHOD_RESULT */
197 else if (0 == strncmp(VCD_MANAGER_METHOD_DIALOG, method, strlen(VCD_MANAGER_METHOD_DIALOG))) {
198 SLOG(LOG_INFO, TAG_VCM, "@@@ Request Dialog");
200 char* disp_text = NULL;
201 char* utt_text = NULL;
202 char* continous = NULL;
204 bundle_get_str(msg, VC_MANAGER_BUNDLE_MESSAGE, &pid);
205 bundle_get_str(msg, VC_MANAGER_BUNDLE_DISP_TEXT, &disp_text);
206 bundle_get_str(msg, VC_MANAGER_BUNDLE_UTT_TEXT, &utt_text);
207 bundle_get_str(msg, VC_MANAGER_BUNDLE_CONTINUOUS, &continous);
209 if (!strncmp(disp_text, "#NULL", strlen("#NULL") + 1))
211 if (!strncmp(utt_text, "#NULL", strlen("#NULL") + 1))
214 __vc_mgr_cb_dialog(atoi(pid), disp_text, utt_text, (bool)atoi(continous));
216 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
217 } /* VCD_MANAGER_METHOD_DIALOG */
219 else if (0 == strncmp(VCD_MANAGER_METHOD_ERROR, method, strlen(VCD_MANAGER_METHOD_ERROR))) {
220 SLOG(LOG_INFO, TAG_VCM, "@@@ Get Error");
222 char* daemon_pid = NULL;
223 char* err_msg = NULL;
225 bundle_get_str(msg, VC_MANAGER_BUNDLE_REASON, &reason);
226 bundle_get_str(msg, VC_MANAGER_BUNDLE_DAEMON_PID, &daemon_pid);
227 bundle_get_str(msg, VC_MANAGER_BUNDLE_ERROR_MESSAGE, &err_msg);
229 char* temp_msg = NULL;
230 if (NULL != err_msg && strncmp(err_msg, "#NULL", strlen("#NULL") + 1)) {
231 temp_msg = strdup(err_msg);
233 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr Get Error message : reason(%d), daemon_pid(%d), msg(%s)", atoi(reason), atoi(daemon_pid), (temp_msg) ? temp_msg : "NULL");
234 __vc_mgr_cb_error(atoi(reason), atoi(daemon_pid), temp_msg);
235 if (NULL != temp_msg) {
240 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
241 } /* VCD_MANAGER_METHOD_ERROR */
243 else if (0 == strncmp(VCD_MANAGER_METHOD_SET_PRIVATE_DATA, method, strlen(VCD_MANAGER_METHOD_SET_PRIVATE_DATA))) {
244 SLOG(LOG_INFO, TAG_VCM, "@@@ Get request set private data");
247 char* private_data = NULL;
249 bundle_get_str(msg, VC_MANAGER_BUNDLE_MESSAGE, &pid);
250 bundle_get_str(msg, VC_MANAGER_BUNDLE_KEY, &key);
251 bundle_get_str(msg, VC_MANAGER_BUNDLE_PRIVATE_DATA, &private_data);
253 SLOG(LOG_INFO, TAG_VCM, "@@ vc mgr get request set private data : pid(%d) ", atoi(pid));
255 __vc_mgr_cb_private_data_set(key, private_data);
257 SLOG(LOG_ERROR, TAG_VCM, "@@ got invalid pid(%d)", atoi(pid));
260 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
261 } /* VCD_MANAGER_METHOD_SET_PRIVATE_DATA */
263 else if (0 == strncmp(VCD_MANAGER_METHOD_FEEDBACK_AUDIO_FORMAT, method, strlen(VCD_MANAGER_METHOD_FEEDBACK_AUDIO_FORMAT))) {
264 SLOG(LOG_INFO, TAG_VCM, "@@@ Get request feedback audio format");
265 char* channel = NULL;
266 char* audio_type = NULL;
269 bundle_get_str(msg, VC_MANAGER_BUNDLE_AUDIO_CHANNEL, &channel);
270 bundle_get_str(msg, VC_MANAGER_BUNDLE_AUDIO_TYPE, &audio_type);
271 bundle_get_str(msg, VC_MANAGER_BUNDLE_AUDIO_RATE, &rate);
273 __vc_mgr_cb_feedback_audio_format(atoi(rate), (vc_audio_channel_e)atoi(channel), (vc_audio_type_e)atoi(audio_type));
275 SLOG(LOG_INFO, TAG_VCM, "@@@");
276 } /* VCD_MANAGER_METHOD_FEEDBACK_AUDIO_FORMAT */
278 // TODO: uncomment this line after vcc done
279 // else if (0 == strncmp(VCC_MANAGER_METHOD_SET_FOREGROUND, method, strlen(VCC_MANAGER_METHOD_SET_FOREGROUND))) {
280 // SLOG(LOG_INFO, TAG_VCM, "@@@ Set foreground");
281 // char* temp_pid = NULL;
282 // char* temp_value = NULL;
286 // bundle_get_str(msg, VC_MANAGER_BUNDLE_MESSAGE, &temp_pid);
287 // bundle_get_str(msg, VC_MANAGER_BUNDLE_VALUE, &temp_value);
288 // pid = atoi(temp_pid);
289 // value = atoi(temp_value);
291 // SLOG(LOG_INFO, TAG_VCM, "@@ foreground changed : pid(%d) value(%s)", pid, value ? "true" : "false");
293 // __vc_mgr_cb_set_foreground(pid, (bool)value);
294 // SLOG(LOG_DEBUG, TAG_VCM, "@@@");
295 // } /* VCC_MANAGER_METHOD_SET_FOREGROUND */
298 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid msg");
303 static void __send_buffer_cb(void *user_data, rpc_port_proxy_array_char_h data_in, bundle *msg)
308 SLOG(LOG_DEBUG, TAG_VCM, "__send_buffer_cb is invoked");
310 bundle_get_str(msg, VC_MANAGER_BUNDLE_METHOD, &method);
312 if (0 == strncmp(VCD_MANAGER_METHOD_FEEDBACK_STREAMING, method, strlen(VCD_MANAGER_METHOD_FEEDBACK_STREAMING))) {
318 bundle_get_str(msg, VC_MANAGER_BUNDLE_MESSAGE, &val);
319 bundle_get_str(msg, VC_MANAGER_BUNDLE_UTTID, &utt_id);
320 bundle_get_str(msg, VC_MANAGER_BUNDLE_EVENT, &event);
322 rpc_port_proxy_array_char_get(data_in, &buffer, &len);
323 __vc_mgr_cb_feedback_streaming(atoi(val), atoi(utt_id), atoi(event), buffer, len);
326 SLOG(LOG_INFO, TAG_VCM, "@@@");
327 } /* VCD_MANAGER_METHOD_FEEDBACK_STREAMING */
330 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid msg");
335 static void __on_connected(rpc_port_proxy_vc_mgr_h h, void *user_data)
337 g_proxy_tidl_info->connected = true;
338 g_proxy_tidl_info->connection_requesting = false;
339 g_proxy_tidl_info->register_callback_invoked = false;
341 SLOG(LOG_INFO, TAG_VCM, "Connected to server");
344 static void __on_disconnected(rpc_port_proxy_vc_mgr_h h, void *user_data)
346 g_proxy_tidl_info->connected = false;
347 g_proxy_tidl_info->connection_requesting = false;
348 g_proxy_tidl_info->register_callback_invoked = false;
350 SLOG(LOG_INFO, TAG_VCM, "Disonnected to server");
353 static void __on_rejected(rpc_port_proxy_vc_mgr_h h, void *user_data)
355 g_proxy_tidl_info->connection_requesting = false;
356 g_proxy_tidl_info->register_callback_invoked = false;
358 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Rejected from server");
362 static rpc_port_proxy_vc_mgr_h __create_rpc_port(const char* engine_app_id)
364 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] __create_rpc_port");
365 rpc_port_proxy_vc_mgr_callback_s rpc_callback = {
366 .connected = __on_connected,
367 .disconnected = __on_disconnected,
368 .rejected = __on_rejected
371 rpc_port_proxy_vc_mgr_h handle = NULL;
372 if (0 != rpc_port_proxy_vc_mgr_create(engine_app_id, &rpc_callback, NULL, &handle)) {
373 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Fail to create proxy");
380 static void __vcd_mgr_create_cb(rpc_port_stub_vcd_mgr_context_h context, void *user_data)
382 g_stub_tidl_info->connected = true;
383 g_stub_tidl_info->register_callback_requesting = false;
385 SLOG(LOG_DEBUG, TAG_VCM, "Connected to server");
389 rpc_port_stub_vcd_mgr_context_get_sender(context, &sender);
391 SLOG(LOG_ERROR, TAG_VCM, "@@@ Sender is NULL");
395 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Server connect. appid(%s)", sender);
399 static void __vcd_mgr_terminate_cb(rpc_port_stub_vcd_mgr_context_h context, void *user_data)
401 g_stub_tidl_info->connected = false;
402 g_stub_tidl_info->register_callback_requesting = false;
404 rpc_port_stub_vcd_mgr_context_set_tag(context, NULL);
407 rpc_port_stub_vcd_mgr_context_get_sender(context, &sender);
411 SLOG(LOG_INFO, TAG_VCM, "@@@ Server disconnect. appid(%s)", sender);
415 static void __vcd_mgr_set_foreground_cb(rpc_port_stub_vcd_mgr_context_h context, int pid, int value, void *user_data)
417 SLOG(LOG_INFO, TAG_VCM, "@@@ Set foreground");
418 SLOG(LOG_INFO, TAG_VCM, "@@ foreground changed : pid(%d) value(%s)", pid, value ? "true" : "false");
420 __vc_mgr_cb_set_foreground(pid, (bool)value);
422 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
425 static int __vcd_mgr_get_private_data_cb(rpc_port_stub_vcd_mgr_context_h context, int pid, const char *key, char **data, void *user_data)
427 SLOG(LOG_INFO, TAG_VCM, "@@@ Get request get private data");
428 SLOG(LOG_INFO, TAG_VCM, "@@ vc mgr get request get private data : pid(%d) ", pid);
431 char *temp_data = NULL;
433 ret = __vc_mgr_cb_private_data_requested(key, &temp_data);
435 SLOG(LOG_ERROR, TAG_VCM, "[OUT ERROR] Result(%d)", ret);
438 if (NULL == temp_data) {
439 SLOG(LOG_INFO, TAG_VCM, "data parameter is NULL");
440 temp_data = strdup("#NULL");
443 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
448 static int __vcd_mgr_auth_enable_cb(rpc_port_stub_vcd_mgr_context_h context, int pid, void *user_data)
450 SLOG(LOG_INFO, TAG_VCM, "@@@ Get request auth enable");
451 SLOG(LOG_INFO, TAG_VCM, "@@ vc mgr request auth enable : pid(%d)", pid);
455 ret = __vc_mgr_request_auth_enable(pid);
457 SLOG(LOG_ERROR, TAG_VCM, "[OUT ERROR] Result(%d)", ret);
460 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
465 static int __vcd_mgr_auth_disable_cb(rpc_port_stub_vcd_mgr_context_h context, int pid, void *user_data)
467 SLOG(LOG_INFO, TAG_VCM, "@@@ Get request auth disable");
468 SLOG(LOG_INFO, TAG_VCM, "@@ vc mgr request auth disable : pid(%d)", pid);
472 ret = __vc_mgr_request_auth_disable(pid);
474 SLOG(LOG_ERROR, TAG_VCM, "[OUT ERROR] Result(%d)", ret);
477 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
482 static int __vcd_mgr_auth_start_cb(rpc_port_stub_vcd_mgr_context_h context, int pid, void *user_data)
484 SLOG(LOG_INFO, TAG_VCM, "@@@ Get request auth start");
485 SLOG(LOG_INFO, TAG_VCM, "@@ vc mgr request auth start : pid(%d)", pid);
489 ret = __vc_mgr_request_auth_start(pid);
491 SLOG(LOG_ERROR, TAG_VCM, "[OUT ERROR] Result(%d)", ret);
494 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
499 static int __vcd_mgr_auth_stop_cb(rpc_port_stub_vcd_mgr_context_h context, int pid, void *user_data)
501 SLOG(LOG_INFO, TAG_VCM, "@@@ Get request auth stop");
502 SLOG(LOG_INFO, TAG_VCM, "@@ vc mgr request auth stop : pid(%d)", pid);
506 ret = __vc_mgr_request_auth_stop(pid);
508 SLOG(LOG_ERROR, TAG_VCM, "[OUT ERROR] Result(%d)", ret);
511 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
516 static int __vcd_mgr_auth_cancel_cb(rpc_port_stub_vcd_mgr_context_h context, int pid, void *user_data)
518 SLOG(LOG_INFO, TAG_VCM, "@@@ Get request auth cancel");
519 SLOG(LOG_INFO, TAG_VCM, "@@ vc mgr request auth cancel : pid(%d)", pid);
523 ret = __vc_mgr_request_auth_cancel(pid);
525 SLOG(LOG_ERROR, TAG_VCM, "[OUT ERROR] Result(%d)", ret);
528 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
533 static void __register_stub_callback()
535 if (g_stub_tidl_info->register_callback_requesting) {
539 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] __register_stub_callback");
541 g_mgr_callback.create = __vcd_mgr_create_cb;
542 g_mgr_callback.terminate = __vcd_mgr_terminate_cb;
543 g_mgr_callback.set_foreground = __vcd_mgr_set_foreground_cb;
544 g_mgr_callback.get_private_data = __vcd_mgr_get_private_data_cb;
545 g_mgr_callback.auth_enable = __vcd_mgr_auth_enable_cb;
546 g_mgr_callback.auth_disable = __vcd_mgr_auth_disable_cb;
547 g_mgr_callback.auth_start = __vcd_mgr_auth_start_cb;
548 g_mgr_callback.auth_stop = __vcd_mgr_auth_stop_cb;
549 g_mgr_callback.auth_cancel = __vcd_mgr_auth_cancel_cb;
552 ret = rpc_port_stub_vcd_mgr_register(&g_mgr_callback, NULL);
554 SLOG(LOG_DEBUG, TAG_VCM, "register callback");
555 g_stub_tidl_info->register_callback_requesting = true;
559 SLOG(LOG_ERROR, TAG_VCM, "Fail to rister callback(%d)", ret);
563 int vc_mgr_tidl_open_connection()
565 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_open_connection");
566 pthread_mutex_lock(&g_tidl_mutex);
568 if (NULL != g_proxy_tidl_info) {
569 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] g_proxy_tidl_info already created");
570 pthread_mutex_unlock(&g_tidl_mutex);
571 return VC_ERROR_NONE;
574 g_proxy_tidl_info = (vc_mgr_tidl_info_s*)calloc(1, sizeof(vc_mgr_tidl_info_s));
576 if (NULL == g_proxy_tidl_info) {
577 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Fail to create vc_mgr_tidl_info_s");
578 pthread_mutex_unlock(&g_tidl_mutex);
579 return VC_ERROR_OUT_OF_MEMORY;
582 char* engine_app_id = vconf_get_str(VC_ENGINE_DB_DEFAULT);
583 if (NULL == engine_app_id) {
584 SLOG(LOG_ERROR, TAG_VCM, "[TIDL] vconf not found");
585 free(g_proxy_tidl_info);
586 g_proxy_tidl_info = NULL;
587 pthread_mutex_unlock(&g_tidl_mutex);
588 return VC_ERROR_ENGINE_NOT_FOUND;
591 g_proxy_tidl_info->rpc_h = __create_rpc_port(engine_app_id);
592 if (NULL == g_proxy_tidl_info->rpc_h) {
593 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Fail to create proxy");
595 free(g_proxy_tidl_info);
596 g_proxy_tidl_info = NULL;
597 pthread_mutex_unlock(&g_tidl_mutex);
598 return VC_ERROR_OPERATION_FAILED;
601 SLOG(LOG_INFO, TAG_VCM, "[TIDL] rpc_h(%p), engine_app_id(%s)", g_proxy_tidl_info->rpc_h, engine_app_id);
604 g_stub_tidl_info = (vcd_mgr_tidl_info_s*)calloc(1, sizeof(vcd_mgr_tidl_info_s));
606 if (NULL == g_stub_tidl_info) {
607 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Fail to create vcd_mgr_tidl_info_s");
608 pthread_mutex_unlock(&g_tidl_mutex);
609 return VC_ERROR_OUT_OF_MEMORY;
612 __register_stub_callback();
614 pthread_mutex_unlock(&g_tidl_mutex);
616 return VC_ERROR_NONE;
619 int vc_mgr_tidl_close_connection()
621 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_close_connection");
622 pthread_mutex_lock(&g_tidl_mutex);
624 if (NULL == g_proxy_tidl_info) {
625 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
626 pthread_mutex_unlock(&g_tidl_mutex);
627 return VC_ERROR_OPERATION_FAILED;
630 if (0 != rpc_port_proxy_vc_mgr_destroy(g_proxy_tidl_info->rpc_h)) {
631 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Fail to destroy tidl handle");
632 pthread_mutex_unlock(&g_tidl_mutex);
633 return VC_ERROR_OPERATION_FAILED;
636 g_proxy_tidl_info->rpc_h = NULL;
637 g_proxy_tidl_info->notify_cb_h = NULL;
638 g_proxy_tidl_info->send_buffer_cb_h = NULL;
640 free(g_proxy_tidl_info);
641 g_proxy_tidl_info = NULL;
643 free(g_stub_tidl_info);
644 g_stub_tidl_info = NULL;
646 pthread_mutex_unlock(&g_tidl_mutex);
648 return VC_ERROR_NONE;
651 static void __request_tidl_connect()
653 if (g_proxy_tidl_info->connection_requesting) {
657 int ret = rpc_port_proxy_vc_mgr_connect(g_proxy_tidl_info->rpc_h);
658 SLOG(LOG_INFO, TAG_VCM, "[INFO] Request connection to stub. ret(%d)", ret);
661 g_proxy_tidl_info->connection_requesting = true;
665 static int __create_callback_handles()
667 if (NULL != g_proxy_tidl_info->notify_cb_h) {
668 rpc_port_proxy_vc_mgr_notify_cb_dispose(g_proxy_tidl_info->rpc_h, g_proxy_tidl_info->notify_cb_h);
669 g_proxy_tidl_info->notify_cb_h = NULL;
672 if (RPC_PORT_ERROR_NONE != rpc_port_proxy_vc_mgr_notify_cb_create(&g_proxy_tidl_info->notify_cb_h)) {
673 return VC_ERROR_OUT_OF_MEMORY;
676 rpc_port_proxy_vc_mgr_notify_cb_set_callback(g_proxy_tidl_info->notify_cb_h, __notify_cb, NULL);
678 rpc_port_proxy_vc_mgr_notify_cb_set_once(g_proxy_tidl_info->notify_cb_h, false);
680 if (NULL != g_proxy_tidl_info->send_buffer_cb_h) {
681 rpc_port_proxy_vc_mgr_send_buffer_cb_dispose(g_proxy_tidl_info->rpc_h, g_proxy_tidl_info->send_buffer_cb_h);
682 g_proxy_tidl_info->send_buffer_cb_h = NULL;
685 if (RPC_PORT_ERROR_NONE != rpc_port_proxy_vc_mgr_send_buffer_cb_create(&g_proxy_tidl_info->send_buffer_cb_h)) {
686 return VC_ERROR_OUT_OF_MEMORY;
689 rpc_port_proxy_vc_mgr_send_buffer_cb_set_callback(g_proxy_tidl_info->send_buffer_cb_h, __send_buffer_cb, NULL);
691 rpc_port_proxy_vc_mgr_send_buffer_cb_set_once(g_proxy_tidl_info->send_buffer_cb_h, false);
693 return VC_ERROR_NONE;
696 static int __invoke_register_callback()
698 if (g_proxy_tidl_info->register_callback_invoked) {
699 SLOG(LOG_ERROR, TAG_VCM, "[INFO] Already register callback is invoked");
700 return VC_ERROR_NONE;
703 int ret = __create_callback_handles(g_proxy_tidl_info);
704 if (VC_ERROR_NONE != ret) {
705 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to create callback handle. ret(%d)", ret);
706 return VC_ERROR_OPERATION_FAILED;
709 rpc_port_proxy_vc_mgr_invoke_register_cb(g_proxy_tidl_info->rpc_h, getpid(), g_proxy_tidl_info->notify_cb_h, g_proxy_tidl_info->send_buffer_cb_h);
710 g_proxy_tidl_info->register_callback_invoked = true;
711 return VC_ERROR_NONE;
714 int vc_mgr_tidl_request_hello()
716 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_hello");
718 if (NULL == g_proxy_tidl_info) {
719 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get proxy tidl info");
720 return VC_ERROR_OPERATION_FAILED;
723 if (!g_proxy_tidl_info->connected) {
724 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Proxy Not Connected");
725 __request_tidl_connect();
726 return VC_ERROR_OPERATION_FAILED;
729 if (VC_ERROR_NONE != __invoke_register_callback()) {
730 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to invoke register callback");
731 return VC_ERROR_OPERATION_FAILED;
734 if (NULL == g_stub_tidl_info) {
735 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get stub tidl info");
736 return VC_ERROR_OPERATION_FAILED;
739 if (!g_stub_tidl_info->connected) {
740 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Stub Not Connected");
741 __register_stub_callback();
742 return VC_ERROR_OPERATION_FAILED;
745 SLOG(LOG_DEBUG, TAG_VCM, ">>>>> VCM Hello");
747 SLOG(LOG_DEBUG, TAG_VCM, "<<<<");
749 return VC_ERROR_NONE;
752 int vc_mgr_tidl_request_initialize(int pid, int audio_streaming_mode, int* service_state, int* foreground, int* daemon_pid)
754 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_initialize");
756 if (NULL == g_proxy_tidl_info) {
757 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
758 return VC_ERROR_OPERATION_FAILED;
761 int tmp_service_state = 0;
762 int tmp_forground = 0;
763 int tmp_daemon_pid = 0;
765 if (!g_proxy_tidl_info->connected) {
766 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
767 return VC_ERROR_OPERATION_FAILED;
770 int ret = rpc_port_proxy_vc_mgr_invoke_initialize(g_proxy_tidl_info->rpc_h, pid, audio_streaming_mode, &tmp_service_state, &tmp_forground, &tmp_daemon_pid);
771 if (RPC_PORT_ERROR_NONE != ret) {
772 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Request vc manager initialize : Fail to invoke message, error(%d)", ret);
776 *service_state = tmp_service_state;
777 *foreground = tmp_forground;
778 *daemon_pid = tmp_daemon_pid;
780 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc manager initialize: service_state(%d), foreground(%d), daemon_pid(%d)", *service_state, *foreground, *daemon_pid);
782 return VC_ERROR_NONE;
785 int vc_mgr_tidl_request_finalize(int pid)
787 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_finalize");
789 if (NULL == g_proxy_tidl_info) {
790 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
791 return VC_ERROR_OPERATION_FAILED;
794 if (!g_proxy_tidl_info->connected) {
795 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
796 return VC_ERROR_OPERATION_FAILED;
799 int ret = rpc_port_proxy_vc_mgr_invoke_finalize(g_proxy_tidl_info->rpc_h, pid);
800 if (RPC_PORT_ERROR_NONE != ret) {
801 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Request vc manager finalize : Fail to invoke message, error(%d)", ret);
805 return VC_ERROR_NONE;
808 int vc_mgr_tidl_request_set_command(int pid)
810 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_set_command");
812 if (NULL == g_proxy_tidl_info) {
813 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
814 return VC_ERROR_OPERATION_FAILED;
817 if (!g_proxy_tidl_info->connected) {
818 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
819 return VC_ERROR_OPERATION_FAILED;
822 int ret = rpc_port_proxy_vc_mgr_invoke_set_command(g_proxy_tidl_info->rpc_h, pid);
823 if (RPC_PORT_ERROR_NONE != ret) {
824 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Request vc manager set command : Fail to invoke message, error(%d)", ret);
828 return VC_ERROR_NONE;
831 int vc_mgr_tidl_request_unset_command(int pid)
833 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_unset_command");
835 if (NULL == g_proxy_tidl_info) {
836 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
837 return VC_ERROR_OPERATION_FAILED;
840 if (!g_proxy_tidl_info->connected) {
841 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
842 return VC_ERROR_OPERATION_FAILED;
845 int ret = rpc_port_proxy_vc_mgr_invoke_unset_command(g_proxy_tidl_info->rpc_h, pid);
846 if (RPC_PORT_ERROR_NONE != ret) {
847 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Request vc manager unset command : Fail to invoke message, error(%d)", ret);
851 return VC_ERROR_NONE;
854 int vc_mgr_tidl_request_demandable_client(int pid)
856 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_demandable_client");
858 if (NULL == g_proxy_tidl_info) {
859 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
860 return VC_ERROR_OPERATION_FAILED;
863 if (!g_proxy_tidl_info->connected) {
864 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
865 return VC_ERROR_OPERATION_FAILED;
868 int ret = rpc_port_proxy_vc_mgr_invoke_demandable_client(g_proxy_tidl_info->rpc_h, pid);
869 if (RPC_PORT_ERROR_NONE != ret) {
870 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Request vc manager demandable client : Fail to invoke message, error(%d)", ret);
874 return VC_ERROR_NONE;
877 int vc_mgr_tidl_request_set_audio_type(int pid, const char* audio_type)
879 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_set_audio_type");
881 if (NULL == g_proxy_tidl_info) {
882 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
883 return VC_ERROR_OPERATION_FAILED;
886 if (!g_proxy_tidl_info->connected) {
887 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
888 return VC_ERROR_OPERATION_FAILED;
891 int ret = rpc_port_proxy_vc_mgr_invoke_set_audio_type(g_proxy_tidl_info->rpc_h, pid, audio_type);
892 if (RPC_PORT_ERROR_NONE != ret) {
893 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Request vc manager set audio type : Fail to invoke message, error(%d)", ret);
897 return VC_ERROR_NONE;
900 int vc_mgr_tidl_request_get_audio_type(int pid, char** audio_type)
902 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_get_audio_type");
904 if (NULL == g_proxy_tidl_info) {
905 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
906 return VC_ERROR_OPERATION_FAILED;
909 if (!g_proxy_tidl_info->connected) {
910 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
911 return VC_ERROR_OPERATION_FAILED;
915 int ret = rpc_port_proxy_vc_mgr_invoke_get_audio_type(g_proxy_tidl_info->rpc_h, pid, &tmp);
916 if (RPC_PORT_ERROR_NONE != ret) {
917 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Request vc manager get audio type : Fail to invoke message, error(%d)", ret);
920 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] Request vc manager get audio type : Success");
924 return VC_ERROR_NONE;
927 int vc_mgr_tidl_request_set_private_data(int pid, const char* key, const char* data)
929 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_set_private_data");
931 if (NULL == g_proxy_tidl_info) {
932 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
933 return VC_ERROR_OPERATION_FAILED;
936 if (!g_proxy_tidl_info->connected) {
937 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
938 return VC_ERROR_OPERATION_FAILED;
941 rpc_port_proxy_vc_mgr_invoke_set_private_data(g_proxy_tidl_info->rpc_h, pid, key, data);
943 return VC_ERROR_NONE;
946 int vc_mgr_tidl_request_get_private_data(int pid, const char* key, char** data)
948 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_get_private_data");
950 if (NULL == g_proxy_tidl_info) {
951 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
952 return VC_ERROR_OPERATION_FAILED;
955 if (!g_proxy_tidl_info->connected) {
956 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
957 return VC_ERROR_OPERATION_FAILED;
961 int ret = rpc_port_proxy_vc_mgr_invoke_get_private_data(g_proxy_tidl_info->rpc_h, pid, key, &tmp);
962 if (RPC_PORT_ERROR_NONE != ret) {
963 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Request vc manager get private data : Fail to invoke message, error(%d)", ret);
966 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] Request vc manager get private data : Success");
970 return VC_ERROR_NONE;
973 int vc_mgr_tidl_request_set_client_info(int pid)
975 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_set_client_info");
977 if (NULL == g_proxy_tidl_info) {
978 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
979 return VC_ERROR_OPERATION_FAILED;
982 if (!g_proxy_tidl_info->connected) {
983 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
984 return VC_ERROR_OPERATION_FAILED;
987 int ret = rpc_port_proxy_vc_mgr_invoke_set_client_info(g_proxy_tidl_info->rpc_h, pid);
988 if (RPC_PORT_ERROR_NONE != ret) {
989 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Request vc manager set client info : Fail to invoke message, error(%d)", ret);
993 return VC_ERROR_NONE;
996 int vc_mgr_tidl_request_set_domain(int pid, const char* domain)
998 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_set_domain");
1000 if (NULL == g_proxy_tidl_info) {
1001 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
1002 return VC_ERROR_OPERATION_FAILED;
1005 if (!g_proxy_tidl_info->connected) {
1006 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
1007 return VC_ERROR_OPERATION_FAILED;
1010 int ret = rpc_port_proxy_vc_mgr_invoke_set_domain(g_proxy_tidl_info->rpc_h, pid, domain);
1011 if (RPC_PORT_ERROR_NONE != ret) {
1012 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Request vc manager set domain : Fail to invoke message, error(%d)", ret);
1016 return VC_ERROR_NONE;
1019 int vc_mgr_tidl_request_do_action(int pid, vc_send_event_type_e type, char* send_event)
1021 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_do_action");
1023 if (NULL == g_proxy_tidl_info) {
1024 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
1025 return VC_ERROR_OPERATION_FAILED;
1028 if (!g_proxy_tidl_info->connected) {
1029 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
1030 return VC_ERROR_OPERATION_FAILED;
1033 rpc_port_proxy_vc_mgr_invoke_do_action(g_proxy_tidl_info->rpc_h, pid, type, send_event);
1035 return VC_ERROR_NONE;
1038 int vc_mgr_tidl_request_start(int pid, int recognition_mode, bool exclusive_command_option, bool start_by_client, int disabled_cmd_type)
1040 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_start");
1042 if (NULL == g_proxy_tidl_info) {
1043 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
1044 return VC_ERROR_OPERATION_FAILED;
1047 if (!g_proxy_tidl_info->connected) {
1048 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
1049 return VC_ERROR_OPERATION_FAILED;
1052 int ret = rpc_port_proxy_vc_mgr_invoke_start(g_proxy_tidl_info->rpc_h, pid, recognition_mode, exclusive_command_option, start_by_client, disabled_cmd_type);
1053 if (RPC_PORT_ERROR_NONE != ret) {
1054 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Request vc manager start : Fail to invoke message, error(%d)", ret);
1058 return VC_ERROR_NONE;
1061 int vc_mgr_tidl_request_stop(int pid)
1063 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_stop");
1065 if (NULL == g_proxy_tidl_info) {
1066 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
1067 return VC_ERROR_OPERATION_FAILED;
1070 if (!g_proxy_tidl_info->connected) {
1071 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
1072 return VC_ERROR_OPERATION_FAILED;
1075 int ret = rpc_port_proxy_vc_mgr_invoke_stop(g_proxy_tidl_info->rpc_h, pid);
1076 if (RPC_PORT_ERROR_NONE != ret) {
1077 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Request vc manager stop : Fail to invoke message, error(%d)", ret);
1081 return VC_ERROR_NONE;
1084 int vc_mgr_tidl_request_cancel(int pid)
1086 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_cancel");
1088 if (NULL == g_proxy_tidl_info) {
1089 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
1090 return VC_ERROR_OPERATION_FAILED;
1093 if (!g_proxy_tidl_info->connected) {
1094 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
1095 return VC_ERROR_OPERATION_FAILED;
1098 int ret = rpc_port_proxy_vc_mgr_invoke_cancel(g_proxy_tidl_info->rpc_h, pid);
1099 if (RPC_PORT_ERROR_NONE != ret) {
1100 SLOG(LOG_ERROR, TAG_VCM, "[TIDL ERROR] Request vc manager cancel : Fail to invoke message, error(%d)", ret);
1104 return VC_ERROR_NONE;
1107 int vc_mgr_tidl_request_set_audio_streaming_mode(int pid, vc_audio_streaming_mode_e mode)
1109 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_request_set_audio_streaming_mode");
1111 if (NULL == g_proxy_tidl_info) {
1112 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
1113 return VC_ERROR_OPERATION_FAILED;
1116 if (!g_proxy_tidl_info->connected) {
1117 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
1118 return VC_ERROR_OPERATION_FAILED;
1121 rpc_port_proxy_vc_mgr_invoke_set_audio_streaming_mode(g_proxy_tidl_info->rpc_h, pid, mode);
1123 return VC_ERROR_NONE;
1126 int vc_mgr_tidl_send_result_selection(int pid)
1128 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_send_result_selection");
1130 if (NULL == g_proxy_tidl_info) {
1131 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
1132 return VC_ERROR_OPERATION_FAILED;
1135 if (!g_proxy_tidl_info->connected) {
1136 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
1137 return VC_ERROR_OPERATION_FAILED;
1140 rpc_port_proxy_vc_mgr_invoke_send_result_selection(g_proxy_tidl_info->rpc_h, pid);
1142 return VC_ERROR_NONE;
1145 int vc_mgr_tidl_send_specific_engine_request(int pid, const char* engine_app_id, const char* event, const char* request)
1147 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_send_result_selection");
1149 if (NULL == g_proxy_tidl_info) {
1150 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
1151 return VC_ERROR_OPERATION_FAILED;
1154 if (!g_proxy_tidl_info->connected) {
1155 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
1156 return VC_ERROR_OPERATION_FAILED;
1159 gchar *gEncodedRequest = g_base64_encode((const guchar*)request, strlen(request));
1161 rpc_port_proxy_vc_mgr_invoke_send_specific_engine_request(g_proxy_tidl_info->rpc_h, pid, engine_app_id, event, gEncodedRequest);
1163 if (gEncodedRequest)
1164 g_free(gEncodedRequest);
1166 return VC_ERROR_NONE;
1169 int vc_mgr_tidl_send_utterance_status(int pid, int utt_id, vc_tts_utterance_status_e utt_status)
1171 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_send_utterance_status");
1173 if (NULL == g_proxy_tidl_info) {
1174 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
1175 return VC_ERROR_OPERATION_FAILED;
1178 if (!g_proxy_tidl_info->connected) {
1179 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
1180 return VC_ERROR_OPERATION_FAILED;
1183 rpc_port_proxy_vc_mgr_invoke_send_utterance_status(g_proxy_tidl_info->rpc_h, utt_id, utt_status);
1185 return VC_ERROR_NONE;
1188 int vc_mgr_tidl_send_audio_streaming(int pid, vc_audio_streaming_event_e event, unsigned char* buffer, unsigned int len)
1190 SLOG(LOG_DEBUG, TAG_VCM, "[TIDL] vc_mgr_tidl_send_audio_streaming");
1192 if (NULL == g_proxy_tidl_info) {
1193 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get tidl info");
1194 return VC_ERROR_OPERATION_FAILED;
1197 if (!g_proxy_tidl_info->connected) {
1198 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not Connected");
1199 return VC_ERROR_OPERATION_FAILED;
1202 rpc_port_proxy_array_char_h data = NULL;
1203 rpc_port_proxy_array_char_create(&data);
1205 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to create data handle");
1206 return VC_ERROR_OUT_OF_MEMORY;
1209 if (NULL != buffer && 0 < len) {
1210 rpc_port_proxy_array_char_set(data, (char*)buffer, len);
1212 SLOG(LOG_ERROR, TAG_VCM, "[TIDL] buffer is empty");
1215 rpc_port_proxy_vc_mgr_invoke_send_audio_streaming(g_proxy_tidl_info->rpc_h, pid, event, data);
1216 rpc_port_proxy_array_char_destroy(data);
1218 return VC_ERROR_NONE;