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"
32 #include "tapi_private.h"
34 static void on_response_call_dial(GObject *source_object, GAsyncResult *res, gpointer user_data)
37 GDBusConnection *conn = 0;
38 struct tapi_resp_data *evt_cb_data = user_data;
41 GVariant *dbus_result;
43 conn = G_DBUS_CONNECTION(source_object);
44 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
45 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
47 g_variant_get(dbus_result, "(i)", &result);
49 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, NULL);
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);
67 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
69 g_variant_get(dbus_result, "(ii)", &result, &data.id);
71 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &data);
74 g_variant_unref(dbus_result);
77 static void on_response_call_end(GObject *source_object, GAsyncResult *res, gpointer user_data)
80 GDBusConnection *conn = 0;
81 struct tapi_resp_data *evt_cb_data = user_data;
85 GVariant *dbus_result;
87 conn = G_DBUS_CONNECTION(source_object);
88 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
89 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
91 g_variant_get(dbus_result, "(iii)", &result, &data.id, &data.type);
93 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &data);
96 g_variant_unref(dbus_result);
99 static void on_response_call_hold(GObject *source_object, GAsyncResult *res, gpointer user_data)
102 GDBusConnection *conn = 0;
103 struct tapi_resp_data *evt_cb_data = user_data;
105 TelCallHoldCnf_t data;
107 GVariant *dbus_result;
109 conn = G_DBUS_CONNECTION(source_object);
110 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
111 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
113 g_variant_get(dbus_result, "(ii)", &result, &data.id);
115 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &data);
118 g_variant_unref(dbus_result);
121 static void on_response_call_active(GObject *source_object, GAsyncResult *res, gpointer user_data)
124 GDBusConnection *conn = 0;
125 struct tapi_resp_data *evt_cb_data = user_data;
127 TelCallActiveCnf_t data;
129 GVariant *dbus_result;
131 conn = G_DBUS_CONNECTION(source_object);
132 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
133 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
135 g_variant_get(dbus_result, "(ii)", &result, &data.id);
137 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &data);
140 g_variant_unref(dbus_result);
143 static void on_response_call_swap(GObject *source_object, GAsyncResult *res, gpointer user_data)
146 GDBusConnection *conn = 0;
147 struct tapi_resp_data *evt_cb_data = user_data;
149 TelCallSwapCnf_t data;
151 GVariant *dbus_result;
153 conn = G_DBUS_CONNECTION(source_object);
154 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
155 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
157 g_variant_get(dbus_result, "(ii)", &result, &data.id);
159 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &data);
162 g_variant_unref(dbus_result);
165 static void on_response_call_join(GObject *source_object, GAsyncResult *res, gpointer user_data)
168 GDBusConnection *conn = 0;
169 struct tapi_resp_data *evt_cb_data = user_data;
171 TelCallJoinCnf_t data;
173 GVariant *dbus_result;
175 conn = G_DBUS_CONNECTION(source_object);
176 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
177 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
179 g_variant_get(dbus_result, "(ii)", &result, &data.id);
181 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &data);
184 g_variant_unref(dbus_result);
187 static void on_response_call_split(GObject *source_object, GAsyncResult *res, gpointer user_data)
190 GDBusConnection *conn = 0;
191 struct tapi_resp_data *evt_cb_data = user_data;
193 TelCallSplitCnf_t data;
195 GVariant *dbus_result;
197 conn = G_DBUS_CONNECTION(source_object);
198 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
199 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
201 g_variant_get(dbus_result, "(ii)", &result, &data.id);
203 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &data);
206 g_variant_unref(dbus_result);
209 static void on_response_call_transfer(GObject *source_object, GAsyncResult *res, gpointer user_data)
212 GDBusConnection *conn = 0;
213 struct tapi_resp_data *evt_cb_data = user_data;
215 TelCallTransferCnf_t data;
217 GVariant *dbus_result;
219 conn = G_DBUS_CONNECTION(source_object);
220 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
221 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
223 g_variant_get(dbus_result, "(ii)", &result, &data.id);
225 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &data);
228 g_variant_unref(dbus_result);
231 static void on_response_call_dtmf(GObject *source_object, GAsyncResult *res, gpointer user_data)
234 GDBusConnection *conn = 0;
235 struct tapi_resp_data *evt_cb_data = user_data;
238 GVariant *dbus_result;
240 conn = G_DBUS_CONNECTION(source_object);
241 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
242 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
244 g_variant_get(dbus_result, "(i)", &result);
246 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, NULL);
249 g_variant_unref(dbus_result);
252 static void on_response_call_deflect(GObject *source_object, GAsyncResult *res, gpointer user_data)
255 GDBusConnection *conn = 0;
256 struct tapi_resp_data *evt_cb_data = user_data;
259 GVariant *dbus_result;
261 conn = G_DBUS_CONNECTION(source_object);
262 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
263 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
265 g_variant_get(dbus_result, "(i)", &result);
267 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, NULL);
270 g_variant_unref(dbus_result);
273 static void on_response_get_call_privacy_mode(GObject *source_object, GAsyncResult *res, gpointer user_data)
276 GDBusConnection *conn = 0;
277 struct tapi_resp_data *evt_cb_data = user_data;
279 TelCallGetPrivacyModeResp_t data;
281 GVariant *dbus_result;
283 conn = G_DBUS_CONNECTION(source_object);
284 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
285 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
287 g_variant_get(dbus_result, "(ii)", &result, &data.mode);
289 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &data);
292 g_variant_unref(dbus_result);
295 static void on_response_set_call_privacy_mode(GObject *source_object, GAsyncResult *res, gpointer user_data)
298 GDBusConnection *conn = 0;
299 struct tapi_resp_data *evt_cb_data = user_data;
302 GVariant *dbus_result;
304 conn = G_DBUS_CONNECTION(source_object);
305 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
306 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
308 g_variant_get(dbus_result, "(i)", &result);
310 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, NULL);
313 g_variant_unref(dbus_result);
316 static void on_response_get_call_volume_info(GObject *source_object, GAsyncResult *res, gpointer user_data)
319 GDBusConnection *conn = 0;
320 struct tapi_resp_data *evt_cb_data = user_data;
321 int result = -1, i = 0;
322 TelCallGetVolumeInfoResp_t resp;
324 GVariant *dbus_result = 0, *value = 0;
325 GVariantIter *iter = 0;
326 GVariantIter *iter_row = 0;
327 const gchar *key = 0;
329 memset(&resp, '\0', sizeof(TelCallGetVolumeInfoResp_t));
331 conn = G_DBUS_CONNECTION(source_object);
332 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
333 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
335 g_variant_get(dbus_result, "(aa{sv}i)", &iter, &result);
337 resp.record_num = g_variant_iter_n_children(iter);
339 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
340 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
341 if (!g_strcmp0(key, "type")) {
342 int type = g_variant_get_int32(value);
344 resp.record[i].device = (type & 0xf0);
345 resp.record[i].type = (type & 0x0f);
346 } else if (!g_strcmp0(key, "level")) {
347 resp.record[i].volume = g_variant_get_int32(value);
350 g_variant_iter_free(iter_row);
353 g_variant_iter_free(iter);
355 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &resp);
358 g_variant_unref(dbus_result);
361 static void on_response_set_call_volume_info(GObject *source_object, GAsyncResult *res, gpointer user_data)
364 GDBusConnection *conn = 0;
365 struct tapi_resp_data *evt_cb_data = user_data;
368 GVariant *dbus_result;
370 conn = G_DBUS_CONNECTION(source_object);
371 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
372 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
374 g_variant_get(dbus_result, "(i)", &result);
376 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, NULL);
379 g_variant_unref(dbus_result);
382 static void on_response_set_call_sound_path(GObject *source_object, GAsyncResult *res, gpointer user_data)
385 GDBusConnection *conn = 0;
386 struct tapi_resp_data *evt_cb_data = user_data;
389 GVariant *dbus_result;
391 conn = G_DBUS_CONNECTION(source_object);
392 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
393 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
395 g_variant_get(dbus_result, "(i)", &result);
397 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, NULL);
400 g_variant_unref(dbus_result);
403 static void on_response_set_call_mute_status(GObject *source_object, GAsyncResult *res, gpointer user_data)
406 GDBusConnection *conn = 0;
407 struct tapi_resp_data *evt_cb_data = user_data;
410 GVariant *dbus_result;
412 conn = G_DBUS_CONNECTION(source_object);
413 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
414 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
416 g_variant_get(dbus_result, "(i)", &result);
418 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, NULL);
421 g_variant_unref(dbus_result);
424 static void on_response_get_call_mute_status(GObject *source_object, GAsyncResult *res, gpointer user_data)
427 GDBusConnection *conn = 0;
428 struct tapi_resp_data *evt_cb_data = user_data;
430 TelCallGetMuteStatusResp_t resp;
432 GVariant *dbus_result;
434 conn = G_DBUS_CONNECTION(source_object);
435 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
436 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
438 g_variant_get(dbus_result, "(iii)", &result, &resp.path, &resp.status);
440 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &resp);
443 g_variant_unref(dbus_result);
446 static void on_response_set_preferred_voice_subscription(GObject *source_object, GAsyncResult *res, gpointer user_data)
449 GDBusConnection *conn = 0;
450 struct tapi_resp_data *evt_cb_data = user_data;
453 GVariant *dbus_result;
455 conn = G_DBUS_CONNECTION(source_object);
456 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
457 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
459 g_variant_get(dbus_result, "(i)", &result);
461 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, NULL);
464 g_variant_unref(dbus_result);
467 EXPORT_API int tel_dial_call(TapiHandle *handle, const TelCallDial_t *pParams, tapi_response_cb callback, void *user_data)
469 struct tapi_resp_data *evt_cb_data = 0;
472 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
473 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
474 TAPI_RET_ERR_NUM_IF_FAIL(pParams, TAPI_API_INVALID_PTR);
476 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
478 param = g_variant_new("(iis)", pParams->CallType, pParams->Ecc, pParams->szNumber);
480 msg("[%s] Request Dial. type:[%d]", handle->cp_name, pParams->CallType);
482 g_dbus_connection_call(handle->dbus_connection,
483 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
485 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
486 on_response_call_dial, evt_cb_data);
488 return TAPI_API_SUCCESS;
492 EXPORT_API int tel_answer_call(TapiHandle *handle, unsigned int CallHandle, TelCallAnswerType_t AnsType, tapi_response_cb callback, void *user_data)
494 struct tapi_resp_data *evt_cb_data = 0;
497 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
498 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
500 if (AnsType > TAPI_CALL_ANSWER_HOLD_AND_ACCEPT)
501 return TAPI_API_INVALID_INPUT;
503 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
505 param = g_variant_new("(iii)", CallHandle, AnsType, -1); /* -1 for AnsCallType */
507 msg("[%s] Request Answer. call_handle:[%d], type:[%d]", handle->cp_name, CallHandle, AnsType);
509 g_dbus_connection_call(handle->dbus_connection,
510 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
512 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
513 on_response_call_answer, evt_cb_data);
515 return TAPI_API_SUCCESS;
518 EXPORT_API int tel_end_call(TapiHandle *handle, unsigned int CallHandle, TelCallEndType_t EndType, tapi_response_cb callback, void *user_data)
520 struct tapi_resp_data *evt_cb_data = 0;
523 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
524 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
526 if (EndType > TAPI_CALL_END_HOLD_ALL)
527 return TAPI_API_INVALID_INPUT;
529 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
531 param = g_variant_new("(ii)", CallHandle, EndType);
533 msg("[%s] Request End. call_handle:[%d], type:[%d]", handle->cp_name, CallHandle, EndType);
535 g_dbus_connection_call(handle->dbus_connection,
536 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
538 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
539 on_response_call_end, evt_cb_data);
541 return TAPI_API_SUCCESS;
544 EXPORT_API int tel_hold_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data)
546 struct tapi_resp_data *evt_cb_data = 0;
549 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
550 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
552 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
554 param = g_variant_new("(i)", CallHandle);
556 msg("[%s] Request Hold. call_handle:[%d]", handle->cp_name, CallHandle);
558 g_dbus_connection_call(handle->dbus_connection,
559 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
561 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
562 on_response_call_hold, evt_cb_data);
564 return TAPI_API_SUCCESS;
567 EXPORT_API int tel_active_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data)
569 struct tapi_resp_data *evt_cb_data = 0;
572 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
573 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
575 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
577 param = g_variant_new("(i)", CallHandle);
579 msg("[%s] Request Active. call_handle:[%d]", handle->cp_name, CallHandle);
581 g_dbus_connection_call(handle->dbus_connection,
582 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
584 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
585 on_response_call_active, evt_cb_data);
587 return TAPI_API_SUCCESS;
590 EXPORT_API int tel_swap_call(TapiHandle *handle, unsigned int CallHandle1, unsigned int CallHandle2, tapi_response_cb callback, void *user_data)
592 struct tapi_resp_data *evt_cb_data = 0;
595 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
596 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
598 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
600 param = g_variant_new("(i)", CallHandle1);
602 msg("[%s] Request Swap. call_handle:[%d][%d]", handle->cp_name, CallHandle1, CallHandle2);
604 g_dbus_connection_call(handle->dbus_connection,
605 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
607 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
608 on_response_call_swap, evt_cb_data);
610 return TAPI_API_SUCCESS;
613 EXPORT_API int tel_join_call(TapiHandle *handle, unsigned int CallHandle1, unsigned int CallHandle2, tapi_response_cb callback, void *user_data)
615 struct tapi_resp_data *evt_cb_data = 0;
618 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
619 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
621 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
623 param = g_variant_new("(i)", CallHandle1);
625 msg("[%s] Request Join", handle->cp_name);
627 g_dbus_connection_call(handle->dbus_connection,
628 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
630 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
631 on_response_call_join, evt_cb_data);
633 return TAPI_API_SUCCESS;
636 EXPORT_API int tel_split_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data)
638 struct tapi_resp_data *evt_cb_data = 0;
641 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
642 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
644 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
646 param = g_variant_new("(i)", CallHandle);
648 msg("[%s] Request Split. call_handle:[%d]", handle->cp_name, CallHandle);
650 g_dbus_connection_call(handle->dbus_connection,
651 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
653 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
654 on_response_call_split, evt_cb_data);
656 return TAPI_API_SUCCESS;
659 EXPORT_API int tel_transfer_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data)
661 struct tapi_resp_data *evt_cb_data = 0;
664 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
665 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
667 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
669 param = g_variant_new("(i)", CallHandle);
671 msg("[%s] Request Transfer. call_handle:[%d]", handle->cp_name, CallHandle);
673 g_dbus_connection_call(handle->dbus_connection,
674 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
675 "Transfer", param, 0,
676 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
677 on_response_call_transfer, evt_cb_data);
679 return TAPI_API_SUCCESS;
682 EXPORT_API int tel_start_call_cont_dtmf(TapiHandle *handle, unsigned char dtmf_digit, tapi_response_cb callback, void *user_data)
684 struct tapi_resp_data *evt_cb_data = 0;
687 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
688 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
690 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
692 param = g_variant_new("(y)", dtmf_digit);
694 msg("[%s] Request cont DTMF", handle->cp_name);
696 g_dbus_connection_call(handle->dbus_connection,
697 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
698 "StartContDtmf", param, 0,
699 G_DBUS_CALL_FLAGS_NONE, G_MAXINT, handle->ca,
700 on_response_call_dtmf, evt_cb_data);
702 return TAPI_API_SUCCESS;
705 EXPORT_API int tel_stop_call_cont_dtmf(TapiHandle *handle, tapi_response_cb callback, void *user_data)
707 struct tapi_resp_data *evt_cb_data = 0;
709 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
710 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
712 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
714 msg("[%s] Stop cont DTMF", handle->cp_name);
716 g_dbus_connection_call(handle->dbus_connection,
717 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
718 "StopContDtmf", NULL, 0,
719 G_DBUS_CALL_FLAGS_NONE, G_MAXINT, handle->ca,
720 on_response_call_dtmf, evt_cb_data);
722 return TAPI_API_SUCCESS;
725 EXPORT_API int tel_send_call_burst_dtmf(TapiHandle *handle, const TelCallBurstDtmf_t *info, tapi_response_cb callback, void *user_data)
727 struct tapi_resp_data *evt_cb_data = 0;
730 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
731 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
732 TAPI_RET_ERR_NUM_IF_FAIL(info, TAPI_API_INVALID_PTR);
734 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
736 param = g_variant_new("(sii)", info->dtmf_string, info->pulse_width, info->inter_digit_interval);
738 msg("[%s] Send burst DTMF", handle->cp_name);
740 g_dbus_connection_call(handle->dbus_connection,
741 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
742 "SendBurstDtmf", param, 0,
743 G_DBUS_CALL_FLAGS_NONE, G_MAXINT, handle->ca,
744 on_response_call_dtmf, evt_cb_data);
746 return TAPI_API_SUCCESS;
749 EXPORT_API int tel_deflect_call(TapiHandle *handle, unsigned int CallHandle, const TelCallDeflectDstInfo_t *pInfo, tapi_response_cb callback, void *user_data)
751 struct tapi_resp_data *evt_cb_data = 0;
754 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
755 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
756 TAPI_RET_ERR_NUM_IF_FAIL(pInfo, TAPI_API_INVALID_PTR);
758 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
760 param = g_variant_new("(is)", CallHandle, pInfo->number);
762 msg("[%s] deflect", handle->cp_name);
764 g_dbus_connection_call(handle->dbus_connection,
765 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
767 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
768 on_response_call_deflect, evt_cb_data);
770 return TAPI_API_SUCCESS;
773 EXPORT_API int tel_get_call_status(TapiHandle *handle, int callHandle, TelCallStatus_t *out)
782 gboolean call_direction = FALSE;
784 gboolean call_multiparty_state = FALSE;
785 gboolean volte_call = FALSE;
787 gboolean is_modifiable;
788 gboolean added_to_conference;
789 gchar *audio_codec = NULL;
792 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
793 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
794 TAPI_RET_ERR_NUM_IF_FAIL(out, TAPI_API_INVALID_PTR);
796 param = g_variant_new("(i)", callHandle);
798 dbg("[%s] Func Entrance ", handle->cp_name);
800 gv = g_dbus_connection_call_sync(handle->dbus_connection,
801 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
802 "GetStatus", param, 0, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
805 g_variant_get(gv, "(isibibbbbbsi)", &callHandle,
806 &call_number, &call_type, &call_direction,
807 &call_state, &call_multiparty_state, &volte_call,
808 &is_hd_icon, &is_modifiable, &added_to_conference, &audio_codec, &id);
810 out->CallHandle = (int)callHandle;
811 out->bMoCall = (int)call_direction;
812 strncpy(out->pNumber, call_number, TAPI_CALL_DIALDIGIT_LEN_MAX);
814 dbg("[ check ] call_number : [%s] out->pNumber : [%s]", call_number, out->pNumber);
816 out->CallType = (TelCallType_t)call_type;
817 out->CallState = (TelCallStates_t)call_state;
818 out->bConferenceState = (int)call_multiparty_state;
819 out->bVolteCall = (int)volte_call;
826 dbg("[ error ] fail to get call status : (0x%x)", callHandle);
828 return TAPI_API_OPERATION_FAILED;
831 return TAPI_API_SUCCESS;
834 EXPORT_API int tel_get_call_status_all(TapiHandle *handle, TelCallStatusCallback cb, void *user_data)
837 GVariantIter *iter = 0, *iter_row = 0;
840 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
841 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
842 TAPI_RET_ERR_NUM_IF_FAIL(cb, TAPI_API_INVALID_PTR);
844 dbg("[%s] Func Entrance ", handle->cp_name);
846 gv = g_dbus_connection_call_sync(handle->dbus_connection,
847 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
848 "GetStatusAll", 0, 0, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
850 TelCallStatus_t data;
854 memset(&data, 0x0, sizeof(TelCallStatus_t));
855 g_variant_get(gv, "(aa{sv})", &iter);
857 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
858 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
859 if (!g_strcmp0(key, "call_id"))
860 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);
863 else if (!g_strcmp0(key, "call_type"))
864 data.CallType = (int)g_variant_get_int32(value);
865 else if (!g_strcmp0(key, "call_direction"))
866 data.bMoCall = (int)g_variant_get_boolean(value);
867 else if (!g_strcmp0(key, "call_state"))
868 data.CallState = (int)g_variant_get_int32(value);
869 else if (!g_strcmp0(key, "call_multiparty_state"))
870 data.bConferenceState = (int)g_variant_get_boolean(value);
871 else if (!g_strcmp0(key, "is_volte_call"))
872 data.bVolteCall = (int)g_variant_get_boolean(value);
874 g_variant_iter_free(iter_row);
876 cb(&data, user_data);
878 g_variant_iter_free(iter);
883 if (strstr(gerr->message, "AccessDenied")) {
884 err("Permission denied");
885 return TAPI_API_ACCESS_DENIED;
887 err("[error] fail to get call status (%s)", gerr->message);
888 return TAPI_API_OPERATION_FAILED;
892 return TAPI_API_SUCCESS;
895 EXPORT_API int tel_get_call_privacy_mode(TapiHandle *handle, tapi_response_cb callback, void *user_data)
897 struct tapi_resp_data *evt_cb_data = 0;
899 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
900 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
902 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
904 dbg("[%s] Func Entrance ", handle->cp_name);
906 g_dbus_connection_call(handle->dbus_connection,
907 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
908 "GetPrivacyMode", 0, 0,
909 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
910 on_response_get_call_privacy_mode, evt_cb_data);
912 return TAPI_API_SUCCESS;
915 EXPORT_API int tel_set_call_privacy_mode(TapiHandle *handle, TelCallPrivacyMode_t privacy_mode, tapi_response_cb callback, void *user_data)
917 struct tapi_resp_data *evt_cb_data = 0;
918 GVariant *pParam = 0;
920 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
921 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
923 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
925 pParam = g_variant_new("(i)", privacy_mode);
927 msg("[%s] Set Privacy. mode:[%d]", handle->cp_name, privacy_mode);
929 g_dbus_connection_call(handle->dbus_connection,
930 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
931 "SetPrivacyMode", pParam, 0,
932 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
933 on_response_set_call_privacy_mode, evt_cb_data);
935 return TAPI_API_SUCCESS;
938 EXPORT_API int tel_get_call_volume_info(TapiHandle *handle, TelSoundDevice_t device, TelSoundType_t type, tapi_response_cb callback, void *user_data)
940 struct tapi_resp_data *evt_cb_data = 0;
943 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
944 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
946 TAPI_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_NOT_SUPPORTED(TELEPHONY_FEATURE);
967 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
968 TAPI_RET_ERR_NUM_IF_FAIL(info, TAPI_API_INVALID_PTR);
970 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
972 param = g_variant_new("(iii)", info->device, info->type, info->volume);
974 dbg("[%s] Set Volume Info. device:[%d] type:[%d] volume:[%d] ",
975 handle->cp_name, info->device, info->type, info->volume);
977 g_dbus_connection_call(handle->dbus_connection,
978 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
979 "SetSoundVolumeLevel", param, 0,
980 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
981 on_response_set_call_volume_info, evt_cb_data);
983 return TAPI_API_SUCCESS;
986 EXPORT_API int tel_set_call_sound_path(TapiHandle *handle, TelCallSoundPathInfo_t *info, tapi_response_cb callback, void *user_data)
988 struct tapi_resp_data *evt_cb_data = 0;
991 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
992 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
993 TAPI_RET_ERR_NUM_IF_FAIL(info, TAPI_API_INVALID_PTR);
995 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
997 param = g_variant_new("(ib)", info->path, info->ex_volume);
999 dbg("[%s] Set Sound Path. path:[%d] ex_volume:[%d]", handle->cp_name, info->path, info->ex_volume);
1001 g_dbus_connection_call(handle->dbus_connection,
1002 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1003 "SetSoundPath", param, 0,
1004 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1005 on_response_set_call_sound_path, evt_cb_data);
1007 return TAPI_API_SUCCESS;
1010 EXPORT_API int tel_set_call_mute_status(TapiHandle *handle, TelSoundMuteStatus_t mute, TelSoundMutePath_t path, tapi_response_cb callback, void *user_data)
1012 struct tapi_resp_data *evt_cb_data = 0;
1013 GVariant *param = 0;
1015 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1016 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1018 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1020 param = g_variant_new("(ii)", mute, path);
1022 dbg("[%s] Set Mute. mute:[%d] path:[%d] ", handle->cp_name, mute, path);
1024 g_dbus_connection_call(handle->dbus_connection,
1025 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1026 "SetSoundMuteStatus", param, 0,
1027 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1028 on_response_set_call_mute_status, evt_cb_data);
1030 return TAPI_API_SUCCESS;
1033 EXPORT_API int tel_get_call_mute_status(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1035 struct tapi_resp_data *evt_cb_data = 0;
1037 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1038 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1039 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
1041 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1043 dbg("[%s] Func Entrance ", handle->cp_name);
1045 g_dbus_connection_call(handle->dbus_connection,
1046 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1047 "GetSoundMuteStatus", 0, 0,
1048 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1049 on_response_get_call_mute_status, evt_cb_data);
1051 return TAPI_API_SUCCESS;
1054 EXPORT_API int tel_set_call_preferred_voice_subscription(TapiHandle *handle, TelCallPreferredVoiceSubs_t preferred_subscription,
1055 tapi_response_cb callback, void *user_data)
1057 struct tapi_resp_data *evt_cb_data = NULL;
1058 GVariant *param = NULL;
1060 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1061 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1062 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
1064 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1066 param = g_variant_new("(i)", preferred_subscription);
1068 dbg("[%s] Set Preferred Voice. subs:[%d]", handle->cp_name, preferred_subscription);
1071 g_dbus_connection_call(handle->dbus_connection,
1072 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1073 "SetPreferredVoiceSubscription", param, NULL,
1074 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1075 on_response_set_preferred_voice_subscription, evt_cb_data);
1077 return TAPI_API_SUCCESS;
1080 EXPORT_API int tel_get_call_preferred_voice_subscription(TapiHandle *handle, TelCallPreferredVoiceSubs_t *preferred_subscription)
1082 GError *gerr = NULL;
1083 GVariant *sync_gv = NULL;
1086 TapiResult_t ret = TAPI_API_OPERATION_FAILED;
1088 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1089 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1090 TAPI_RET_ERR_NUM_IF_FAIL(preferred_subscription, TAPI_API_INVALID_PTR);
1092 sync_gv = g_dbus_connection_call_sync(handle->dbus_connection,
1093 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1094 "GetPreferredVoiceSubscription", NULL, NULL,
1095 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1098 g_variant_get(sync_gv, "(ii)", &subs, &result);
1101 *preferred_subscription = subs;
1103 *preferred_subscription = TAPI_CALL_PREFERRED_VOICE_SUBS_UNKNOWN;
1104 dbg("'preferred' Voice Subscription: [%d]", subs);
1106 ret = TAPI_API_SUCCESS;
1107 g_variant_unref(sync_gv);
1109 err("Get 'preferred' Voice Subscription failed: [%s]", gerr->message);
1110 if (strstr(gerr->message, "AccessDenied"))
1111 ret = TAPI_API_ACCESS_DENIED;