From c59d2d80ee1e50c432567ee810f99044a3d18142 Mon Sep 17 00:00:00 2001 From: "yanggang.yang" Date: Mon, 4 Dec 2023 11:51:58 +0800 Subject: [PATCH] Allow non-zero HCI interface numbers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [Description] when driver re-register hci device, it may register hci 1 [Root Cause] In the kernel mechanism, there may be a timing issue. when driver re-register hci device,kernel may not completely unregister hci 0.But aidl only open hci 0. [Solution] assign a value to the hci interface based on the device node found by AIDL [Test Report] Insert the bt chip into the usb 2.0 port, and then suspend the TV. The bt chip will be disconnected due to the USB power outage. And then quickly resume the TV,check whether the Bluetooth state is on. Suspend and resume for several times, check for bt state. Change-Id: I57fd4a22c956e0cf2b4a516247c258493163e51a BUG: 314149416 --- bluetooth/aidl/default/net_bluetooth_mgmt.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/bluetooth/aidl/default/net_bluetooth_mgmt.cpp b/bluetooth/aidl/default/net_bluetooth_mgmt.cpp index 937cd57432..0699781459 100644 --- a/bluetooth/aidl/default/net_bluetooth_mgmt.cpp +++ b/bluetooth/aidl/default/net_bluetooth_mgmt.cpp @@ -162,9 +162,9 @@ int NetBluetoothMgmt::waitHciDev(int hci_interface) { (struct mgmt_ev_read_index_list*)ev.data; for (int i = 0; i < data->num_controllers; i++) { - if (data->index[i] == hci_interface) { - ALOGI("hci interface %d found", hci_interface); - ret = 0; + if (data->index[i] >= hci_interface) { + ALOGI("hci interface %d found", data->index[i]); + ret = data->index[i]; goto end; } } @@ -253,8 +253,9 @@ int NetBluetoothMgmt::openHci(int hci_interface) { rfkill(1); // Wait for the HCI interface to complete initialization or to come online. - if (waitHciDev(hci_interface)) { - ALOGE("hci interface %d not found", hci_interface); + hci_interface = waitHciDev(hci_interface); + if (hci_interface < 0) { + ALOGE("hci interface not found"); return -1; }