4 * Copyright (c) 2011 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);
47 if (evt_cb_data->cb_fn)
48 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
57 g_variant_get (dbus_result, "(i)", &result);
59 if (evt_cb_data->cb_fn)
60 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
65 static void on_response_call_answer(GObject *source_object, GAsyncResult *res, gpointer user_data)
68 GDBusConnection *conn = 0;
69 struct tapi_resp_data *evt_cb_data = user_data;
71 TelCallAnswerCnf_t data;
73 GVariant *dbus_result;
75 conn = G_DBUS_CONNECTION (source_object);
76 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
80 if (evt_cb_data->cb_fn)
81 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
90 g_variant_get (dbus_result, "(ii)", &result, &data.id);
92 if (evt_cb_data->cb_fn)
93 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
98 static void on_response_call_end(GObject *source_object, GAsyncResult *res, gpointer user_data)
101 GDBusConnection *conn = 0;
102 struct tapi_resp_data *evt_cb_data = user_data;
104 TelCallEndCnf_t data;
106 GVariant *dbus_result;
108 conn = G_DBUS_CONNECTION (source_object);
109 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
113 if (evt_cb_data->cb_fn)
114 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
123 g_variant_get (dbus_result, "(iii)", &result, &data.id, &data.type);
125 if (evt_cb_data->cb_fn)
126 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
131 static void on_response_call_hold(GObject *source_object, GAsyncResult *res, gpointer user_data)
134 GDBusConnection *conn = 0;
135 struct tapi_resp_data *evt_cb_data = user_data;
137 TelCallHoldCnf_t data;
139 GVariant *dbus_result;
141 conn = G_DBUS_CONNECTION (source_object);
142 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
146 if (evt_cb_data->cb_fn)
147 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
156 g_variant_get (dbus_result, "(ii)", &result, &data.id);
158 if (evt_cb_data->cb_fn)
159 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
164 static void on_response_call_active(GObject *source_object, GAsyncResult *res, gpointer user_data)
167 GDBusConnection *conn = 0;
168 struct tapi_resp_data *evt_cb_data = user_data;
170 TelCallActiveCnf_t data;
172 GVariant *dbus_result;
174 conn = G_DBUS_CONNECTION (source_object);
175 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
179 if (evt_cb_data->cb_fn)
180 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
189 g_variant_get (dbus_result, "(ii)", &result, &data.id);
191 if (evt_cb_data->cb_fn)
192 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
197 static void on_response_call_swap(GObject *source_object, GAsyncResult *res, gpointer user_data)
200 GDBusConnection *conn = 0;
201 struct tapi_resp_data *evt_cb_data = user_data;
203 TelCallSwapCnf_t data;
205 GVariant *dbus_result;
207 conn = G_DBUS_CONNECTION (source_object);
208 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
212 if (evt_cb_data->cb_fn)
213 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
222 g_variant_get (dbus_result, "(ii)", &result, &data.id);
224 if (evt_cb_data->cb_fn)
225 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
230 static void on_response_call_join(GObject *source_object, GAsyncResult *res, gpointer user_data)
233 GDBusConnection *conn = 0;
234 struct tapi_resp_data *evt_cb_data = user_data;
236 TelCallJoinCnf_t data;
238 GVariant *dbus_result;
240 conn = G_DBUS_CONNECTION (source_object);
241 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
245 if (evt_cb_data->cb_fn)
246 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
255 g_variant_get (dbus_result, "(ii)", &result, &data.id);
257 if (evt_cb_data->cb_fn)
258 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
263 static void on_response_call_split(GObject *source_object, GAsyncResult *res, gpointer user_data)
266 GDBusConnection *conn = 0;
267 struct tapi_resp_data *evt_cb_data = user_data;
269 TelCallSplitCnf_t data;
271 GVariant *dbus_result;
273 conn = G_DBUS_CONNECTION (source_object);
274 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
278 if (evt_cb_data->cb_fn)
279 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
288 g_variant_get (dbus_result, "(ii)", &result, &data.id);
290 if (evt_cb_data->cb_fn)
291 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
296 static void on_response_call_transfer(GObject *source_object, GAsyncResult *res, gpointer user_data)
299 GDBusConnection *conn = 0;
300 struct tapi_resp_data *evt_cb_data = user_data;
302 TelCallTransferCnf_t data;
304 GVariant *dbus_result;
306 conn = G_DBUS_CONNECTION (source_object);
307 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
311 if (evt_cb_data->cb_fn)
312 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
321 g_variant_get (dbus_result, "(ii)", &result, &data.id);
323 if (evt_cb_data->cb_fn)
324 evt_cb_data->cb_fn(evt_cb_data->handle, result, &data, evt_cb_data->user_data);
329 static void on_response_call_dtmf(GObject *source_object, GAsyncResult *res, gpointer user_data)
332 GDBusConnection *conn = 0;
333 struct tapi_resp_data *evt_cb_data = user_data;
336 GVariant *dbus_result;
338 conn = G_DBUS_CONNECTION (source_object);
339 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
343 if (evt_cb_data->cb_fn)
344 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
353 g_variant_get (dbus_result, "(i)", &result);
355 if (evt_cb_data->cb_fn)
356 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
361 static void on_response_call_deflect(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);
375 if (evt_cb_data->cb_fn)
376 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
385 g_variant_get (dbus_result, "(i)", &result);
387 if (evt_cb_data->cb_fn)
388 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
393 static void on_response_get_call_volume_info(GObject *source_object, GAsyncResult *res, gpointer user_data)
396 GDBusConnection *conn = 0;
397 struct tapi_resp_data *evt_cb_data = user_data;
398 int result = -1, i = 0;
399 TelCallGetVolumeInfoResp_t resp;
401 GVariant *dbus_result = 0, *value = 0;
402 GVariantIter *iter = 0;
403 GVariantIter *iter_row = 0;
404 const gchar *key = 0;
406 memset(&resp, '\0', sizeof(TelCallGetVolumeInfoResp_t));
408 conn = G_DBUS_CONNECTION (source_object);
409 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
413 if (evt_cb_data->cb_fn)
414 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
423 g_variant_get (dbus_result, "(aa{sv}i)", &iter, &result);
425 resp.record_num = g_variant_iter_n_children(iter);
427 while ( g_variant_iter_next(iter, "a{sv}", &iter_row ) ) {
428 while ( g_variant_iter_loop( iter_row, "{sv}", &key, &value ) ) {
430 if ( !g_strcmp0(key, "type") ) {
431 int type = g_variant_get_int32(value);
433 resp.record[i].device = (type & 0xf0);
434 resp.record[i].type = (type & 0x0f);
437 if ( !g_strcmp0(key, "level") ) {
438 resp.record[i].volume = g_variant_get_int32(value);
442 g_variant_iter_free(iter_row);
444 g_variant_iter_free(iter);
446 if (evt_cb_data->cb_fn)
447 evt_cb_data->cb_fn(evt_cb_data->handle, result, &resp, evt_cb_data->user_data);
452 static void on_response_set_call_volume_info(GObject *source_object, GAsyncResult *res, gpointer user_data)
455 GDBusConnection *conn = 0;
456 struct tapi_resp_data *evt_cb_data = user_data;
459 GVariant *dbus_result;
461 conn = G_DBUS_CONNECTION (source_object);
462 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
466 if (evt_cb_data->cb_fn)
467 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
476 g_variant_get (dbus_result, "(i)", &result);
478 if (evt_cb_data->cb_fn)
479 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
484 static void on_response_set_call_sound_path(GObject *source_object, GAsyncResult *res, gpointer user_data)
487 GDBusConnection *conn = 0;
488 struct tapi_resp_data *evt_cb_data = user_data;
491 GVariant *dbus_result;
493 conn = G_DBUS_CONNECTION (source_object);
494 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
498 if (evt_cb_data->cb_fn)
499 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
508 g_variant_get (dbus_result, "(i)", &result);
510 if (evt_cb_data->cb_fn)
511 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
516 static void on_response_set_call_mute_status(GObject *source_object, GAsyncResult *res, gpointer user_data)
519 GDBusConnection *conn = 0;
520 struct tapi_resp_data *evt_cb_data = user_data;
523 GVariant *dbus_result;
525 conn = G_DBUS_CONNECTION (source_object);
526 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
530 if (evt_cb_data->cb_fn)
531 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
540 g_variant_get (dbus_result, "(i)", &result);
542 if (evt_cb_data->cb_fn)
543 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
548 static void on_response_get_call_mute_status(GObject *source_object, GAsyncResult *res, gpointer user_data)
551 GDBusConnection *conn = 0;
552 struct tapi_resp_data *evt_cb_data = user_data;
554 TelCallGetMuteStatusResp_t resp;
556 GVariant *dbus_result;
558 conn = G_DBUS_CONNECTION (source_object);
559 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
563 if (evt_cb_data->cb_fn)
564 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
573 g_variant_get (dbus_result, "(iii)", &result, &resp.path, &resp.status);
575 if (evt_cb_data->cb_fn)
576 evt_cb_data->cb_fn(evt_cb_data->handle, result, &resp, evt_cb_data->user_data);
581 static void on_response_set_call_sound_recording(GObject *source_object, GAsyncResult *res, gpointer user_data)
584 GDBusConnection *conn = 0;
585 struct tapi_resp_data *evt_cb_data = user_data;
588 GVariant *dbus_result;
590 conn = G_DBUS_CONNECTION (source_object);
591 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
595 if (evt_cb_data->cb_fn)
596 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
605 g_variant_get (dbus_result, "(i)", &result);
607 if (evt_cb_data->cb_fn)
608 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
613 static void on_response_set_call_sound_equalization(GObject *source_object, GAsyncResult *res, gpointer user_data)
616 GDBusConnection *conn = 0;
617 struct tapi_resp_data *evt_cb_data = user_data;
620 GVariant *dbus_result;
622 conn = G_DBUS_CONNECTION (source_object);
623 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
627 if (evt_cb_data->cb_fn)
628 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
637 g_variant_get (dbus_result, "(i)", &result);
639 if (evt_cb_data->cb_fn)
640 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
645 static void on_response_set_call_sound_noise_reduction(GObject *source_object, GAsyncResult *res, gpointer user_data)
648 GDBusConnection *conn = 0;
649 struct tapi_resp_data *evt_cb_data = user_data;
652 GVariant *dbus_result;
654 conn = G_DBUS_CONNECTION (source_object);
655 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
659 if (evt_cb_data->cb_fn)
660 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
669 g_variant_get (dbus_result, "(i)", &result);
671 if (evt_cb_data->cb_fn)
672 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
677 static void on_response_set_call_sound_clock_status(GObject *source_object, GAsyncResult *res, gpointer user_data)
680 GDBusConnection *conn = 0;
681 struct tapi_resp_data *evt_cb_data = user_data;
684 GVariant *dbus_result;
686 conn = G_DBUS_CONNECTION (source_object);
687 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
691 if (evt_cb_data->cb_fn)
692 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
701 g_variant_get (dbus_result, "(i)", &result);
703 if (evt_cb_data->cb_fn)
704 evt_cb_data->cb_fn(evt_cb_data->handle, result, 0, evt_cb_data->user_data);
710 EXPORT_API int tel_dial_call(TapiHandle *handle, const TelCallDial_t *pParams, tapi_response_cb callback, void *user_data)
712 struct tapi_resp_data *evt_cb_data = 0;
715 dbg("Func Entrance ");
717 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
718 TAPI_RET_ERR_NUM_IF_FAIL(pParams, TAPI_API_INVALID_PTR);
720 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
722 param = g_variant_new("(iis)", pParams->CallType, pParams->Ecc, pParams->szNumber);
724 g_dbus_connection_call(handle->dbus_connection,
725 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
727 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
728 on_response_call_dial, evt_cb_data );
730 return TAPI_API_SUCCESS;
734 EXPORT_API int tel_answer_call(TapiHandle *handle, unsigned int CallHandle, TelCallAnswerType_t AnsType, tapi_response_cb callback, void *user_data )
736 struct tapi_resp_data *evt_cb_data = 0;
739 dbg("Func Entrance ");
741 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
743 if (AnsType > TAPI_CALL_ANSWER_HOLD_AND_ACCEPT)
744 return TAPI_API_INVALID_INPUT;
746 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
748 param = g_variant_new("(ii)", CallHandle, AnsType);
750 g_dbus_connection_call(handle->dbus_connection,
751 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
753 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
754 on_response_call_answer, evt_cb_data );
756 return TAPI_API_SUCCESS;
759 EXPORT_API int tel_end_call(TapiHandle *handle, unsigned int CallHandle, TelCallEndType_t EndType, tapi_response_cb callback, void *user_data)
761 struct tapi_resp_data *evt_cb_data = 0;
764 dbg("Func Entrance ");
766 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
768 if (EndType > TAPI_CALL_END_HOLD_ALL)
769 return TAPI_API_INVALID_INPUT;
771 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
773 param = g_variant_new("(ii)", CallHandle, EndType);
775 g_dbus_connection_call(handle->dbus_connection,
776 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
778 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
779 on_response_call_end, evt_cb_data );
781 return TAPI_API_SUCCESS;
784 EXPORT_API int tel_hold_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data )
786 struct tapi_resp_data *evt_cb_data = 0;
789 dbg("Func Entrance ");
791 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
793 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
795 param = g_variant_new("(i)", CallHandle);
797 g_dbus_connection_call(handle->dbus_connection,
798 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
800 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
801 on_response_call_hold, evt_cb_data );
803 return TAPI_API_SUCCESS;
806 EXPORT_API int tel_active_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data )
808 struct tapi_resp_data *evt_cb_data = 0;
811 dbg("Func Entrance ");
813 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
815 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
817 param = g_variant_new("(i)", CallHandle);
819 g_dbus_connection_call(handle->dbus_connection,
820 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
822 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
823 on_response_call_active, evt_cb_data );
825 return TAPI_API_SUCCESS;
828 EXPORT_API int tel_swap_call(TapiHandle *handle, unsigned int CallHandle1, unsigned int CallHandle2, tapi_response_cb callback, void *user_data )
830 struct tapi_resp_data *evt_cb_data = 0;
833 dbg("Func Entrance ");
835 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
837 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
839 param = g_variant_new("(i)", CallHandle1);
841 g_dbus_connection_call(handle->dbus_connection,
842 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
844 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
845 on_response_call_swap, evt_cb_data );
847 return TAPI_API_SUCCESS;
850 EXPORT_API int tel_join_call(TapiHandle *handle, unsigned int CallHandle1, unsigned int CallHandle2, tapi_response_cb callback, void *user_data )
852 struct tapi_resp_data *evt_cb_data = 0;
855 dbg("Func Entrance ");
857 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
859 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
861 param = g_variant_new("(i)", CallHandle1);
863 g_dbus_connection_call(handle->dbus_connection,
864 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
866 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
867 on_response_call_join, evt_cb_data );
869 return TAPI_API_SUCCESS;
872 EXPORT_API int tel_split_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data )
874 struct tapi_resp_data *evt_cb_data = 0;
877 dbg("Func Entrance ");
879 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
881 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
883 param = g_variant_new("(i)", CallHandle);
885 g_dbus_connection_call(handle->dbus_connection,
886 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
888 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
889 on_response_call_split, evt_cb_data );
891 return TAPI_API_SUCCESS;
894 EXPORT_API int tel_transfer_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data )
896 struct tapi_resp_data *evt_cb_data = 0;
899 dbg("Func Entrance ");
901 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
903 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
905 param = g_variant_new("(i)", CallHandle);
907 g_dbus_connection_call(handle->dbus_connection,
908 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
909 "Transfer", param, 0,
910 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
911 on_response_call_transfer, evt_cb_data );
913 return TAPI_API_SUCCESS;
916 EXPORT_API int tel_activate_call_ccbs(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data )
918 return TAPI_API_SUCCESS;
921 EXPORT_API int tel_call_dtmf(TapiHandle *handle, const char *pDtmfString, tapi_response_cb callback, void *user_data )
923 struct tapi_resp_data *evt_cb_data = 0;
926 dbg("Func Entrance ");
928 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
929 TAPI_RET_ERR_NUM_IF_FAIL(pDtmfString, TAPI_API_INVALID_PTR);
931 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
933 param = g_variant_new("(s)", pDtmfString);
935 g_dbus_connection_call(handle->dbus_connection,
936 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
938 G_DBUS_CALL_FLAGS_NONE, G_MAXINT, handle->ca,
939 on_response_call_dtmf, evt_cb_data );
941 return TAPI_API_SUCCESS;
944 EXPORT_API int tel_deflect_call(TapiHandle *handle, unsigned int CallHandle, const TelCallDeflectDstInfo_t *pInfo, tapi_response_cb callback, void *user_data )
946 struct tapi_resp_data *evt_cb_data = 0;
949 dbg("Func Entrance ");
951 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
952 TAPI_RET_ERR_NUM_IF_FAIL(pInfo, TAPI_API_INVALID_PTR);
954 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
956 param = g_variant_new("(is)", CallHandle, pInfo->number);
958 g_dbus_connection_call(handle->dbus_connection,
959 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
961 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
962 on_response_call_deflect, evt_cb_data );
964 return TAPI_API_SUCCESS;
967 EXPORT_API int tel_get_call_status(TapiHandle *handle, int call_id, TelCallStatus_t *out )
976 gboolean call_direction = FALSE;
978 gboolean call_multiparty_state = FALSE;
980 dbg("Func Entrance ");
982 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
983 TAPI_RET_ERR_NUM_IF_FAIL(out, TAPI_API_INVALID_PTR);
985 param = g_variant_new("(i)", call_id);
987 gv = g_dbus_connection_call_sync(handle->dbus_connection,
988 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
989 "GetStatus", param, 0, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
992 g_variant_get(gv, "(isibib)", &call_id, &call_number, &call_type, &call_direction, &call_state, &call_multiparty_state);
994 out->CallHandle = (int)call_id;
995 out->bMoCall = (int)call_direction;
996 strncpy( out->pNumber, call_number, TAPI_CALL_DIALDIGIT_LEN_MAX );
998 dbg("[ check ] call_number : %s", call_number);
999 dbg("[ check ] out->pNumber : %s", out->pNumber);
1001 out->CallType = (TelCallType_t)call_type;
1002 out->CallState = (TelCallStates_t)call_state;
1003 out->bConferenceState = (int)call_multiparty_state;
1005 g_free( call_number );
1008 dbg("[ error ] fail to get call status : (0x%x)", call_id);
1010 return TAPI_API_OPERATION_FAILED;
1013 return TAPI_API_SUCCESS;
1016 EXPORT_API int tel_get_call_status_all( TapiHandle *handle, TelCallStatusCallback cb, void *user_data )
1019 GVariantIter *iter = 0, *iter_row = 0;
1022 dbg("Func Entrance ");
1024 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1025 TAPI_RET_ERR_NUM_IF_FAIL(cb, TAPI_API_INVALID_PTR);
1027 gv = g_dbus_connection_call_sync(handle->dbus_connection,
1028 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1029 "GetStatusAll", 0, 0, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
1033 TelCallStatus_t data;
1035 GVariant *value = 0;
1037 g_variant_get(gv, "(aa{sv})", &iter);
1039 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
1041 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
1043 if (!g_strcmp0(key, "call_id")) {
1044 data.CallHandle = g_variant_get_int32(value);
1046 if (!g_strcmp0(key, "call_number")) {
1047 strncpy(data.pNumber, g_variant_get_string(value, 0), TAPI_CALL_DIALDIGIT_LEN_MAX);
1049 if (!g_strcmp0(key, "call_type")) {
1050 data.CallType = (int)g_variant_get_int32(value);
1052 if (!g_strcmp0(key, "call_direction")) {
1053 data.bMoCall = (int)g_variant_get_boolean(value);
1055 if (!g_strcmp0(key, "call_state")) {
1056 data.CallState = (int)g_variant_get_int32(value);
1058 if (!g_strcmp0(key, "call_multiparty_state")) {
1059 data.bConferenceState = (int)g_variant_get_boolean(value);
1064 g_variant_iter_free(iter_row);
1066 cb( &data, user_data );
1068 g_variant_iter_free(iter);
1071 dbg("[ error ] fail to get call status");
1072 return TAPI_API_OPERATION_FAILED;
1076 return TAPI_API_SUCCESS;
1079 EXPORT_API int tel_get_call_act_line(TapiHandle *handle, tapi_response_cb callback, void *user_data )
1081 return TAPI_API_SUCCESS;
1084 EXPORT_API int tel_set_call_act_line(TapiHandle *handle, TelCallActiveLine_t active_line, tapi_response_cb callback, void *user_data )
1086 return TAPI_API_SUCCESS;
1089 /*================================================================================================*/
1091 EXPORT_API int tel_get_call_duration(TapiHandle *handle, unsigned int CallHandle, unsigned int *pDurationInSecs)
1093 return TAPI_API_SUCCESS;
1096 EXPORT_API int tel_get_call_conf_list(TapiHandle *handle, unsigned int CallHandle, unsigned int *pCallList, int *pNoOfCalls)
1098 return TAPI_API_SUCCESS;
1101 EXPORT_API int tel_get_call_privacy_mode(TapiHandle *handle, TelCallPrivacyType_t PrivacyType, tapi_response_cb callback, void *user_data )
1103 return TAPI_API_SUCCESS;
1106 EXPORT_API int tel_set_call_privacy_mode(TapiHandle *handle, TelCallVoicePrivacyInfo_t PrivacyInfo, tapi_response_cb callback, void *user_data )
1108 return TAPI_API_SUCCESS;
1111 EXPORT_API int tel_exe_call_flash_info(TapiHandle *handle, const char *pDialNumber, tapi_response_cb callback, void *user_data )
1113 return TAPI_API_SUCCESS;
1116 EXPORT_API int tel_exit_call_emergency_mode(TapiHandle *handle, tapi_response_cb callback, void *user_data )
1118 return TAPI_API_SUCCESS;
1121 EXPORT_API int tel_get_call_time(TapiHandle *handle, unsigned short req_mask, tapi_response_cb callback, void *user_data )
1123 return TAPI_API_SUCCESS;
1126 EXPORT_API int tel_get_call_volume_info(TapiHandle *handle, TelSoundDevice_t device, TelSoundType_t type, tapi_response_cb callback, void *user_data )
1128 struct tapi_resp_data *evt_cb_data = 0;
1129 GVariant *param = 0;
1131 dbg("Func Entrance ");
1133 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1135 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1137 param = g_variant_new("(ii)", device, type);
1139 g_dbus_connection_call(handle->dbus_connection,
1140 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1141 "GetSoundVolumeLevel", param, 0,
1142 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1143 on_response_get_call_volume_info, evt_cb_data );
1145 return TAPI_API_SUCCESS;
1148 EXPORT_API int tel_set_call_volume_info(TapiHandle *handle, TelCallVolumeInfo_t *info, tapi_response_cb callback, void *user_data )
1150 struct tapi_resp_data *evt_cb_data = 0;
1151 GVariant *param = 0;
1153 dbg("Func Entrance ");
1155 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1156 TAPI_RET_ERR_NUM_IF_FAIL(info, TAPI_API_INVALID_PTR);
1158 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1160 param = g_variant_new("(iii)", info->device, info->type, info->volume);
1162 g_dbus_connection_call(handle->dbus_connection,
1163 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1164 "SetSoundVolumeLevel", param, 0,
1165 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1166 on_response_set_call_volume_info, evt_cb_data );
1168 return TAPI_API_SUCCESS;
1171 EXPORT_API int tel_set_call_sound_path(TapiHandle *handle, TelCallSoundPathInfo_t *info, tapi_response_cb callback, void *user_data )
1173 struct tapi_resp_data *evt_cb_data = 0;
1174 GVariant *param = 0;
1176 dbg("Func Entrance ");
1178 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1179 TAPI_RET_ERR_NUM_IF_FAIL(info, TAPI_API_INVALID_PTR);
1181 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1183 param = g_variant_new("(ib)", info->path, info->ex_volume);
1185 g_dbus_connection_call(handle->dbus_connection,
1186 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1187 "SetSoundPath", param, 0,
1188 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1189 on_response_set_call_sound_path, evt_cb_data );
1191 return TAPI_API_SUCCESS;
1194 EXPORT_API int tel_set_call_mute_status(TapiHandle *handle, TelSoundMuteStatus_t mute, TelSoundMutePath_t path, tapi_response_cb callback, void *user_data )
1196 struct tapi_resp_data *evt_cb_data = 0;
1197 GVariant *param = 0;
1199 dbg("Func Entrance ");
1201 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1203 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1205 param = g_variant_new("(ii)", mute, path);
1207 g_dbus_connection_call(handle->dbus_connection,
1208 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1209 "SetSoundMuteStatus", param, 0,
1210 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1211 on_response_set_call_mute_status, evt_cb_data );
1213 return TAPI_API_SUCCESS;
1216 EXPORT_API int tel_get_call_mute_status(TapiHandle *handle, tapi_response_cb callback, void *user_data )
1218 struct tapi_resp_data *evt_cb_data = 0;
1220 dbg("Func Entrance ");
1222 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1223 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
1225 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1227 g_dbus_connection_call(handle->dbus_connection,
1228 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1229 "GetSoundMuteStatus", 0, 0,
1230 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1231 on_response_get_call_mute_status, evt_cb_data );
1233 return TAPI_API_SUCCESS;
1236 EXPORT_API int tel_set_call_sound_recording(TapiHandle *handle, TelSoundRecording_t *on, tapi_response_cb callback, void *user_data)
1238 struct tapi_resp_data *evt_cb_data = 0;
1239 GVariant *param = 0;
1241 dbg("Func Entrance ");
1243 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1245 param = g_variant_new("(i)", *on);
1247 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1249 g_dbus_connection_call(handle->dbus_connection,
1250 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1251 "SetSoundRecording", param, 0,
1252 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1253 on_response_set_call_sound_recording, evt_cb_data );
1255 return TAPI_API_SUCCESS;
1258 EXPORT_API int tel_set_call_sound_equalization(TapiHandle *handle, TelCallSoundEqualization_t *eq, tapi_response_cb callback, void *user_data)
1260 struct tapi_resp_data *evt_cb_data = 0;
1261 GVariant *param = 0;
1264 dbg("Func Entrance ");
1266 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1267 TAPI_RET_ERR_NUM_IF_FAIL(eq, TAPI_API_INVALID_PTR);
1269 eq_param = (char*)eq->parameter;
1271 param = g_variant_new("(iis)", eq->mode, eq->direction, eq_param);
1273 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1275 g_dbus_connection_call(handle->dbus_connection,
1276 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1277 "SetSoundEqualization", param, 0,
1278 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1279 on_response_set_call_sound_equalization, evt_cb_data );
1281 return TAPI_API_SUCCESS;
1284 EXPORT_API int tel_set_call_sound_noise_reduction(TapiHandle *handle, TelSoundNoiseReduction_t noise, tapi_response_cb callback, void *user_data)
1286 struct tapi_resp_data *evt_cb_data = 0;
1287 GVariant *param = 0;
1289 dbg("Func Entrance ");
1291 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1293 param = g_variant_new("(i)", noise);
1295 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1297 g_dbus_connection_call(handle->dbus_connection,
1298 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1299 "SetSoundNoiseReduction", param, 0,
1300 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1301 on_response_set_call_sound_noise_reduction, evt_cb_data );
1303 return TAPI_API_SUCCESS;
1306 EXPORT_API int tel_set_call_sound_clock_status(TapiHandle *handle, gboolean status, tapi_response_cb callback, void *user_data )
1308 struct tapi_resp_data *evt_cb_data = 0;
1309 GVariant *param = 0;
1311 dbg("Func Entrance");
1313 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1315 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1317 param = g_variant_new("(b)", status);
1319 g_dbus_connection_call(handle->dbus_connection,
1320 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_CALL_INTERFACE,
1321 "SetSoundClockStatus", param, 0,
1322 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1323 on_response_set_call_sound_clock_status, evt_cb_data );
1325 return TAPI_API_SUCCESS;