diff --git a/android/a2dp.c b/android/a2dp.c
index 28ab4b1..ab7719f 100644
--- a/android/a2dp.c
+++ b/android/a2dp.c
break;
}
- ipc_send_rsp(io, HAL_SERVICE_ID_A2DP, status);
+ ipc_send_rsp(g_io_channel_unix_get_fd(io), HAL_SERVICE_ID_A2DP,
+ status);
}
bool bt_a2dp_register(GIOChannel *io, const bdaddr_t *addr)
diff --git a/android/adapter.c b/android/adapter.c
index 1d462c8..927b2d7 100644
--- a/android/adapter.c
+++ b/android/adapter.c
ev->props[0].len = len;
memcpy(ev->props->val, name, len);
- ipc_send(notification_io, HAL_SERVICE_ID_BLUETOOTH,
- HAL_EV_ADAPTER_PROPS_CHANGED, sizeof(buf), ev, -1);
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ 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(notification_io, HAL_SERVICE_ID_BLUETOOTH,
- HAL_EV_ADAPTER_STATE_CHANGED, sizeof(ev), &ev, -1);
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ 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(notification_io, HAL_SERVICE_ID_BLUETOOTH,
- HAL_EV_ADAPTER_PROPS_CHANGED, len, ev, -1);
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ 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(notification_io, HAL_SERVICE_ID_BLUETOOTH,
- HAL_EV_ADAPTER_PROPS_CHANGED, len, ev, -1);
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ HAL_SERVICE_ID_BLUETOOTH, HAL_EV_ADAPTER_PROPS_CHANGED,
+ len, ev, -1);
g_free(ev);
}
ev.state = state;
bdaddr2android(addr, ev.bdaddr);
- ipc_send(notification_io, HAL_SERVICE_ID_BLUETOOTH,
- HAL_EV_BOND_STATE_CHANGED, sizeof(ev), &ev, -1);
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ 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(notification_io, HAL_SERVICE_ID_BLUETOOTH,
- HAL_EV_REMOTE_DEVICE_PROPS, len, ev, -1);
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ 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(notification_io, HAL_SERVICE_ID_BLUETOOTH, HAL_EV_PIN_REQUEST,
- sizeof(hal_ev), &hal_ev, -1);
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ 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(notification_io, HAL_SERVICE_ID_BLUETOOTH, HAL_EV_SSP_REQUEST,
- sizeof(ev), &ev, -1);
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ 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(notification_io, HAL_SERVICE_ID_BLUETOOTH,
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ HAL_SERVICE_ID_BLUETOOTH,
HAL_EV_DISCOVERY_STATE_CHANGED,
sizeof(cp), &cp, -1);
}
ev->num_props += fill_device_props(prop, remote, eir.class,
rssi, eir.name);
- ipc_send(notification_io, HAL_SERVICE_ID_BLUETOOTH,
- HAL_EV_DEVICE_FOUND,
- buff_size, ev, -1);
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ 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(notification_io, HAL_SERVICE_ID_BLUETOOTH,
- HAL_EV_REMOTE_DEVICE_PROPS,
- buff_size, ev, -1);
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ 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(notification_io, HAL_SERVICE_ID_BLUETOOTH,
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ 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(notification_io, HAL_SERVICE_ID_BLUETOOTH,
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ 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(notification_io, HAL_SERVICE_ID_BLUETOOTH,
- HAL_EV_ADAPTER_PROPS_CHANGED, len, ev, -1);
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ HAL_SERVICE_ID_BLUETOOTH, HAL_EV_ADAPTER_PROPS_CHANGED,
+ len, ev, -1);
g_free(ev);
}
uint16_t len)
{
uint8_t status = HAL_STATUS_FAILED;
+ int sk = g_io_channel_unix_get_fd(io);
switch (opcode) {
case HAL_OP_ENABLE:
goto error;
}
- ipc_send(io, HAL_SERVICE_ID_BLUETOOTH, opcode, 0, NULL, -1);
+ ipc_send(sk, HAL_SERVICE_ID_BLUETOOTH, opcode, 0, NULL, -1);
return;
error:
error("Error handling command 0x%02x status %u", opcode, status);
- ipc_send_rsp(io, HAL_SERVICE_ID_BLUETOOTH, status);
+ ipc_send_rsp(sk, HAL_SERVICE_ID_BLUETOOTH, status);
}
const bdaddr_t *bt_adapter_get_address(void)
diff --git a/android/hid.c b/android/hid.c
index c38c4c1..6122c9b 100644
--- a/android/hid.c
+++ b/android/hid.c
bdaddr2android(&dev->dst, ev.bdaddr);
ev.state = state;
- ipc_send(notification_io, HAL_SERVICE_ID_HIDHOST,
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ HAL_SERVICE_ID_HIDHOST,
HAL_EV_HID_CONN_STATE, sizeof(ev), &ev, -1);
}
ev.mode = HAL_HID_UNSUPPORTED_PROTOCOL;
}
- ipc_send(notification_io, HAL_SERVICE_ID_HIDHOST,
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ HAL_SERVICE_ID_HIDHOST,
HAL_EV_HID_PROTO_MODE, sizeof(ev), &ev, -1);
}
}
send:
- ipc_send(notification_io, HAL_SERVICE_ID_HIDHOST, HAL_EV_HID_GET_REPORT,
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ 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(notification_io, HAL_SERVICE_ID_HIDHOST, HAL_EV_HID_INFO,
+ ipc_send(g_io_channel_unix_get_fd(notification_io),
+ HAL_SERVICE_ID_HIDHOST, HAL_EV_HID_INFO,
sizeof(ev), &ev, -1);
}
break;
}
- ipc_send_rsp(io, HAL_SERVICE_ID_HIDHOST, status);
+ ipc_send_rsp(g_io_channel_unix_get_fd(io), HAL_SERVICE_ID_HIDHOST,
+ status);
}
static void connect_cb(GIOChannel *chan, GError *err, gpointer user_data)
diff --git a/android/ipc.c b/android/ipc.c
index e672bf8..9a8657d 100644
--- a/android/ipc.c
+++ b/android/ipc.c
#include <signal.h>
#include <sys/socket.h>
-#include <glib.h>
-
#include "hal-msg.h"
#include "ipc.h"
#include "log.h"
-void ipc_send(GIOChannel *io, uint8_t service_id, uint8_t opcode, uint16_t len,
+void ipc_send(int sk, uint8_t service_id, uint8_t opcode, uint16_t len,
void *param, int fd)
{
struct msghdr msg;
msg.msg_controllen = sizeof(cmsgbuf);
}
- if (sendmsg(g_io_channel_unix_get_fd(io), &msg, 0) < 0) {
+ if (sendmsg(sk, &msg, 0) < 0) {
error("IPC send failed, terminating :%s", strerror(errno));
raise(SIGTERM);
}
}
-void ipc_send_rsp(GIOChannel *io, uint8_t service_id, uint8_t status)
+void ipc_send_rsp(int sk, uint8_t service_id, uint8_t status)
{
struct hal_status s;
s.code = status;
- ipc_send(io, service_id, HAL_OP_STATUS, sizeof(s), &s, -1);
+ ipc_send(sk, service_id, HAL_OP_STATUS, sizeof(s), &s, -1);
}
diff --git a/android/ipc.h b/android/ipc.h
index 093c84c..cf0f3d6 100644
--- a/android/ipc.h
+++ b/android/ipc.h
*
*/
-void ipc_send(GIOChannel *io, uint8_t service_id, uint8_t opcode, uint16_t len,
+void ipc_send(int sk, uint8_t service_id, uint8_t opcode, uint16_t len,
void *param, int fd);
-void ipc_send_rsp(GIOChannel *io, uint8_t service_id, uint8_t status);
+void ipc_send_rsp(int sk, uint8_t service_id, uint8_t status);
diff --git a/android/main.c b/android/main.c
index 75004cf..558ca11 100644
--- a/android/main.c
+++ b/android/main.c
services[m->service_id] = true;
- ipc_send(hal_cmd_io, HAL_SERVICE_ID_CORE, HAL_OP_REGISTER_MODULE, 0,
- NULL, -1);
+ ipc_send(g_io_channel_unix_get_fd(hal_cmd_io), HAL_SERVICE_ID_CORE,
+ HAL_OP_REGISTER_MODULE, 0, NULL, -1);
info("Service ID=%u registered", m->service_id);
return;
failed:
- ipc_send_rsp(hal_cmd_io, HAL_SERVICE_ID_CORE, HAL_STATUS_FAILED);
+ ipc_send_rsp(g_io_channel_unix_get_fd(hal_cmd_io),
+ HAL_SERVICE_ID_CORE, HAL_STATUS_FAILED);
}
static void service_unregister(void *buf, uint16_t len)
services[m->service_id] = false;
- ipc_send(hal_cmd_io, HAL_SERVICE_ID_CORE, HAL_OP_UNREGISTER_MODULE,
- 0, NULL, -1);
+ ipc_send(g_io_channel_unix_get_fd(hal_cmd_io), HAL_SERVICE_ID_CORE,
+ HAL_OP_UNREGISTER_MODULE, 0, NULL, -1);
info("Service ID=%u unregistered", m->service_id);
return;
failed:
- ipc_send_rsp(hal_cmd_io, HAL_SERVICE_ID_CORE, HAL_STATUS_FAILED);
+ ipc_send_rsp(g_io_channel_unix_get_fd(hal_cmd_io),
+ HAL_SERVICE_ID_CORE, HAL_STATUS_FAILED);
}
static void handle_service_core(uint8_t opcode, void *buf, uint16_t len)
service_unregister(buf, len);
break;
default:
- ipc_send_rsp(hal_cmd_io, HAL_SERVICE_ID_CORE,
- HAL_STATUS_FAILED);
+ ipc_send_rsp(g_io_channel_unix_get_fd(hal_cmd_io),
+ HAL_SERVICE_ID_CORE, HAL_STATUS_FAILED);
break;
}
}
msg->len);
break;
default:
- ipc_send_rsp(hal_cmd_io, msg->service_id, HAL_STATUS_FAILED);
+ ipc_send_rsp(fd, msg->service_id, HAL_STATUS_FAILED);
break;
}
diff --git a/android/pan.c b/android/pan.c
index 0cc3590..0f6f1c7 100644
--- a/android/pan.c
+++ b/android/pan.c
break;
}
- ipc_send_rsp(io, HAL_SERVICE_ID_A2DP, status);
+ ipc_send_rsp(g_io_channel_unix_get_fd(io), HAL_SERVICE_ID_A2DP,
+ status);
}
bool bt_pan_register(GIOChannel *io, const bdaddr_t *addr)
diff --git a/android/socket.c b/android/socket.c
index e32be46..c1b0c1d 100644
--- a/android/socket.c
+++ b/android/socket.c
void bt_sock_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
uint16_t len)
{
+ int sk = g_io_channel_unix_get_fd(io);
int fd;
switch (opcode) {
if (fd < 0)
break;
- ipc_send(io, HAL_SERVICE_ID_SOCK, opcode, 0, NULL, fd);
+ ipc_send(sk, HAL_SERVICE_ID_SOCK, opcode, 0, NULL, fd);
return;
case HAL_OP_SOCK_CONNECT:
fd = handle_connect(buf);
if (fd < 0)
break;
- ipc_send(io, HAL_SERVICE_ID_SOCK, opcode, 0, NULL, fd);
+ ipc_send(sk, HAL_SERVICE_ID_SOCK, opcode, 0, NULL, fd);
return;
default:
DBG("Unhandled command, opcode 0x%x", opcode);
break;
}
- ipc_send_rsp(io, HAL_SERVICE_ID_SOCK, HAL_STATUS_FAILED);
+ ipc_send_rsp(sk, HAL_SERVICE_ID_SOCK, HAL_STATUS_FAILED);
}
bool bt_socket_register(GIOChannel *io, const bdaddr_t *addr)