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>
This commit is contained in:
committed by
Gustavo F. Padovan
parent
9aa04c9108
commit
eb9d91f5ae
@@ -710,6 +710,12 @@ struct hci_rp_le_read_buffer_size {
|
|||||||
__u8 le_max_pkt;
|
__u8 le_max_pkt;
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
|
#define HCI_OP_LE_SET_SCAN_ENABLE 0x200c
|
||||||
|
struct hci_cp_le_set_scan_enable {
|
||||||
|
__u8 enable;
|
||||||
|
__u8 filter_dup;
|
||||||
|
} __packed;
|
||||||
|
|
||||||
#define HCI_OP_LE_CREATE_CONN 0x200d
|
#define HCI_OP_LE_CREATE_CONN 0x200d
|
||||||
struct hci_cp_le_create_conn {
|
struct hci_cp_le_create_conn {
|
||||||
__le16 scan_interval;
|
__le16 scan_interval;
|
||||||
|
@@ -839,6 +839,29 @@ static void hci_cc_read_local_oob_data_reply(struct hci_dev *hdev,
|
|||||||
rp->randomizer, rp->status);
|
rp->randomizer, rp->status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
|
||||||
|
struct sk_buff *skb)
|
||||||
|
{
|
||||||
|
struct hci_cp_le_set_scan_enable *cp;
|
||||||
|
__u8 status = *((__u8 *) skb->data);
|
||||||
|
|
||||||
|
BT_DBG("%s status 0x%x", hdev->name, status);
|
||||||
|
|
||||||
|
if (status)
|
||||||
|
return;
|
||||||
|
|
||||||
|
cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_ENABLE);
|
||||||
|
if (!cp)
|
||||||
|
return;
|
||||||
|
|
||||||
|
hci_dev_lock(hdev);
|
||||||
|
|
||||||
|
if (cp->enable == 0x01)
|
||||||
|
hci_adv_entries_clear(hdev);
|
||||||
|
|
||||||
|
hci_dev_unlock(hdev);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
|
static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
|
||||||
{
|
{
|
||||||
BT_DBG("%s status 0x%x", hdev->name, status);
|
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
|
|||||||
hci_cc_user_confirm_neg_reply(hdev, skb);
|
hci_cc_user_confirm_neg_reply(hdev, skb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case HCI_OP_LE_SET_SCAN_ENABLE:
|
||||||
|
hci_cc_le_set_scan_enable(hdev, skb);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
BT_DBG("%s opcode 0x%x", hdev->name, opcode);
|
BT_DBG("%s opcode 0x%x", hdev->name, opcode);
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user