2011-02-14 21:59:56

by Anderson Briglia

[permalink] [raw]
Subject: [RFC 1/5] Bluetooth: Implement advertising report meta event

From: Anderson Briglia <[email protected]>

This patch implements new LE meta event in order to handle advertising
reports.

Signed-off-by: Anderson Briglia <[email protected]>
---
include/net/bluetooth/hci.h | 18 ++++++++++++++++++
net/bluetooth/hci_event.c | 22 ++++++++++++++++++++++
2 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 46438f4..5180555 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -980,6 +980,24 @@ struct hci_ev_le_conn_complete {
__u8 clk_accurancy;
} __packed;

+#define ADV_IND 0x00
+#define ADV_DIRECT_IND 0x01
+#define ADV_SCAN_IND 0x02
+#define ADV_NONCONN_IND 0x03
+#define SCAN_RSP 0x04
+
+#define ADDR_DEV_PUBLIC 0x00
+#define ADDR_DEV_RANDOM 0x01
+
+#define HCI_EV_LE_ADVERTISING_REPORT 0x02
+struct hci_ev_le_advertising_info {
+ __u8 evt_type;
+ __u8 bdaddr_type;
+ bdaddr_t bdaddr;
+ __u8 length;
+ __u8 data[0];
+} __packed;
+
#define HCI_EV_LE_LTK_REQ 0x05
struct hci_ev_le_ltk_req {
__le16 handle;
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 99c75f4..987f5de 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -2498,6 +2498,25 @@ static inline void hci_le_ltk_request_evt(struct hci_dev *hdev,
hci_dev_unlock(hdev);
}

+static inline void hci_le_adv_report_evt(struct hci_dev *hdev,
+ struct sk_buff *skb)
+{
+ struct hci_ev_le_advertising_info *ev;
+ u8 num_reports, i;
+
+ num_reports = (u8) skb->data[0];
+
+ ev = (struct hci_ev_le_advertising_info *) (skb->data + 1);
+
+ BT_DBG("adv from: %s", batostr(&ev->bdaddr));
+
+ for (i = 1; i < num_reports; i++) {
+ ev = (struct hci_ev_le_advertising_info *)
+ (ev->data + ev->length + 1);
+ BT_DBG("adv from: %s", batostr(&ev->bdaddr));
+ }
+}
+
static inline void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
{
struct hci_ev_le_meta *le_ev = (void *) skb->data;
@@ -2513,6 +2532,9 @@ static inline void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
hci_le_ltk_request_evt(hdev, skb);
break;

+ case HCI_EV_LE_ADVERTISING_REPORT:
+ hci_le_adv_report_evt(hdev, skb);
+
default:
break;
}
--
1.7.1



2011-02-15 13:44:22

by Gustavo Padovan

[permalink] [raw]
Subject: Re: [RFC 1/5] Bluetooth: Implement advertising report meta event

Hi Briglia,

Top posting is not allowed in this mailing list. Please stop it.

* Anderson Briglia <[email protected]> [2011-02-15 10:10:12 -0300]:

> Thanks for reviewing. I'll add that missing "break", but the other
> tips are not so relevant since we should gain just 2 characters.
>
> On Mon, Feb 14, 2011 at 7:23 PM, Anderson Lizardo
> <[email protected]> wrote:
> >
> > Hi Briglia,
> >
> > On Mon, Feb 14, 2011 at 6:59 PM, ?<[email protected]> wrote:
> > > From: Anderson Briglia <[email protected]>
> > >
> > > This patch implements new LE meta event in order to handle advertising
> > > reports.
> > >
> > > Signed-off-by: Anderson Briglia <[email protected]>
> > > ---
> > > ?include/net/bluetooth/hci.h | ? 18 ++++++++++++++++++
> > > ?net/bluetooth/hci_event.c ? | ? 22 ++++++++++++++++++++++
> > > ?2 files changed, 40 insertions(+), 0 deletions(-)
> > >
> > > diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> > > index 46438f4..5180555 100644
> > > --- a/include/net/bluetooth/hci.h
> > > +++ b/include/net/bluetooth/hci.h
> > > @@ -980,6 +980,24 @@ struct hci_ev_le_conn_complete {
> > > ? ? ? ?__u8 ? ? clk_accurancy;
> > > ?} __packed;
> > >
> > > +#define ADV_IND ? ? ? ? ? ? ? ?0x00
> > > +#define ADV_DIRECT_IND 0x01
> > > +#define ADV_SCAN_IND ? 0x02
> > > +#define ADV_NONCONN_IND ? ? ? ?0x03
> > > +#define SCAN_RSP ? ? ? 0x04
> > > +
> > > +#define ADDR_DEV_PUBLIC ? ? ? ?0x00
> > > +#define ADDR_DEV_RANDOM ? ? ? ?0x01
> > > +
> > > +#define HCI_EV_LE_ADVERTISING_REPORT ? 0x02
> > > +struct hci_ev_le_advertising_info {
> > > + ? ? ? __u8 ? ? evt_type;
> > > + ? ? ? __u8 ? ? bdaddr_type;
> > > + ? ? ? bdaddr_t bdaddr;
> > > + ? ? ? __u8 ? ? length;
> > > + ? ? ? __u8 ? ? data[0];
> > > +} __packed;
> > > +
> > > ?#define HCI_EV_LE_LTK_REQ ? ? ? ? ? ? ?0x05
> > > ?struct hci_ev_le_ltk_req {
> > > ? ? ? ?__le16 ?handle;
> > > diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
> > > index 99c75f4..987f5de 100644
> > > --- a/net/bluetooth/hci_event.c
> > > +++ b/net/bluetooth/hci_event.c
> > > @@ -2498,6 +2498,25 @@ static inline void hci_le_ltk_request_evt(struct hci_dev *hdev,
> > > ? ? ? ?hci_dev_unlock(hdev);
> > > ?}
> > >
> > > +static inline void hci_le_adv_report_evt(struct hci_dev *hdev,
> > > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct sk_buff *skb)
> > > +{
> > > + ? ? ? struct hci_ev_le_advertising_info *ev;
> > > + ? ? ? u8 num_reports, i;
> > > +
> > > + ? ? ? num_reports = (u8) skb->data[0];
> >
> > I think this cast is unnecessary.
> >
> > > +
> > > + ? ? ? ev = (struct hci_ev_le_advertising_info *) (skb->data + 1);
> >
> > What about a slightly shorter line (well I didn't count the chars):
> >
> > ev = (struct hci_ev_le_advertising_info *) &skb->data[1];

Use (void *) cast here.

> >
> > > +
> > > + ? ? ? BT_DBG("adv from: %s", batostr(&ev->bdaddr));
> > > +
> > > + ? ? ? for (i = 1; i < num_reports; i++) {
> > > + ? ? ? ? ? ? ? ev = (struct hci_ev_le_advertising_info *)
> > > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (ev->data + ev->length + 1);
> > > + ? ? ? ? ? ? ? BT_DBG("adv from: %s", batostr(&ev->bdaddr));
> > > + ? ? ? }
> >
> > What about (not sure if it is shorter, just a suggestion):
> >
> > ev = (struct hci_ev_le_advertising_info *) &ev->data[ev->length + 1];

Same here.

--
Gustavo F. Padovan
http://profusion.mobi

2011-02-15 13:10:12

by Anderson Briglia

[permalink] [raw]
Subject: Re: [RFC 1/5] Bluetooth: Implement advertising report meta event

Thanks for reviewing. I'll add that missing "break", but the other
tips are not so relevant since we should gain just 2 characters.

On Mon, Feb 14, 2011 at 7:23 PM, Anderson Lizardo
<[email protected]> wrote:
>
> Hi Briglia,
>
> On Mon, Feb 14, 2011 at 6:59 PM, ?<[email protected]> wrote:
> > From: Anderson Briglia <[email protected]>
> >
> > This patch implements new LE meta event in order to handle advertising
> > reports.
> >
> > Signed-off-by: Anderson Briglia <[email protected]>
> > ---
> > ?include/net/bluetooth/hci.h | ? 18 ++++++++++++++++++
> > ?net/bluetooth/hci_event.c ? | ? 22 ++++++++++++++++++++++
> > ?2 files changed, 40 insertions(+), 0 deletions(-)
> >
> > diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> > index 46438f4..5180555 100644
> > --- a/include/net/bluetooth/hci.h
> > +++ b/include/net/bluetooth/hci.h
> > @@ -980,6 +980,24 @@ struct hci_ev_le_conn_complete {
> > ? ? ? ?__u8 ? ? clk_accurancy;
> > ?} __packed;
> >
> > +#define ADV_IND ? ? ? ? ? ? ? ?0x00
> > +#define ADV_DIRECT_IND 0x01
> > +#define ADV_SCAN_IND ? 0x02
> > +#define ADV_NONCONN_IND ? ? ? ?0x03
> > +#define SCAN_RSP ? ? ? 0x04
> > +
> > +#define ADDR_DEV_PUBLIC ? ? ? ?0x00
> > +#define ADDR_DEV_RANDOM ? ? ? ?0x01
> > +
> > +#define HCI_EV_LE_ADVERTISING_REPORT ? 0x02
> > +struct hci_ev_le_advertising_info {
> > + ? ? ? __u8 ? ? evt_type;
> > + ? ? ? __u8 ? ? bdaddr_type;
> > + ? ? ? bdaddr_t bdaddr;
> > + ? ? ? __u8 ? ? length;
> > + ? ? ? __u8 ? ? data[0];
> > +} __packed;
> > +
> > ?#define HCI_EV_LE_LTK_REQ ? ? ? ? ? ? ?0x05
> > ?struct hci_ev_le_ltk_req {
> > ? ? ? ?__le16 ?handle;
> > diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
> > index 99c75f4..987f5de 100644
> > --- a/net/bluetooth/hci_event.c
> > +++ b/net/bluetooth/hci_event.c
> > @@ -2498,6 +2498,25 @@ static inline void hci_le_ltk_request_evt(struct hci_dev *hdev,
> > ? ? ? ?hci_dev_unlock(hdev);
> > ?}
> >
> > +static inline void hci_le_adv_report_evt(struct hci_dev *hdev,
> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct sk_buff *skb)
> > +{
> > + ? ? ? struct hci_ev_le_advertising_info *ev;
> > + ? ? ? u8 num_reports, i;
> > +
> > + ? ? ? num_reports = (u8) skb->data[0];
>
> I think this cast is unnecessary.
>
> > +
> > + ? ? ? ev = (struct hci_ev_le_advertising_info *) (skb->data + 1);
>
> What about a slightly shorter line (well I didn't count the chars):
>
> ev = (struct hci_ev_le_advertising_info *) &skb->data[1];
>
> > +
> > + ? ? ? BT_DBG("adv from: %s", batostr(&ev->bdaddr));
> > +
> > + ? ? ? for (i = 1; i < num_reports; i++) {
> > + ? ? ? ? ? ? ? ev = (struct hci_ev_le_advertising_info *)
> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (ev->data + ev->length + 1);
> > + ? ? ? ? ? ? ? BT_DBG("adv from: %s", batostr(&ev->bdaddr));
> > + ? ? ? }
>
> What about (not sure if it is shorter, just a suggestion):
>
> ev = (struct hci_ev_le_advertising_info *) &ev->data[ev->length + 1];
>
> > +}
> > +
> > ?static inline void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
> > ?{
> > ? ? ? ?struct hci_ev_le_meta *le_ev = (void *) skb->data;
> > @@ -2513,6 +2532,9 @@ static inline void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
> > ? ? ? ? ? ? ? ?hci_le_ltk_request_evt(hdev, skb);
> > ? ? ? ? ? ? ? ?break;
> >
> > + ? ? ? case HCI_EV_LE_ADVERTISING_REPORT:
> > + ? ? ? ? ? ? ? hci_le_adv_report_evt(hdev, skb);
> > +
>
> missing a "break" here.
>
> > ? ? ? ?default:
> > ? ? ? ? ? ? ? ?break;
> > ? ? ? ?}
> > --
> > 1.7.1
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> > the body of a message to [email protected]
> > More majordomo info at ?http://vger.kernel.org/majordomo-info.html
> >
>
>
>
> --
> Anderson Lizardo
> OpenBossa Labs - INdT
> Manaus - Brazil



--
INdT - Instituto Nokia de tecnologia
+55 2126 1122
http://techblog.briglia.net

2011-02-14 22:23:47

by Anderson Lizardo

[permalink] [raw]
Subject: Re: [RFC 1/5] Bluetooth: Implement advertising report meta event

Hi Briglia,

On Mon, Feb 14, 2011 at 6:59 PM, <[email protected]> wrote:
> From: Anderson Briglia <[email protected]>
>
> This patch implements new LE meta event in order to handle advertising
> reports.
>
> Signed-off-by: Anderson Briglia <[email protected]>
> ---
> ?include/net/bluetooth/hci.h | ? 18 ++++++++++++++++++
> ?net/bluetooth/hci_event.c ? | ? 22 ++++++++++++++++++++++
> ?2 files changed, 40 insertions(+), 0 deletions(-)
>
> diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> index 46438f4..5180555 100644
> --- a/include/net/bluetooth/hci.h
> +++ b/include/net/bluetooth/hci.h
> @@ -980,6 +980,24 @@ struct hci_ev_le_conn_complete {
> ? ? ? ?__u8 ? ? clk_accurancy;
> ?} __packed;
>
> +#define ADV_IND ? ? ? ? ? ? ? ?0x00
> +#define ADV_DIRECT_IND 0x01
> +#define ADV_SCAN_IND ? 0x02
> +#define ADV_NONCONN_IND ? ? ? ?0x03
> +#define SCAN_RSP ? ? ? 0x04
> +
> +#define ADDR_DEV_PUBLIC ? ? ? ?0x00
> +#define ADDR_DEV_RANDOM ? ? ? ?0x01
> +
> +#define HCI_EV_LE_ADVERTISING_REPORT ? 0x02
> +struct hci_ev_le_advertising_info {
> + ? ? ? __u8 ? ? evt_type;
> + ? ? ? __u8 ? ? bdaddr_type;
> + ? ? ? bdaddr_t bdaddr;
> + ? ? ? __u8 ? ? length;
> + ? ? ? __u8 ? ? data[0];
> +} __packed;
> +
> ?#define HCI_EV_LE_LTK_REQ ? ? ? ? ? ? ?0x05
> ?struct hci_ev_le_ltk_req {
> ? ? ? ?__le16 ?handle;
> diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
> index 99c75f4..987f5de 100644
> --- a/net/bluetooth/hci_event.c
> +++ b/net/bluetooth/hci_event.c
> @@ -2498,6 +2498,25 @@ static inline void hci_le_ltk_request_evt(struct hci_dev *hdev,
> ? ? ? ?hci_dev_unlock(hdev);
> ?}
>
> +static inline void hci_le_adv_report_evt(struct hci_dev *hdev,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct sk_buff *skb)
> +{
> + ? ? ? struct hci_ev_le_advertising_info *ev;
> + ? ? ? u8 num_reports, i;
> +
> + ? ? ? num_reports = (u8) skb->data[0];

I think this cast is unnecessary.

> +
> + ? ? ? ev = (struct hci_ev_le_advertising_info *) (skb->data + 1);

What about a slightly shorter line (well I didn't count the chars):

ev = (struct hci_ev_le_advertising_info *) &skb->data[1];

> +
> + ? ? ? BT_DBG("adv from: %s", batostr(&ev->bdaddr));
> +
> + ? ? ? for (i = 1; i < num_reports; i++) {
> + ? ? ? ? ? ? ? ev = (struct hci_ev_le_advertising_info *)
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (ev->data + ev->length + 1);
> + ? ? ? ? ? ? ? BT_DBG("adv from: %s", batostr(&ev->bdaddr));
> + ? ? ? }

What about (not sure if it is shorter, just a suggestion):

ev = (struct hci_ev_le_advertising_info *) &ev->data[ev->length + 1];

> +}
> +
> ?static inline void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
> ?{
> ? ? ? ?struct hci_ev_le_meta *le_ev = (void *) skb->data;
> @@ -2513,6 +2532,9 @@ static inline void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
> ? ? ? ? ? ? ? ?hci_le_ltk_request_evt(hdev, skb);
> ? ? ? ? ? ? ? ?break;
>
> + ? ? ? case HCI_EV_LE_ADVERTISING_REPORT:
> + ? ? ? ? ? ? ? hci_le_adv_report_evt(hdev, skb);
> +

missing a "break" here.

> ? ? ? ?default:
> ? ? ? ? ? ? ? ?break;
> ? ? ? ?}
> --
> 1.7.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to [email protected]
> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>



--
Anderson Lizardo
OpenBossa Labs - INdT
Manaus - Brazil