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

Commit a5c04373 authored by Mikhail Naganov's avatar Mikhail Naganov
Browse files

audio: Add retries for BT proxy port registration

When ModuleBluetooth::createProxy is invoked on BT device
connection, the BT stack may not be fully ready yet,
and port registration can fail. This is an intermittent
state and registration should succeed after retrying.

Bug: 320838889
Test: atest pts-bot:A2DP/SRC/REL/BV-02-I
Change-Id: I0c7cf7c1c6a8ee03ef55b004f89139e3b56ee9cd
parent 3d6a312a
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -299,7 +299,13 @@ ndk::ScopedAStatus ModuleBluetooth::createProxy(const AudioPort& audioPort, int3
                        : std::shared_ptr<BluetoothAudioPortAidl>(
                                  std::make_shared<BluetoothAudioPortAidlOut>());
    const auto& devicePort = audioPort.ext.get<AudioPortExt::device>();
    if (const auto device = devicePort.device.type; !proxy.ptr->registerPort(device)) {
    const auto device = devicePort.device.type;
    bool registrationSuccess = false;
    for (int i = 0; i < kCreateProxyRetries && !registrationSuccess; ++i) {
        registrationSuccess = proxy.ptr->registerPort(device);
        usleep(kCreateProxyRetrySleepMs * 1000);
    }
    if (!registrationSuccess) {
        LOG(ERROR) << __func__ << ": failed to register BT port for " << device.toString();
        return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
    }
+2 −0
Original line number Diff line number Diff line
@@ -85,6 +85,8 @@ class ModuleBluetooth final : public Module {
    ndk::ScopedAStatus findOrCreateProxy(
            const ::aidl::android::media::audio::common::AudioPort& audioPort, CachedProxy& proxy);

    static constexpr int kCreateProxyRetries = 5;
    static constexpr int kCreateProxyRetrySleepMs = 250;
    ChildInterface<BluetoothA2dp> mBluetoothA2dp;
    ChildInterface<BluetoothLe> mBluetoothLe;
    std::map<int32_t /*instantiated device port ID*/, CachedProxy> mProxies;