Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 37eab042 authored by Jakub Pawlowski's avatar Jakub Pawlowski Committed by Johan Hedberg
Browse files

Bluetooth: Add extra discovery fields for storing filter information



With the upcoming addition of support for Start Service Discovery, the
discovery handling needs to filter on RSSI and UUID values. For that
they need to be stored in the discovery handling. This patch adds the
appropiate fields and also make sure they are reset when discovery
has been stopped.

Signed-off-by: default avatarJakub Pawlowski <jpawlowski@google.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
parent 7e61df54
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -75,6 +75,9 @@ struct discovery_state {
	u32			last_adv_flags;
	u8			last_adv_data[HCI_MAX_AD_LENGTH];
	u8			last_adv_data_len;
	s8			rssi;
	u16			uuid_count;
	u8			(*uuids)[16];
};

struct hci_conn_hash {
@@ -503,6 +506,7 @@ static inline void discovery_init(struct hci_dev *hdev)
	INIT_LIST_HEAD(&hdev->discovery.all);
	INIT_LIST_HEAD(&hdev->discovery.unknown);
	INIT_LIST_HEAD(&hdev->discovery.resolve);
	hdev->discovery.rssi = HCI_RSSI_INVALID;
}

bool hci_discovery_active(struct hci_dev *hdev);
+14 −0
Original line number Diff line number Diff line
@@ -2052,6 +2052,20 @@ void hci_discovery_set_state(struct hci_dev *hdev, int state)
	case DISCOVERY_STOPPED:
		hci_update_background_scan(hdev);

		/* Reset RSSI and UUID filters to ensure Start Discovery
		 * and Start Service Discovery operate properly no matter
		 * which one started the previous discovery.
		 *
		 * While the Start Discovery and Start Service Discovery
		 * operations will set proper values for RSSI and UUID
		 * count, it is important to actually free the allocated
		 * list of UUIDs here.
		 */
		hdev->discovery.rssi = HCI_RSSI_INVALID;
		hdev->discovery.uuid_count = 0;
		kfree(hdev->discovery.uuids);
		hdev->discovery.uuids = NULL;

		if (old_state != DISCOVERY_STARTING)
			mgmt_discovering(hdev, 0);
		break;
+2 −0
Original line number Diff line number Diff line
@@ -3867,6 +3867,8 @@ static int start_discovery(struct sock *sk, struct hci_dev *hdev,
	}

	hdev->discovery.type = cp->type;
	hdev->discovery.rssi = HCI_RSSI_INVALID;
	hdev->discovery.uuid_count = 0;

	hci_req_init(&req, hdev);