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-device.h"
19 #include "voice-call-dbus.h"
20 #include "voice-call-core.h"
21 #include "voice-call-sound.h"
22 #include "voice-call-bt.h"
23 #include "voice-call-core.h"
24 #include "voice-call-engine-msg.h"
26 #include "vc-core-callagent.h"
27 #include "vc-core-engine-types.h"
28 #include "vc-core-util.h"
33 static gboolean __voicecall_dvc_earjack_status_cb(keynode_t *node, call_vc_core_state_t *pcall_core);
34 static gboolean __voicecall_dvc_earjackkey_status_cb(keynode_t *node, call_vc_core_state_t *pcall_core);
37 * This function handles earjack event
39 * @return Returns TRUE on success or FALSE on failure
40 * @param[in] node vconf node
41 * @param[in] pcall_core Handle to voicecall core
43 static gboolean __voicecall_dvc_earjack_status_cb(keynode_t *node, call_vc_core_state_t *pcall_core)
47 CALL_ENG_DEBUG(ENG_DEBUG, "..");
49 earjack_status = vconf_keynode_get_int(node);
51 CALL_ENG_DEBUG(ENG_DEBUG, "Earjack Status: %d", earjack_status);
53 vc_engine_headset_status_type event_data;
55 /*Change path only if outgoing call or connected call exists */
56 if ((TRUE == voicecall_core_is_outgoing_call_exists(pcall_core->pcall_engine))
57 || (TRUE == voicecall_core_is_connected_call_exist(pcall_core->pcall_engine))) {
58 if (earjack_status != FALSE) {
59 voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER_EARJACK);
60 voicecall_snd_change_path(pcall_core->papp_snd);
61 memset(&event_data, 0, sizeof(event_data));
62 event_data.bstatus = earjack_status;
63 vcall_engine_send_event_to_client(VC_ENGINE_MSG_EARJACK_STATUS_TO_UI, (void *)&event_data);
65 if (voicecall_snd_get_path_status(pcall_core->papp_snd) == VOICE_CALL_SND_PATH_RECEIVER_EARJACK) {
66 if (_vc_bt_is_bt_connected(pcall_core) == TRUE) {
67 voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_BT);
68 /*_vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_SWITCH_TO_HEADSET, -1, NULL);*/
69 _vc_bt_request_switch_headset_path(pcall_core, TRUE);
71 voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER_EARJACK);
72 voicecall_snd_change_path(pcall_core->papp_snd);
74 memset(&event_data, 0, sizeof(event_data));
75 event_data.bstatus = earjack_status;
76 vcall_engine_send_event_to_client(VC_ENGINE_MSG_EARJACK_STATUS_TO_UI, (void *)&event_data);
78 CALL_ENG_DEBUG(ENG_DEBUG, "No path change");
86 * This function handles earjack key event
88 * @return Returns TRUE on success or FALSE on failure
89 * @param[in] node vconf node
90 * @param[in] pcall_core Handle to voicecall core
92 static gboolean __voicecall_dvc_earjackkey_status_cb(keynode_t *node, call_vc_core_state_t *pcall_core)
96 CALL_ENG_DEBUG(ENG_DEBUG, "..");
98 key_value = vconf_keynode_get_int(node);
100 CALL_ENG_DEBUG(ENG_DEBUG, "key_value: %d", key_value);
103 if (voicecall_core_is_connected_call_exist(pcall_core->pcall_engine)) {
104 voicecall_core_end_all_calls(pcall_core);
105 } else if (voicecall_core_is_incoming_call_exists(pcall_core->pcall_engine)) {
106 voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER_EARJACK);
107 voicecall_core_answer_call(pcall_core, FALSE);
108 } else if (voicecall_core_is_outgoing_call_exists(pcall_core->pcall_engine)) {
109 voicecall_core_cancel_call(pcall_core);
117 * This function initialize earjack event.
119 * @return Returns TRUE on success or FALSE on failure
120 * @param[in] pcall_core Handle to voicecall core
122 gboolean _voicecall_dvc_earjack_init(call_vc_core_state_t *pcall_core)
124 vconf_notify_key_changed(VCONFKEY_SYSMAN_EARJACK, (void *)__voicecall_dvc_earjack_status_cb, pcall_core);
125 vconf_notify_key_changed(VCONFKEY_SYSMAN_EARJACKKEY, (void *)__voicecall_dvc_earjackkey_status_cb, pcall_core);
129 void _voicecall_dvc_get_earjack_status(call_vc_core_state_t *pcall_core)
131 int earjack_status = -1;
132 if (!vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack_status)) {
133 CALL_ENG_DEBUG(ENG_DEBUG, "earjack_status:[%d]", earjack_status);
134 if (earjack_status == VCONFKEY_SYSMAN_EARJACK_REMOVED) {
135 voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_RECEIVER_EARJACK, FALSE);
136 CALL_ENG_DEBUG(ENG_DEBUG, "*****************VOICE_CALL_AUDIO_RECEIVER_EARJACK = FALSE **********");
138 voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_RECEIVER_EARJACK, TRUE);
139 CALL_ENG_DEBUG(ENG_DEBUG, "*****************VOICE_CALL_AUDIO_RECEIVER_EARJACK = TRUE **********");
142 CALL_ENG_DEBUG(ENG_ERR, "vconf_get_int failed..");
143 voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_RECEIVER_EARJACK, FALSE);
147 gboolean _voicecall_dvc_get_earjack_connected()
149 int earjack_status = -1;
150 if (!vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack_status)) {
151 CALL_ENG_DEBUG(ENG_DEBUG, "earjack_status:[%d]", earjack_status);
152 if (earjack_status == VCONFKEY_SYSMAN_EARJACK_REMOVED) {
158 CALL_ENG_DEBUG(ENG_ERR, "vconf_get_int failed..");
163 void _voicecall_dvc_control_lcd_state(voicecall_lcd_control_t state)
165 CALL_ENG_DEBUG(ENG_DEBUG, "[%d]", state);
168 pm_change_state(LCD_OFF);
172 pm_change_state(LCD_NORMAL);
176 pm_lock_state(LCD_NORMAL, GOTO_STATE_NOW, 0);
179 case VC_LCD_ON_UNLOCK:
180 pm_unlock_state(LCD_NORMAL, PM_RESET_TIMER);