diff --git a/android/a2dp.c b/android/a2dp.c
index ab7719f..0d3bfc5 100644
--- a/android/a2dp.c
+++ b/android/a2dp.c
#include "hal-msg.h"
#include "ipc.h"
-static GIOChannel *notification_io = NULL;
+static int notification_sk = -1;
static uint8_t bt_a2dp_connect(struct hal_cmd_av_connect *cmd, uint16_t len)
{
return HAL_STATUS_FAILED;
}
-void bt_a2dp_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
- uint16_t len)
+void bt_a2dp_handle_cmd(int sk, uint8_t opcode, void *buf, uint16_t len)
{
uint8_t status = HAL_STATUS_FAILED;
break;
}
- ipc_send_rsp(g_io_channel_unix_get_fd(io), HAL_SERVICE_ID_A2DP,
- status);
+ ipc_send_rsp(sk, HAL_SERVICE_ID_A2DP, status);
}
-bool bt_a2dp_register(GIOChannel *io, const bdaddr_t *addr)
+bool bt_a2dp_register(int sk, const bdaddr_t *addr)
{
DBG("");
- notification_io = g_io_channel_ref(io);
+ notification_sk = sk;
return true;
}
{
DBG("");
- g_io_channel_unref(notification_io);
- notification_io = NULL;
+ notification_sk = -1;
}
diff --git a/android/a2dp.h b/android/a2dp.h
index a5ac53e..3531618 100644
--- a/android/a2dp.h
+++ b/android/a2dp.h
*
*/
-void bt_a2dp_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
- uint16_t len);
+void bt_a2dp_handle_cmd(int sk, uint8_t opcode, void *buf, uint16_t len);
-bool bt_a2dp_register(GIOChannel *io, const bdaddr_t *addr);
+bool bt_a2dp_register(int sk, const bdaddr_t *addr);
void bt_a2dp_unregister(void);
diff --git a/android/adapter.c b/android/adapter.c
index 927b2d7..f02ef64 100644
--- a/android/adapter.c
+++ b/android/adapter.c
/* Default to DisplayYesNo */
#define DEFAULT_IO_CAPABILITY 0x01
-static GIOChannel *notification_io = NULL;
+static int notification_sk = -1;
/* This list contains addresses which are asked for records */
static GSList *browse_reqs;
ev->props[0].len = len;
memcpy(ev->props->val, name, len);
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_BLUETOOTH, HAL_EV_ADAPTER_PROPS_CHANGED,
- sizeof(buf), ev, -1);
+ ipc_send(notification_sk, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_EV_ADAPTER_PROPS_CHANGED, sizeof(buf), ev, -1);
}
static void adapter_set_name(const uint8_t *name)
DBG("%u", ev.state);
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_BLUETOOTH, HAL_EV_ADAPTER_STATE_CHANGED,
- sizeof(ev), &ev, -1);
+ ipc_send(notification_sk, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_EV_ADAPTER_STATE_CHANGED, sizeof(ev), &ev, -1);
}
static uint8_t settings2scan_mode(void)
DBG("mode %u", *mode);
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_BLUETOOTH, HAL_EV_ADAPTER_PROPS_CHANGED,
- len, ev, -1);
+ ipc_send(notification_sk, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_EV_ADAPTER_PROPS_CHANGED, len, ev, -1);
g_free(ev);
}
ev->props[0].len = sizeof(uint32_t);
memcpy(ev->props->val, &adapter->dev_class, sizeof(uint32_t));
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_BLUETOOTH, HAL_EV_ADAPTER_PROPS_CHANGED,
- len, ev, -1);
+ ipc_send(notification_sk, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_EV_ADAPTER_PROPS_CHANGED, len, ev, -1);
g_free(ev);
}
ev.state = state;
bdaddr2android(addr, ev.bdaddr);
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_BLUETOOTH, HAL_EV_BOND_STATE_CHANGED,
- sizeof(ev), &ev, -1);
+ ipc_send(notification_sk, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_EV_BOND_STATE_CHANGED, sizeof(ev), &ev, -1);
}
static void browse_req_free(struct browse_req *req)
ev->props[0].len = sizeof(uint128_t) * g_slist_length(req->uuids);
fill_uuids(req->uuids, ev->props[0].val);
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_BLUETOOTH, HAL_EV_REMOTE_DEVICE_PROPS,
- len, ev, -1);
+ ipc_send(notification_sk, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_EV_REMOTE_DEVICE_PROPS, len, ev, -1);
g_free(ev);
}
memset(&hal_ev, 0, sizeof(hal_ev));
bdaddr2android(&ev->addr.bdaddr, hal_ev.bdaddr);
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_BLUETOOTH, HAL_EV_PIN_REQUEST,
- sizeof(hal_ev), &hal_ev, -1);
+ ipc_send(notification_sk, HAL_SERVICE_ID_BLUETOOTH, HAL_EV_PIN_REQUEST,
+ sizeof(hal_ev), &hal_ev, -1);
}
static void send_ssp_request(const bdaddr_t *addr, uint8_t variant,
ev.pairing_variant = variant;
ev.passkey = passkey;
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_BLUETOOTH, HAL_EV_SSP_REQUEST,
- sizeof(ev), &ev, -1);
+ ipc_send(notification_sk, HAL_SERVICE_ID_BLUETOOTH, HAL_EV_SSP_REQUEST,
+ sizeof(ev), &ev, -1);
}
static void user_confirm_request_callback(uint16_t index, uint16_t length,
cp.state = HAL_DISCOVERY_STATE_STOPPED;
}
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_BLUETOOTH,
- HAL_EV_DISCOVERY_STATE_CHANGED,
- sizeof(cp), &cp, -1);
+ ipc_send(notification_sk, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_EV_DISCOVERY_STATE_CHANGED, sizeof(cp), &cp, -1);
}
static void confirm_name_complete(uint8_t status, uint16_t length,
ev->num_props += fill_device_props(prop, remote, eir.class,
rssi, eir.name);
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_BLUETOOTH, HAL_EV_DEVICE_FOUND,
- buff_size, ev, -1);
+ ipc_send(notification_sk, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_EV_DEVICE_FOUND, buff_size, ev, -1);
g_free(buf);
} else {
struct hal_ev_remote_device_props *ev = NULL;
ev->status = HAL_STATUS_SUCCESS;
bdaddr2android(bdaddr, ev->bdaddr);
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_BLUETOOTH,
+ ipc_send(notification_sk, HAL_SERVICE_ID_BLUETOOTH,
HAL_EV_REMOTE_DEVICE_PROPS, buff_size, ev, -1);
g_free(buf);
}
hal_ev.state = HAL_ACL_STATE_CONNECTED;
bdaddr2android(&ev->addr.bdaddr, hal_ev.bdaddr);
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_BLUETOOTH,
+ ipc_send(notification_sk, HAL_SERVICE_ID_BLUETOOTH,
HAL_EV_ACL_STATE_CHANGED, sizeof(hal_ev), &hal_ev, -1);
}
hal_ev.state = HAL_ACL_STATE_DISCONNECTED;
bdaddr2android(&ev->addr.bdaddr, hal_ev.bdaddr);
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_BLUETOOTH,
+ ipc_send(notification_sk, HAL_SERVICE_ID_BLUETOOTH,
HAL_EV_ACL_STATE_CHANGED, sizeof(hal_ev), &hal_ev, -1);
}
ev->props[0].len = sizeof(bdaddr_t);
bdaddr2android(&adapter->bdaddr, ev->props[0].val);
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_BLUETOOTH, HAL_EV_ADAPTER_PROPS_CHANGED,
- len, ev, -1);
+ ipc_send(notification_sk, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_EV_ADAPTER_PROPS_CHANGED, len, ev, -1);
g_free(ev);
}
return browse_remote_sdp(&addr);
}
-void bt_adapter_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
- uint16_t len)
+void bt_adapter_handle_cmd(int sk, uint8_t opcode, void *buf, uint16_t len)
{
uint8_t status = HAL_STATUS_FAILED;
- int sk = g_io_channel_unix_get_fd(io);
switch (opcode) {
case HAL_OP_ENABLE:
return &adapter->bdaddr;
}
-bool bt_adapter_register(GIOChannel *io)
+bool bt_adapter_register(int sk)
{
DBG("");
- notification_io = g_io_channel_ref(io);
+ notification_sk = sk;
return true;
}
{
DBG("");
- g_io_channel_unref(notification_io);
- notification_io = NULL;
+ notification_sk = -1;
}
diff --git a/android/adapter.h b/android/adapter.h
index 2afc67a..08f4f48 100644
--- a/android/adapter.h
+++ b/android/adapter.h
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
-#include <glib.h>
#include "lib/bluetooth.h"
void bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
bt_adapter_ready cb);
-void bt_adapter_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
- uint16_t len);
+void bt_adapter_handle_cmd(int sk, uint8_t opcode, void *buf, uint16_t len);
const bdaddr_t *bt_adapter_get_address(void);
-bool bt_adapter_register(GIOChannel *io);
+bool bt_adapter_register(int sk);
void bt_adapter_unregister(void);
diff --git a/android/hid.c b/android/hid.c
index 6122c9b..93b828c 100644
--- a/android/hid.c
+++ b/android/hid.c
/* HID GET REPORT Size Field */
#define HID_GET_REPORT_SIZE_FIELD 0x08
-static GIOChannel *notification_io = NULL;
+static int notification_sk = -1;
static GIOChannel *ctrl_io = NULL;
static GIOChannel *intr_io = NULL;
static GSList *devices = NULL;
bdaddr2android(&dev->dst, ev.bdaddr);
ev.state = state;
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_HIDHOST,
+ ipc_send(notification_sk, HAL_SERVICE_ID_HIDHOST,
HAL_EV_HID_CONN_STATE, sizeof(ev), &ev, -1);
}
ev.mode = HAL_HID_UNSUPPORTED_PROTOCOL;
}
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_HIDHOST,
+ ipc_send(notification_sk, HAL_SERVICE_ID_HIDHOST,
HAL_EV_HID_PROTO_MODE, sizeof(ev), &ev, -1);
}
}
send:
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_HIDHOST, HAL_EV_HID_GET_REPORT,
- ev_len, ev, -1);
+ ipc_send(notification_sk, HAL_SERVICE_ID_HIDHOST,
+ HAL_EV_HID_GET_REPORT, ev_len, ev, -1);
g_free(ev);
}
memset(ev.descr, 0, sizeof(ev.descr));
memcpy(ev.descr, dev->rd_data, ev.descr_len);
- ipc_send(g_io_channel_unix_get_fd(notification_io),
- HAL_SERVICE_ID_HIDHOST, HAL_EV_HID_INFO,
+ ipc_send(notification_sk, HAL_SERVICE_ID_HIDHOST, HAL_EV_HID_INFO,
sizeof(ev), &ev, -1);
}
return HAL_STATUS_FAILED;
}
-void bt_hid_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf, uint16_t len)
+void bt_hid_handle_cmd(int sk, uint8_t opcode, void *buf, uint16_t len)
{
uint8_t status = HAL_STATUS_FAILED;
break;
}
- ipc_send_rsp(g_io_channel_unix_get_fd(io), HAL_SERVICE_ID_HIDHOST,
- status);
+ ipc_send_rsp(sk, HAL_SERVICE_ID_HIDHOST, status);
}
static void connect_cb(GIOChannel *chan, GError *err, gpointer user_data)
}
}
-bool bt_hid_register(GIOChannel *io, const bdaddr_t *addr)
+bool bt_hid_register(int sk, const bdaddr_t *addr)
{
GError *err = NULL;
const bdaddr_t *src = bt_adapter_get_address();
DBG("");
- notification_io = g_io_channel_ref(io);
-
ctrl_io = bt_io_listen(connect_cb, NULL, NULL, NULL, &err,
BT_IO_OPT_SOURCE_BDADDR, src,
BT_IO_OPT_PSM, L2CAP_PSM_HIDP_CTRL,
return false;
}
+ notification_sk = sk;
+
return true;
}
{
DBG("");
- g_io_channel_unref(notification_io);
- notification_io = NULL;
+ notification_sk = -1;
if (ctrl_io) {
g_io_channel_shutdown(ctrl_io, TRUE, NULL);
diff --git a/android/hid.h b/android/hid.h
index 674b35a..688086a 100644
--- a/android/hid.h
+++ b/android/hid.h
*
*/
-void bt_hid_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf, uint16_t len);
+void bt_hid_handle_cmd(int sk, uint8_t opcode, void *buf, uint16_t len);
-bool bt_hid_register(GIOChannel *io, const bdaddr_t *addr);
+bool bt_hid_register(int sk, const bdaddr_t *addr);
void bt_hid_unregister(void);
diff --git a/android/main.c b/android/main.c
index 558ca11..2c587b1 100644
--- a/android/main.c
+++ b/android/main.c
{
struct hal_cmd_register_module *m = buf;
const bdaddr_t *adapter_bdaddr = bt_adapter_get_address();
+ int sk = g_io_channel_unix_get_fd(hal_notif_io);
if (m->service_id > HAL_SERVICE_ID_MAX || services[m->service_id])
goto failed;
switch (m->service_id) {
case HAL_SERVICE_ID_BLUETOOTH:
- if (!bt_adapter_register(hal_notif_io))
+ if (!bt_adapter_register(sk))
goto failed;
break;
case HAL_SERVICE_ID_SOCK:
- if (!bt_socket_register(hal_notif_io, adapter_bdaddr))
+ if (!bt_socket_register(sk, adapter_bdaddr))
goto failed;
break;
case HAL_SERVICE_ID_HIDHOST:
- if (!bt_hid_register(hal_notif_io, adapter_bdaddr))
+ if (!bt_hid_register(sk, adapter_bdaddr))
goto failed;
break;
case HAL_SERVICE_ID_A2DP:
- if (!bt_a2dp_register(hal_notif_io, adapter_bdaddr))
+ if (!bt_a2dp_register(sk, adapter_bdaddr))
goto failed;
break;
case HAL_SERVICE_ID_PAN:
- if (!bt_a2dp_register(hal_notif_io, adapter_bdaddr))
+ if (!bt_a2dp_register(sk, adapter_bdaddr))
goto failed;
break;
handle_service_core(msg->opcode, buf + sizeof(*msg), msg->len);
break;
case HAL_SERVICE_ID_BLUETOOTH:
- bt_adapter_handle_cmd(hal_cmd_io, msg->opcode, msg->payload,
- msg->len);
+ bt_adapter_handle_cmd(fd, msg->opcode, msg->payload, msg->len);
break;
case HAL_SERVICE_ID_HIDHOST:
- bt_hid_handle_cmd(hal_cmd_io, msg->opcode, msg->payload,
- msg->len);
+ bt_hid_handle_cmd(fd, msg->opcode, msg->payload, msg->len);
break;
case HAL_SERVICE_ID_SOCK:
- bt_sock_handle_cmd(hal_cmd_io, msg->opcode, msg->payload,
- msg->len);
+ bt_sock_handle_cmd(fd, msg->opcode, msg->payload, msg->len);
break;
case HAL_SERVICE_ID_A2DP:
- bt_a2dp_handle_cmd(hal_cmd_io, msg->opcode, msg->payload,
- msg->len);
+ bt_a2dp_handle_cmd(fd, msg->opcode, msg->payload, msg->len);
break;
case HAL_SERVICE_ID_PAN:
- bt_pan_handle_cmd(hal_cmd_io, msg->opcode, msg->payload,
- msg->len);
+ bt_pan_handle_cmd(fd, msg->opcode, msg->payload, msg->len);
break;
default:
ipc_send_rsp(fd, msg->service_id, HAL_STATUS_FAILED);
diff --git a/android/pan.c b/android/pan.c
index 0f6f1c7..061e611 100644
--- a/android/pan.c
+++ b/android/pan.c
#include "hal-msg.h"
#include "ipc.h"
-static GIOChannel *notification_io = NULL;
+static int notification_sk = -1;
static uint8_t bt_pan_enable(struct hal_cmd_pan_enable *cmd, uint16_t len)
{
return HAL_STATUS_FAILED;
}
-void bt_pan_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
- uint16_t len)
+void bt_pan_handle_cmd(int sk, uint8_t opcode, void *buf, uint16_t len)
{
uint8_t status = HAL_STATUS_FAILED;
break;
}
- ipc_send_rsp(g_io_channel_unix_get_fd(io), HAL_SERVICE_ID_A2DP,
- status);
+ ipc_send_rsp(sk, HAL_SERVICE_ID_A2DP, status);
}
-bool bt_pan_register(GIOChannel *io, const bdaddr_t *addr)
+bool bt_pan_register(int sk, const bdaddr_t *addr)
{
DBG("");
- notification_io = g_io_channel_ref(io);
+ notification_sk = sk;
return true;
}
{
DBG("");
- g_io_channel_unref(notification_io);
- notification_io = NULL;
+ notification_sk = -1;
}
diff --git a/android/pan.h b/android/pan.h
index 1ffba9d..2430378 100644
--- a/android/pan.h
+++ b/android/pan.h
*
*/
-void bt_pan_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf, uint16_t len);
+void bt_pan_handle_cmd(int sk, uint8_t opcode, void *buf, uint16_t len);
-bool bt_pan_register(GIOChannel *io, const bdaddr_t *addr);
+bool bt_pan_register(int sk, const bdaddr_t *addr);
void bt_pan_unregister(void);
diff --git a/android/socket.c b/android/socket.c
index c1b0c1d..c283c5f 100644
--- a/android/socket.c
+++ b/android/socket.c
return -1;
}
-void bt_sock_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
- uint16_t len)
+void bt_sock_handle_cmd(int sk, uint8_t opcode, void *buf, uint16_t len)
{
- int sk = g_io_channel_unix_get_fd(io);
int fd;
switch (opcode) {
ipc_send_rsp(sk, HAL_SERVICE_ID_SOCK, HAL_STATUS_FAILED);
}
-bool bt_socket_register(GIOChannel *io, const bdaddr_t *addr)
+bool bt_socket_register(int sk, const bdaddr_t *addr)
{
DBG("");
diff --git a/android/socket.h b/android/socket.h
index 2b3b940..7aa5574 100644
--- a/android/socket.h
+++ b/android/socket.h
*
*/
-void bt_sock_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
- uint16_t len);
+void bt_sock_handle_cmd(int sk, uint8_t opcode, void *buf, uint16_t len);
-bool bt_socket_register(GIOChannel *io, const bdaddr_t *addr);
+bool bt_socket_register(int sk, const bdaddr_t *addr);
void bt_socket_unregister(void);