2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.tizenopensource.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include "voice-call-engine.h"
19 #include "vc-core-util.h"
20 #include "voice-call-core.h"
21 #include "vc-core-engine-types.h"
22 #include "voice-call-service.h"
23 #include "voice-call-dbus.h"
27 vcall_engine_app_cb cb_func;
30 call_vc_core_state_t *global_pcall_core = NULL;
32 static app_cb_t *app_client_data = NULL;
35 * This function send events to client.
37 * @return int API Result Code.
40 gboolean vcall_engine_send_event_to_client(int event, void *pdata)
42 CALL_ENG_DEBUG(ENG_DEBUG, "..\n");
43 if (app_client_data->cb_func != NULL) {
44 CALL_ENG_DEBUG(ENG_DEBUG, "Sending Event to APP Client\n");
45 app_client_data->cb_func(event, pdata, app_client_data->puser_data);
47 CALL_ENG_DEBUG(ENG_ERR, "End..\n");
52 * This function initialize voice call engine.
54 * @return int API Result Code.
57 int vcall_engine_init(vcall_engine_app_cb pcb_func, void *puser_data)
59 CALL_ENG_DEBUG(ENG_WARN, "..\n");
61 /* thread system initialization */
62 if (!g_thread_supported()) {
63 CALL_ENG_KPI("g_thread_init start");
65 CALL_ENG_KPI("g_thread_init done");
68 global_pcall_core = (call_vc_core_state_t *)calloc(1, sizeof(call_vc_core_state_t));
69 if (global_pcall_core == NULL) {
70 CALL_ENG_DEBUG(ENG_ERR, "Memory Allocation Failed\n");
71 return VCALL_ENGINE_API_FAILED;
73 CALL_ENG_DEBUG(ENG_DEBUG, "global_pcall_core alloctated memory:[%d],global_pcall_core(0x%x) \n", sizeof(call_vc_core_state_t), global_pcall_core);
75 if (FALSE == voicecall_core_init(global_pcall_core)) {
76 CALL_ENG_DEBUG(ENG_DEBUG, "voicecall_core_init() failed");
77 return VCALL_ENGINE_API_FAILED;
80 app_client_data = (app_cb_t *) calloc(1, sizeof(app_cb_t));
81 if (app_client_data == NULL) {
82 CALL_ENG_DEBUG(ENG_ERR, "Memory Allocation Failed\n");
83 return VCALL_ENGINE_API_FAILED;
85 app_client_data->cb_func = pcb_func;
86 app_client_data->puser_data = puser_data;
88 CALL_ENG_DEBUG(ENG_DEBUG, "Init dbus connection\n");
89 vc_engine_dbus_receiver_setup();
90 return VCALL_ENGINE_API_SUCCESS;
95 * This function processes mo nomal call.
97 * @return int API Result Code.
100 int vcall_engine_process_normal_call(char *number, int ct_index, gboolean b_download_call)
102 CALL_ENG_DEBUG(ENG_DEBUG, " number is (%s)\n", number);
103 voicecall_engine_t *pcall_engine = global_pcall_core->pcall_engine;
104 vc_engine_outgoing_type event_data;
105 char number_after_removal[VC_PHONE_NUMBER_LENGTH_MAX] = {"\0",};
108 if (number == NULL || pcall_engine == NULL)
109 return VCALL_ENGINE_API_FAILED;
111 _vc_core_engine_status_set_download_call(pcall_engine, b_download_call);
113 /* check the call-engine state before proceeding with call processing */
114 _vc_core_engine_status_get_engine_iostate(pcall_engine, &io_state);
115 if (io_state != VC_INOUT_STATE_NONE) {
116 CALL_ENG_DEBUG(ENG_DEBUG, "IO State [%d] not NONE, cannot proceed with the call \n", io_state);
117 voicecall_core_set_status(global_pcall_core, CALL_VC_CORE_FLAG_SETUPCALL_FAIL, TRUE);
118 vc_engine_msg_box_type mbox_event_data;
120 memset(&mbox_event_data, 0, sizeof(mbox_event_data));
121 mbox_event_data.string_id = IDS_CALL_POP_CALLNOTCALLOWED;
122 vcall_engine_send_event_to_client(VC_ENGINE_MSG_MESSAGE_BOX_TO_UI, (void *)&mbox_event_data);
123 return VCALL_ENGINE_API_FAILED;
126 memset(&(global_pcall_core->call_setup_info), 0, sizeof(global_pcall_core->call_setup_info));
127 global_pcall_core->call_setup_info.call_setup_by = VC_CALL_SETUP_BY_NORMAL;
128 global_pcall_core->call_setup_info.call_type = VC_CALL_ORIG_TYPE_NORMAL;
130 memset(&event_data, 0, sizeof(event_data));
132 _vc_core_util_remove_invalid_chars(number, number_after_removal);
133 snprintf(global_pcall_core->call_setup_info.source_tel_number, VC_PHONE_NUMBER_LENGTH_MAX, number_after_removal);
134 voicecall_core_extract_phone_number(number_after_removal, event_data.call_num, VC_PHONE_NUMBER_LENGTH_MAX);
136 if (strlen(event_data.call_num) > VC_PHONE_NUMBER_LENGTH_MAX) {
137 CALL_ENG_DEBUG(ENG_ERR, " WARNING!! number is larger than max num length!! \n");
138 memcpy(global_pcall_core->call_setup_info.tel_number, event_data.call_num, VC_PHONE_NUMBER_LENGTH_MAX);
140 memcpy(global_pcall_core->call_setup_info.tel_number, event_data.call_num, strlen(event_data.call_num));
142 CALL_ENG_DEBUG(ENG_DEBUG, "number:[%s]", number);
143 CALL_ENG_DEBUG(ENG_DEBUG, "number_after_removal:[%s]", number_after_removal);
144 CALL_ENG_DEBUG(ENG_DEBUG, "global_pcall_core->call_setup_info.source_tel_number:[%s]", global_pcall_core->call_setup_info.source_tel_number);
145 CALL_ENG_DEBUG(ENG_DEBUG, "global_pcall_core->call_setup_info.tel_number:[%s]", global_pcall_core->call_setup_info.tel_number);
146 CALL_ENG_DEBUG(ENG_DEBUG, "event_data.call_num:[%s]", event_data.call_num);
148 vcall_engine_send_event_to_client(VC_ENGINE_MSG_OUTGOING_TO_UI, (void *)&event_data);
150 if (voicecall_core_setup_call(global_pcall_core, FALSE)) {
151 CALL_ENG_DEBUG(ENG_DEBUG, " success!! \n");
153 CALL_ENG_DEBUG(ENG_DEBUG, " failed!! \n");
155 return VCALL_ENGINE_API_SUCCESS;
160 * This function processes mo emergency call.
162 * @return int API Result Code.
165 int vcall_engine_process_emergency_call(char *number)
167 CALL_ENG_DEBUG(ENG_DEBUG, " number is : [%s] \n", number);
168 voicecall_engine_t *pcall_engine = global_pcall_core->pcall_engine;
169 gboolean bDefaultNumber = FALSE;
170 vc_engine_outgoing_type event_data;
173 /* check the call-engine state before proceeding with emergency call processing */
174 _vc_core_engine_status_get_engine_iostate(pcall_engine, &io_state);
175 if (io_state != VC_INOUT_STATE_NONE) {
176 CALL_ENG_DEBUG(ENG_DEBUG, "IO State [%d] not NONE, cannot proceed with the call \n", io_state);
177 voicecall_core_set_status(global_pcall_core, CALL_VC_CORE_FLAG_SETUPCALL_FAIL, TRUE);
178 vc_engine_msg_box_type mbox_event_data;
180 memset(&mbox_event_data, 0, sizeof(mbox_event_data));
181 mbox_event_data.string_id = IDS_CALL_POP_CALLNOTCALLOWED;
182 vcall_engine_send_event_to_client(VC_ENGINE_MSG_MESSAGE_BOX_TO_UI, (void *)&mbox_event_data);
183 return VCALL_ENGINE_API_FAILED;
186 memset(&event_data, 0, sizeof(event_data));
188 memset(&(global_pcall_core->call_setup_info), 0, sizeof(global_pcall_core->call_setup_info));
190 bDefaultNumber = strlen(number) ? FALSE : TRUE;
191 if (bDefaultNumber == TRUE) {
192 global_pcall_core->call_setup_info.call_setup_by = VC_CALL_SETUP_BY_NORMAL;
193 global_pcall_core->call_setup_info.call_type = VC_CALL_ORIG_TYPE_EMERGENCY;
194 if (strlen("911") < sizeof(event_data.call_num))
195 _vc_core_util_strcpy(event_data.call_num, VC_PHONE_NUMBER_LENGTH_MAX, "911");
197 memcpy(global_pcall_core->call_setup_info.tel_number, "911", strlen("911"));
199 global_pcall_core->call_setup_info.call_setup_by = VC_CALL_SETUP_BY_NORMAL;
200 global_pcall_core->call_setup_info.call_type = VC_CALL_ORIG_TYPE_PINLOCK;
201 voicecall_core_extract_phone_number(number, event_data.call_num, VC_PHONE_NUMBER_LENGTH_MAX);
202 if (strlen(number) > VC_PHONE_NUMBER_LENGTH_MAX) {
203 CALL_ENG_DEBUG(ENG_ERR, " WARNING!! number is larger than max num length!! \n");
204 memcpy(global_pcall_core->call_setup_info.source_tel_number, number, VC_PHONE_NUMBER_LENGTH_MAX);
205 memcpy(global_pcall_core->call_setup_info.tel_number, number, VC_PHONE_NUMBER_LENGTH_MAX);
207 memcpy(global_pcall_core->call_setup_info.source_tel_number, number, VC_PHONE_NUMBER_LENGTH_MAX);
208 memcpy(global_pcall_core->call_setup_info.tel_number, number, strlen(number));
212 event_data.contact_index = -1;
213 event_data.phone_type = -1;
215 vcall_engine_send_event_to_client(VC_ENGINE_MSG_OUTGOING_TO_UI, (void *)&event_data);
217 if (voicecall_core_setup_call(global_pcall_core, TRUE)) {
218 CALL_ENG_DEBUG(ENG_DEBUG, " success!! \n");
220 CALL_ENG_DEBUG(ENG_DEBUG, " failed!! \n");
222 return VCALL_ENGINE_API_SUCCESS;
225 int vcall_engine_process_emergency_call_test(char *number)
227 CALL_ENG_DEBUG(ENG_DEBUG, " number is : [%s] \n", number);
228 voicecall_engine_t *pcall_engine = global_pcall_core->pcall_engine;
229 gboolean bDefaultNumber = FALSE;
230 vc_engine_outgoing_type event_data;
233 /* check the call-engine state before proceeding with emergency call processing */
234 _vc_core_engine_status_get_engine_iostate(pcall_engine, &io_state);
235 if (io_state != VC_INOUT_STATE_NONE) {
236 CALL_ENG_DEBUG(ENG_DEBUG, "IO State [%d] not NONE, cannot proceed with the call \n", io_state);
237 voicecall_core_set_status(global_pcall_core, CALL_VC_CORE_FLAG_SETUPCALL_FAIL, TRUE);
238 vc_engine_msg_box_type mbox_event_data;
240 memset(&mbox_event_data, 0, sizeof(mbox_event_data));
241 mbox_event_data.string_id = IDS_CALL_POP_CALLNOTCALLOWED;
242 vcall_engine_send_event_to_client(VC_ENGINE_MSG_MESSAGE_BOX_TO_UI, (void *)&mbox_event_data);
243 return VCALL_ENGINE_API_FAILED;
246 memset(&event_data, 0, sizeof(event_data));
248 memset(&(global_pcall_core->call_setup_info), 0, sizeof(global_pcall_core->call_setup_info));
250 bDefaultNumber = strlen(number) ? FALSE : TRUE;
251 if (bDefaultNumber == TRUE) {
252 global_pcall_core->call_setup_info.call_setup_by = VC_CALL_SETUP_BY_NORMAL;
253 global_pcall_core->call_setup_info.call_type = VC_CALL_ORIG_TYPE_EMERGENCY;
254 if (strlen("911") < sizeof(event_data.call_num))
255 _vc_core_util_strcpy(event_data.call_num, VC_PHONE_NUMBER_LENGTH_MAX, "911");
257 memcpy(global_pcall_core->call_setup_info.tel_number, "911", strlen("911"));
259 global_pcall_core->call_setup_info.call_setup_by = VC_CALL_SETUP_BY_NORMAL;
260 global_pcall_core->call_setup_info.call_type = VC_CALL_ORIG_TYPE_PINLOCK;
261 voicecall_core_extract_phone_number(number, event_data.call_num, VC_PHONE_NUMBER_LENGTH_MAX);
262 if (strlen(number) > VC_PHONE_NUMBER_LENGTH_MAX) {
263 CALL_ENG_DEBUG(ENG_ERR, " WARNING!! number is larger than max num length!! \n");
264 memcpy(global_pcall_core->call_setup_info.source_tel_number, number, VC_PHONE_NUMBER_LENGTH_MAX);
265 memcpy(global_pcall_core->call_setup_info.tel_number, number, VC_PHONE_NUMBER_LENGTH_MAX);
267 memcpy(global_pcall_core->call_setup_info.source_tel_number, number, VC_PHONE_NUMBER_LENGTH_MAX);
268 memcpy(global_pcall_core->call_setup_info.tel_number, number, strlen(number));
272 event_data.contact_index = -1;
273 event_data.phone_type = -1;
275 vcall_engine_send_event_to_client(VC_ENGINE_MSG_OUTGOING_TO_UI, (void *)&event_data);
279 vc_engine_outgoing_orig_type orig_event_data;
280 call_vc_call_objectinfo_t callobject_info;
282 memset(&orig_event_data, 0, sizeof(orig_event_data));
283 orig_event_data.call_handle = call_handle;
284 orig_event_data.bemergency = TRUE;
286 CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle = %d, bemergency:[%d] \n", orig_event_data.call_handle, orig_event_data.bemergency);
287 vcall_engine_send_event_to_client(VC_ENGINE_MSG_OUTGOING_ORIG_TO_UI_TEST, (void *)&orig_event_data);
290 return VCALL_ENGINE_API_SUCCESS;
294 * This function processes sat setup call.
296 * @return int API Result Code.
299 int vcall_engine_process_sat_setup_call(vcall_engine_sat_setup_call_info_t *sat_setup_call_info)
301 CALL_ENG_DEBUG(ENG_WARN, "..\n");
302 voicecall_core_process_sat_setup_call(sat_setup_call_info);
303 return VCALL_ENGINE_API_SUCCESS;
307 * This function processes incoming call.
309 * @return int API Result Code.
312 int vcall_engine_process_incoming_call(vcall_engine_incoming_info_t *incoming_call_info)
314 call_vc_core_incoming_info_t tmp_incom_info = { 0, };
316 CALL_ENG_DEBUG(ENG_WARN, "..\n");
318 tmp_incom_info.call_handle = incoming_call_info->call_handle;
319 tmp_incom_info.call_type = incoming_call_info->call_type;
320 tmp_incom_info.cli_presentation_indicator = incoming_call_info->cli_presentation_indicator;
321 _vc_core_util_strcpy(tmp_incom_info.call_num, sizeof(tmp_incom_info.call_num), incoming_call_info->call_num);
322 tmp_incom_info.calling_name_mode = incoming_call_info->calling_name_mode;
323 _vc_core_util_strcpy(tmp_incom_info.calling_name, sizeof(tmp_incom_info.calling_name), incoming_call_info->calling_name);
324 _vc_core_util_strcpy(tmp_incom_info.redirected_number, sizeof(tmp_incom_info.redirected_number), incoming_call_info->redirected_number);
325 _vc_core_util_strcpy(tmp_incom_info.redirected_sub_address, sizeof(tmp_incom_info.redirected_sub_address), incoming_call_info->redirected_sub_address);
326 tmp_incom_info.cli_cause = incoming_call_info->cli_cause;
327 tmp_incom_info.bfwded = incoming_call_info->bfwded;
328 tmp_incom_info.active_line = incoming_call_info->active_line;
330 voicecall_core_process_incoming_call(&tmp_incom_info);
331 return VCALL_ENGINE_API_SUCCESS;
335 * This function answers an incoming call
337 * @return int API Result Code.
340 int vcall_engine_answer_call(void)
342 CALL_ENG_DEBUG(ENG_WARN, "..\n");
343 int ret = VCALL_ENGINE_API_FAILED;
345 ret = voicecall_core_answer_call(global_pcall_core, FALSE);
346 CALL_ENG_DEBUG(ENG_DEBUG, " ret:[%d] \n", ret);
351 * This function answers an incoming call according to the given type
353 * @return int API Result Code.
354 * @param[in] answer_type answer type
356 int vcall_engine_answer_call_by_type(vcall_engine_answer_type_t answer_type)
358 CALL_ENG_DEBUG(ENG_WARN, "..\n");
359 CALL_ENG_DEBUG(ENG_DEBUG, "answer_type:[%d]\n", answer_type);
361 if (TRUE == voicecall_core_answer_call_bytype(global_pcall_core, answer_type)) {
362 return VCALL_ENGINE_API_SUCCESS;
364 return VCALL_ENGINE_API_FAILED;
370 * This function cancel outgoing call
372 * @return int API Result Code.
375 int vcall_engine_cancel_call(void)
377 CALL_ENG_DEBUG(ENG_WARN, "..\n");
379 if (TRUE == voicecall_core_cancel_call(global_pcall_core)) {
380 return VCALL_ENGINE_API_SUCCESS;
382 return VCALL_ENGINE_API_FAILED;
387 * This function reject incoming call
389 * @return int API Result Code.
392 int vcall_engine_reject_call(void)
394 CALL_ENG_DEBUG(ENG_WARN, "..\n");
396 if (TRUE == voicecall_core_reject_mt(global_pcall_core, TRUE)) {
397 return VCALL_ENGINE_API_SUCCESS;
399 return VCALL_ENGINE_API_FAILED;
404 * This function release a active or held call
406 * @return int API Result Code.
409 int vcall_engine_release_call(void)
411 CALL_ENG_DEBUG(ENG_WARN, "..\n");
413 if (TRUE == voicecall_core_end_call(global_pcall_core)) {
414 return VCALL_ENGINE_API_SUCCESS;
416 return VCALL_ENGINE_API_FAILED;
421 * This function release a call by handle
423 * @return int API Result Code.
424 * @param[in] int call_handle
426 int vcall_engine_release_call_by_handle(int call_handle)
428 CALL_ENG_DEBUG(ENG_WARN, "..\n");
429 CALL_ENG_DEBUG(ENG_DEBUG, "call_handle:[%d]\n", call_handle);
431 if (TRUE == voicecall_core_end_call_by_handle(global_pcall_core, call_handle)) {
432 return VCALL_ENGINE_API_SUCCESS;
434 return VCALL_ENGINE_API_FAILED;
439 * This function release calls by type
441 * @return int API Result Code.
442 * @param[in] release_type release_type
444 int vcall_engine_release_call_by_type(vcall_engine_release_type_t release_type)
446 CALL_ENG_DEBUG(ENG_WARN, "..\n");
449 CALL_ENG_DEBUG(ENG_DEBUG, " release_type : [%d]\n", release_type);
450 switch (release_type) {
451 case VCALL_ENGINE_RELEASE_ALL_ACTIVE_CALLS:
453 ret = voicecall_core_end_all_active_calls(global_pcall_core);
457 case VCALL_ENGINE_RELEASE_ALL_HELD_CALLS:
459 ret = voicecall_core_end_all_held_calls(global_pcall_core);
463 case VCALL_ENGINE_RELEASE_ALL_CALLS:
465 ret = voicecall_core_end_all_calls(global_pcall_core);
470 CALL_ENG_DEBUG(ENG_DEBUG, " Unknown release_type : [%d]\n", release_type);
476 return VCALL_ENGINE_API_SUCCESS;
478 return VCALL_ENGINE_API_FAILED;
483 * This function processes hold/retrive/swap calls.
485 * @return int API Result Code.
488 int vcall_engine_process_hold_call(void)
490 CALL_ENG_DEBUG(ENG_WARN, "..\n");
493 ret = voicecall_core_process_hold_call(global_pcall_core);
495 return VCALL_ENGINE_API_SUCCESS;
497 return VCALL_ENGINE_API_FAILED;
502 * This function processes in call SS code..
504 * @return int API Result Code.
507 void vcall_engine_process_incall_ss(char *number)
509 CALL_ENG_DEBUG(ENG_WARN, "number(%s)\n");
511 voicecall_core_process_incall_ss(global_pcall_core, number);
515 * This function sets up a conference calls
517 * @return int API Result Code.
520 int vcall_engine_join_call(void)
522 CALL_ENG_DEBUG(ENG_WARN, "..\n");
525 ret = voicecall_core_setup_conference(global_pcall_core);
527 return VCALL_ENGINE_API_SUCCESS;
529 return VCALL_ENGINE_API_FAILED;
534 * This function make a private call in conference calls.
536 * @return int API Result Code.
537 * @param[in] int call_handle
539 int vcall_engine_split_call(int call_handle)
541 CALL_ENG_DEBUG(ENG_WARN, "..\n");
544 ret = voicecall_core_make_private_call(global_pcall_core, call_handle);
546 return VCALL_ENGINE_API_SUCCESS;
548 return VCALL_ENGINE_API_FAILED;
553 * This function transfers the call from active call to the held call
555 * @return int API Result Code.
556 * @param[in] int call_handle
558 int vcall_engine_transfer_call(void)
560 CALL_ENG_DEBUG(ENG_WARN, "..\n");
563 ret = voicecall_core_transfer_calls(global_pcall_core);
565 return VCALL_ENGINE_API_SUCCESS;
567 return VCALL_ENGINE_API_FAILED;
572 * This function processed loud speaker.
574 * @return int API Result Code.
575 * @param[in] int bstatus
577 int vcall_engine_process_loudspeaker(int bstatus)
579 CALL_ENG_DEBUG(ENG_WARN, "..\n");
582 CALL_ENG_DEBUG(ENG_DEBUG, " bstatus : [%d]\n", bstatus);
584 ret = voicecall_service_loudspeaker_on(global_pcall_core);
586 ret = voicecall_service_loudspeaker_off(global_pcall_core);
590 return VCALL_ENGINE_API_SUCCESS;
592 return VCALL_ENGINE_API_FAILED;
597 * This function processed voice mute status.
599 * @return int API Result Code.
600 * @param[in] int bstatus
602 int vcall_engine_process_voice_mute(int bstatus)
604 CALL_ENG_DEBUG(ENG_WARN, "..\n");
607 CALL_ENG_DEBUG(ENG_DEBUG, " bstatus : [%d]\n", bstatus);
609 ret = voicecall_service_mute_status_on(global_pcall_core);
611 ret = voicecall_service_mute_status_off(global_pcall_core);
615 return VCALL_ENGINE_API_SUCCESS;
617 return VCALL_ENGINE_API_FAILED;
622 * This function gets the volume level
624 * @return int API Result Code.
625 * @param[in] vcall_engine_vol_type_t vol_type
626 * @param[in] voicecall_snd_volume_alert_type_t vol_alert_type
628 int vcall_engine_get_volume_level(vcall_engine_vol_type_t vol_type)
630 CALL_ENG_DEBUG(ENG_WARN, "..\n");
632 CALL_ENG_DEBUG(ENG_DEBUG, " vol_type : [%d]\n", vol_type);
634 return voicecall_snd_get_volume(global_pcall_core->papp_snd, vol_type);
639 * This function sets the volume level
641 * @return int API Result Code.
642 * @param[in] vcall_engine_vol_type_t vol_type
643 * @param[in] int vol_level
645 int vcall_engine_set_volume_level(vcall_engine_vol_type_t vol_type, int vol_level)
647 CALL_ENG_DEBUG(ENG_WARN, "..\n");
650 CALL_ENG_DEBUG(ENG_DEBUG, " vol_type : [%d], vol_level:[%d]\n", vol_type, vol_level);
651 ret = voicecall_service_set_volume(global_pcall_core, vol_type, vol_level);
653 return VCALL_ENGINE_API_SUCCESS;
655 return VCALL_ENGINE_API_FAILED;
660 * This function stop alert
662 * @return int API Result Code.
665 int vcall_engine_stop_alert(void)
667 CALL_ENG_DEBUG(ENG_WARN, "..\n");
670 ret = voicecall_core_stop_alert(global_pcall_core);
672 return VCALL_ENGINE_API_SUCCESS;
674 return VCALL_ENGINE_API_FAILED;
679 * This function mute alert.
681 * @return int API Result Code.
684 int vcall_engine_mute_alert(void)
686 CALL_ENG_DEBUG(ENG_WARN, "..\n");
689 ret = voicecall_snd_mute_alert(global_pcall_core->papp_snd);
691 return VCALL_ENGINE_API_SUCCESS;
693 return VCALL_ENGINE_API_FAILED;
698 * This function process auto redial.
700 * @return int API Result Code.
701 * @param[in] int bstatus
703 int vcall_engine_process_auto_redial(int bstatus)
705 CALL_ENG_DEBUG(ENG_WARN, "..\n");
708 CALL_ENG_DEBUG(ENG_DEBUG, " bstatus : [%d]\n", bstatus);
710 ret = voicecall_core_start_redial(global_pcall_core, TRUE);
712 ret = voicecall_core_stop_redial(global_pcall_core);
715 return VCALL_ENGINE_API_SUCCESS;
717 return VCALL_ENGINE_API_FAILED;
722 * This function send the DTMF number
724 * @return int API Result Code.
725 * @param[in] char* dtmf_number
727 int vcall_engine_send_dtmf_number(char *dtmf_number)
729 CALL_ENG_DEBUG(ENG_WARN, "..\n");
732 ret = voicecall_core_send_dtmf(global_pcall_core, dtmf_number);
735 return VCALL_ENGINE_API_SUCCESS;
737 return VCALL_ENGINE_API_FAILED;
742 * This function processed sound path
744 * @return int API Result Code.
745 * @param[in] int sound_path
747 int vcall_engine_change_sound_path(vcall_engine_audio_type_t sound_path)
749 CALL_ENG_DEBUG(ENG_WARN, "..\n");
752 ret = voicecall_core_change_sound_path(global_pcall_core, sound_path);
755 return VCALL_ENGINE_API_SUCCESS;
757 return VCALL_ENGINE_API_FAILED;
762 * This function get sound path
764 * @return int API Result Code.
765 * @param[out] int sound_path
767 int vcall_engine_get_sound_path(int *sound_path)
769 CALL_ENG_DEBUG(ENG_WARN, "..\n");
773 ret = voicecall_core_get_sound_path(global_pcall_core, &snd_path);
775 if (snd_path == VOICE_CALL_AUDIO_SPEAKER) {
776 *sound_path = VCALL_ENGINE_AUDIO_SPEAKER;
777 } else if (snd_path == VOICE_CALL_AUDIO_RECEIVER) {
778 *sound_path = VCALL_ENGINE_AUDIO_RECEIVER;
779 } else if (snd_path == VOICE_CALL_AUDIO_HEADSET) {
780 *sound_path = VCALL_ENGINE_AUDIO_HEADSET;
781 } else if (snd_path == VOICE_CALL_AUDIO_EARJACK) {
782 *sound_path = VCALL_ENGINE_AUDIO_EARJACK;
784 *sound_path = VCALL_ENGINE_AUDIO_RECEIVER;
788 return VCALL_ENGINE_API_SUCCESS;
790 return VCALL_ENGINE_API_FAILED;
795 * This function set call engine to default
797 * @return int API Result Code.
800 int vcall_engine_set_to_default()
802 CALL_ENG_DEBUG(ENG_WARN, "..\n");
805 ret = voicecall_core_set_to_default(global_pcall_core);
808 return VCALL_ENGINE_API_SUCCESS;
810 return VCALL_ENGINE_API_FAILED;
814 gpointer vcall_engine_get_core_state(void)
816 return global_pcall_core;
820 * This function is interface to call-utility to perform string copy
822 * @return instance of the core state
823 * @param[out] pbuffer Target Buffer
824 * @param[in] buf_count Size of Target Buffer
825 * @param[in] pstring Source String
827 gboolean vcall_engine_util_strcpy(char *pbuffer, int buf_count, const char *pstring)
829 CALL_ENG_DEBUG(ENG_DEBUG, "..");
830 return _vc_core_util_strcpy(pbuffer, buf_count, pstring);
834 * This function returns the number of groups
836 * @param[in] pcount count of the groups
838 gboolean vcall_engine_get_group_count(int *pcount)
840 CALL_ENG_DEBUG(ENG_DEBUG, "..");
841 return _vc_core_engine_group_get_enabled_group_count(global_pcall_core->pcall_engine, pcount);
845 * This function is interface to call-utility to perform string copy
847 * @return instance of the core state
848 * @param[out] pbuffer Target Buffer
849 * @param[in] time time
851 char *vcall_engine_util_get_date_time(time_t time)
853 CALL_ENG_DEBUG(ENG_DEBUG, "..");
854 return _vc_core_util_get_date_time(time);
858 * This function is force reset all engine status.
863 void vcall_engine_force_reset(void)
865 CALL_ENG_DEBUG(ENG_DEBUG, "..");
867 voicecall_snd_unregister_cm(global_pcall_core->papp_snd);
869 _vc_core_util_set_call_status(VCONFKEY_CALL_OFF);
871 voicecall_core_end_all_calls(global_pcall_core);