From bf0b30d964f6a48ac67e4bc56b159c2b38d5b64c Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Mon, 7 Jan 2013 17:33:22 +0200 Subject: [PATCH] core: Move mgmt device block/unblock event handling into adapter code --- src/adapter.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/mgmt.c | 48 ++--------------------------------------------- 2 files changed, 54 insertions(+), 46 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index b12dd330c..c7c0ce034 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -4899,6 +4899,48 @@ static void connected_callback(uint16_t index, uint16_t length, eir_data_free(&eir_data); } +static void device_blocked_callback(uint16_t index, uint16_t length, + const void *param, void *user_data) +{ + const struct mgmt_ev_device_blocked *ev = param; + struct btd_adapter *adapter = user_data; + struct btd_device *device; + char addr[18]; + + if (length < sizeof(*ev)) { + error("Too small device blocked event"); + return; + } + + ba2str(&ev->addr.bdaddr, addr); + DBG("hci%u %s blocked", index, addr); + + device = adapter_find_device(adapter, addr); + if (device) + device_block(device, TRUE); +} + +static void device_unblocked_callback(uint16_t index, uint16_t length, + const void *param, void *user_data) +{ + const struct mgmt_ev_device_unblocked *ev = param; + struct btd_adapter *adapter = user_data; + struct btd_device *device; + char addr[18]; + + if (length < sizeof(*ev)) { + error("Too small device unblocked event"); + return; + } + + ba2str(&ev->addr.bdaddr, addr); + DBG("hci%u %s unblocked", index, addr); + + device = adapter_find_device(adapter, addr); + if (device) + device_unblock(device, FALSE, TRUE); +} + static void connect_failed_callback(uint16_t index, uint16_t length, const void *param, void *user_data) { @@ -5073,6 +5115,16 @@ static void read_info_complete(uint8_t status, uint16_t length, adapter->dev_id, new_long_term_key_callback, adapter, NULL); + + mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_BLOCKED, + adapter->dev_id, + device_blocked_callback, + adapter, NULL); + mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_UNBLOCKED, + adapter->dev_id, + device_unblocked_callback, + adapter, NULL); + set_dev_class(adapter, adapter->major_class, adapter->minor_class); set_name(adapter, btd_adapter_get_name(adapter)); diff --git a/src/mgmt.c b/src/mgmt.c index f119fffaf..4dff8cd45 100644 --- a/src/mgmt.c +++ b/src/mgmt.c @@ -380,50 +380,6 @@ static void mgmt_cmd_status(uint16_t index, void *buf, size_t len) ev->status); } -static void mgmt_device_blocked(uint16_t index, void *buf, size_t len) -{ - struct btd_adapter *adapter; - struct btd_device *device; - struct mgmt_ev_device_blocked *ev = buf; - char addr[18]; - - if (len < sizeof(*ev)) { - error("Too small mgmt_device_blocked event packet"); - return; - } - - ba2str(&ev->addr.bdaddr, addr); - DBG("Device blocked, index %u, addr %s", index, addr); - - if (!get_adapter_and_device(index, &ev->addr, &adapter, &device, false)) - return; - - if (device) - device_block(device, TRUE); -} - -static void mgmt_device_unblocked(uint16_t index, void *buf, size_t len) -{ - struct btd_adapter *adapter; - struct btd_device *device; - struct mgmt_ev_device_unblocked *ev = buf; - char addr[18]; - - if (len < sizeof(*ev)) { - error("Too small mgmt_device_unblocked event packet"); - return; - } - - ba2str(&ev->addr.bdaddr, addr); - DBG("Device unblocked, index %u, addr %s", index, addr); - - if (!get_adapter_and_device(index, &ev->addr, &adapter, &device, false)) - return; - - if (device) - device_unblock(device, FALSE, TRUE); -} - static gboolean mgmt_event(GIOChannel *channel, GIOCondition cond, gpointer user_data) { @@ -514,10 +470,10 @@ static gboolean mgmt_event(GIOChannel *channel, GIOCondition cond, DBG("discovering event"); break; case MGMT_EV_DEVICE_BLOCKED: - mgmt_device_blocked(index, buf + MGMT_HDR_SIZE, len); + DBG("device_blocked event"); break; case MGMT_EV_DEVICE_UNBLOCKED: - mgmt_device_unblocked(index, buf + MGMT_HDR_SIZE, len); + DBG("device_unblocked event"); break; case MGMT_EV_DEVICE_UNPAIRED: DBG("device_unpaired event"); -- 2.47.3