From 2d7c9e3450bc11d8a1877d791fc4196116ed6d39 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Mon, 27 May 2013 18:30:16 +0300 Subject: [PATCH] shared: Add new connection callback API to hciemu --- src/shared/hciemu.c | 19 +++++++++++++++++++ src/shared/hciemu.h | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/src/shared/hciemu.c b/src/shared/hciemu.c index 3930c9987..783f000ce 100644 --- a/src/shared/hciemu.c +++ b/src/shared/hciemu.c @@ -51,6 +51,8 @@ struct hciemu { guint client_source; GList *post_command_hooks; char bdaddr_str[18]; + hciemu_new_conn_cb new_conn_cb; + void *new_conn_data; hciemu_scan_enable_cb scan_enable_cb; void *scan_enable_data; }; @@ -240,6 +242,21 @@ static void client_cmd_complete(uint16_t opcode, uint8_t status, } } +static void client_new_conn(uint16_t handle, void *user_data) +{ + struct hciemu *hciemu = user_data; + + if (hciemu->new_conn_cb) + hciemu->new_conn_cb(handle, hciemu->new_conn_data); +} + +void hciemu_set_new_conn_cb(struct hciemu *hciemu, hciemu_new_conn_cb cb, + void *user_data) +{ + hciemu->new_conn_cb = cb; + hciemu->new_conn_data = user_data; +} + static bool create_stack(struct hciemu *hciemu) { struct btdev *btdev; @@ -258,6 +275,8 @@ static bool create_stack(struct hciemu *hciemu) bthost_set_cmd_complete_cb(bthost, client_cmd_complete, hciemu); + bthost_set_connect_cb(bthost, client_new_conn, hciemu); + btdev_set_command_handler(btdev, client_command_callback, hciemu); if (socketpair(AF_UNIX, SOCK_SEQPACKET | SOCK_NONBLOCK | SOCK_CLOEXEC, diff --git a/src/shared/hciemu.h b/src/shared/hciemu.h index 6f5c458e5..9d749377e 100644 --- a/src/shared/hciemu.h +++ b/src/shared/hciemu.h @@ -37,6 +37,11 @@ struct hciemu *hciemu_new(enum hciemu_type type); struct hciemu *hciemu_ref(struct hciemu *hciemu); void hciemu_unref(struct hciemu *hciemu); +typedef void (*hciemu_new_conn_cb) (uint16_t handle, void *user_data); + +void hciemu_set_new_conn_cb(struct hciemu *hciemu, hciemu_new_conn_cb cb, + void *user_data); + typedef void (*hciemu_scan_enable_cb)(uint8_t status, void *user_data); void hciemu_client_scan_enable(struct hciemu *hciemu, uint8_t scan, -- 2.47.3