diff --git a/android/handsfree.c b/android/handsfree.c
index c52b4ce..2dfdf9e 100644
--- a/android/handsfree.c
+++ b/android/handsfree.c
static void connect_cb(GIOChannel *chan, GError *err, gpointer user_data)
{
+ struct hf_device *dev = user_data;
+
DBG("");
if (err) {
goto failed;
}
- device.gw = hfp_gw_new(g_io_channel_unix_get_fd(chan));
- if (!device.gw)
+ dev->gw = hfp_gw_new(g_io_channel_unix_get_fd(chan));
+ if (!dev->gw)
goto failed;
g_io_channel_set_close_on_unref(chan, FALSE);
- hfp_gw_set_close_on_unref(device.gw, true);
- hfp_gw_set_command_handler(device.gw, at_cmd_unknown, NULL, NULL);
- hfp_gw_set_disconnect_handler(device.gw, disconnect_watch, NULL, NULL);
+ hfp_gw_set_close_on_unref(dev->gw, true);
+ hfp_gw_set_command_handler(dev->gw, at_cmd_unknown, NULL, NULL);
+ hfp_gw_set_disconnect_handler(dev->gw, disconnect_watch, NULL, NULL);
- if (device.hsp) {
+ if (dev->hsp) {
register_post_slc_at();
- set_state(&device, HAL_EV_HANDSFREE_CONN_STATE_CONNECTED);
- set_state(&device, HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED);
+ set_state(dev, HAL_EV_HANDSFREE_CONN_STATE_CONNECTED);
+ set_state(dev, HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED);
return;
}
register_slc_at();
- set_state(&device, HAL_EV_HANDSFREE_CONN_STATE_CONNECTED);
+ set_state(dev, HAL_EV_HANDSFREE_CONN_STATE_CONNECTED);
return;
failed:
g_io_channel_shutdown(chan, TRUE, NULL);
- device_cleanup(&device);
+ device_cleanup(dev);
}
static void confirm_cb(GIOChannel *chan, gpointer data)
device_init(&device, &bdaddr);
- if (!bt_io_accept(chan, connect_cb, NULL, NULL, NULL)) {
+ if (!bt_io_accept(chan, connect_cb, &device, NULL, NULL)) {
error("handsfree: failed to accept connection");
device_cleanup(&device);
goto drop;
static void sdp_hsp_search_cb(sdp_list_t *recs, int err, gpointer data)
{
+ struct hf_device *dev = data;
sdp_list_t *protos, *classes;
GError *gerr = NULL;
GIOChannel *io;
goto fail;
}
- io = bt_io_connect(connect_cb, NULL, NULL, &gerr,
+ io = bt_io_connect(connect_cb, dev, NULL, &gerr,
BT_IO_OPT_SOURCE_BDADDR, &adapter_addr,
- BT_IO_OPT_DEST_BDADDR, &device.bdaddr,
+ BT_IO_OPT_DEST_BDADDR, &dev->bdaddr,
BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
BT_IO_OPT_CHANNEL, channel,
BT_IO_OPT_INVALID);
goto fail;
}
- device.hsp = true;
+ dev->hsp = true;
g_io_channel_unref(io);
return;
fail:
- device_cleanup(&device);
+ device_cleanup(dev);
}
-static int sdp_search_hsp(void)
+static int sdp_search_hsp(struct hf_device *dev)
{
uuid_t uuid;
sdp_uuid16_create(&uuid, HEADSET_SVCLASS_ID);
- return bt_search_service(&adapter_addr, &device.bdaddr, &uuid,
- sdp_hsp_search_cb, NULL, NULL, 0);
+ return bt_search_service(&adapter_addr, &dev->bdaddr, &uuid,
+ sdp_hsp_search_cb, dev, NULL, 0);
}
static void sdp_hfp_search_cb(sdp_list_t *recs, int err, gpointer data)
{
+ struct hf_device *dev = data;
sdp_list_t *protos, *classes;
GError *gerr = NULL;
GIOChannel *io;
if (!recs || !recs->data) {
info("handsfree: no HFP SDP records found, trying HSP");
- if (sdp_search_hsp() < 0) {
+ if (sdp_search_hsp(dev) < 0) {
error("handsfree: HSP SDP search failed");
goto fail;
}
goto fail;
}
- io = bt_io_connect(connect_cb, NULL, NULL, &gerr,
+ io = bt_io_connect(connect_cb, dev, NULL, &gerr,
BT_IO_OPT_SOURCE_BDADDR, &adapter_addr,
- BT_IO_OPT_DEST_BDADDR, &device.bdaddr,
+ BT_IO_OPT_DEST_BDADDR, &dev->bdaddr,
BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
BT_IO_OPT_CHANNEL, channel,
BT_IO_OPT_INVALID);
return;
fail:
- device_cleanup(&device);
+ device_cleanup(dev);
}
-static int sdp_search_hfp(void)
+static int sdp_search_hfp(struct hf_device *dev)
{
uuid_t uuid;
sdp_uuid16_create(&uuid, HANDSFREE_SVCLASS_ID);
- return bt_search_service(&adapter_addr, &device.bdaddr, &uuid,
- sdp_hfp_search_cb, NULL, NULL, 0);
+ return bt_search_service(&adapter_addr, &dev->bdaddr, &uuid,
+ sdp_hfp_search_cb, dev, NULL, 0);
}
static void handle_connect(const void *buf, uint16_t len)
device_init(&device, &bdaddr);
/* prefer HFP over HSP */
- ret = hfp_server ? sdp_search_hfp() : sdp_search_hsp();
+ ret = hfp_server ? sdp_search_hfp(&device) : sdp_search_hsp(&device);
if (ret < 0) {
error("handsfree: SDP search failed");
device_cleanup(&device);