2 * Copyright (c) 2012-2013 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://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing,
11 * software 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 <bluetooth.h>
20 #include "bt-main-ug.h"
21 #include "bt-main-view.h"
22 #include "bt-ipc-handler.h"
23 #include "bt-string-define.h"
27 /**********************************************************************
29 ***********************************************************************/
31 int _bt_ipc_init_event_signal(void *data)
36 E_DBus_Connection *conn;
38 retvm_if(data == NULL, BT_UG_FAIL, "Invalid argument: data is NULL\n");
40 ugd = (bt_ug_data *)data;
41 retvm_if(ugd->EDBusHandle != NULL, BT_UG_FAIL,
42 "Invalid argument: ugd->EDBusHandle already exist\n");
46 conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);
47 retvm_if(conn == NULL, BT_UG_FAIL, "conn is NULL\n");
49 e_dbus_request_name(conn, BT_UG_IPC_INTERFACE, 0, NULL, NULL);
51 ugd->EDBusHandle = conn;
57 int _bt_ipc_deinit_event_signal(void *data)
63 retvm_if(data == NULL, BT_UG_FAIL, "Invalid argument: data is NULL\n");
65 ugd = (bt_ug_data *)data;
66 retvm_if(ugd->EDBusHandle == NULL, BT_UG_FAIL,
67 "Invalid argument: ugd->EDBusHandle is NULL\n");
73 static void __bt_ipc_receive_popup_event(void *data, DBusMessage * msg)
79 bt_ug_data *ugd = NULL;
81 retm_if(data == NULL, "Invalid argument: data is NULL\n");
82 retm_if(msg == NULL, "Invalid argument: msg is NULL\n");
84 ugd = (bt_ug_data *)data;
86 member = (char *)dbus_message_get_member(msg);
87 retm_if(member == NULL, "dbus signal member get failed\n");
89 if (!strcmp(member, BT_SYSPOPUP_METHOD_RESPONSE)) {
90 if (!dbus_message_get_args(msg, NULL,
91 DBUS_TYPE_INT32, &response,
93 BT_DBG("User Event handling for [%s] failed\n", member);
96 BT_DBG("Success User Event handling response = %d ",
98 switch (ugd->confirm_req) {
99 case BT_CONNECTION_REQ:
100 _bt_main_retry_connection(data, response);
104 /* response - 0: Yes, 1: No */
105 _bt_main_retry_pairing(data, response);
110 BT_DBG("Unidentified request\n");
116 _bt_ipc_unregister_popup_event_signal(ugd->EDBusHandle, data);
119 /**********************************************************************
121 ***********************************************************************/
123 int _bt_ipc_register_popup_event_signal(E_DBus_Connection *conn, void *data)
127 bt_ug_data *ugd = NULL;
128 E_DBus_Signal_Handler *sh = NULL;
130 retvm_if(conn == NULL, BT_UG_FAIL, "Invalid argument: conn is NULL\n");
131 retvm_if(data == NULL, BT_UG_FAIL, "Invalid argument: data is NULL\n");
133 ugd = (bt_ug_data *)data;
135 sh = e_dbus_signal_handler_add(conn,
137 BT_SYSPOPUP_IPC_RESPONSE_OBJECT,
138 BT_SYSPOPUP_INTERFACE,
139 BT_SYSPOPUP_METHOD_RESPONSE,
140 __bt_ipc_receive_popup_event, data);
142 retvm_if(sh == NULL, BT_UG_FAIL, "AG Response Event register failed\n");
147 return BT_UG_ERROR_NONE;
150 int _bt_ipc_unregister_popup_event_signal(E_DBus_Connection *conn, void *data)
154 bt_ug_data *ugd = NULL;
156 retvm_if(conn == NULL, BT_UG_FAIL, "Invalid argument: conn is NULL\n");
157 retvm_if(data == NULL, BT_UG_FAIL, "Invalid argument: data is NULL\n");
159 ugd = (bt_ug_data *)data;
161 retvm_if(ugd->popup_sh == NULL, BT_UG_FAIL, "Signal Handler is NULL\n");
163 e_dbus_signal_handler_del(conn, ugd->popup_sh);
165 ugd->popup_sh = NULL;
168 return BT_UG_ERROR_NONE;
171 int _bt_ipc_send_obex_message(obex_ipc_param_t *param, void *data)
175 bt_ug_data *ugd = NULL;
176 DBusMessage *msg = NULL;
177 char *param_str = NULL;
178 DBusPendingCall *ret = NULL;
180 retvm_if(param == NULL, BT_UG_FAIL,
181 "Invalid argument: param is NULL\n");
182 retvm_if(data == NULL, BT_UG_FAIL, "Invalid argument: data is NULL\n");
184 ugd = (bt_ug_data *)data;
185 param_str = param->param2;
186 retvm_if(ugd->EDBusHandle == NULL, BT_UG_FAIL,
187 "Invalid argument: ugd->EDBusHandle is NULL\n");
188 retvm_if(param_str == NULL, BT_UG_FAIL,
189 "Invalid argument: param_str is NULL\n");
191 BT_DBG("Request to connect [%d]\n", param->param1);
192 BT_DBG("%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", param->param2[0],
193 param->param2[1], param->param2[2], param->param2[3],
194 param->param2[4], param->param2[5]);
196 msg = dbus_message_new_signal(BT_UG_IPC_REQUEST_OBJECT,
198 BT_UG_IPC_METHOD_SEND);
200 retvm_if(msg == NULL, BT_UG_FAIL, "msg is NULL\n");
202 if (!dbus_message_append_args(msg,
203 DBUS_TYPE_INT32, ¶m->param1,
204 DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
205 ¶m_str, BT_ADDRESS_LENGTH_MAX,
206 DBUS_TYPE_INT32, ¶m->param3,
207 DBUS_TYPE_STRING, ¶m->param4,
208 DBUS_TYPE_STRING, ¶m->param5,
209 DBUS_TYPE_STRING, ¶m->param6,
210 DBUS_TYPE_INVALID)) {
211 BT_DBG("Connect sending failed\n");
212 dbus_message_unref(msg);
216 ret = e_dbus_message_send(ugd->EDBusHandle, msg, NULL, -1, NULL);
217 dbus_message_unref(msg);
220 return ret ? BT_UG_ERROR_NONE : BT_UG_FAIL;
223 void _bt_ipc_update_connected_status(bt_ug_data *ugd, int connected_type,
224 bool connected, int result,
229 bt_dev_t *item = NULL;
230 char addr_str[BT_ADDRESS_STR_LEN + 1] = { 0 };
232 _bt_util_addr_type_to_addr_string(addr_str, addr->bd_addr);
234 item = _bt_main_get_dev_info_by_address(ugd->paired_device, addr_str);
237 item = _bt_main_get_dev_info(ugd->paired_device, ugd->paired_item);
239 ugd->connect_req = FALSE;
242 item->status = BT_IDLE;
244 if (connected == TRUE) {
245 item->connected_mask |= (result == BT_UG_ERROR_NONE) ? \
246 connected_type : 0x00;
248 item->connected_mask &= (result == BT_UG_ERROR_NONE) ? \
249 ~connected_type : 0xFF;
252 elm_genlist_item_update((Elm_Object_Item *)item->genlist_item);
254 if (ugd->profile_vd && ugd->profile_vd->genlist) {
255 item->call_checked = item->connected_mask & \
256 BT_HEADSET_CONNECTED;
258 item->media_checked = item->connected_mask & \
259 BT_STEREO_HEADSET_CONNECTED;
261 item->hid_checked = item->connected_mask & \
264 item->network_checked = item->connected_mask & \
265 BT_NETWORK_CONNECTED;
267 _bt_util_set_list_disabled(ugd->profile_vd->genlist,