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.
21 #include "vc_widget_client.h"
22 #include "vc_widget_tidl.h"
23 #include "vc_widget_proxy.h"
24 #include "vc_widget_stub.h"
28 bool connection_requesting;
29 bool register_callback_invoked;
30 rpc_port_proxy_vc_widget_proxy_vc_widget_h rpc_h;
31 rpc_port_proxy_vc_widget_proxy_vc_widget_notify_cb_h notify_cb_h;
32 } vc_widget_tidl_info_s;
36 bool register_callback_requesting;
37 } vcd_widget_tidl_info_s;
39 static vc_widget_tidl_info_s* g_proxy_tidl_info = NULL;
41 static vcd_widget_tidl_info_s* g_stub_tidl_info = NULL;
43 static pthread_mutex_t g_w_tidl_mutex = PTHREAD_MUTEX_INITIALIZER;
44 static pthread_mutex_t g_w_init_mutex = PTHREAD_MUTEX_INITIALIZER;
46 static rpc_port_stub_vc_widget_stub_vcd_widget_callback_s g_widget_callback;
48 extern int __vc_widget_cb_error(int reason, int daemon_pid, char* msg);
50 extern void __vc_widget_cb_show_tooltip(int pid, bool show);
52 extern void __vc_widget_cb_result();
54 extern bool __vc_widget_cb_asr_result(int event, const char* asr_result);
56 extern int __vc_widget_cb_service_state(int state);
58 static void __notify_cb(void *user_data, bundle *msg)
62 SLOG(LOG_DEBUG, TAG_VCW, "__notify_cb is invoked");
64 bundle_get_str(msg, VC_BUNDLE_METHOD, &method);
66 if (0 == strncmp(VCD_WIDGET_METHOD_HELLO, method, strlen(VCD_WIDGET_METHOD_HELLO))) {
67 SLOG(LOG_INFO, TAG_VCW, "@@@ Get widget hello");
68 bundle_get_str(msg, VC_BUNDLE_PID, &val);
70 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get hello : pid(%d) ", atoi(val));
72 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get hello : invalid pid ");
74 } /* VCD_METHOD_HELLO */
76 else if (0 == strncmp(VCD_WIDGET_METHOD_SET_SERVICE_STATE, method, strlen(VCD_WIDGET_METHOD_SET_SERVICE_STATE))) {
77 bundle_get_str(msg, VC_BUNDLE_SERVICE_STATE, &val);
81 SLOG(LOG_INFO, TAG_VCW, "@@ service state changed : %d", state);
82 __vc_widget_cb_service_state(state);
84 } /* VCD_WIDGET_METHOD_SET_SERVICE_STATE */
86 else if (0 == strncmp(VCD_WIDGET_METHOD_SHOW_TOOLTIP, method, strlen(VCD_WIDGET_METHOD_SHOW_TOOLTIP))) {
87 SLOG(LOG_DEBUG, TAG_VCW, "@@@ Show / Hide tooltip");
88 char* temp_show = NULL;
89 bundle_get_str(msg, VC_BUNDLE_PID, &val);
90 bundle_get_str(msg, VC_BUNDLE_SHOW, &temp_show);
98 show = atoi(temp_show);
102 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget show tooltip : pid(%d), show(%d)", pid, show);
103 __vc_widget_cb_show_tooltip(pid, (bool)show);
105 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget show tooltip : invalid pid");
107 } /* VCD_WIDGET_METHOD_SHOW_TOOLTIP */
109 else if (0 == strncmp(VCD_WIDGET_METHOD_RESULT, method, strlen(VCD_WIDGET_METHOD_RESULT))) {
110 SLOG(LOG_DEBUG, TAG_VCW, "@@@ Get widget result");
112 __vc_widget_cb_result();
113 } /* VCD_WIDGET_METHOD_RESULT */
115 else if (0 == strncmp(VCD_WIDGET_METHOD_ERROR, method, strlen(VCD_WIDGET_METHOD_ERROR))) {
116 SLOG(LOG_INFO, TAG_VCW, "@@@ Get Pre Result");
117 char* temp_reason = NULL;
118 char* temp_daemon_pid = NULL;
119 char* err_msg = NULL;
121 bundle_get_str(msg, VC_BUNDLE_REASON, &temp_reason);
122 bundle_get_str(msg, VC_BUNDLE_DAEMON_PID, &temp_daemon_pid);
123 bundle_get_str(msg, VC_BUNDLE_ERR_MSG, &err_msg);
127 if (NULL != temp_reason) {
128 reason = atoi(temp_reason);
130 if (NULL != temp_daemon_pid) {
131 daemon_pid = atoi(temp_daemon_pid);
134 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get error message : reason(%d), daemon_pid(%d), msg(%s)", reason, daemon_pid, err_msg);
135 __vc_widget_cb_error(reason, daemon_pid, err_msg);
136 } /* VCD_WIDGET_METHOD_ERROR */
139 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Invalid msg");
142 SLOG(LOG_DEBUG, TAG_VCW, "@@@ __notify_cb DONE");
145 static void __on_connected(rpc_port_proxy_vc_widget_proxy_vc_widget_h h, void *user_data)
147 g_proxy_tidl_info->connected = true;
148 g_proxy_tidl_info->connection_requesting = false;
149 g_proxy_tidl_info->register_callback_invoked = false;
151 SLOG(LOG_INFO, TAG_VCW, "Connected to server");
154 static void __on_disconnected(rpc_port_proxy_vc_widget_proxy_vc_widget_h h, void *user_data)
156 g_proxy_tidl_info->connected = false;
157 g_proxy_tidl_info->connection_requesting = false;
158 g_proxy_tidl_info->register_callback_invoked = false;
160 SLOG(LOG_INFO, TAG_VCW, "Disonnected to server");
162 SLOG(LOG_INFO, TAG_VCW, "Re-connection start");
163 __vc_widget_cb_error(VC_ERROR_SERVICE_RESET, -1, "Server Disconnected, re-launch");
166 static void __on_rejected(rpc_port_proxy_vc_widget_proxy_vc_widget_h h, void *user_data)
168 g_proxy_tidl_info->connection_requesting = false;
169 g_proxy_tidl_info->register_callback_invoked = false;
171 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Rejected from server");
175 static rpc_port_proxy_vc_widget_proxy_vc_widget_h __create_rpc_port(const char* engine_app_id)
177 SLOG(LOG_DEBUG, TAG_VCW, "[TIDL] __create_rpc_port");
178 rpc_port_proxy_vc_widget_proxy_vc_widget_callback_s rpc_callback = {
179 .connected = __on_connected,
180 .disconnected = __on_disconnected,
181 .rejected = __on_rejected
184 rpc_port_proxy_vc_widget_proxy_vc_widget_h handle = NULL;
185 if (0 != rpc_port_proxy_vc_widget_proxy_vc_widget_create(engine_app_id, &rpc_callback, NULL, &handle)) {
186 SLOG(LOG_ERROR, TAG_VCW, "[TIDL ERROR] Fail to create proxy");
193 static void __vcd_widget_create_cb(rpc_port_stub_vc_widget_stub_vcd_widget_context_h context, void *user_data)
195 g_stub_tidl_info->connected = true;
196 g_stub_tidl_info->register_callback_requesting = false;
198 SLOG(LOG_DEBUG, TAG_VCW, "Connected to server");
202 rpc_port_stub_vc_widget_stub_vcd_widget_context_get_sender(context, &sender);
204 SLOG(LOG_ERROR, TAG_VCW, "@@@ Sender is NULL");
208 SLOG(LOG_DEBUG, TAG_VCW, "@@@ Server connect. appid(%s)", sender);
212 static void __vcd_widget_terminate_cb(rpc_port_stub_vc_widget_stub_vcd_widget_context_h context, void *user_data)
214 g_stub_tidl_info->connected = false;
215 g_stub_tidl_info->register_callback_requesting = false;
217 rpc_port_stub_vc_widget_stub_vcd_widget_context_set_tag(context, NULL);
220 rpc_port_stub_vc_widget_stub_vcd_widget_context_get_sender(context, &sender);
224 SLOG(LOG_INFO, TAG_VCW, "@@@ Server disconnect. appid(%s)", sender);
228 static int __vcd_widget_asr_result_cb(rpc_port_stub_vc_widget_stub_vcd_widget_context_h context, int pid, int event, const char *asr_result, bool *is_consumed, void *user_data)
230 SLOG(LOG_DEBUG, TAG_VCW, "@@@ Get widget asr result");
233 result = __vc_widget_cb_asr_result(event, asr_result);
234 *is_consumed = result;
236 return VC_ERROR_NONE;
239 static void __register_stub_callback()
241 if (g_stub_tidl_info->register_callback_requesting) {
245 SLOG(LOG_DEBUG, TAG_VCW, "[TIDL] __register_stub_callback");
247 g_widget_callback.create = __vcd_widget_create_cb;
248 g_widget_callback.terminate = __vcd_widget_terminate_cb;
249 g_widget_callback.send_asr_result = __vcd_widget_asr_result_cb;
252 ret = rpc_port_stub_vc_widget_stub_vcd_widget_register(&g_widget_callback, NULL);
254 SLOG(LOG_DEBUG, TAG_VCW, "register callback");
255 g_stub_tidl_info->register_callback_requesting = true;
259 SLOG(LOG_ERROR, TAG_VCW, "Fail to rister callback(%d)", ret);
263 int vc_widget_tidl_open_connection()
265 SLOG(LOG_DEBUG, TAG_VCW, "[TIDL] vc_widget_tidl_open_connection");
266 pthread_mutex_lock(&g_w_tidl_mutex);
268 if (NULL != g_proxy_tidl_info) {
269 SLOG(LOG_ERROR, TAG_VCW, "[TIDL ERROR] g_proxy_tidl_info already created");
270 pthread_mutex_unlock(&g_w_tidl_mutex);
271 return VC_ERROR_NONE;
274 g_proxy_tidl_info = (vc_widget_tidl_info_s*)calloc(1, sizeof(vc_widget_tidl_info_s));
276 if (NULL == g_proxy_tidl_info) {
277 SLOG(LOG_ERROR, TAG_VCW, "[TIDL ERROR] Fail to create vc_widget_tidl_info_s");
278 pthread_mutex_unlock(&g_w_tidl_mutex);
279 return VC_ERROR_OUT_OF_MEMORY;
282 char* engine_app_id = vconf_get_str(VC_ENGINE_DB_DEFAULT);
283 if (NULL == engine_app_id) {
284 SLOG(LOG_ERROR, TAG_VCW, "[TIDL] vconf not found");
285 free(g_proxy_tidl_info);
286 g_proxy_tidl_info = NULL;
287 pthread_mutex_unlock(&g_w_tidl_mutex);
288 return VC_ERROR_ENGINE_NOT_FOUND;
291 g_proxy_tidl_info->rpc_h = __create_rpc_port(engine_app_id);
292 if (NULL == g_proxy_tidl_info->rpc_h) {
293 SLOG(LOG_ERROR, TAG_VCW, "[TIDL ERROR] Fail to create proxy");
295 free(g_proxy_tidl_info);
296 g_proxy_tidl_info = NULL;
297 pthread_mutex_unlock(&g_w_tidl_mutex);
298 return VC_ERROR_OPERATION_FAILED;
301 SLOG(LOG_INFO, TAG_VCW, "[TIDL] rpc_h(%p), engine_app_id(%s)", g_proxy_tidl_info->rpc_h, engine_app_id);
304 g_stub_tidl_info = (vcd_widget_tidl_info_s*)calloc(1, sizeof(vcd_widget_tidl_info_s));
306 if (NULL == g_stub_tidl_info) {
307 SLOG(LOG_ERROR, TAG_VCW, "[TIDL ERROR] Fail to create vcd_widget_tidl_info_s");
308 pthread_mutex_unlock(&g_w_tidl_mutex);
309 return VC_ERROR_OUT_OF_MEMORY;
312 __register_stub_callback();
314 pthread_mutex_unlock(&g_w_tidl_mutex);
316 return VC_ERROR_NONE;
319 int vc_widget_tidl_close_connection()
321 SLOG(LOG_DEBUG, TAG_VCW, "[TIDL] vc_widget_tidl_close_connection");
322 pthread_mutex_lock(&g_w_tidl_mutex);
324 if (NULL == g_proxy_tidl_info) {
325 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to get tidl info");
326 pthread_mutex_unlock(&g_w_tidl_mutex);
327 return VC_ERROR_OPERATION_FAILED;
330 if (0 != rpc_port_proxy_vc_widget_proxy_vc_widget_destroy(g_proxy_tidl_info->rpc_h)) {
331 SLOG(LOG_ERROR, TAG_VCW, "[TIDL ERROR] Fail to destroy tidl handle");
332 pthread_mutex_unlock(&g_w_tidl_mutex);
333 return VC_ERROR_OPERATION_FAILED;
336 g_proxy_tidl_info->rpc_h = NULL;
337 g_proxy_tidl_info->notify_cb_h = NULL;
339 free(g_proxy_tidl_info);
340 g_proxy_tidl_info = NULL;
342 free(g_stub_tidl_info);
343 g_stub_tidl_info = NULL;
345 pthread_mutex_unlock(&g_w_tidl_mutex);
347 return VC_ERROR_NONE;
350 static void __request_tidl_connect()
352 if (g_proxy_tidl_info->connection_requesting) {
356 int ret = rpc_port_proxy_vc_widget_proxy_vc_widget_connect(g_proxy_tidl_info->rpc_h);
357 SLOG(LOG_INFO, TAG_VCW, "[INFO] Request connection to stub. ret(%d)", ret);
360 g_proxy_tidl_info->connection_requesting = true;
364 static int __create_callback_handles()
366 if (NULL != g_proxy_tidl_info->notify_cb_h) {
367 rpc_port_proxy_vc_widget_proxy_vc_widget_notify_cb_dispose(g_proxy_tidl_info->rpc_h, g_proxy_tidl_info->notify_cb_h);
368 g_proxy_tidl_info->notify_cb_h = NULL;
371 if (RPC_PORT_ERROR_NONE != rpc_port_proxy_vc_widget_proxy_vc_widget_notify_cb_create(&g_proxy_tidl_info->notify_cb_h)) {
372 return VC_ERROR_OUT_OF_MEMORY;
375 rpc_port_proxy_vc_widget_proxy_vc_widget_notify_cb_set_callback(g_proxy_tidl_info->notify_cb_h, __notify_cb, NULL);
377 rpc_port_proxy_vc_widget_proxy_vc_widget_notify_cb_set_once(g_proxy_tidl_info->notify_cb_h, false);
379 return VC_ERROR_NONE;
382 static int __invoke_register_callback()
384 if (g_proxy_tidl_info->register_callback_invoked) {
385 SLOG(LOG_ERROR, TAG_VCW, "[INFO] Already register callback is invoked");
386 return VC_ERROR_NONE;
389 int ret = __create_callback_handles(g_proxy_tidl_info);
390 if (VC_ERROR_NONE != ret) {
391 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to create callback handle. ret(%d)", ret);
392 return VC_ERROR_OPERATION_FAILED;
395 rpc_port_proxy_vc_widget_proxy_vc_widget_invoke_register_cb(g_proxy_tidl_info->rpc_h, getpid(), g_proxy_tidl_info->notify_cb_h);
396 g_proxy_tidl_info->register_callback_invoked = true;
397 return VC_ERROR_NONE;
400 int vc_widget_tidl_request_hello()
402 SLOG(LOG_DEBUG, TAG_VCW, "[TIDL] vc_widget_tidl_request_hello");
404 if (NULL == g_proxy_tidl_info) {
405 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to get proxy tidl info");
406 return VC_ERROR_OPERATION_FAILED;
409 if (!g_proxy_tidl_info->connected) {
410 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Proxy Not Connected");
411 __request_tidl_connect();
412 return VC_ERROR_OPERATION_FAILED;
415 if (VC_ERROR_NONE != __invoke_register_callback()) {
416 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to invoke register callback");
417 return VC_ERROR_OPERATION_FAILED;
420 if (NULL == g_stub_tidl_info) {
421 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to get stub tidl info");
422 return VC_ERROR_OPERATION_FAILED;
425 if (!g_stub_tidl_info->connected) {
426 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Stub Not Connected");
427 __register_stub_callback();
428 return VC_ERROR_OPERATION_FAILED;
431 SLOG(LOG_DEBUG, TAG_VCW, ">>>>> VCW Hello");
433 SLOG(LOG_DEBUG, TAG_VCW, "<<<<");
435 return VC_ERROR_NONE;
438 int vc_widget_tidl_request_initialize(int pid, int* service_state, int* daemon_pid)
440 pthread_mutex_lock(&g_w_init_mutex);
441 SLOG(LOG_DEBUG, TAG_VCW, "[TIDL] vc_widget_tidl_request_initialize");
443 if (NULL == g_proxy_tidl_info) {
444 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to get tidl info");
445 pthread_mutex_unlock(&g_w_init_mutex);
446 return VC_ERROR_OPERATION_FAILED;
449 int temp_service_state = 0;
450 int temp_daemon_pid = 0;
451 int ret = rpc_port_proxy_vc_widget_proxy_vc_widget_invoke_initialize(g_proxy_tidl_info->rpc_h, pid, &temp_service_state, &temp_daemon_pid);
452 if (RPC_PORT_ERROR_NONE != ret) {
453 SLOG(LOG_ERROR, TAG_VCW, "[TIDL ERROR] Request vc widget initialize : Fail to invoke message, error(%d)", ret);
454 pthread_mutex_unlock(&g_w_init_mutex);
458 *service_state = temp_service_state;
459 *daemon_pid = temp_daemon_pid;
461 pthread_mutex_unlock(&g_w_init_mutex);
462 SLOG(LOG_DEBUG, TAG_VCW, "[TIDL] vc widget initialize: service_state(%d), daemon_pid(%d)", *service_state, *daemon_pid);
464 return VC_ERROR_NONE;
467 int vc_widget_tidl_request_finalize(int pid)
469 pthread_mutex_lock(&g_w_init_mutex);
470 SLOG(LOG_DEBUG, TAG_VCW, "[TIDL] vc_widget_tidl_request_finalize");
472 if (NULL == g_proxy_tidl_info) {
473 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to get tidl info");
474 pthread_mutex_unlock(&g_w_init_mutex);
475 return VC_ERROR_OPERATION_FAILED;
478 if (!g_proxy_tidl_info->connected) {
479 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Not Connected");
480 pthread_mutex_unlock(&g_w_init_mutex);
481 return VC_ERROR_OPERATION_FAILED;
484 int ret = rpc_port_proxy_vc_widget_proxy_vc_widget_invoke_finalize(g_proxy_tidl_info->rpc_h, pid);
485 if (RPC_PORT_ERROR_NONE != ret) {
486 SLOG(LOG_ERROR, TAG_VCW, "[TIDL ERROR] Request vc widget finalize : Fail to invoke message, error(%d)", ret);
487 pthread_mutex_unlock(&g_w_init_mutex);
491 pthread_mutex_unlock(&g_w_init_mutex);
492 return VC_ERROR_NONE;
495 int vc_widget_tidl_request_start_recording(int pid, bool command)
497 SLOG(LOG_DEBUG, TAG_VCW, "[TIDL] vc_widget_tidl_request_start_recording");
499 if (NULL == g_proxy_tidl_info) {
500 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to get tidl info");
501 return VC_ERROR_OPERATION_FAILED;
504 if (!g_proxy_tidl_info->connected) {
505 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Not Connected");
506 return VC_ERROR_OPERATION_FAILED;
509 int ret = rpc_port_proxy_vc_widget_proxy_vc_widget_invoke_start_recording(g_proxy_tidl_info->rpc_h, pid, (int)command);
510 if (RPC_PORT_ERROR_NONE != ret) {
511 SLOG(LOG_ERROR, TAG_VCW, "[TIDL ERROR] Request vc widget start recording : Fail to invoke message, error(%d)", ret);
515 return VC_ERROR_NONE;
518 int vc_widget_tidl_set_foreground(int pid, bool value)
520 SLOG(LOG_DEBUG, TAG_VCW, "[TIDL] vc_widget_tidl_set_foreground");
522 if (NULL == g_proxy_tidl_info) {
523 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to get tidl info");
524 return VC_ERROR_OPERATION_FAILED;
527 if (!g_proxy_tidl_info->connected) {
528 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Not Connected");
529 return VC_ERROR_OPERATION_FAILED;
532 // TODO: Error tolerance cannot be applied because this function is asynchronous.
533 rpc_port_proxy_vc_widget_proxy_vc_widget_invoke_set_foreground(g_proxy_tidl_info->rpc_h, pid, (int)value);
535 return VC_ERROR_NONE;
538 int vc_widget_tidl_request_enable_asr_result(int pid, bool enable)
540 SLOG(LOG_DEBUG, TAG_VCW, "[TIDL] vc_widget_tidl_request_enable_asr_result");
542 if (NULL == g_proxy_tidl_info) {
543 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to get tidl info");
544 return VC_ERROR_OPERATION_FAILED;
547 if (!g_proxy_tidl_info->connected) {
548 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Not Connected");
549 return VC_ERROR_OPERATION_FAILED;
552 int ret = rpc_port_proxy_vc_widget_proxy_vc_widget_invoke_enable_asr_result(g_proxy_tidl_info->rpc_h, pid, (int)enable);
553 if (RPC_PORT_ERROR_NONE != ret) {
554 SLOG(LOG_ERROR, TAG_VCW, "[TIDL ERROR] Request vc widget enable asr result : Fail to invoke message, error(%d)", ret);
558 return VC_ERROR_NONE;
561 int vc_widget_tidl_request_start(int pid, int silence)
563 SLOG(LOG_DEBUG, TAG_VCW, "[TIDL] vc_widget_tidl_request_start");
565 if (NULL == g_proxy_tidl_info) {
566 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to get tidl info");
567 return VC_ERROR_OPERATION_FAILED;
570 if (!g_proxy_tidl_info->connected) {
571 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Not Connected");
572 return VC_ERROR_OPERATION_FAILED;
575 int ret = rpc_port_proxy_vc_widget_proxy_vc_widget_invoke_start(g_proxy_tidl_info->rpc_h, pid, silence);
576 if (RPC_PORT_ERROR_NONE != ret) {
577 SLOG(LOG_ERROR, TAG_VCW, "[TIDL ERROR] Request vc widget start : Fail to invoke message, error(%d)", ret);
581 return VC_ERROR_NONE;
584 int vc_widget_tidl_request_stop(int pid)
586 SLOG(LOG_DEBUG, TAG_VCW, "[TIDL] vc_widget_tidl_request_stop");
588 if (NULL == g_proxy_tidl_info) {
589 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to get tidl info");
590 return VC_ERROR_OPERATION_FAILED;
593 if (!g_proxy_tidl_info->connected) {
594 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Not Connected");
595 return VC_ERROR_OPERATION_FAILED;
598 int ret = rpc_port_proxy_vc_widget_proxy_vc_widget_invoke_stop(g_proxy_tidl_info->rpc_h, pid);
599 if (RPC_PORT_ERROR_NONE != ret) {
600 SLOG(LOG_ERROR, TAG_VCW, "[TIDL ERROR] Request vc widget stop : Fail to invoke message, error(%d)", ret);
604 return VC_ERROR_NONE;
607 int vc_widget_tidl_request_cancel(int pid)
609 SLOG(LOG_DEBUG, TAG_VCW, "[TIDL] vc_widget_tidl_request_cancel");
611 if (NULL == g_proxy_tidl_info) {
612 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to get tidl info");
613 return VC_ERROR_OPERATION_FAILED;
616 if (!g_proxy_tidl_info->connected) {
617 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Not Connected");
618 return VC_ERROR_OPERATION_FAILED;
621 int ret = rpc_port_proxy_vc_widget_proxy_vc_widget_invoke_cancel(g_proxy_tidl_info->rpc_h, pid);
622 if (RPC_PORT_ERROR_NONE != ret) {
623 SLOG(LOG_ERROR, TAG_VCW, "[TIDL ERROR] Request vc widget cancel : Fail to invoke message, error(%d)", ret);
627 return VC_ERROR_NONE;