Re: [PATCH] [BlueZ] adapter: Fix airpod device pair fail

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear Clancy,


Thank you for your patch. Some nits below.

Am 22.12.23 um 06:45 schrieb 15013537245@xxxxxxx:
From: Clancy Shang <clancy.shang@xxxxxxxxxxx>

Airpod is performing inquiry scans in BR/EDR and advertising in a
unconnectabl mode whit the same public address at the same time.

a*n* unconnectabl*e* mode w*ith*

with this featrue, when found airpod device, set the bredr support,

feat*ur*e

fix it pair fail bug.

Do the Airpods follow the Bluetooth specification, or do they violate it, and need a workaround?


Signed-off-by: Clancy Shang <clancy.shang@xxxxxxxxxxx>
---
  src/adapter.c | 25 +++++++++++++++++++++++++
  1 file changed, 25 insertions(+)

diff --git a/src/adapter.c b/src/adapter.c
index 022390f0d..488355e9c 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -7066,6 +7066,25 @@ static void adapter_msd_notify(struct btd_adapter *adapter,
  	}
  }
+#define APPLE_INC_VENDOR_ID 0x004c
+
+static bool eir_msd_is_apple_inc(GSList *msd_list)
+{
+	GSList *msd_l, *msd_next;
+
+	for (msd_l = msd_list; msd_l != NULL; msd_l = msd_next) {
+

The blank line seems unnecessary.

+		const struct eir_msd *msd = msd_l->data;
+
+		msd_next = g_slist_next(msd_l);
+
+		if (msd->company == APPLE_INC_VENDOR_ID)
+			return true;
+	}
+
+	return false;
+}
+
  static bool is_filter_match(GSList *discovery_filter, struct eir_data *eir_data,
  								int8_t rssi)
  {
@@ -7281,6 +7300,12 @@ void btd_adapter_device_found(struct btd_adapter *adapter,
  		device_update_last_seen(dev, BDADDR_BREDR, !not_connectable);
  	}
+ if (eir_msd_is_apple_inc(eir_data.msd_list) && (not_connectable == true)
+		&& (bdaddr_type == BDADDR_LE_PUBLIC)) {

No idea, if there is a rule, but other instances put the && on the line above, and align the condition with the one in the first line.

+		device_set_bredr_support(dev);
+		device_update_last_seen(dev, BDADDR_BREDR, true);
+	}
+
  	if (eir_data.name != NULL && eir_data.name_complete)
  		device_store_cached_name(dev, eir_data.name);


Kind regards,

Paul




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux