Loading android/app/src/com/android/bluetooth/bass_client/BassClientService.java +20 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import com.android.bluetooth.btservice.ProfileService; import com.android.bluetooth.btservice.ServiceFactory; import com.android.bluetooth.btservice.storage.DatabaseManager; import com.android.bluetooth.csip.CsipSetCoordinatorService; import com.android.bluetooth.le_audio.LeAudioService; import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; Loading Loading @@ -1260,6 +1261,25 @@ public class BassClientService extends ProfileService { return stateMachine.getMaximumSourceCapacity(); } boolean isLocalBroadcast(BluetoothLeBroadcastMetadata metaData) { if (metaData == null) { return false; } LeAudioService leAudioService = mServiceFactory.getLeAudioService(); if (leAudioService == null) { return false; } boolean wasFound = leAudioService.getAllBroadcastMetadata() .stream() .anyMatch(meta -> { return meta.getSourceAdvertisingSid() == metaData.getSourceAdvertisingSid(); }); log("isLocalBroadcast=" + wasFound); return wasFound; } static void log(String msg) { if (BassConstants.BASS_DBG) { Log.d(TAG, msg); Loading android/app/src/com/android/bluetooth/bass_client/BassClientStateMachine.java +18 −4 Original line number Diff line number Diff line Loading @@ -591,13 +591,27 @@ public class BassClientStateMachine extends StateMachine { + "serviceData" + serviceData); mPeriodicAdvManager.transferSync(mDevice, serviceData, syncHandle); } } else { if (mService.isLocalBroadcast(mPendingMetadata)) { int advHandle = mPendingMetadata.getSourceAdvertisingSid(); serviceData = 0x000000FF & recvState.getSourceId(); serviceData = serviceData << 8; // Address we set in the Source Address can differ from the address in the air serviceData = serviceData | BassConstants.ADV_ADDRESS_DONT_MATCHES_SOURCE_ADV_ADDRESS; log("Initiate local broadcast PAST for: " + mDevice + ", advSID/Handle: " + advHandle + ", serviceData: " + serviceData); mPeriodicAdvManager.transferSetInfo(mDevice, serviceData, advHandle, mPeriodicAdvCallback); } else { Log.e(TAG, "There is no valid sync handle for this Source"); if (mAutoAssist) { //initiate Auto Assist procedure for this device // Initiate Auto Assist procedure for this device mService.getBassUtils().triggerAutoAssist(recvState); } } } } else if (state == BluetoothLeBroadcastReceiveState.PA_SYNC_STATE_SYNCHRONIZED || state == BluetoothLeBroadcastReceiveState.PA_SYNC_STATE_NO_PAST) { Message message = obtainMessage(STOP_SCAN_OFFLOAD); Loading Loading
android/app/src/com/android/bluetooth/bass_client/BassClientService.java +20 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import com.android.bluetooth.btservice.ProfileService; import com.android.bluetooth.btservice.ServiceFactory; import com.android.bluetooth.btservice.storage.DatabaseManager; import com.android.bluetooth.csip.CsipSetCoordinatorService; import com.android.bluetooth.le_audio.LeAudioService; import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; Loading Loading @@ -1260,6 +1261,25 @@ public class BassClientService extends ProfileService { return stateMachine.getMaximumSourceCapacity(); } boolean isLocalBroadcast(BluetoothLeBroadcastMetadata metaData) { if (metaData == null) { return false; } LeAudioService leAudioService = mServiceFactory.getLeAudioService(); if (leAudioService == null) { return false; } boolean wasFound = leAudioService.getAllBroadcastMetadata() .stream() .anyMatch(meta -> { return meta.getSourceAdvertisingSid() == metaData.getSourceAdvertisingSid(); }); log("isLocalBroadcast=" + wasFound); return wasFound; } static void log(String msg) { if (BassConstants.BASS_DBG) { Log.d(TAG, msg); Loading
android/app/src/com/android/bluetooth/bass_client/BassClientStateMachine.java +18 −4 Original line number Diff line number Diff line Loading @@ -591,13 +591,27 @@ public class BassClientStateMachine extends StateMachine { + "serviceData" + serviceData); mPeriodicAdvManager.transferSync(mDevice, serviceData, syncHandle); } } else { if (mService.isLocalBroadcast(mPendingMetadata)) { int advHandle = mPendingMetadata.getSourceAdvertisingSid(); serviceData = 0x000000FF & recvState.getSourceId(); serviceData = serviceData << 8; // Address we set in the Source Address can differ from the address in the air serviceData = serviceData | BassConstants.ADV_ADDRESS_DONT_MATCHES_SOURCE_ADV_ADDRESS; log("Initiate local broadcast PAST for: " + mDevice + ", advSID/Handle: " + advHandle + ", serviceData: " + serviceData); mPeriodicAdvManager.transferSetInfo(mDevice, serviceData, advHandle, mPeriodicAdvCallback); } else { Log.e(TAG, "There is no valid sync handle for this Source"); if (mAutoAssist) { //initiate Auto Assist procedure for this device // Initiate Auto Assist procedure for this device mService.getBassUtils().triggerAutoAssist(recvState); } } } } else if (state == BluetoothLeBroadcastReceiveState.PA_SYNC_STATE_SYNCHRONIZED || state == BluetoothLeBroadcastReceiveState.PA_SYNC_STATE_NO_PAST) { Message message = obtainMessage(STOP_SCAN_OFFLOAD); Loading