ble-fast-pair: disconnect connected device before exit. [1/1]
PD#SWPL-195532
Problem:
The A2DP sink is not discovable after switch
from CIS sink mode to A2DP sink mode if ble
connection is kept.
Solution:
Disconnect connected ble device before exit blefastpair.
Verify:
AD401
Change-Id: Iec6ed147eec6272cfa7c6fb5d93e32d65a2afaaa
Signed-off-by: ye.he <ye.he@amlogic.com>
diff --git a/ble-fast-pair/ble_audio_advertiser.c b/ble-fast-pair/ble_audio_advertiser.c
index d71ab4b..b6943b4 100644
--- a/ble-fast-pair/ble_audio_advertiser.c
+++ b/ble-fast-pair/ble_audio_advertiser.c
@@ -94,6 +94,20 @@
}
if (default_adapter != NULL) {
+ GList *device_list = NULL;
+ GList *iterator = NULL;
+ Device *device = NULL;
+
+ device_list = binc_adapter_get_connected_devices(default_adapter);
+ for (iterator = device_list; iterator != NULL; iterator = iterator->next) {
+ device = (Device *)iterator->data;
+ if (device) {
+ log_debug(TAG, "Connected Device Name: %s", binc_device_get_name(device));
+ log_debug(TAG, "Connected Device Address: %s", binc_device_get_address(device));
+ binc_device_disconnect(device);
+ }
+ }
+ //binc_adapter_discoverable_on(default_adapter);
binc_adapter_free(default_adapter);
default_adapter = NULL;
}
@@ -161,9 +175,9 @@
device_list = binc_adapter_get_devices(default_adapter);
for (iterator = device_list; iterator != NULL; iterator = iterator->next) {
device = (Device *)iterator->data;
- log_debug(TAG, "Device Name: %s\n", binc_device_get_name(device));
- log_debug(TAG, "Device Address: %s\n", binc_device_get_address(device));
if (device) {
+ log_debug(TAG, "Device Name: %s", binc_device_get_name(device));
+ log_debug(TAG, "Device Address: %s", binc_device_get_address(device));
binc_adapter_remove_device(default_adapter, device);
}
}
diff --git a/ble-fast-pair/ble_audio_bis_sink.c b/ble-fast-pair/ble_audio_bis_sink.c
index 22cc050..752ead1 100644
--- a/ble-fast-pair/ble_audio_bis_sink.c
+++ b/ble-fast-pair/ble_audio_bis_sink.c
@@ -104,6 +104,20 @@
binc_adapter_power_on(default_adapter);
}
+ GList *device_list = NULL;
+ GList *iterator = NULL;
+ Device *device = NULL;
+
+ device_list = binc_adapter_get_devices(default_adapter);
+ for (iterator = device_list; iterator != NULL; iterator = iterator->next) {
+ device = (Device *)iterator->data;
+ if (device) {
+ log_debug(TAG, "Device Name: %s", binc_device_get_name(device));
+ log_debug(TAG, "Device Address: %s", binc_device_get_address(device));
+ binc_adapter_remove_device(default_adapter, device);
+ }
+ }
+
if (!media_setup(dbusConnection)) {
log_debug(TAG, "media setup success");
media_set_bcast_sync_state_cb(bcast_sync_state_change_cb);