4 * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Ja-young Gu <jygu@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
26 #include "tapi_common.h"
27 #include "TapiUtility.h"
31 #include "ITapiCall.h"
33 static void on_response_call_dial(GObject *source_object, GAsyncResult *res, gpointer user_data)
36 GDBusConnection *conn = 0;
37 struct tapi_resp_data *evt_cb_data = user_data;
40 GVariant *dbus_result;
42 conn = G_DBUS_CONNECTION (source_object);
43 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
46 g_variant_get (dbus_result, "(i)", &result);
48 if (evt_cb_data->cb_fn)
49 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
52 g_variant_unref(dbus_result);
55 static void on_response_call_answer(GObject *source_object, GAsyncResult *res, gpointer user_data)
58 GDBusConnection *conn = 0;
59 struct tapi_resp_data *evt_cb_data = user_data;
61 TelCallAnswerCnf_t data;
63 GVariant *dbus_result;
65 conn = G_DBUS_CONNECTION (source_object);
66 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
69 g_variant_get (dbus_result, "(ii)", &result, &data.id);
71 if (evt_cb_data->cb_fn)
72 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
75 g_variant_unref(dbus_result);
78 static void on_response_call_end(GObject *source_object, GAsyncResult *res, gpointer user_data)
81 GDBusConnection *conn = 0;
82 struct tapi_resp_data *evt_cb_data = user_data;
86 GVariant *dbus_result;
88 conn = G_DBUS_CONNECTION (source_object);
89 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
92 g_variant_get (dbus_result, "(iii)", &result, &data.id, &data.type);
94 if (evt_cb_data->cb_fn)
95 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
98 g_variant_unref(dbus_result);
101 static void on_response_call_hold(GObject *source_object, GAsyncResult *res, gpointer user_data)
104 GDBusConnection *conn = 0;
105 struct tapi_resp_data *evt_cb_data = user_data;
107 TelCallHoldCnf_t data;
109 GVariant *dbus_result;
111 conn = G_DBUS_CONNECTION (source_object);
112 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
115 g_variant_get (dbus_result, "(ii)", &result, &data.id);
117 if (evt_cb_data->cb_fn)
118 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
121 g_variant_unref(dbus_result);
124 static void on_response_call_active(GObject *source_object, GAsyncResult *res, gpointer user_data)
127 GDBusConnection *conn = 0;
128 struct tapi_resp_data *evt_cb_data = user_data;
130 TelCallActiveCnf_t data;
132 GVariant *dbus_result;
134 conn = G_DBUS_CONNECTION (source_object);
135 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
138 g_variant_get (dbus_result, "(ii)", &result, &data.id);
140 if (evt_cb_data->cb_fn)
141 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
144 g_variant_unref(dbus_result);
147 static void on_response_call_swap(GObject *source_object, GAsyncResult *res, gpointer user_data)
150 GDBusConnection *conn = 0;
151 struct tapi_resp_data *evt_cb_data = user_data;
153 TelCallSwapCnf_t data;
155 GVariant *dbus_result;
157 conn = G_DBUS_CONNECTION (source_object);
158 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
161 g_variant_get (dbus_result, "(ii)", &result, &data.id);
163 if (evt_cb_data->cb_fn)
164 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
167 g_variant_unref(dbus_result);
170 static void on_response_call_join(GObject *source_object, GAsyncResult *res, gpointer user_data)
173 GDBusConnection *conn = 0;
174 struct tapi_resp_data *evt_cb_data = user_data;
176 TelCallJoinCnf_t data;
178 GVariant *dbus_result;
180 conn = G_DBUS_CONNECTION (source_object);
181 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
184 g_variant_get (dbus_result, "(ii)", &result, &data.id);
186 if (evt_cb_data->cb_fn)
187 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
190 g_variant_unref(dbus_result);
193 static void on_response_call_split(GObject *source_object, GAsyncResult *res, gpointer user_data)
196 GDBusConnection *conn = 0;
197 struct tapi_resp_data *evt_cb_data = user_data;
199 TelCallSplitCnf_t data;
201 GVariant *dbus_result;
203 conn = G_DBUS_CONNECTION (source_object);
204 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
207 g_variant_get (dbus_result, "(ii)", &result, &data.id);
209 if (evt_cb_data->cb_fn)
210 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
213 g_variant_unref(dbus_result);
216 static void on_response_call_transfer(GObject *source_object, GAsyncResult *res, gpointer user_data)
219 GDBusConnection *conn = 0;
220 struct tapi_resp_data *evt_cb_data = user_data;
222 TelCallTransferCnf_t data;
224 GVariant *dbus_result;
226 conn = G_DBUS_CONNECTION (source_object);
227 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
230 g_variant_get (dbus_result, "(ii)", &result, &data.id);
232 if (evt_cb_data->cb_fn)
233 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
236 g_variant_unref(dbus_result);
239 static void on_response_call_dtmf(GObject *source_object, GAsyncResult *res, gpointer user_data)
242 GDBusConnection *conn = 0;
243 struct tapi_resp_data *evt_cb_data = user_data;
246 GVariant *dbus_result;
248 conn = G_DBUS_CONNECTION (source_object);
249 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
252 g_variant_get (dbus_result, "(i)", &result);
254 if (evt_cb_data->cb_fn)
255 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
258 g_variant_unref(dbus_result);
261 static void on_response_call_deflect(GObject *source_object, GAsyncResult *res, gpointer user_data)
264 GDBusConnection *conn = 0;
265 struct tapi_resp_data *evt_cb_data = user_data;
268 GVariant *dbus_result;
270 conn = G_DBUS_CONNECTION (source_object);
271 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
274 g_variant_get (dbus_result, "(i)", &result);
276 if (evt_cb_data->cb_fn)
277 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
280 g_variant_unref(dbus_result);
283 static void on_response_get_call_privacy_mode(GObject *source_object, GAsyncResult *res, gpointer user_data)
286 GDBusConnection *conn = 0;
287 struct tapi_resp_data *evt_cb_data = user_data;
289 TelCallGetPrivacyModeResp_t data;
291 GVariant *dbus_result;
293 conn = G_DBUS_CONNECTION (source_object);
294 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
297 g_variant_get (dbus_result, "(ii)", &result,&data.mode);
299 if (evt_cb_data->cb_fn)
300 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
303 g_variant_unref(dbus_result);
306 static void on_response_set_call_privacy_mode(GObject *source_object, GAsyncResult *res, gpointer user_data)
309 GDBusConnection *conn = 0;
310 struct tapi_resp_data *evt_cb_data = user_data;
313 GVariant *dbus_result;
315 conn = G_DBUS_CONNECTION (source_object);
316 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
319 g_variant_get (dbus_result, "(i)", &result);
321 if (evt_cb_data->cb_fn)
322 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
325 g_variant_unref(dbus_result);
328 static void on_response_get_call_volume_info(GObject *source_object, GAsyncResult *res, gpointer user_data)
331 GDBusConnection *conn = 0;
332 struct tapi_resp_data *evt_cb_data = user_data;
333 int result = -1, i = 0;
334 TelCallGetVolumeInfoResp_t resp;
336 GVariant *dbus_result = 0, *value = 0;
337 GVariantIter *iter = 0;
338 GVariantIter *iter_row = 0;
339 const gchar *key = 0;
341 memset(&resp, '\0', sizeof(TelCallGetVolumeInfoResp_t));
343 conn = G_DBUS_CONNECTION (source_object);
344 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
347 g_variant_get (dbus_result, "(aa{sv}i)", &iter, &result);
349 resp.record_num = g_variant_iter_n_children(iter);
351 while ( g_variant_iter_next(iter, "a{sv}", &iter_row ) ) {
352 while ( g_variant_iter_loop( iter_row, "{sv}", &key, &value ) ) {
354 if ( !g_strcmp0(key, "type") ) {
355 int type = g_variant_get_int32(value);
357 resp.record[i].device = (type & 0xf0);
358 resp.record[i].type = (type & 0x0f);
360 else if ( !g_strcmp0(key, "level") ) {
361 resp.record[i].volume = g_variant_get_int32(value);
364 g_variant_iter_free(iter_row);
367 g_variant_iter_free(iter);
369 if (evt_cb_data->cb_fn)
370 evt_cb_data->cb_fn(evt_cb_data->handle, result, &resp, evt_cb_data->user_data);
373 g_variant_unref(dbus_result);
376 static void on_response_set_call_volume_info(GObject *source_object, GAsyncResult *res, gpointer user_data)
379 GDBusConnection *conn = 0;
380 struct tapi_resp_data *evt_cb_data = user_data;
383 GVariant *dbus_result;
385 conn = G_DBUS_CONNECTION (source_object);
386 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
389 g_variant_get (dbus_result, "(i)", &result);
391 if (evt_cb_data->cb_fn)
392 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
395 g_variant_unref(dbus_result);
398 static void on_response_set_call_sound_path(GObject *source_object, GAsyncResult *res, gpointer user_data)
401 GDBusConnection *conn = 0;
402 struct tapi_resp_data *evt_cb_data = user_data;
405 GVariant *dbus_result;
407 conn = G_DBUS_CONNECTION (source_object);
408 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
411 g_variant_get (dbus_result, "(i)", &result);
413 if (evt_cb_data->cb_fn)
414 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
417 g_variant_unref(dbus_result);
420 static void on_response_set_call_mute_status(GObject *source_object, GAsyncResult *res, gpointer user_data)
423 GDBusConnection *conn = 0;
424 struct tapi_resp_data *evt_cb_data = user_data;
427 GVariant *dbus_result;
429 conn = G_DBUS_CONNECTION (source_object);
430 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
433 g_variant_get (dbus_result, "(i)", &result);
435 if (evt_cb_data->cb_fn)
436 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
439 g_variant_unref(dbus_result);
442 static void on_response_get_call_mute_status(GObject *source_object, GAsyncResult *res, gpointer user_data)
445 GDBusConnection *conn = 0;
446 struct tapi_resp_data *evt_cb_data = user_data;
448 TelCallGetMuteStatusResp_t resp;
450 GVariant *dbus_result;
452 conn = G_DBUS_CONNECTION (source_object);
453 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
456 g_variant_get (dbus_result, "(iii)", &result, &resp.path, &resp.status);
458 if (evt_cb_data->cb_fn)
459 evt_cb_data->cb_fn(evt_cb_data->handle, result, &resp, evt_cb_data->user_data);
462 g_variant_unref(dbus_result);
465 static void on_response_set_preferred_voice_subscription(GObject *source_object, GAsyncResult *res, gpointer user_data)
468 GDBusConnection *conn = 0;
469 struct tapi_resp_data *evt_cb_data = user_data;
472 GVariant *dbus_result;
474 conn = G_DBUS_CONNECTION (source_object);
475 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
478 g_variant_get (dbus_result, "(i)", &result);
480 if (evt_cb_data->cb_fn)
481 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
484 g_variant_unref(dbus_result);
488 EXPORT_API int tel_dial_call(TapiHandle *handle, const TelCallDial_t *pParams, tapi_response_cb callback, void *user_data)
490 struct tapi_resp_data *evt_cb_data = 0;
493 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
494 TAPI_RET_ERR_NUM_IF_FAIL(pParams, TAPI_API_INVALID_PTR);
496 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
498 param = g_variant_new("(iis)", pParams->CallType, pParams->Ecc, pParams->szNumber);
500 msg("[%s] Request Dial. type:[%d]", handle->cp_name, pParams->CallType);
502 g_dbus_connection_call(handle->dbus_connection,
503 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
505 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
506 on_response_call_dial, evt_cb_data );
508 return TAPI_API_SUCCESS;
512 EXPORT_API int tel_answer_call(TapiHandle *handle, unsigned int CallHandle, TelCallAnswerType_t AnsType, tapi_response_cb callback, void *user_data )
514 struct tapi_resp_data *evt_cb_data = 0;
517 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
519 if (AnsType > TAPI_CALL_ANSWER_HOLD_AND_ACCEPT)
520 return TAPI_API_INVALID_INPUT;
522 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
524 param = g_variant_new("(ii)", CallHandle, AnsType);
526 msg("[%s] Request Answer. id:[%d], type:[%d]", handle->cp_name, CallHandle, AnsType);
528 g_dbus_connection_call(handle->dbus_connection,
529 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
531 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
532 on_response_call_answer, evt_cb_data );
534 return TAPI_API_SUCCESS;
537 EXPORT_API int tel_end_call(TapiHandle *handle, unsigned int CallHandle, TelCallEndType_t EndType, tapi_response_cb callback, void *user_data)
539 struct tapi_resp_data *evt_cb_data = 0;
542 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
544 if (EndType > TAPI_CALL_END_HOLD_ALL)
545 return TAPI_API_INVALID_INPUT;
547 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
549 param = g_variant_new("(ii)", CallHandle, EndType);
551 msg("[%s] Request End. id:[%d], type:[%d]", handle->cp_name, CallHandle, EndType);
553 g_dbus_connection_call(handle->dbus_connection,
554 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
556 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
557 on_response_call_end, evt_cb_data );
559 return TAPI_API_SUCCESS;
562 EXPORT_API int tel_hold_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data )
564 struct tapi_resp_data *evt_cb_data = 0;
567 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
569 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
571 param = g_variant_new("(i)", CallHandle);
573 msg("[%s] Request Hold. id:[%d]", handle->cp_name, CallHandle);
575 g_dbus_connection_call(handle->dbus_connection,
576 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
578 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
579 on_response_call_hold, evt_cb_data );
581 return TAPI_API_SUCCESS;
584 EXPORT_API int tel_active_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data )
586 struct tapi_resp_data *evt_cb_data = 0;
589 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
591 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
593 param = g_variant_new("(i)", CallHandle);
595 msg("[%s] Request Active. id:[%d]", handle->cp_name, CallHandle);
597 g_dbus_connection_call(handle->dbus_connection,
598 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
600 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
601 on_response_call_active, evt_cb_data );
603 return TAPI_API_SUCCESS;
606 EXPORT_API int tel_swap_call(TapiHandle *handle, unsigned int CallHandle1, unsigned int CallHandle2, tapi_response_cb callback, void *user_data )
608 struct tapi_resp_data *evt_cb_data = 0;
611 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
613 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
615 param = g_variant_new("(i)", CallHandle1);
617 msg("[%s] Request Swap. id:[%d][%d]", handle->cp_name, CallHandle1, CallHandle2);
619 g_dbus_connection_call(handle->dbus_connection,
620 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
622 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
623 on_response_call_swap, evt_cb_data );
625 return TAPI_API_SUCCESS;
628 EXPORT_API int tel_join_call(TapiHandle *handle, unsigned int CallHandle1, unsigned int CallHandle2, tapi_response_cb callback, void *user_data )
630 struct tapi_resp_data *evt_cb_data = 0;
633 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
635 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
637 param = g_variant_new("(i)", CallHandle1);
639 msg("[%s] Request Join", handle->cp_name);
641 g_dbus_connection_call(handle->dbus_connection,
642 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
644 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
645 on_response_call_join, evt_cb_data );
647 return TAPI_API_SUCCESS;
650 EXPORT_API int tel_split_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data )
652 struct tapi_resp_data *evt_cb_data = 0;
655 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
657 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
659 param = g_variant_new("(i)", CallHandle);
661 msg("[%s] Request Split. id:[%d]", handle->cp_name, CallHandle);
663 g_dbus_connection_call(handle->dbus_connection,
664 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
666 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
667 on_response_call_split, evt_cb_data );
669 return TAPI_API_SUCCESS;
672 EXPORT_API int tel_transfer_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data )
674 struct tapi_resp_data *evt_cb_data = 0;
677 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
679 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
681 param = g_variant_new("(i)", CallHandle);
683 msg("[%s] Request Transfer. id:[%d]", handle->cp_name, CallHandle);
685 g_dbus_connection_call(handle->dbus_connection,
686 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
687 "Transfer", param, 0,
688 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
689 on_response_call_transfer, evt_cb_data );
691 return TAPI_API_SUCCESS;
694 EXPORT_API int tel_start_call_cont_dtmf(TapiHandle *handle, unsigned char dtmf_digit, tapi_response_cb callback, void *user_data )
696 struct tapi_resp_data *evt_cb_data = 0;
699 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
701 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
703 param = g_variant_new("(y)", dtmf_digit);
705 msg("[%s] Request cont DTMF", handle->cp_name);
707 g_dbus_connection_call(handle->dbus_connection,
708 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
709 "StartContDtmf", param, 0,
710 G_DBUS_CALL_FLAGS_NONE, G_MAXINT, handle->ca,
711 on_response_call_dtmf, evt_cb_data );
713 return TAPI_API_SUCCESS;
716 EXPORT_API int tel_stop_call_cont_dtmf(TapiHandle *handle, tapi_response_cb callback, void *user_data )
718 struct tapi_resp_data *evt_cb_data = 0;
720 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
722 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
724 msg("[%s] Stop cont DTMF", handle->cp_name);
726 g_dbus_connection_call(handle->dbus_connection,
727 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
728 "StopContDtmf", NULL, 0,
729 G_DBUS_CALL_FLAGS_NONE, G_MAXINT, handle->ca,
730 on_response_call_dtmf, evt_cb_data );
732 return TAPI_API_SUCCESS;
735 EXPORT_API int tel_send_call_burst_dtmf(TapiHandle *handle, const TelCallBurstDtmf_t *info, tapi_response_cb callback, void *user_data )
737 struct tapi_resp_data *evt_cb_data = 0;
740 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
741 TAPI_RET_ERR_NUM_IF_FAIL(info, TAPI_API_INVALID_PTR);
743 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
745 param = g_variant_new("(sii)", info->dtmf_string, info->pulse_width, info->inter_digit_interval);
747 msg("[%s] Send burst DTMF", handle->cp_name);
749 g_dbus_connection_call(handle->dbus_connection,
750 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
751 "SendBurstDtmf", param, 0,
752 G_DBUS_CALL_FLAGS_NONE, G_MAXINT, handle->ca,
753 on_response_call_dtmf, evt_cb_data );
755 return TAPI_API_SUCCESS;
758 EXPORT_API int tel_deflect_call(TapiHandle *handle, unsigned int CallHandle, const TelCallDeflectDstInfo_t *pInfo, tapi_response_cb callback, void *user_data )
760 struct tapi_resp_data *evt_cb_data = 0;
763 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
764 TAPI_RET_ERR_NUM_IF_FAIL(pInfo, TAPI_API_INVALID_PTR);
766 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
768 param = g_variant_new("(is)", CallHandle, pInfo->number);
770 msg("[%s] deflect", handle->cp_name);
772 g_dbus_connection_call(handle->dbus_connection,
773 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
775 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
776 on_response_call_deflect, evt_cb_data );
778 return TAPI_API_SUCCESS;
781 EXPORT_API int tel_get_call_status(TapiHandle *handle, int call_id, TelCallStatus_t *out )
790 gboolean call_direction = FALSE;
792 gboolean call_multiparty_state = FALSE;
794 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
795 TAPI_RET_ERR_NUM_IF_FAIL(out, TAPI_API_INVALID_PTR);
797 param = g_variant_new("(i)", call_id);
799 dbg("[%s] Func Entrance ", handle->cp_name);
801 gv = g_dbus_connection_call_sync(handle->dbus_connection,
802 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
803 "GetStatus", param, 0, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
806 g_variant_get(gv, "(isibib)", &call_id, &call_number, &call_type, &call_direction, &call_state, &call_multiparty_state);
808 out->CallHandle = (int)call_id;
809 out->bMoCall = (int)call_direction;
810 strncpy( out->pNumber, call_number, TAPI_CALL_DIALDIGIT_LEN_MAX );
812 dbg("[ check ] call_number : [%s] out->pNumber : [%s]", call_number, out->pNumber);
814 out->CallType = (TelCallType_t)call_type;
815 out->CallState = (TelCallStates_t)call_state;
816 out->bConferenceState = (int)call_multiparty_state;
818 g_free( call_number );
819 g_variant_unref (gv);
823 dbg("[ error ] fail to get call status : (0x%x)", call_id);
825 return TAPI_API_OPERATION_FAILED;
828 return TAPI_API_SUCCESS;
831 EXPORT_API int tel_get_call_status_all( TapiHandle *handle, TelCallStatusCallback cb, void *user_data )
834 GVariantIter *iter = 0, *iter_row = 0;
837 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
838 TAPI_RET_ERR_NUM_IF_FAIL(cb, TAPI_API_INVALID_PTR);
840 dbg("[%s] Func Entrance ", handle->cp_name);
842 gv = g_dbus_connection_call_sync(handle->dbus_connection,
843 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
844 "GetStatusAll", 0, 0, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
848 TelCallStatus_t data;
852 g_variant_get(gv, "(aa{sv})", &iter);
854 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
856 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
858 if (!g_strcmp0(key, "call_id")) {
859 data.CallHandle = g_variant_get_int32(value);
861 else if (!g_strcmp0(key, "call_number")) {
862 strncpy(data.pNumber, g_variant_get_string(value, 0), TAPI_CALL_DIALDIGIT_LEN_MAX);
864 else if (!g_strcmp0(key, "call_type")) {
865 data.CallType = (int)g_variant_get_int32(value);
867 else if (!g_strcmp0(key, "call_direction")) {
868 data.bMoCall = (int)g_variant_get_boolean(value);
870 else if (!g_strcmp0(key, "call_state")) {
871 data.CallState = (int)g_variant_get_int32(value);
873 else if (!g_strcmp0(key, "call_multiparty_state")) {
874 data.bConferenceState = (int)g_variant_get_boolean(value);
877 g_variant_iter_free(iter_row);
879 cb( &data, user_data );
881 g_variant_iter_free(iter);
882 g_variant_unref (gv);
886 if (strstr(gerr->message, "No access rights")) {
887 err("Permission denied");
888 return TAPI_API_ACCESS_DENIED;
890 err("[error] fail to get call status (%s)", gerr->message);
891 return TAPI_API_OPERATION_FAILED;
895 return TAPI_API_SUCCESS;
898 EXPORT_API int tel_get_call_privacy_mode(TapiHandle *handle, tapi_response_cb callback, void *user_data )
900 struct tapi_resp_data *evt_cb_data = 0;
902 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
904 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
906 dbg("[%s] Func Entrance ", handle->cp_name);
908 g_dbus_connection_call(handle->dbus_connection,
909 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
910 "GetPrivacyMode", 0, 0,
911 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
912 on_response_get_call_privacy_mode, evt_cb_data );
914 return TAPI_API_SUCCESS;
917 EXPORT_API int tel_set_call_privacy_mode(TapiHandle *handle, TelCallPrivacyMode_t privacy_mode, tapi_response_cb callback, void *user_data )
919 struct tapi_resp_data *evt_cb_data = 0;
920 GVariant *pParam = 0;
922 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
924 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
926 pParam = g_variant_new("(i)", privacy_mode);
928 msg("[%s] Set Privacy. mode:[%d]", handle->cp_name, privacy_mode);
930 g_dbus_connection_call(handle->dbus_connection,
931 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
932 "SetPrivacyMode", pParam, 0,
933 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
934 on_response_set_call_privacy_mode, evt_cb_data );
936 return TAPI_API_SUCCESS;
939 EXPORT_API int tel_get_call_volume_info(TapiHandle *handle, TelSoundDevice_t device, TelSoundType_t type, tapi_response_cb callback, void *user_data )
941 struct tapi_resp_data *evt_cb_data = 0;
944 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
946 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
948 param = g_variant_new("(ii)", device, type);
950 dbg("[%s] Get Volume Info. device:[%d] type:[%d] ", handle->cp_name, device, type);
952 g_dbus_connection_call(handle->dbus_connection,
953 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
954 "GetSoundVolumeLevel", param, 0,
955 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
956 on_response_get_call_volume_info, evt_cb_data );
958 return TAPI_API_SUCCESS;
961 EXPORT_API int tel_set_call_volume_info(TapiHandle *handle, TelCallVolumeInfo_t *info, tapi_response_cb callback, void *user_data )
963 struct tapi_resp_data *evt_cb_data = 0;
966 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
967 TAPI_RET_ERR_NUM_IF_FAIL(info, TAPI_API_INVALID_PTR);
969 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
971 param = g_variant_new("(iii)", info->device, info->type, info->volume);
973 dbg("[%s] Set Volume Info. device:[%d] type:[%d] volume:[%d] ",
974 handle->cp_name, info->device, info->type, info->volume);
976 g_dbus_connection_call(handle->dbus_connection,
977 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
978 "SetSoundVolumeLevel", param, 0,
979 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
980 on_response_set_call_volume_info, evt_cb_data );
982 return TAPI_API_SUCCESS;
985 EXPORT_API int tel_set_call_sound_path(TapiHandle *handle, TelCallSoundPathInfo_t *info, tapi_response_cb callback, void *user_data )
987 struct tapi_resp_data *evt_cb_data = 0;
990 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
991 TAPI_RET_ERR_NUM_IF_FAIL(info, TAPI_API_INVALID_PTR);
993 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
995 param = g_variant_new("(ib)", info->path, info->ex_volume);
997 dbg("[%s] Set Sound Path. path:[%d] ex_volume:[%d]", handle->cp_name, info->path, info->ex_volume);
999 g_dbus_connection_call(handle->dbus_connection,
1000 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1001 "SetSoundPath", param, 0,
1002 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1003 on_response_set_call_sound_path, evt_cb_data );
1005 return TAPI_API_SUCCESS;
1008 EXPORT_API int tel_set_call_mute_status(TapiHandle *handle, TelSoundMuteStatus_t mute, TelSoundMutePath_t path, tapi_response_cb callback, void *user_data )
1010 struct tapi_resp_data *evt_cb_data = 0;
1011 GVariant *param = 0;
1013 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1015 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1017 param = g_variant_new("(ii)", mute, path);
1019 dbg("[%s] Set Mute. mute:[%d] path:[%d] ", handle->cp_name, mute, path);
1021 g_dbus_connection_call(handle->dbus_connection,
1022 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1023 "SetSoundMuteStatus", param, 0,
1024 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1025 on_response_set_call_mute_status, evt_cb_data );
1027 return TAPI_API_SUCCESS;
1030 EXPORT_API int tel_get_call_mute_status(TapiHandle *handle, tapi_response_cb callback, void *user_data )
1032 struct tapi_resp_data *evt_cb_data = 0;
1034 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1035 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
1037 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1039 dbg("[%s] Func Entrance ", handle->cp_name);
1041 g_dbus_connection_call(handle->dbus_connection,
1042 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1043 "GetSoundMuteStatus", 0, 0,
1044 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1045 on_response_get_call_mute_status, evt_cb_data );
1047 return TAPI_API_SUCCESS;
1050 EXPORT_API int tel_set_call_preferred_voice_subscription(TapiHandle *handle, TelCallPreferredVoiceSubs_t preferred_subscription,
1051 tapi_response_cb callback, void *user_data)
1053 struct tapi_resp_data *evt_cb_data = NULL;
1054 GVariant *param = NULL;
1056 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1057 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
1059 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1061 param = g_variant_new("(i)", preferred_subscription);
1063 dbg("[%s] Set Preferred Voice. subs:[%d]", handle->cp_name, preferred_subscription);
1066 g_dbus_connection_call(handle->dbus_connection,
1067 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1068 "SetPreferredVoiceSubscription", param, NULL,
1069 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1070 on_response_set_preferred_voice_subscription, evt_cb_data);
1072 return TAPI_API_SUCCESS;
1075 EXPORT_API int tel_get_call_preferred_voice_subscription(TapiHandle *handle, TelCallPreferredVoiceSubs_t *preferred_subscription)
1077 GError *gerr = NULL;
1078 GVariant *sync_gv = NULL;
1081 TapiResult_t ret = TAPI_API_OPERATION_FAILED;
1083 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1084 TAPI_RET_ERR_NUM_IF_FAIL(preferred_subscription, TAPI_API_INVALID_PTR);
1086 sync_gv = g_dbus_connection_call_sync(handle->dbus_connection,
1087 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1088 "GetPreferredVoiceSubscription", NULL, NULL,
1089 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1092 g_variant_get(sync_gv, "(ii)", &subs, &result);
1095 *preferred_subscription = subs;
1097 *preferred_subscription = TAPI_CALL_PREFERRED_VOICE_SUBS_UNKNOWN;
1098 dbg("'preferred' Voice Subscription: [%d]", subs);
1100 ret = TAPI_API_SUCCESS;
1102 err("Get 'preferred' Voice Subscription failed: [%s]", gerr->message);