From: Sheldon Demario <sheldon.demario@openbossa.org>
To: linux-bluetooth@vger.kernel.org
Cc: Sheldon Demario <sheldon.demario@openbossa.org>
Subject: [PATCH] Emit Connect signal for LE capable devices
Date: Thu, 25 Nov 2010 12:22:49 -0500 [thread overview]
Message-ID: <1290705769-15487-1-git-send-email-sheldon.demario@openbossa.org> (raw)
---
plugins/hciops.c | 61 ++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 43 insertions(+), 18 deletions(-)
diff --git a/plugins/hciops.c b/plugins/hciops.c
index 9abe477..308908a 100644
--- a/plugins/hciops.c
+++ b/plugins/hciops.c
@@ -1207,12 +1207,14 @@ static inline void remote_features_information(int index, void *ptr)
write_features_info(&BDADDR(index), &dba, evt->features, NULL);
}
-static inline void conn_complete(int index, void *ptr)
+static inline void conn_complete(int index, gboolean le, void *ptr)
{
- evt_conn_complete *evt = ptr;
char filename[PATH_MAX];
char local_addr[18], peer_addr[18], *str;
struct btd_adapter *adapter;
+ bdaddr_t *evt_bdaddr;
+ uint16_t evt_handle;
+ uint8_t evt_status;
adapter = manager_find_adapter(&BDADDR(index));
if (!adapter) {
@@ -1220,27 +1222,39 @@ static inline void conn_complete(int index, void *ptr)
return;
}
- if (evt->link_type != ACL_LINK)
- return;
+ if (le) {
+ evt_le_connection_complete *evt = ptr;
+ evt_bdaddr = &evt->peer_bdaddr;
+ evt_handle = evt->handle;
+ evt_status = evt->status;
+ } else {
+ evt_conn_complete *evt = ptr;
+ evt_bdaddr = &evt->bdaddr;
+ evt_handle = evt->handle;
+ evt_status = evt->status;
+
+ if (evt->link_type != ACL_LINK)
+ return;
+ }
- btd_event_conn_complete(&BDADDR(index), evt->status,
- btohs(evt->handle), &evt->bdaddr);
+ btd_event_conn_complete(&BDADDR(index), evt_status,
+ btohs(evt_handle), evt_bdaddr);
- if (evt->status)
+ if (evt_status)
return;
- update_lastused(&BDADDR(index), &evt->bdaddr);
+ update_lastused(&BDADDR(index), evt_bdaddr);
/* check if the remote version needs be requested */
ba2str(&BDADDR(index), local_addr);
- ba2str(&evt->bdaddr, peer_addr);
+ ba2str(evt_bdaddr, peer_addr);
create_name(filename, sizeof(filename), STORAGEDIR, local_addr,
"manufacturers");
str = textfile_get(filename, peer_addr);
if (!str)
- btd_adapter_get_remote_version(adapter, btohs(evt->handle),
+ btd_adapter_get_remote_version(adapter, btohs(evt_handle),
TRUE);
else
free(str);
@@ -1282,17 +1296,11 @@ static inline void conn_request(int index, void *ptr)
btd_event_remote_class(&BDADDR(index), &evt->bdaddr, class);
}
-static inline void le_metaevent(int index, void *ptr)
+static inline void le_advertising_report(int index, evt_le_meta_event *meta)
{
- evt_le_meta_event *meta = ptr;
le_advertising_info *info;
uint8_t num, i;
- DBG("LE Meta Event");
-
- if (meta->subevent != EVT_LE_ADVERTISING_REPORT)
- return;
-
num = meta->data[0];
info = (le_advertising_info *) (meta->data + 1);
@@ -1302,6 +1310,23 @@ static inline void le_metaevent(int index, void *ptr)
}
}
+static inline void le_metaevent(int index, void *ptr)
+{
+ evt_le_meta_event *meta = ptr;
+
+ DBG("LE Meta Event");
+
+ switch (meta->subevent) {
+ case EVT_LE_ADVERTISING_REPORT:
+ le_advertising_report(index, meta);
+ break;
+
+ case EVT_LE_CONN_COMPLETE:
+ conn_complete(index, TRUE, meta->data);
+ break;
+ }
+}
+
static void stop_hci_dev(int index)
{
GIOChannel *chan = CHANNEL(index);
@@ -1399,7 +1424,7 @@ static gboolean io_security_event(GIOChannel *chan, GIOCondition cond,
break;
case EVT_CONN_COMPLETE:
- conn_complete(index, ptr);
+ conn_complete(index, FALSE, ptr);
break;
case EVT_DISCONN_COMPLETE:
--
1.7.3.2
next reply other threads:[~2010-11-25 17:22 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-25 17:22 Sheldon Demario [this message]
2010-11-29 12:52 ` [PATCH] Emit Connect signal for LE capable devices Johan Hedberg
2010-11-29 13:34 ` Sheldon Demario
2010-11-29 14:05 ` Johan Hedberg
2010-11-29 18:36 ` [PATCH v2] " Sheldon Demario
2010-11-29 20:22 ` Johan Hedberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1290705769-15487-1-git-send-email-sheldon.demario@openbossa.org \
--to=sheldon.demario@openbossa.org \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).