diff options
author | Andre Guedes <andre.guedes@openbossa.org> | 2011-05-26 15:23:52 -0400 |
---|---|---|
committer | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-06-08 15:58:17 -0400 |
commit | eb9d91f5ae9c14583c49223e49f7e88f77b84749 (patch) | |
tree | 405173f41c8d3e2c28c32dd9ac1ebd472b1904de /net/bluetooth/hci_event.c | |
parent | 9aa04c9108164e62cf94d6913183817a0d3dbf03 (diff) |
Bluetooth: Clear advertising cache before scanning
The LE advertising cache should be cleared before performing a LE
scanning. This will force the cache to contain only fresh advertising
entries.
Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Diffstat (limited to 'net/bluetooth/hci_event.c')
-rw-r--r-- | net/bluetooth/hci_event.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index db74958d3ad9..056f7b2fa02f 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c | |||
@@ -839,6 +839,29 @@ static void hci_cc_read_local_oob_data_reply(struct hci_dev *hdev, | |||
839 | rp->randomizer, rp->status); | 839 | rp->randomizer, rp->status); |
840 | } | 840 | } |
841 | 841 | ||
842 | static void hci_cc_le_set_scan_enable(struct hci_dev *hdev, | ||
843 | struct sk_buff *skb) | ||
844 | { | ||
845 | struct hci_cp_le_set_scan_enable *cp; | ||
846 | __u8 status = *((__u8 *) skb->data); | ||
847 | |||
848 | BT_DBG("%s status 0x%x", hdev->name, status); | ||
849 | |||
850 | if (status) | ||
851 | return; | ||
852 | |||
853 | cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_ENABLE); | ||
854 | if (!cp) | ||
855 | return; | ||
856 | |||
857 | hci_dev_lock(hdev); | ||
858 | |||
859 | if (cp->enable == 0x01) | ||
860 | hci_adv_entries_clear(hdev); | ||
861 | |||
862 | hci_dev_unlock(hdev); | ||
863 | } | ||
864 | |||
842 | static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status) | 865 | static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status) |
843 | { | 866 | { |
844 | BT_DBG("%s status 0x%x", hdev->name, status); | 867 | BT_DBG("%s status 0x%x", hdev->name, status); |
@@ -1814,6 +1837,10 @@ static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *sk | |||
1814 | hci_cc_user_confirm_neg_reply(hdev, skb); | 1837 | hci_cc_user_confirm_neg_reply(hdev, skb); |
1815 | break; | 1838 | break; |
1816 | 1839 | ||
1840 | case HCI_OP_LE_SET_SCAN_ENABLE: | ||
1841 | hci_cc_le_set_scan_enable(hdev, skb); | ||
1842 | break; | ||
1843 | |||
1817 | default: | 1844 | default: |
1818 | BT_DBG("%s opcode 0x%x", hdev->name, opcode); | 1845 | BT_DBG("%s opcode 0x%x", hdev->name, opcode); |
1819 | break; | 1846 | break; |