Fixing isDeviceIdAttestationRequired to require both cases instead of just one am: e759072541 am: d4f2c051b6

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/3246840

Change-Id: If08b4a713b9c224b90d43874d7228ae8ac7242f7
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/audio/OWNERS b/audio/OWNERS
index 3671685..80e2765 100644
--- a/audio/OWNERS
+++ b/audio/OWNERS
@@ -2,3 +2,4 @@
 
 elaurent@google.com
 mnaganov@google.com
+yaoshunkai@google.com
diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Processing.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Processing.aidl
index f6d6ee2..96d57d8 100644
--- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Processing.aidl
+++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/Processing.aidl
@@ -40,5 +40,6 @@
   union Type {
     android.media.audio.common.AudioStreamType streamType = android.media.audio.common.AudioStreamType.INVALID;
     android.media.audio.common.AudioSource source;
+    android.media.audio.common.AudioDevice device;
   }
 }
diff --git a/audio/aidl/android/hardware/audio/effect/Processing.aidl b/audio/aidl/android/hardware/audio/effect/Processing.aidl
index cb77350..928ce16 100644
--- a/audio/aidl/android/hardware/audio/effect/Processing.aidl
+++ b/audio/aidl/android/hardware/audio/effect/Processing.aidl
@@ -17,6 +17,7 @@
 package android.hardware.audio.effect;
 
 import android.hardware.audio.effect.Descriptor;
+import android.media.audio.common.AudioDevice;
 import android.media.audio.common.AudioSource;
 import android.media.audio.common.AudioStreamType;
 import android.media.audio.common.AudioUuid;
@@ -30,6 +31,7 @@
     union Type {
         AudioStreamType streamType = AudioStreamType.INVALID;
         AudioSource source;
+        AudioDevice device;
     }
 
     /**
diff --git a/audio/aidl/default/Android.bp b/audio/aidl/default/Android.bp
index 844f1e9..f5b590b 100644
--- a/audio/aidl/default/Android.bp
+++ b/audio/aidl/default/Android.bp
@@ -203,6 +203,7 @@
     ],
     vendor: true,
     shared_libs: [
+        "libaudio_aidl_conversion_common_ndk",
         "libaudioaidlcommon",
         "libaudioutils",
         "libbase",
@@ -224,6 +225,7 @@
         "-Wextra",
         "-Werror",
         "-Wthread-safety",
+        "-DBACKEND_NDK",
     ],
 }
 
diff --git a/audio/aidl/default/EffectConfig.cpp b/audio/aidl/default/EffectConfig.cpp
index eb0c015..9c335ba 100644
--- a/audio/aidl/default/EffectConfig.cpp
+++ b/audio/aidl/default/EffectConfig.cpp
@@ -18,6 +18,8 @@
 #include <string>
 #define LOG_TAG "AHAL_EffectConfig"
 #include <android-base/logging.h>
+#include <media/AidlConversionCppNdk.h>
+#include <system/audio.h>
 #include <system/audio_aidl_utils.h>
 #include <system/audio_effects/audio_effects_conf.h>
 #include <system/audio_effects/effect_uuid.h>
@@ -28,6 +30,10 @@
 #include <android/apexsupport.h>
 #endif
 
+using aidl::android::media::audio::common::AudioDevice;
+using aidl::android::media::audio::common::AudioDeviceAddress;
+using aidl::android::media::audio::common::AudioDeviceDescription;
+using aidl::android::media::audio::common::AudioDeviceType;
 using aidl::android::media::audio::common::AudioSource;
 using aidl::android::media::audio::common::AudioStreamType;
 using aidl::android::media::audio::common::AudioUuid;
@@ -76,6 +82,14 @@
                 registerFailure(parseProcessing(Processing::Type::streamType, xmlStream));
             }
         }
+
+        // Parse device effect chains
+        for (auto& xmlDeviceEffects : getChildren(xmlConfig, "deviceEffects")) {
+            for (auto& xmlDevice : getChildren(xmlDeviceEffects, "device")) {
+                // AudioDevice
+                registerFailure(parseProcessing(Processing::Type::device, xmlDevice));
+            }
+        }
     }
     LOG(DEBUG) << __func__ << " successfully parsed " << file << ", skipping " << mSkippedElements
                << " element(s)";
@@ -195,7 +209,8 @@
 }
 
 std::optional<Processing::Type> EffectConfig::stringToProcessingType(Processing::Type::Tag typeTag,
-                                                                     const std::string& type) {
+                                                                     const std::string& type,
+                                                                     const std::string& address) {
     // see list of audio stream types in audio_stream_type_t:
     // system/media/audio/include/system/audio_effects/audio_effects_conf.h
     // AUDIO_STREAM_DEFAULT_TAG is not listed here because according to SYS_RESERVED_DEFAULT in
@@ -238,6 +253,19 @@
         if (typeIter != sAudioSourceTable.end()) {
             return typeIter->second;
         }
+    } else if (typeTag == Processing::Type::device) {
+        audio_devices_t deviceType;
+        if (!audio_device_from_string(type.c_str(), &deviceType)) {
+            LOG(ERROR) << __func__ << "DeviceEffect: invalid type " << type;
+            return std::nullopt;
+        }
+        auto ret = ::aidl::android::legacy2aidl_audio_device_AudioDevice(deviceType, address);
+        if (!ret.ok()) {
+            LOG(ERROR) << __func__ << "DeviceEffect: Failed to get AudioDevice from type "
+                    << deviceType << ", address " << address;
+            return std::nullopt;
+        }
+        return ret.value();
     }
 
     return std::nullopt;
@@ -246,7 +274,10 @@
 bool EffectConfig::parseProcessing(Processing::Type::Tag typeTag, const tinyxml2::XMLElement& xml) {
     LOG(VERBOSE) << __func__ << dump(xml);
     const char* typeStr = xml.Attribute("type");
-    auto aidlType = stringToProcessingType(typeTag, typeStr);
+    const char* addressStr = xml.Attribute("address");
+    // For device effect, device address is optional, match will be done for the given device type
+    // with empty address.
+    auto aidlType = stringToProcessingType(typeTag, typeStr, addressStr ? addressStr : "");
     RETURN_VALUE_IF(!aidlType.has_value(), false, "illegalStreamType");
     RETURN_VALUE_IF(0 != mProcessingMap.count(aidlType.value()), false, "duplicateStreamType");
 
diff --git a/audio/aidl/default/EffectContext.cpp b/audio/aidl/default/EffectContext.cpp
index 7b8cfb1..5539177 100644
--- a/audio/aidl/default/EffectContext.cpp
+++ b/audio/aidl/default/EffectContext.cpp
@@ -242,4 +242,17 @@
     LOG(VERBOSE) << __func__ << " : signal client for reopen";
     return RetCode::SUCCESS;
 }
+
+RetCode EffectContext::enable() {
+    return RetCode::SUCCESS;
+}
+
+RetCode EffectContext::disable() {
+    return RetCode::SUCCESS;
+}
+
+RetCode EffectContext::reset() {
+    return RetCode::SUCCESS;
+}
+
 }  // namespace aidl::android::hardware::audio::effect
diff --git a/audio/aidl/default/EffectImpl.cpp b/audio/aidl/default/EffectImpl.cpp
index 7192d97..3e61335 100644
--- a/audio/aidl/default/EffectImpl.cpp
+++ b/audio/aidl/default/EffectImpl.cpp
@@ -246,7 +246,6 @@
             startThread();
             break;
         case CommandId::STOP:
-        case CommandId::RESET:
             RETURN_OK_IF(mState == State::IDLE);
             mState = State::IDLE;
             RETURN_IF(notifyEventFlag(mDataMqNotEmptyEf) != RetCode::SUCCESS, EX_ILLEGAL_STATE,
@@ -254,6 +253,13 @@
             stopThread();
             RETURN_IF_ASTATUS_NOT_OK(commandImpl(command), "commandImplFailed");
             break;
+        case CommandId::RESET:
+            mState = State::IDLE;
+            RETURN_IF(notifyEventFlag(mDataMqNotEmptyEf) != RetCode::SUCCESS, EX_ILLEGAL_STATE,
+                      "notifyEventFlagNotEmptyFailed");
+            stopThread();
+            RETURN_IF_ASTATUS_NOT_OK(commandImpl(command), "commandImplFailed");
+            break;
         default:
             LOG(ERROR) << getEffectNameWithVersion() << __func__ << " instance still processing";
             return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT,
@@ -266,8 +272,22 @@
 
 ndk::ScopedAStatus EffectImpl::commandImpl(CommandId command) {
     RETURN_IF(!mImplContext, EX_NULL_POINTER, "nullContext");
-    if (command == CommandId::RESET) {
-        mImplContext->resetBuffer();
+    switch (command) {
+        case CommandId::START:
+            mImplContext->enable();
+            break;
+        case CommandId::STOP:
+            mImplContext->disable();
+            break;
+        case CommandId::RESET:
+            mImplContext->disable();
+            mImplContext->reset();
+            mImplContext->resetBuffer();
+            break;
+        default:
+            LOG(ERROR) << __func__ << " commandId " << toString(command) << " not supported";
+            return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT,
+                                                                    "commandIdNotSupported");
     }
     return ndk::ScopedAStatus::ok();
 }
diff --git a/audio/aidl/default/EffectMain.cpp b/audio/aidl/default/EffectMain.cpp
index a300cfd..7a6141a 100644
--- a/audio/aidl/default/EffectMain.cpp
+++ b/audio/aidl/default/EffectMain.cpp
@@ -38,7 +38,7 @@
             candidatePath.append(apexName).append("/etc/").append(kDefaultConfigName);
             LOG(DEBUG) << __func__ << " effect lib path " << candidatePath;
             if (access(candidatePath.c_str(), R_OK) == 0) {
-                return std::move(candidatePath);
+                return candidatePath;
             }
         }
     } else {
diff --git a/audio/aidl/default/Module.cpp b/audio/aidl/default/Module.cpp
index 543efd1..c14d06e 100644
--- a/audio/aidl/default/Module.cpp
+++ b/audio/aidl/default/Module.cpp
@@ -391,7 +391,7 @@
 
 Module::Configuration& Module::getConfig() {
     if (!mConfig) {
-        mConfig = std::move(initializeConfig());
+        mConfig = initializeConfig();
     }
     return *mConfig;
 }
diff --git a/audio/aidl/default/Stream.cpp b/audio/aidl/default/Stream.cpp
index 8f5e839..eecc972 100644
--- a/audio/aidl/default/Stream.cpp
+++ b/audio/aidl/default/Stream.cpp
@@ -663,10 +663,14 @@
 }
 
 StreamCommonImpl::~StreamCommonImpl() {
-    if (!isClosed()) {
-        LOG(ERROR) << __func__ << ": stream was not closed prior to destruction, resource leak";
-        stopWorker();
-        // The worker and the context should clean up by themselves via destructors.
+    // It is responsibility of the class that implements 'DriverInterface' to call 'cleanupWorker'
+    // in the destructor. Note that 'cleanupWorker' can not be properly called from this destructor
+    // because any subclasses have already been destroyed and thus the 'DriverInterface'
+    // implementation is not valid. Thus, here it can only be asserted whether the subclass has done
+    // its job.
+    if (!mWorkerStopIssued && !isClosed()) {
+        LOG(FATAL) << __func__ << ": the stream implementation must call 'cleanupWorker' "
+                   << "in order to clean up the worker thread.";
     }
 }
 
@@ -770,10 +774,7 @@
 ndk::ScopedAStatus StreamCommonImpl::close() {
     LOG(DEBUG) << __func__;
     if (!isClosed()) {
-        stopWorker();
-        LOG(DEBUG) << __func__ << ": joining the worker thread...";
-        mWorker->stop();
-        LOG(DEBUG) << __func__ << ": worker thread joined";
+        stopAndJoinWorker();
         onClose(mWorker->setClosed());
         return ndk::ScopedAStatus::ok();
     } else {
@@ -791,6 +792,20 @@
     return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
 }
 
+void StreamCommonImpl::cleanupWorker() {
+    if (!isClosed()) {
+        LOG(ERROR) << __func__ << ": stream was not closed prior to destruction, resource leak";
+        stopAndJoinWorker();
+    }
+}
+
+void StreamCommonImpl::stopAndJoinWorker() {
+    stopWorker();
+    LOG(DEBUG) << __func__ << ": joining the worker thread...";
+    mWorker->join();
+    LOG(DEBUG) << __func__ << ": worker thread joined";
+}
+
 void StreamCommonImpl::stopWorker() {
     if (auto commandMQ = mContext.getCommandMQ(); commandMQ != nullptr) {
         LOG(DEBUG) << __func__ << ": asking the worker to exit...";
@@ -805,6 +820,7 @@
         }
         LOG(DEBUG) << __func__ << ": done";
     }
+    mWorkerStopIssued = true;
 }
 
 ndk::ScopedAStatus StreamCommonImpl::updateMetadataCommon(const Metadata& metadata) {
diff --git a/audio/aidl/default/alsa/StreamAlsa.cpp b/audio/aidl/default/alsa/StreamAlsa.cpp
index e57d538..f548903 100644
--- a/audio/aidl/default/alsa/StreamAlsa.cpp
+++ b/audio/aidl/default/alsa/StreamAlsa.cpp
@@ -37,6 +37,10 @@
       mConfig(alsa::getPcmConfig(getContext(), mIsInput)),
       mReadWriteRetries(readWriteRetries) {}
 
+StreamAlsa::~StreamAlsa() {
+    cleanupWorker();
+}
+
 ::android::status_t StreamAlsa::init() {
     return mConfig.has_value() ? ::android::OK : ::android::NO_INIT;
 }
diff --git a/audio/aidl/default/alsa/Utils.cpp b/audio/aidl/default/alsa/Utils.cpp
index c08836c..8eaf162 100644
--- a/audio/aidl/default/alsa/Utils.cpp
+++ b/audio/aidl/default/alsa/Utils.cpp
@@ -80,11 +80,8 @@
 
 const AudioChannelCountToMaskMap& getSupportedChannelOutLayoutMap() {
     static const std::set<AudioChannelLayout> supportedOutChannelLayouts = {
-            DEFINE_CHANNEL_LAYOUT_MASK(MONO),          DEFINE_CHANNEL_LAYOUT_MASK(STEREO),
-            DEFINE_CHANNEL_LAYOUT_MASK(2POINT1),       DEFINE_CHANNEL_LAYOUT_MASK(QUAD),
-            DEFINE_CHANNEL_LAYOUT_MASK(PENTA),         DEFINE_CHANNEL_LAYOUT_MASK(5POINT1),
-            DEFINE_CHANNEL_LAYOUT_MASK(6POINT1),       DEFINE_CHANNEL_LAYOUT_MASK(7POINT1),
-            DEFINE_CHANNEL_LAYOUT_MASK(7POINT1POINT4), DEFINE_CHANNEL_LAYOUT_MASK(22POINT2),
+            DEFINE_CHANNEL_LAYOUT_MASK(MONO),
+            DEFINE_CHANNEL_LAYOUT_MASK(STEREO),
     };
     static const AudioChannelCountToMaskMap outLayouts =
             make_ChannelCountToMaskMap(supportedOutChannelLayouts);
diff --git a/audio/aidl/default/audio_effects_config.xml b/audio/aidl/default/audio_effects_config.xml
index 11683d2..a54f4db 100644
--- a/audio/aidl/default/audio_effects_config.xml
+++ b/audio/aidl/default/audio_effects_config.xml
@@ -140,4 +140,37 @@
         </postprocess>
     -->
 
+    <!-- Device pre/post processor configurations.
+         The device pre/post processor configuration is described in a deviceEffects element and
+         consists in a list of elements each describing pre/post processor settings for a given
+         device.
+         Each device element has a "type" attribute corresponding to the device type (e.g.
+         speaker, bus), an "address" attribute corresponding to the device address and contains a
+         list of "apply" elements indicating one effect to apply.
+         If the device is a source, only pre processing effects are expected, if the
+         device is a sink, only post processing effects are expected.
+         The effect to apply is designated by its name in the "effects" elements.
+         The effect will be enabled by default and the audio framework will automatically add
+         and activate the effect if the given port is involved in an audio patch.
+         If the patch is "HW", the effect must be HW accelerated.
+         Note:
+         -Device are not expected to be always attached. It may be loaded dynamically. As the device
+         effect manager is getting called on any audio patch operation, it will ensure if the given
+         device is involved in an audio patch and attach the requested effect.
+         -Address is optional. If not set, the match to instantiate the device effect will be done
+         using the given type and device (of this type) with empty address only.
+
+       <deviceEffects>
+           <device type="AUDIO_DEVICE_OUT_BUS" address="BUS00_USAGE_MAIN">
+               <apply effect="equalizer"/>
+           </device>
+           <device type="AUDIO_DEVICE_OUT_BUS" address="BUS04_USAGE_VOICE">
+               <apply effect="volume"/>
+           </device>
+           <device type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom">
+               <apply effect="agc"/>
+           </device>
+       </deviceEffects>
+   -->
+
 </audio_effects_conf>
diff --git a/audio/aidl/default/bluetooth/StreamBluetooth.cpp b/audio/aidl/default/bluetooth/StreamBluetooth.cpp
index efab470..6e1a811 100644
--- a/audio/aidl/default/bluetooth/StreamBluetooth.cpp
+++ b/audio/aidl/default/bluetooth/StreamBluetooth.cpp
@@ -66,6 +66,10 @@
                                                  1000),
       mBtDeviceProxy(btDeviceProxy) {}
 
+StreamBluetooth::~StreamBluetooth() {
+    cleanupWorker();
+}
+
 ::android::status_t StreamBluetooth::init() {
     std::lock_guard guard(mLock);
     if (mBtDeviceProxy == nullptr) {
diff --git a/audio/aidl/default/include/core-impl/Stream.h b/audio/aidl/default/include/core-impl/Stream.h
index 6b45866..100b4c8 100644
--- a/audio/aidl/default/include/core-impl/Stream.h
+++ b/audio/aidl/default/include/core-impl/Stream.h
@@ -245,7 +245,7 @@
     virtual StreamDescriptor::State setClosed() = 0;
     virtual bool start() = 0;
     virtual pid_t getTid() = 0;
-    virtual void stop() = 0;
+    virtual void join() = 0;
     virtual std::string getError() = 0;
 };
 
@@ -265,7 +265,7 @@
         return WorkerImpl::start(WorkerImpl::kThreadName, ANDROID_PRIORITY_URGENT_AUDIO);
     }
     pid_t getTid() override { return WorkerImpl::getTid(); }
-    void stop() override { return WorkerImpl::stop(); }
+    void join() override { return WorkerImpl::join(); }
     std::string getError() override { return WorkerImpl::getError(); }
 };
 
@@ -457,6 +457,11 @@
     }
 
     virtual void onClose(StreamDescriptor::State statePriorToClosing) = 0;
+    // Any stream class implementing 'DriverInterface::shutdown' must call 'cleanupWorker' in
+    // the destructor in order to stop and join the worker thread in the case when the client
+    // has not called 'IStreamCommon::close' method.
+    void cleanupWorker();
+    void stopAndJoinWorker();
     void stopWorker();
 
     const StreamContext& mContext;
@@ -464,6 +469,9 @@
     std::unique_ptr<StreamWorkerInterface> mWorker;
     ChildInterface<StreamCommonDelegator> mCommon;
     ConnectedDevices mConnectedDevices;
+
+  private:
+    std::atomic<bool> mWorkerStopIssued = false;
 };
 
 // Note: 'StreamIn/Out' can not be used on their own. Instead, they must be used for defining
diff --git a/audio/aidl/default/include/core-impl/StreamAlsa.h b/audio/aidl/default/include/core-impl/StreamAlsa.h
index 2c3b284..0356946 100644
--- a/audio/aidl/default/include/core-impl/StreamAlsa.h
+++ b/audio/aidl/default/include/core-impl/StreamAlsa.h
@@ -32,6 +32,8 @@
 class StreamAlsa : public StreamCommonImpl {
   public:
     StreamAlsa(StreamContext* context, const Metadata& metadata, int readWriteRetries);
+    ~StreamAlsa();
+
     // Methods of 'DriverInterface'.
     ::android::status_t init() override;
     ::android::status_t drain(StreamDescriptor::DrainMode) override;
diff --git a/audio/aidl/default/include/core-impl/StreamBluetooth.h b/audio/aidl/default/include/core-impl/StreamBluetooth.h
index 7f4239c..357a546 100644
--- a/audio/aidl/default/include/core-impl/StreamBluetooth.h
+++ b/audio/aidl/default/include/core-impl/StreamBluetooth.h
@@ -41,6 +41,8 @@
             const std::shared_ptr<::android::bluetooth::audio::aidl::BluetoothAudioPortAidl>&
                     btDeviceProxy,
             const ::aidl::android::hardware::bluetooth::audio::PcmConfiguration& pcmConfig);
+    ~StreamBluetooth();
+
     // Methods of 'DriverInterface'.
     ::android::status_t init() override;
     ::android::status_t drain(StreamDescriptor::DrainMode) override;
diff --git a/audio/aidl/default/include/core-impl/StreamRemoteSubmix.h b/audio/aidl/default/include/core-impl/StreamRemoteSubmix.h
index 0d50c96..6ea7968 100644
--- a/audio/aidl/default/include/core-impl/StreamRemoteSubmix.h
+++ b/audio/aidl/default/include/core-impl/StreamRemoteSubmix.h
@@ -29,7 +29,9 @@
     StreamRemoteSubmix(
             StreamContext* context, const Metadata& metadata,
             const ::aidl::android::media::audio::common::AudioDeviceAddress& deviceAddress);
+    ~StreamRemoteSubmix();
 
+    // Methods of 'DriverInterface'.
     ::android::status_t init() override;
     ::android::status_t drain(StreamDescriptor::DrainMode) override;
     ::android::status_t flush() override;
diff --git a/audio/aidl/default/include/core-impl/StreamStub.h b/audio/aidl/default/include/core-impl/StreamStub.h
index 3857e0e..22b2020 100644
--- a/audio/aidl/default/include/core-impl/StreamStub.h
+++ b/audio/aidl/default/include/core-impl/StreamStub.h
@@ -23,6 +23,8 @@
 class StreamStub : public StreamCommonImpl {
   public:
     StreamStub(StreamContext* context, const Metadata& metadata);
+    ~StreamStub();
+
     // Methods of 'DriverInterface'.
     ::android::status_t init() override;
     ::android::status_t drain(StreamDescriptor::DrainMode) override;
@@ -42,6 +44,10 @@
     const bool mIsInput;
     bool mIsInitialized = false;  // Used for validating the state machine logic.
     bool mIsStandby = true;       // Used for validating the state machine logic.
+
+    // Used by the worker thread.
+    int64_t mStartTimeNs = 0;
+    long mFramesSinceStart = 0;
 };
 
 class StreamInStub final : public StreamIn, public StreamStub {
diff --git a/audio/aidl/default/include/core-impl/StreamUsb.h b/audio/aidl/default/include/core-impl/StreamUsb.h
index 608f27d..694fccf 100644
--- a/audio/aidl/default/include/core-impl/StreamUsb.h
+++ b/audio/aidl/default/include/core-impl/StreamUsb.h
@@ -29,6 +29,7 @@
 class StreamUsb : public StreamAlsa {
   public:
     StreamUsb(StreamContext* context, const Metadata& metadata);
+
     // Methods of 'DriverInterface'.
     ::android::status_t transfer(void* buffer, size_t frameCount, size_t* actualFrameCount,
                                  int32_t* latencyMs) override;
diff --git a/audio/aidl/default/include/effect-impl/EffectContext.h b/audio/aidl/default/include/effect-impl/EffectContext.h
index 275378e..02a4caa 100644
--- a/audio/aidl/default/include/effect-impl/EffectContext.h
+++ b/audio/aidl/default/include/effect-impl/EffectContext.h
@@ -82,6 +82,10 @@
 
     virtual ::android::hardware::EventFlag* getStatusEventFlag();
 
+    virtual RetCode enable();
+    virtual RetCode disable();
+    virtual RetCode reset();
+
   protected:
     int mVersion = 0;
     size_t mInputFrameSize = 0;
diff --git a/audio/aidl/default/include/effectFactory-impl/EffectConfig.h b/audio/aidl/default/include/effectFactory-impl/EffectConfig.h
index 7456b99..60bb9be 100644
--- a/audio/aidl/default/include/effectFactory-impl/EffectConfig.h
+++ b/audio/aidl/default/include/effectFactory-impl/EffectConfig.h
@@ -81,7 +81,7 @@
     /* Parsed Effects result */
     std::unordered_map<std::string, struct EffectLibraries> mEffectsMap;
     /**
-     * For parsed pre/post processing result: {key: AudioStreamType/AudioSource, value:
+     * For parsed pre/post processing result: {key: AudioStreamType/AudioSource/AudioDevice, value:
      * EffectLibraries}
      */
     ProcessingLibrariesMap mProcessingMap;
@@ -110,7 +110,8 @@
     bool resolveLibrary(const std::string& path, std::string* resolvedPath);
 
     std::optional<Processing::Type> stringToProcessingType(Processing::Type::Tag typeTag,
-                                                           const std::string& type);
+                                                           const std::string& type,
+                                                           const std::string& address);
 };
 
 }  // namespace aidl::android::hardware::audio::effect
diff --git a/audio/aidl/default/main.cpp b/audio/aidl/default/main.cpp
index 6ab747d..0b3e3ba 100644
--- a/audio/aidl/default/main.cpp
+++ b/audio/aidl/default/main.cpp
@@ -71,6 +71,7 @@
     // For more logs, use VERBOSE, however this may hinder performance.
     // android::base::SetMinimumLogSeverity(::android::base::VERBOSE);
     ABinderProcess_setThreadPoolMaxThreadCount(16);
+    ABinderProcess_startThreadPool();
 
     // Guaranteed log for b/210919187 and logd_integration_test
     LOG(INFO) << "Init for Audio AIDL HAL";
diff --git a/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp b/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp
index ca3f91a..db105b6 100644
--- a/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp
+++ b/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp
@@ -43,6 +43,10 @@
     mStreamConfig.sampleRate = context->getSampleRate();
 }
 
+StreamRemoteSubmix::~StreamRemoteSubmix() {
+    cleanupWorker();
+}
+
 ::android::status_t StreamRemoteSubmix::init() {
     mCurrentRoute = SubmixRoute::findOrCreateRoute(mDeviceAddress, mStreamConfig);
     if (mCurrentRoute == nullptr) {
@@ -285,9 +289,12 @@
     char* buff = (char*)buffer;
     size_t actuallyRead = 0;
     long remainingFrames = frameCount;
-    const int64_t deadlineTimeNs =
-            ::android::uptimeNanos() +
-            getDelayInUsForFrameCount(frameCount) * NANOS_PER_MICROSECOND / 2;
+    // Try to wait as long as possible for the audio duration, but leave some time for the call to
+    // 'transfer' to complete. 'kReadAttemptSleepUs' is a good constant for this purpose because it
+    // is by definition "strictly inferior" to the typical buffer duration.
+    const long durationUs =
+            std::max(0L, getDelayInUsForFrameCount(frameCount) - kReadAttemptSleepUs);
+    const int64_t deadlineTimeNs = ::android::uptimeNanos() + durationUs * NANOS_PER_MICROSECOND;
     while (remainingFrames > 0) {
         ssize_t framesRead = source->read(buff, remainingFrames);
         LOG(VERBOSE) << __func__ << ": frames read " << framesRead;
diff --git a/audio/aidl/default/stub/StreamStub.cpp b/audio/aidl/default/stub/StreamStub.cpp
index 2422fe4..a3d99a8 100644
--- a/audio/aidl/default/stub/StreamStub.cpp
+++ b/audio/aidl/default/stub/StreamStub.cpp
@@ -39,6 +39,10 @@
       mIsAsynchronous(!!getContext().getAsyncCallback()),
       mIsInput(isInput(metadata)) {}
 
+StreamStub::~StreamStub() {
+    cleanupWorker();
+}
+
 ::android::status_t StreamStub::init() {
     mIsInitialized = true;
     return ::android::OK;
@@ -79,7 +83,6 @@
     if (!mIsInitialized) {
         LOG(FATAL) << __func__ << ": must not happen for an uninitialized driver";
     }
-    usleep(500);
     mIsStandby = true;
     return ::android::OK;
 }
@@ -88,8 +91,9 @@
     if (!mIsInitialized) {
         LOG(FATAL) << __func__ << ": must not happen for an uninitialized driver";
     }
-    usleep(500);
     mIsStandby = false;
+    mStartTimeNs = ::android::uptimeNanos();
+    mFramesSinceStart = 0;
     return ::android::OK;
 }
 
@@ -101,14 +105,23 @@
     if (mIsStandby) {
         LOG(FATAL) << __func__ << ": must not happen while in standby";
     }
-    static constexpr float kMicrosPerSecond = MICROS_PER_SECOND;
-    static constexpr float kScaleFactor = .8f;
+    *actualFrameCount = frameCount;
     if (mIsAsynchronous) {
         usleep(500);
     } else {
-        const size_t delayUs = static_cast<size_t>(
-                std::roundf(kScaleFactor * frameCount * kMicrosPerSecond / mSampleRate));
-        usleep(delayUs);
+        mFramesSinceStart += *actualFrameCount;
+        const long bufferDurationUs =
+                (*actualFrameCount) * MICROS_PER_SECOND / mContext.getSampleRate();
+        const auto totalDurationUs =
+                (::android::uptimeNanos() - mStartTimeNs) / NANOS_PER_MICROSECOND;
+        const long totalOffsetUs =
+                mFramesSinceStart * MICROS_PER_SECOND / mContext.getSampleRate() - totalDurationUs;
+        LOG(VERBOSE) << __func__ << ": totalOffsetUs " << totalOffsetUs;
+        if (totalOffsetUs > 0) {
+            const long sleepTimeUs = std::min(totalOffsetUs, bufferDurationUs);
+            LOG(VERBOSE) << __func__ << ": sleeping for " << sleepTimeUs << " us";
+            usleep(sleepTimeUs);
+        }
     }
     if (mIsInput) {
         uint8_t* byteBuffer = static_cast<uint8_t*>(buffer);
@@ -116,7 +129,6 @@
             byteBuffer[i] = std::rand() % 255;
         }
     }
-    *actualFrameCount = frameCount;
     return ::android::OK;
 }
 
diff --git a/audio/aidl/vts/EffectHelper.h b/audio/aidl/vts/EffectHelper.h
index cad1195..0fa170f 100644
--- a/audio/aidl/vts/EffectHelper.h
+++ b/audio/aidl/vts/EffectHelper.h
@@ -397,10 +397,10 @@
                                                               outputBuffer.size(), outputBuffer));
         }
 
+        // Disable the process
         ASSERT_NO_FATAL_FAILURE(command(effect, CommandId::STOP));
         EXPECT_NO_FATAL_FAILURE(EffectHelper::readFromFmq(statusMQ, 0, outputMQ, 0, outputBuffer));
 
-        // Disable the process
         ASSERT_NO_FATAL_FAILURE(command(effect, CommandId::RESET));
     }
 
diff --git a/audio/common/all-versions/default/7.0/HidlUtils.cpp b/audio/common/all-versions/default/7.0/HidlUtils.cpp
index f89c898..bc056e2 100644
--- a/audio/common/all-versions/default/7.0/HidlUtils.cpp
+++ b/audio/common/all-versions/default/7.0/HidlUtils.cpp
@@ -1025,7 +1025,7 @@
             result = BAD_VALUE;
         }
     }
-    std::string fullHalTags{std::move(halTagsBuffer.str())};
+    std::string fullHalTags{halTagsBuffer.str()};
     strncpy(halTags, fullHalTags.c_str(), AUDIO_ATTRIBUTES_TAGS_MAX_SIZE);
     CONVERT_CHECKED(fullHalTags.length() <= AUDIO_ATTRIBUTES_TAGS_MAX_SIZE ? NO_ERROR : BAD_VALUE,
                     result);
diff --git a/automotive/evs/1.1/default/EvsCamera.cpp b/automotive/evs/1.1/default/EvsCamera.cpp
index 520670a..fb598ff 100644
--- a/automotive/evs/1.1/default/EvsCamera.cpp
+++ b/automotive/evs/1.1/default/EvsCamera.cpp
@@ -495,7 +495,7 @@
         }
         if (!stored) {
             // Add a BufferRecord wrapping this handle to our set of available buffers
-            mBuffers.push_back(std::move(BufferRecord(memHandle)));
+            mBuffers.push_back(BufferRecord(memHandle));
         }
 
         mFramesAllowed++;
diff --git a/automotive/evs/aidl/impl/default/src/ConfigManager.cpp b/automotive/evs/aidl/impl/default/src/ConfigManager.cpp
index ba4cdc0..d8961d0 100644
--- a/automotive/evs/aidl/impl/default/src/ConfigManager.cpp
+++ b/automotive/evs/aidl/impl/default/src/ConfigManager.cpp
@@ -199,8 +199,8 @@
 
             CameraParam aParam;
             if (ConfigManagerUtil::convertToEvsCameraParam(nameAttr, aParam)) {
-                aCamera->controls.insert_or_assign(
-                        aParam, std::move(std::make_tuple(minVal, maxVal, stepVal)));
+                aCamera->controls.insert_or_assign(aParam,
+                                                   std::make_tuple(minVal, maxVal, stepVal));
             }
 
             ctrlElem = ctrlElem->NextSiblingElement("control");
@@ -583,8 +583,8 @@
         CameraCtrl* ptr = reinterpret_cast<CameraCtrl*>(p);
         for (size_t idx = 0; idx < sz; ++idx) {
             CameraCtrl temp = *ptr++;
-            aCamera->controls.insert_or_assign(
-                    temp.cid, std::move(std::make_tuple(temp.min, temp.max, temp.step)));
+            aCamera->controls.insert_or_assign(temp.cid,
+                                               std::make_tuple(temp.min, temp.max, temp.step));
         }
         p = reinterpret_cast<char*>(ptr);
 
@@ -689,8 +689,8 @@
         CameraCtrl* ptr = reinterpret_cast<CameraCtrl*>(p);
         for (size_t idx = 0; idx < sz; ++idx) {
             CameraCtrl temp = *ptr++;
-            aCamera->controls.insert_or_assign(
-                    temp.cid, std::move(std::make_tuple(temp.min, temp.max, temp.step)));
+            aCamera->controls.insert_or_assign(temp.cid,
+                                               std::make_tuple(temp.min, temp.max, temp.step));
         }
         p = reinterpret_cast<char*>(ptr);
 
diff --git a/automotive/evs/aidl/impl/default/src/EvsGlDisplay.cpp b/automotive/evs/aidl/impl/default/src/EvsGlDisplay.cpp
index 5b5cbcc..cf94e38 100644
--- a/automotive/evs/aidl/impl/default/src/EvsGlDisplay.cpp
+++ b/automotive/evs/aidl/impl/default/src/EvsGlDisplay.cpp
@@ -353,7 +353,7 @@
             .buffer =
                     {
                             .description = mBuffer.description,
-                            .handle = std::move(::android::dupToAidl(mBuffer.handle)),
+                            .handle = ::android::dupToAidl(mBuffer.handle),
                     },
             .pixelSizeBytes = 4,  // RGBA_8888 is 4-byte-per-pixel format
             .bufferId = mBuffer.fingerprint,
diff --git a/automotive/evs/aidl/vts/FrameHandler.cpp b/automotive/evs/aidl/vts/FrameHandler.cpp
index e51be67..88c3643 100644
--- a/automotive/evs/aidl/vts/FrameHandler.cpp
+++ b/automotive/evs/aidl/vts/FrameHandler.cpp
@@ -50,12 +50,12 @@
         }
     } else {
         for (auto i = 0; i < handle.fds.size(); ++i) {
-            dup.fds[i] = std::move(handle.fds[i].dup());
+            dup.fds[i] = handle.fds[i].dup();
         }
     }
     dup.ints = handle.ints;
 
-    return std::move(dup);
+    return dup;
 }
 
 HardwareBuffer dupHardwareBuffer(const HardwareBuffer& buffer, bool doDup) {
@@ -64,7 +64,7 @@
             .handle = dupNativeHandle(buffer.handle, doDup),
     };
 
-    return std::move(dup);
+    return dup;
 }
 
 BufferDesc dupBufferDesc(const BufferDesc& src, bool doDup) {
@@ -77,7 +77,7 @@
             .metadata = src.metadata,
     };
 
-    return std::move(dup);
+    return dup;
 }
 
 bool comparePayload(const EvsEventDesc& l, const EvsEventDesc& r) {
diff --git a/automotive/vehicle/2.0/default/common/src/VehicleHalManager.cpp b/automotive/vehicle/2.0/default/common/src/VehicleHalManager.cpp
index e34e692..3d6e475 100644
--- a/automotive/vehicle/2.0/default/common/src/VehicleHalManager.cpp
+++ b/automotive/vehicle/2.0/default/common/src/VehicleHalManager.cpp
@@ -583,12 +583,12 @@
     while (*index < options.size()) {
         std::string option = options[*index];
         if (kSetPropOptions.find(option) != kSetPropOptions.end()) {
-            return std::move(values);
+            return values;
         }
         values.push_back(option);
         (*index)++;
     }
-    return std::move(values);
+    return values;
 }
 
 bool VehicleHalManager::parseSetPropOptions(int fd, const hidl_vec<hidl_string>& options,
diff --git a/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHalServer.cpp b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHalServer.cpp
index 4704917..86fc70a 100644
--- a/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHalServer.cpp
+++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHalServer.cpp
@@ -509,7 +509,7 @@
     int64_t timestamp;
     int32_t areaId = 0;
     if (options[1] == "--setint") {
-        updatedPropValue = std::move(createVehiclePropValue(VehiclePropertyType::INT32, 1));
+        updatedPropValue = createVehiclePropValue(VehiclePropertyType::INT32, 1);
         if (!android::base::ParseInt(options[3], &intValue)) {
             result.buffer += "failed to parse value as int: \"" + options[3] + "\"\n";
             result.buffer += getHelpInfo();
@@ -517,7 +517,7 @@
         }
         updatedPropValue->value.int32Values[0] = intValue;
     } else if (options[1] == "--setbool") {
-        updatedPropValue = std::move(createVehiclePropValue(VehiclePropertyType::BOOLEAN, 1));
+        updatedPropValue = createVehiclePropValue(VehiclePropertyType::BOOLEAN, 1);
         if (options[3] == "true" || options[3] == "True") {
             updatedPropValue->value.int32Values[0] = 1;
         } else if (options[3] == "false" || options[3] == "False") {
@@ -529,7 +529,7 @@
             return result;
         }
     } else {
-        updatedPropValue = std::move(createVehiclePropValue(VehiclePropertyType::FLOAT, 1));
+        updatedPropValue = createVehiclePropValue(VehiclePropertyType::FLOAT, 1);
         if (!android::base::ParseFloat(options[3], &floatValue)) {
             result.buffer += "failed to parse value as float: \"" + options[3] + "\"\n";
             result.buffer += getHelpInfo();
diff --git a/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp b/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp
index 8dbba19..95647df 100644
--- a/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp
+++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp
@@ -1871,7 +1871,7 @@
 
 TEST_F(FakeVehicleHardwareTest, testGetHvacPropNotAvailable) {
     FakeVehicleHardwareTestHelper helper(getHardware());
-    auto hvacPowerOnConfig = std::move(getVehiclePropConfig(toInt(VehicleProperty::HVAC_POWER_ON)));
+    auto hvacPowerOnConfig = getVehiclePropConfig(toInt(VehicleProperty::HVAC_POWER_ON));
     EXPECT_NE(hvacPowerOnConfig, nullptr);
     for (auto& hvacPowerOnAreaConfig : hvacPowerOnConfig->areaConfigs) {
         int hvacPowerAreaId = hvacPowerOnAreaConfig.areaId;
@@ -1882,7 +1882,7 @@
         EXPECT_EQ(status, StatusCode::OK);
 
         for (auto& powerPropId : helper.getHvacPowerDependentProps()) {
-            auto powerPropConfig = std::move(getVehiclePropConfig(powerPropId));
+            auto powerPropConfig = getVehiclePropConfig(powerPropId);
             EXPECT_NE(powerPropConfig, nullptr);
             if (powerPropConfig->access == VehiclePropertyAccess::WRITE) {
                 continue;
@@ -1918,7 +1918,7 @@
 
 TEST_F(FakeVehicleHardwareTest, testSetHvacPropNotAvailable) {
     FakeVehicleHardwareTestHelper helper(getHardware());
-    auto hvacPowerOnConfig = std::move(getVehiclePropConfig(toInt(VehicleProperty::HVAC_POWER_ON)));
+    auto hvacPowerOnConfig = getVehiclePropConfig(toInt(VehicleProperty::HVAC_POWER_ON));
     EXPECT_NE(hvacPowerOnConfig, nullptr);
     for (auto& hvacPowerOnAreaConfig : hvacPowerOnConfig->areaConfigs) {
         int hvacPowerAreaId = hvacPowerOnAreaConfig.areaId;
@@ -1929,7 +1929,7 @@
         EXPECT_EQ(status, StatusCode::OK);
 
         for (auto& powerPropId : helper.getHvacPowerDependentProps()) {
-            auto powerPropConfig = std::move(getVehiclePropConfig(powerPropId));
+            auto powerPropConfig = getVehiclePropConfig(powerPropId);
             EXPECT_NE(powerPropConfig, nullptr);
             if (powerPropConfig->access == VehiclePropertyAccess::READ) {
                 continue;
@@ -1968,7 +1968,7 @@
 
 TEST_F(FakeVehicleHardwareTest, testHvacPowerOnSendCurrentHvacPropValues) {
     FakeVehicleHardwareTestHelper helper(getHardware());
-    auto hvacPowerOnConfig = std::move(getVehiclePropConfig(toInt(VehicleProperty::HVAC_POWER_ON)));
+    auto hvacPowerOnConfig = getVehiclePropConfig(toInt(VehicleProperty::HVAC_POWER_ON));
     EXPECT_NE(hvacPowerOnConfig, nullptr);
     for (auto& hvacPowerOnAreaConfig : hvacPowerOnConfig->areaConfigs) {
         int hvacPowerAreaId = hvacPowerOnAreaConfig.areaId;
@@ -2007,9 +2007,9 @@
 }
 
 TEST_F(FakeVehicleHardwareTest, testHvacDualOnSynchronizesTemp) {
-    auto hvacDualOnConfig = std::move(getVehiclePropConfig(toInt(VehicleProperty::HVAC_DUAL_ON)));
+    auto hvacDualOnConfig = getVehiclePropConfig(toInt(VehicleProperty::HVAC_DUAL_ON));
     auto hvacTemperatureSetConfig =
-            std::move(getVehiclePropConfig(toInt(VehicleProperty::HVAC_TEMPERATURE_SET)));
+            getVehiclePropConfig(toInt(VehicleProperty::HVAC_TEMPERATURE_SET));
     EXPECT_NE(hvacDualOnConfig, nullptr);
     EXPECT_NE(hvacTemperatureSetConfig, nullptr);
     for (auto& hvacTemperatureSetConfig : hvacTemperatureSetConfig->areaConfigs) {
@@ -3605,7 +3605,7 @@
     // Config array values from HVAC_TEMPERATURE_SET in DefaultProperties.json
     auto configs = getHardware()->getAllPropertyConfigs();
     auto hvacTemperatureSetConfig =
-            std::move(getVehiclePropConfig(toInt(VehicleProperty::HVAC_TEMPERATURE_SET)));
+            getVehiclePropConfig(toInt(VehicleProperty::HVAC_TEMPERATURE_SET));
     EXPECT_NE(hvacTemperatureSetConfig, nullptr);
 
     auto& hvacTemperatureSetConfigArray = hvacTemperatureSetConfig->configArray;
diff --git a/automotive/vehicle/aidl/impl/utils/common/src/VehiclePropertyStore.cpp b/automotive/vehicle/aidl/impl/utils/common/src/VehiclePropertyStore.cpp
index a7caeb1..c3a46c6 100644
--- a/automotive/vehicle/aidl/impl/utils/common/src/VehiclePropertyStore.cpp
+++ b/automotive/vehicle/aidl/impl/utils/common/src/VehiclePropertyStore.cpp
@@ -289,7 +289,7 @@
 
     for (auto const& [_, record] : mRecordsByPropId) {
         for (auto const& [_, value] : record.values) {
-            allValues.push_back(std::move(mValuePool->obtain(*value)));
+            allValues.push_back(mValuePool->obtain(*value));
         }
     }
 
@@ -308,7 +308,7 @@
     }
 
     for (auto const& [_, value] : record->values) {
-        values.push_back(std::move(mValuePool->obtain(*value)));
+        values.push_back(mValuePool->obtain(*value));
     }
     return values;
 }
diff --git a/automotive/vehicle/aidl/impl/utils/common/test/VehiclePropertyStoreTest.cpp b/automotive/vehicle/aidl/impl/utils/common/test/VehiclePropertyStoreTest.cpp
index 6646b7e..22f5c73 100644
--- a/automotive/vehicle/aidl/impl/utils/common/test/VehiclePropertyStoreTest.cpp
+++ b/automotive/vehicle/aidl/impl/utils/common/test/VehiclePropertyStoreTest.cpp
@@ -328,7 +328,7 @@
 TEST_F(VehiclePropertyStoreTest, testRemoveValuesForProperty) {
     auto values = getTestPropValues();
     for (const auto& value : values) {
-        ASSERT_RESULT_OK(mStore->writeValue(std::move(mValuePool->obtain(value))));
+        ASSERT_RESULT_OK(mStore->writeValue(mValuePool->obtain(value)));
     }
 
     mStore->removeValuesForProperty(toInt(VehicleProperty::INFO_FUEL_CAPACITY));
diff --git a/automotive/vehicle/vts/src/VtsHalAutomotiveVehicle_TargetTest.cpp b/automotive/vehicle/vts/src/VtsHalAutomotiveVehicle_TargetTest.cpp
index 608a328..fb3c8cd 100644
--- a/automotive/vehicle/vts/src/VtsHalAutomotiveVehicle_TargetTest.cpp
+++ b/automotive/vehicle/vts/src/VtsHalAutomotiveVehicle_TargetTest.cpp
@@ -95,7 +95,7 @@
             std::lock_guard<std::mutex> lockGuard(mLock);
             for (auto& value : values) {
                 int32_t propId = value->getPropId();
-                mEvents[propId].push_back(std::move(value->clone()));
+                mEvents[propId].push_back(value->clone());
             }
         }
         mEventCond.notify_one();
@@ -122,7 +122,7 @@
             return events;
         }
         for (const auto& eventPtr : mEvents[propId]) {
-            events.push_back(std::move(eventPtr->clone()));
+            events.push_back(eventPtr->clone());
         }
         return events;
     }
diff --git a/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.cpp b/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.cpp
index 6783c0f..61c29d3 100644
--- a/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.cpp
+++ b/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.cpp
@@ -121,6 +121,40 @@
   return (sessionType == session_type_);
 }
 
+std::string getSettingOutputString(
+    IBluetoothAudioProvider::LeAudioAseConfigurationSetting& setting) {
+  std::stringstream ss;
+  std::string name = "";
+  if (!setting.sinkAseConfiguration.has_value() &&
+      !setting.sourceAseConfiguration.has_value())
+    return "";
+  std::vector<
+      std::optional<LeAudioAseConfigurationSetting::AseDirectionConfiguration>>*
+      directionAseConfiguration;
+  if (setting.sinkAseConfiguration.has_value() &&
+      !setting.sinkAseConfiguration.value().empty())
+    directionAseConfiguration = &setting.sinkAseConfiguration.value();
+  else
+    directionAseConfiguration = &setting.sourceAseConfiguration.value();
+  for (auto& aseConfiguration : *directionAseConfiguration) {
+    if (aseConfiguration.has_value() &&
+        aseConfiguration.value().aseConfiguration.metadata.has_value()) {
+      for (auto& meta :
+           aseConfiguration.value().aseConfiguration.metadata.value()) {
+        if (meta.has_value() &&
+            meta.value().getTag() == MetadataLtv::vendorSpecific) {
+          auto k = meta.value().get<MetadataLtv::vendorSpecific>().opaqueValue;
+          name = std::string(k.begin(), k.end());
+          break;
+        }
+      }
+    }
+  }
+
+  ss << "setting name: " << name << ", setting: " << setting.toString();
+  return ss.str();
+}
+
 ndk::ScopedAStatus LeAudioOffloadAudioProvider::startSession(
     const std::shared_ptr<IBluetoothAudioPort>& host_if,
     const AudioConfiguration& audio_config,
@@ -218,15 +252,24 @@
   return false;
 }
 
+int getCountFromBitmask(int bitmask) {
+  return std::bitset<32>(bitmask).count();
+}
+
 bool LeAudioOffloadAudioProvider::isMatchedAudioChannel(
-    CodecSpecificConfigurationLtv::AudioChannelAllocation&
-    /*cfg_channel*/,
+    CodecSpecificConfigurationLtv::AudioChannelAllocation& cfg_channel,
     CodecSpecificCapabilitiesLtv::SupportedAudioChannelCounts&
-    /*capability_channel*/) {
-  // Simply ignore.
-  // Later can use additional capabilities to match requirement.
-  bool isMatched = true;
-  return isMatched;
+        capability_channel) {
+  int count = getCountFromBitmask(cfg_channel.bitmask);
+  if (count == 1 &&
+      !(capability_channel.bitmask &
+        CodecSpecificCapabilitiesLtv::SupportedAudioChannelCounts::ONE))
+    return false;
+  if (count == 2 &&
+      !(capability_channel.bitmask &
+        CodecSpecificCapabilitiesLtv::SupportedAudioChannelCounts::TWO))
+    return false;
+  return true;
 }
 
 bool LeAudioOffloadAudioProvider::isMatchedCodecFramesPerSDU(
@@ -322,12 +365,6 @@
   return true;
 }
 
-bool isMonoConfig(
-    CodecSpecificConfigurationLtv::AudioChannelAllocation allocation) {
-  auto channel_count = std::bitset<32>(allocation.bitmask);
-  return (channel_count.count() <= 1);
-}
-
 bool LeAudioOffloadAudioProvider::filterMatchedAseConfiguration(
     LeAudioAseConfiguration& setting_cfg,
     const LeAudioAseConfiguration& requirement_cfg) {
@@ -337,9 +374,6 @@
     if (!setting_cfg.codecId.has_value()) return false;
     if (!isMatchedValidCodec(setting_cfg.codecId.value(),
                              requirement_cfg.codecId.value())) {
-      LOG(WARNING) << __func__ << ": Doesn't match valid codec, cfg = "
-                   << setting_cfg.codecId.value().toString()
-                   << ", req = " << requirement_cfg.codecId.value().toString();
       return false;
     }
   }
@@ -347,9 +381,6 @@
   if (requirement_cfg.targetLatency !=
           LeAudioAseConfiguration::TargetLatency::UNDEFINED &&
       setting_cfg.targetLatency != requirement_cfg.targetLatency) {
-    LOG(WARNING) << __func__ << ": Doesn't match target latency, cfg = "
-                 << int(setting_cfg.targetLatency)
-                 << ", req = " << int(requirement_cfg.targetLatency);
     return false;
   }
   // Ignore PHY requirement
@@ -365,8 +396,6 @@
     auto cfg = cfg_tag_map.find(requirement_cfg.getTag());
     // Config not found for this requirement, cannot match
     if (cfg == cfg_tag_map.end()) {
-      LOG(WARNING) << __func__ << ": Config not found for the requirement "
-                   << requirement_cfg.toString();
       return false;
     }
 
@@ -377,10 +406,6 @@
       continue;
 
     if (cfg->second != requirement_cfg) {
-      LOG(WARNING) << __func__
-                   << ": Config doesn't match the requirement, cfg = "
-                   << cfg->second.toString()
-                   << ", req = " << requirement_cfg.toString();
       return false;
     }
   }
@@ -437,10 +462,6 @@
   return 0;
 }
 
-int getCountFromBitmask(int bitmask) {
-  return std::bitset<32>(bitmask).count();
-}
-
 std::optional<AseDirectionConfiguration> findValidMonoConfig(
     std::vector<AseDirectionConfiguration>& valid_direction_configurations,
     int bitmask) {
@@ -505,14 +526,13 @@
   return {};
 }
 
+// Check and filter each index to see if it's a match.
 void LeAudioOffloadAudioProvider::filterRequirementAseDirectionConfiguration(
     std::optional<std::vector<std::optional<AseDirectionConfiguration>>>&
         direction_configurations,
     const std::vector<std::optional<AseDirectionRequirement>>& requirements,
     std::optional<std::vector<std::optional<AseDirectionConfiguration>>>&
-        valid_direction_configurations,
-    bool is_exact) {
-  // For every requirement, find the matched ase configuration
+        valid_direction_configurations) {
   if (!direction_configurations.has_value()) return;
 
   if (!valid_direction_configurations.has_value()) {
@@ -520,38 +540,55 @@
         std::vector<std::optional<AseDirectionConfiguration>>();
   }
 
-  for (auto& requirement : requirements) {
-    if (!requirement.has_value()) continue;
-    auto req_allocation_bitmask = getLeAudioAseConfigurationAllocationBitmask(
-        requirement.value().aseConfiguration);
-    auto req_channel_count = getCountFromBitmask(req_allocation_bitmask);
-
-    auto temp = std::vector<AseDirectionConfiguration>();
-
-    for (auto direction_configuration : direction_configurations.value()) {
-      if (!direction_configuration.has_value()) continue;
-      if (!filterMatchedAseConfiguration(
-              direction_configuration.value().aseConfiguration,
-              requirement.value().aseConfiguration))
-        continue;
-      // Valid if match any requirement.
-      temp.push_back(direction_configuration.value());
-    }
-
-    // Get the best matching config based on channel allocation
-    auto total_cfg_channel_count = 0;
-    auto req_valid_configs = getValidConfigurationsFromAllocation(
-        req_allocation_bitmask, temp, is_exact);
-    // Count and check required channel counts
-    for (auto& cfg : req_valid_configs) {
-      total_cfg_channel_count += getCountFromBitmask(
-          getLeAudioAseConfigurationAllocationBitmask(cfg.aseConfiguration));
-      valid_direction_configurations.value().push_back(cfg);
-    }
-    if (total_cfg_channel_count != req_channel_count) {
+  // Exact matching process
+  // Need to respect the number of device
+  for (int i = 0; i < requirements.size(); ++i) {
+    auto requirement = requirements[i];
+    auto direction_configuration = direction_configurations.value()[i];
+    if (!direction_configuration.has_value()) {
       valid_direction_configurations = std::nullopt;
       return;
     }
+    auto cfg = direction_configuration.value();
+    if (!filterMatchedAseConfiguration(cfg.aseConfiguration,
+                                       requirement.value().aseConfiguration)) {
+      valid_direction_configurations = std::nullopt;
+      return;  // No way to match
+    }
+    // For exact match, we require this direction to have the same allocation.
+    // If stereo, need stereo.
+    // If mono, need mono (modified to the correct required allocation)
+    auto req_allocation_bitmask = getLeAudioAseConfigurationAllocationBitmask(
+        requirement.value().aseConfiguration);
+    int req_channel_count = getCountFromBitmask(req_allocation_bitmask);
+    int cfg_bitmask =
+        getLeAudioAseConfigurationAllocationBitmask(cfg.aseConfiguration);
+    int cfg_channel_count = getCountFromBitmask(cfg_bitmask);
+    if (req_channel_count <= 1) {
+      // MONO case, is a match if also mono, modify to the same allocation
+      if (cfg_channel_count > 1) {
+        valid_direction_configurations = std::nullopt;
+        return;  // Not a match
+      }
+      // Modify the bitmask to be the same as the requirement
+      for (auto& codec_cfg : cfg.aseConfiguration.codecConfiguration) {
+        if (codec_cfg.getTag() ==
+            CodecSpecificConfigurationLtv::Tag::audioChannelAllocation) {
+          codec_cfg
+              .get<CodecSpecificConfigurationLtv::Tag::audioChannelAllocation>()
+              .bitmask = req_allocation_bitmask;
+          break;
+        }
+      }
+    } else {
+      // STEREO case, is a match if same allocation
+      if (req_allocation_bitmask != cfg_bitmask) {
+        valid_direction_configurations = std::nullopt;
+        return;  // Not a match
+      }
+    }
+    // Push to list if valid
+    valid_direction_configurations.value().push_back(cfg);
   }
 }
 
@@ -564,7 +601,6 @@
     const IBluetoothAudioProvider::LeAudioDeviceCapabilities& capabilities,
     uint8_t direction) {
   // Create a new LeAudioAseConfigurationSetting and return
-  // For other direction will contain all settings
   LeAudioAseConfigurationSetting filtered_setting{
       .audioContext = setting.audioContext,
       .sinkAseConfiguration = setting.sinkAseConfiguration,
@@ -612,27 +648,39 @@
 std::optional<LeAudioAseConfigurationSetting>
 LeAudioOffloadAudioProvider::getRequirementMatchedAseConfigurationSettings(
     IBluetoothAudioProvider::LeAudioAseConfigurationSetting& setting,
-    const IBluetoothAudioProvider::LeAudioConfigurationRequirement& requirement,
-    bool is_exact) {
-  // Try to match context in metadata.
-  if ((setting.audioContext.bitmask & requirement.audioContext.bitmask) !=
-      requirement.audioContext.bitmask)
-    return std::nullopt;
-
-  // Further filter setting's context
-  setting.audioContext.bitmask &= requirement.audioContext.bitmask;
-
+    const IBluetoothAudioProvider::LeAudioConfigurationRequirement&
+        requirement) {
   // Create a new LeAudioAseConfigurationSetting to return
+  // Make context the same as the requirement
   LeAudioAseConfigurationSetting filtered_setting{
-      .audioContext = setting.audioContext,
+      .audioContext = requirement.audioContext,
       .packing = setting.packing,
       .flags = setting.flags,
   };
 
+  // The number of AseDirectionRequirement in the requirement
+  // is the number of device.
+
+  // The exact matching process is as follow:
+  // 1. Setting direction has the same number of cfg (ignore when null require)
+  // 2. For each index, it's a 1-1 filter / mapping.
+
+  if (requirement.sinkAseRequirement.has_value() &&
+      requirement.sinkAseRequirement.value().size() !=
+          setting.sinkAseConfiguration.value().size()) {
+    return std::nullopt;
+  }
+
+  if (requirement.sourceAseRequirement.has_value() &&
+      requirement.sourceAseRequirement.value().size() !=
+          setting.sourceAseConfiguration.value().size()) {
+    return std::nullopt;
+  }
+
   if (requirement.sinkAseRequirement.has_value()) {
     filterRequirementAseDirectionConfiguration(
         setting.sinkAseConfiguration, requirement.sinkAseRequirement.value(),
-        filtered_setting.sinkAseConfiguration, is_exact);
+        filtered_setting.sinkAseConfiguration);
     if (!filtered_setting.sinkAseConfiguration.has_value()) {
       return std::nullopt;
     }
@@ -642,7 +690,7 @@
     filterRequirementAseDirectionConfiguration(
         setting.sourceAseConfiguration,
         requirement.sourceAseRequirement.value(),
-        filtered_setting.sourceAseConfiguration, is_exact);
+        filtered_setting.sourceAseConfiguration);
     if (!filtered_setting.sourceAseConfiguration.has_value()) {
       return std::nullopt;
     }
@@ -651,47 +699,44 @@
   return filtered_setting;
 }
 
-std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>
+std::optional<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>
 LeAudioOffloadAudioProvider::matchWithRequirement(
     std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>&
         matched_ase_configuration_settings,
-    const std::vector<IBluetoothAudioProvider::LeAudioConfigurationRequirement>&
-        in_requirements,
-    bool is_exact) {
-  // Each requirement will match with a valid setting
-  std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting> result;
-  for (auto& requirement : in_requirements) {
-    LOG(INFO) << __func__ << ": Trying to match for the requirement "
-              << requirement.toString();
-    bool is_matched = false;
-
-    for (auto& setting : matched_ase_configuration_settings) {
-      auto filtered_ase_configuration_setting =
-          getRequirementMatchedAseConfigurationSettings(setting, requirement,
-                                                        is_exact);
-      if (filtered_ase_configuration_setting.has_value()) {
-        result.push_back(filtered_ase_configuration_setting.value());
-        LOG(INFO) << __func__ << ": Result = "
-                  << filtered_ase_configuration_setting.value().toString();
-        // Found a matched setting, ignore other settings
-        is_matched = true;
-        break;
-      }
+    const IBluetoothAudioProvider::LeAudioConfigurationRequirement& requirement,
+    bool isMatchContext) {
+  LOG(INFO) << __func__ << ": Trying to match for the requirement "
+            << requirement.toString() << ", match context = " << isMatchContext;
+  for (auto& setting : matched_ase_configuration_settings) {
+    // Try to match context in metadata.
+    if (isMatchContext) {
+      if ((setting.audioContext.bitmask & requirement.audioContext.bitmask) !=
+          requirement.audioContext.bitmask)
+        continue;
+      LOG(DEBUG) << __func__ << ": Setting with matched context: "
+                 << getSettingOutputString(setting);
     }
-    if (!is_matched) {
-      // If cannot satisfy this requirement, return an empty result
-      LOG(WARNING) << __func__ << ": Cannot match the requirement "
-                   << requirement.toString();
-      result.clear();
-      break;
+
+    auto filtered_ase_configuration_setting =
+        getRequirementMatchedAseConfigurationSettings(setting, requirement);
+    if (filtered_ase_configuration_setting.has_value()) {
+      LOG(INFO) << __func__ << ": Result found: "
+                << getSettingOutputString(
+                       filtered_ase_configuration_setting.value());
+      // Found a matched setting, ignore other settings
+      return filtered_ase_configuration_setting;
     }
   }
-  return result;
+  // If cannot satisfy this requirement, return nullopt
+  LOG(WARNING) << __func__ << ": Cannot match the requirement "
+               << requirement.toString()
+               << ", match context = " << isMatchContext;
+  return std::nullopt;
 }
 
 // For each requirement, a valid ASE configuration will satify:
-// - matched with any sink capability (if presented)
-// - OR matched with any source capability (if presented)
+// - matched with the sink capability (if presented)
+// - AND matched with the source capability (if presented)
 // - and the setting need to pass the requirement
 ndk::ScopedAStatus LeAudioOffloadAudioProvider::getLeAudioAseConfiguration(
     const std::optional<std::vector<
@@ -714,19 +759,15 @@
     return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
   }
 
-  // Split out preferred and non-preferred settings based on context
-  // An example: preferred = MEDIA, available: MEDIA | CONVERSATION
-  // -> preferred list will have settings with MEDIA context
-  // -> non-preferred list will have settings with any context
-  // We want to match requirement with preferred context settings first
+  // Matched ASE configuration with ignored audio context
+  std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>
+      sink_matched_ase_configuration_settings;
   std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>
       matched_ase_configuration_settings;
-  // Matched ASE configuration with non-preferred audio context
-  std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>
-      non_prefer_matched_ase_configuration_settings;
 
-  if (in_remoteSinkAudioCapabilities.has_value())
-    // Matching each setting with any remote capabilities
+  // A setting must match both source and sink.
+  // First filter all setting matched with sink capability
+  if (in_remoteSinkAudioCapabilities.has_value()) {
     for (auto& setting : ase_configuration_settings)
       for (auto& capability : in_remoteSinkAudioCapabilities.value()) {
         if (!capability.has_value()) continue;
@@ -734,81 +775,64 @@
             getCapabilitiesMatchedAseConfigurationSettings(
                 setting, capability.value(), kLeAudioDirectionSink);
         if (filtered_ase_configuration_setting.has_value()) {
-          // Push to non-prefer first for the broadest matching possible
-          non_prefer_matched_ase_configuration_settings.push_back(
+          sink_matched_ase_configuration_settings.push_back(
               filtered_ase_configuration_setting.value());
-          // Try to filter out prefer context to another vector.
-          if (filterCapabilitiesMatchedContext(
-                  filtered_ase_configuration_setting.value().audioContext,
-                  capability.value())) {
-            matched_ase_configuration_settings.push_back(
-                filtered_ase_configuration_setting.value());
-          }
         }
       }
+  } else {
+    sink_matched_ase_configuration_settings = ase_configuration_settings;
+  }
 
   // Combine filter every source capability
-  if (in_remoteSourceAudioCapabilities.has_value())
-    // Matching each setting with any remote capabilities
-    for (auto& setting : ase_configuration_settings)
+  if (in_remoteSourceAudioCapabilities.has_value()) {
+    for (auto& setting : sink_matched_ase_configuration_settings)
       for (auto& capability : in_remoteSourceAudioCapabilities.value()) {
         if (!capability.has_value()) continue;
         auto filtered_ase_configuration_setting =
             getCapabilitiesMatchedAseConfigurationSettings(
                 setting, capability.value(), kLeAudioDirectionSource);
         if (filtered_ase_configuration_setting.has_value()) {
-          // Put into the same list
-          // possibly duplicated, filtered by requirement later
-          // Push to non-prefer first for the broadest matching possible
-          non_prefer_matched_ase_configuration_settings.push_back(
+          matched_ase_configuration_settings.push_back(
               filtered_ase_configuration_setting.value());
-          // Try to filter out prefer context to another vector.
-          if (filterCapabilitiesMatchedContext(
-                  filtered_ase_configuration_setting.value().audioContext,
-                  capability.value())) {
-            matched_ase_configuration_settings.push_back(
-                filtered_ase_configuration_setting.value());
-          }
         }
       }
+  } else {
+    matched_ase_configuration_settings =
+        sink_matched_ase_configuration_settings;
+  }
 
-  // Matching priority list:
-  // Preferred context - exact match with allocation
-  // Any context - exact match with allocation
-  // Preferred context - loose match with allocation
-  // Any context - loose match with allocation
+  std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting> result;
+  for (auto& requirement : in_requirements) {
+    // For each requirement, try to match with a setting.
+    // If we cannot match, return an empty result.
 
-  // A loose match will attempt to return 2 settings with the
-  // combined allocation bitmask equal the required allocation.
-  // For example, we can return 2 link (left link and right link) when
-  // the requirement required 1 (left + right) link.
-  auto result = matchWithRequirement(matched_ase_configuration_settings,
-                                     in_requirements, true);
-  if (result.empty()) {
-    LOG(WARNING)
-        << __func__
-        << ": Cannot match with preferred context settings - exact match";
-    result = matchWithRequirement(non_prefer_matched_ase_configuration_settings,
-                                  in_requirements, true);
+    // Matching priority list:
+    // Preferred context - exact match with allocation
+    // Any context - exact match with allocation
+
+    auto matched_setting_with_context = matchWithRequirement(
+        matched_ase_configuration_settings, requirement, true);
+    if (matched_setting_with_context.has_value()) {
+      result.push_back(matched_setting_with_context.value());
+    } else {
+      auto matched_setting = matchWithRequirement(
+          matched_ase_configuration_settings, requirement, false);
+      if (matched_setting.has_value()) {
+        result.push_back(matched_setting.value());
+      } else {
+        // Cannot find a match for this requirement
+        // Immediately return
+        LOG(ERROR)
+            << __func__
+            << ": Cannot find any match for this requirement, exitting...";
+        result.clear();
+        *_aidl_return = result;
+        return ndk::ScopedAStatus::ok();
+      }
+    }
   }
-  if (result.empty()) {
-    LOG(WARNING)
-        << __func__
-        << ": Cannot match with non-preferred context settings - exact match";
-    result = matchWithRequirement(matched_ase_configuration_settings,
-                                  in_requirements, false);
-  }
-  if (result.empty()) {
-    LOG(WARNING) << __func__
-                 << ": Cannot match with preferred context settings - "
-                    "non-exact match";
-    result = matchWithRequirement(non_prefer_matched_ase_configuration_settings,
-                                  in_requirements, false);
-  }
-  if (result.empty())
-    LOG(ERROR) << __func__
-               << ": Cannot match with non preferred context settings - "
-                  "non-exact match";
+
+  LOG(INFO) << __func__ << ": Found matches for all requirements!";
   *_aidl_return = result;
   return ndk::ScopedAStatus::ok();
 };
diff --git a/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.h b/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.h
index 043d923..798f183 100644
--- a/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.h
+++ b/bluetooth/audio/aidl/default/LeAudioOffloadAudioProvider.h
@@ -139,8 +139,7 @@
           direction_configurations,
       const std::vector<std::optional<AseDirectionRequirement>>& requirements,
       std::optional<std::vector<std::optional<AseDirectionConfiguration>>>&
-          valid_direction_configurations,
-      bool is_exact);
+          valid_direction_configurations);
   std::optional<LeAudioAseConfigurationSetting>
   getCapabilitiesMatchedAseConfigurationSettings(
       IBluetoothAudioProvider::LeAudioAseConfigurationSetting& setting,
@@ -150,8 +149,7 @@
   getRequirementMatchedAseConfigurationSettings(
       IBluetoothAudioProvider::LeAudioAseConfigurationSetting& setting,
       const IBluetoothAudioProvider::LeAudioConfigurationRequirement&
-          requirement,
-      bool is_exact);
+          requirement);
   bool isMatchedQosRequirement(LeAudioAseQosConfiguration setting_qos,
                                AseQosDirectionRequirement requirement_qos);
   std::optional<LeAudioBroadcastConfigurationSetting>
@@ -169,14 +167,13 @@
       AudioContext requirement_context,
       IBluetoothAudioProvider::BroadcastQuality quality,
       LeAudioBroadcastSubgroupConfiguration configuration);
-  std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>
+  std::optional<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>
   matchWithRequirement(
       std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>&
           matched_ase_configuration_settings,
-      const std::vector<
-          IBluetoothAudioProvider::LeAudioConfigurationRequirement>&
-          in_requirements,
-      bool is_exact);
+      const IBluetoothAudioProvider::LeAudioConfigurationRequirement&
+          requirements,
+      bool isMatchContext);
 };
 
 class LeAudioOffloadOutputAudioProvider : public LeAudioOffloadAudioProvider {
diff --git a/bluetooth/audio/aidl/vts/VtsHalBluetoothAudioTargetTest.cpp b/bluetooth/audio/aidl/vts/VtsHalBluetoothAudioTargetTest.cpp
index 110a628..4481238 100644
--- a/bluetooth/audio/aidl/vts/VtsHalBluetoothAudioTargetTest.cpp
+++ b/bluetooth/audio/aidl/vts/VtsHalBluetoothAudioTargetTest.cpp
@@ -142,6 +142,7 @@
   VERSION_AIDL_V2,
   VERSION_AIDL_V3,
   VERSION_AIDL_V4,
+  VERSION_AIDL_V5,
 };
 
 // Some valid configs for HFP PCM configuration (software sessions)
@@ -683,6 +684,8 @@
         return BluetoothAudioHalVersion::VERSION_AIDL_V3;
       case 4:
         return BluetoothAudioHalVersion::VERSION_AIDL_V4;
+      case 5:
+        return BluetoothAudioHalVersion::VERSION_AIDL_V5;
       default:
         return BluetoothAudioHalVersion::VERSION_UNAVAILABLE;
     }
diff --git a/bluetooth/audio/utils/Android.bp b/bluetooth/audio/utils/Android.bp
index 1661362..d931c4d 100644
--- a/bluetooth/audio/utils/Android.bp
+++ b/bluetooth/audio/utils/Android.bp
@@ -81,9 +81,9 @@
     ],
     required: [
         "aidl_audio_set_configurations_bfbs",
-        "aidl_audio_set_configurations_json",
+        "aidl_default_audio_set_configurations_json",
         "aidl_audio_set_scenarios_bfbs",
-        "aidl_audio_set_scenarios_json",
+        "aidl_default_audio_set_scenarios_json",
         "hfp_codec_capabilities_xml",
     ],
 }
@@ -215,9 +215,9 @@
 }
 
 prebuilt_etc {
-    name: "aidl_audio_set_scenarios_json",
+    name: "aidl_default_audio_set_scenarios_json",
     src: "le_audio_configuration_set/audio_set_scenarios.json",
-    filename: "aidl_audio_set_scenarios.json",
+    filename: "aidl_default_audio_set_scenarios.json",
     sub_dir: "aidl/le_audio",
     vendor: true,
 }
@@ -239,9 +239,9 @@
 }
 
 prebuilt_etc {
-    name: "aidl_audio_set_configurations_json",
+    name: "aidl_default_audio_set_configurations_json",
     src: "le_audio_configuration_set/audio_set_configurations.json",
-    filename: "aidl_audio_set_configurations.json",
+    filename: "aidl_default_audio_set_configurations.json",
     sub_dir: "aidl/le_audio",
     vendor: true,
 }
diff --git a/bluetooth/audio/utils/aidl_session/BluetoothAudioSession.cpp b/bluetooth/audio/utils/aidl_session/BluetoothAudioSession.cpp
index d0f2a26..a458c5b 100644
--- a/bluetooth/audio/utils/aidl_session/BluetoothAudioSession.cpp
+++ b/bluetooth/audio/utils/aidl_session/BluetoothAudioSession.cpp
@@ -139,21 +139,36 @@
                   << toString(session_type_);
         return;
       }
+    } else if(session_type_ == SessionType::HFP_HARDWARE_OFFLOAD_DATAPATH) {
+      if (audio_config.getTag() != AudioConfiguration::hfpConfig) {
+        LOG(ERROR) << __func__ << " invalid audio config type for SessionType ="
+                  << toString(session_type_);
+        return;
+      }
     } else {
       LOG(ERROR) << __func__ << " invalid SessionType ="
                  << toString(session_type_);
       return;
     }
   } else {
-    if (session_type_ !=
-            SessionType::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH &&
-        session_type_ !=
+    if (session_type_ ==
+            SessionType::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH ||
+        session_type_ ==
             SessionType::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH) {
-      return;
-    }
-    if (audio_config.getTag() != AudioConfiguration::leAudioConfig) {
-      LOG(ERROR) << __func__ << " invalid audio config type for SessionType ="
-                 << toString(session_type_);
+      if (audio_config.getTag() != AudioConfiguration::leAudioConfig) {
+        LOG(ERROR) << __func__ << " invalid audio config type for SessionType ="
+                   << toString(session_type_);
+        return;
+      }
+    } else if(session_type_ == SessionType::HFP_HARDWARE_OFFLOAD_DATAPATH) {
+      if (audio_config.getTag() != AudioConfiguration::hfpConfig) {
+        LOG(ERROR) << __func__ << " invalid audio config type for SessionType ="
+                  << toString(session_type_);
+        return;
+      }
+    } else {
+      LOG(ERROR) << __func__
+                 << " invalid SessionType =" << toString(session_type_);
       return;
     }
   }
diff --git a/bluetooth/audio/utils/aidl_session/BluetoothLeAudioAseConfigurationSettingProvider.cpp b/bluetooth/audio/utils/aidl_session/BluetoothLeAudioAseConfigurationSettingProvider.cpp
index 780154a..37812fa 100644
--- a/bluetooth/audio/utils/aidl_session/BluetoothLeAudioAseConfigurationSettingProvider.cpp
+++ b/bluetooth/audio/utils/aidl_session/BluetoothLeAudioAseConfigurationSettingProvider.cpp
@@ -240,18 +240,31 @@
      CodecSpecificConfigurationLtv::AudioChannelAllocation::RIGHT_SURROUND},
 };
 
+// Set configuration and scenario files with fallback default
 static const std::vector<
     std::pair<const char* /*schema*/, const char* /*content*/>>
-    kLeAudioSetConfigs = {{"/vendor/etc/aidl/le_audio/"
-                           "aidl_audio_set_configurations.bfbs",
-                           "/vendor/etc/aidl/le_audio/"
-                           "aidl_audio_set_configurations.json"}};
+    kLeAudioSetConfigs = {
+        {"/vendor/etc/aidl/le_audio/"
+         "aidl_audio_set_configurations.bfbs",
+         "/vendor/etc/aidl/le_audio/"
+         "aidl_audio_set_configurations.json"},
+
+        {"/vendor/etc/aidl/le_audio/"
+         "aidl_audio_set_configurations.bfbs",
+         "/vendor/etc/aidl/le_audio/"
+         "aidl_default_audio_set_configurations.json"},
+};
 static const std::vector<
     std::pair<const char* /*schema*/, const char* /*content*/>>
     kLeAudioSetScenarios = {{"/vendor/etc/aidl/le_audio/"
                              "aidl_audio_set_scenarios.bfbs",
                              "/vendor/etc/aidl/le_audio/"
-                             "aidl_audio_set_scenarios.json"}};
+                             "aidl_audio_set_scenarios.json"},
+
+                            {"/vendor/etc/aidl/le_audio/"
+                             "aidl_audio_set_scenarios.bfbs",
+                             "/vendor/etc/aidl/le_audio/"
+                             "aidl_default_audio_set_scenarios.json"}};
 
 /* Implementation */
 
@@ -374,7 +387,7 @@
 }
 
 void AudioSetConfigurationProviderJson::populateAseConfiguration(
-    LeAudioAseConfiguration& ase,
+    const std::string& name, LeAudioAseConfiguration& ase,
     const le_audio::AudioSetSubConfiguration* flat_subconfig,
     const le_audio::QosConfiguration* qos_cfg) {
   // Target latency
@@ -411,20 +424,36 @@
   }
   // Codec configuration data
   populateConfigurationData(ase, flat_subconfig->codec_configuration());
+  // Populate the config name for easier debug
+  auto meta = std::vector<std::optional<MetadataLtv>>();
+  MetadataLtv::VendorSpecific cfg_name;
+  cfg_name.opaqueValue = std::vector<uint8_t>(name.begin(), name.end());
+  meta.push_back(cfg_name);
+  ase.metadata = meta;
 }
 
 void AudioSetConfigurationProviderJson::populateAseQosConfiguration(
     LeAudioAseQosConfiguration& qos, const le_audio::QosConfiguration* qos_cfg,
-    LeAudioAseConfiguration& ase) {
+    LeAudioAseConfiguration& ase, uint8_t ase_channel_cnt) {
   std::optional<CodecSpecificConfigurationLtv::CodecFrameBlocksPerSDU>
       frameBlock = std::nullopt;
   std::optional<CodecSpecificConfigurationLtv::FrameDuration> frameDuration =
       std::nullopt;
-  std::optional<CodecSpecificConfigurationLtv::AudioChannelAllocation>
-      allocation = std::nullopt;
   std::optional<CodecSpecificConfigurationLtv::OctetsPerCodecFrame> octet =
       std::nullopt;
 
+  // Hack to put back allocation
+  CodecSpecificConfigurationLtv::AudioChannelAllocation allocation =
+      CodecSpecificConfigurationLtv::AudioChannelAllocation();
+  if (ase_channel_cnt == 1) {
+    allocation.bitmask |=
+        CodecSpecificConfigurationLtv::AudioChannelAllocation::FRONT_CENTER;
+
+  } else {
+    allocation.bitmask |=
+        CodecSpecificConfigurationLtv::AudioChannelAllocation::FRONT_LEFT |
+        CodecSpecificConfigurationLtv::AudioChannelAllocation::FRONT_RIGHT;
+  }
   for (auto& cfg_ltv : ase.codecConfiguration) {
     auto tag = cfg_ltv.getTag();
     if (tag == CodecSpecificConfigurationLtv::codecFrameBlocksPerSDU) {
@@ -433,11 +462,12 @@
     } else if (tag == CodecSpecificConfigurationLtv::frameDuration) {
       frameDuration =
           cfg_ltv.get<CodecSpecificConfigurationLtv::frameDuration>();
-    } else if (tag == CodecSpecificConfigurationLtv::audioChannelAllocation) {
-      allocation =
-          cfg_ltv.get<CodecSpecificConfigurationLtv::audioChannelAllocation>();
     } else if (tag == CodecSpecificConfigurationLtv::octetsPerCodecFrame) {
       octet = cfg_ltv.get<CodecSpecificConfigurationLtv::octetsPerCodecFrame>();
+    } else if (tag == CodecSpecificConfigurationLtv::audioChannelAllocation) {
+      // Change to the old hack allocation
+      cfg_ltv.set<CodecSpecificConfigurationLtv::audioChannelAllocation>(
+          allocation);
     }
   }
 
@@ -445,9 +475,8 @@
   if (frameBlock.has_value()) frameBlockValue = frameBlock.value().value;
 
   // Populate maxSdu
-  if (allocation.has_value() && octet.has_value()) {
-    auto channel_count = std::bitset<32>(allocation.value().bitmask).count();
-    qos.maxSdu = channel_count * octet.value().value * frameBlockValue;
+  if (octet.has_value()) {
+    qos.maxSdu = ase_channel_cnt * octet.value().value * frameBlockValue;
   }
   // Populate sduIntervalUs
   if (frameDuration.has_value()) {
@@ -468,6 +497,7 @@
 // Parse into AseDirectionConfiguration
 AseDirectionConfiguration
 AudioSetConfigurationProviderJson::SetConfigurationFromFlatSubconfig(
+    const std::string& name,
     const le_audio::AudioSetSubConfiguration* flat_subconfig,
     const le_audio::QosConfiguration* qos_cfg, CodecLocation location) {
   AseDirectionConfiguration direction_conf;
@@ -477,10 +507,11 @@
   LeAudioDataPathConfiguration path;
 
   // Translate into LeAudioAseConfiguration
-  populateAseConfiguration(ase, flat_subconfig, qos_cfg);
+  populateAseConfiguration(name, ase, flat_subconfig, qos_cfg);
 
   // Translate into LeAudioAseQosConfiguration
-  populateAseQosConfiguration(qos, qos_cfg, ase);
+  populateAseQosConfiguration(qos, qos_cfg, ase,
+                              flat_subconfig->ase_channel_cnt());
 
   // Translate location to data path id
   switch (location) {
@@ -510,13 +541,18 @@
 // Parse into AseDirectionConfiguration and the ConfigurationFlags
 // and put them in the given list.
 void AudioSetConfigurationProviderJson::processSubconfig(
+    const std::string& name,
     const le_audio::AudioSetSubConfiguration* subconfig,
     const le_audio::QosConfiguration* qos_cfg,
     std::vector<std::optional<AseDirectionConfiguration>>&
         directionAseConfiguration,
     CodecLocation location) {
-  directionAseConfiguration.push_back(
-      SetConfigurationFromFlatSubconfig(subconfig, qos_cfg, location));
+  auto ase_cnt = subconfig->ase_cnt();
+  auto config =
+      SetConfigurationFromFlatSubconfig(name, subconfig, qos_cfg, location);
+  directionAseConfiguration.push_back(config);
+  // Put the same setting again.
+  if (ase_cnt == 2) directionAseConfiguration.push_back(config);
 }
 
 void AudioSetConfigurationProviderJson::PopulateAseConfigurationFromFlat(
@@ -587,11 +623,11 @@
     /* Load subconfigurations */
     for (auto subconfig : *codec_cfg->subconfigurations()) {
       if (subconfig->direction() == kLeAudioDirectionSink) {
-        processSubconfig(subconfig, qos_sink_cfg, sinkAseConfiguration,
-                         location);
+        processSubconfig(flat_cfg->name()->str(), subconfig, qos_sink_cfg,
+                         sinkAseConfiguration, location);
       } else {
-        processSubconfig(subconfig, qos_source_cfg, sourceAseConfiguration,
-                         location);
+        processSubconfig(flat_cfg->name()->str(), subconfig, qos_source_cfg,
+                         sourceAseConfiguration, location);
       }
     }
   } else {
@@ -742,9 +778,6 @@
 
   LOG(DEBUG) << "Updating " << flat_scenarios->size() << " scenarios.";
   for (auto const& scenario : *flat_scenarios) {
-    LOG(DEBUG) << "Scenario " << scenario->name()->c_str()
-               << " configs: " << scenario->configurations()->size();
-
     if (!scenario->configurations()) continue;
     std::string scenario_name = scenario->name()->c_str();
     AudioContext context;
@@ -758,6 +791,9 @@
       context = AudioContext(game_context);
     else if (scenario_name == "VoiceAssistants")
       context = AudioContext(voice_assistants_context);
+    LOG(DEBUG) << "Scenario " << scenario->name()->c_str()
+               << " configs: " << scenario->configurations()->size()
+               << " context: " << context.toString();
 
     for (auto it = scenario->configurations()->begin();
          it != scenario->configurations()->end(); ++it) {
@@ -790,14 +826,22 @@
     std::vector<std::pair<const char* /*schema*/, const char* /*content*/>>
         scenario_files,
     CodecLocation location) {
+  bool is_loaded_config = false;
   for (auto [schema, content] : config_files) {
-    if (!LoadConfigurationsFromFiles(schema, content, location)) return false;
+    if (LoadConfigurationsFromFiles(schema, content, location)) {
+      is_loaded_config = true;
+      break;
+    }
   }
 
+  bool is_loaded_scenario = false;
   for (auto [schema, content] : scenario_files) {
-    if (!LoadScenariosFromFiles(schema, content)) return false;
+    if (LoadScenariosFromFiles(schema, content)) {
+      is_loaded_scenario = true;
+      break;
+    }
   }
-  return true;
+  return is_loaded_config && is_loaded_scenario;
 }
 
 }  // namespace audio
diff --git a/bluetooth/audio/utils/aidl_session/BluetoothLeAudioAseConfigurationSettingProvider.h b/bluetooth/audio/utils/aidl_session/BluetoothLeAudioAseConfigurationSettingProvider.h
index 6639009..fac6152 100644
--- a/bluetooth/audio/utils/aidl_session/BluetoothLeAudioAseConfigurationSettingProvider.h
+++ b/bluetooth/audio/utils/aidl_session/BluetoothLeAudioAseConfigurationSettingProvider.h
@@ -73,19 +73,22 @@
           flat_codec_specific_params);
 
   static void populateAseConfiguration(
-      LeAudioAseConfiguration& ase,
+      const std::string& name, LeAudioAseConfiguration& ase,
       const le_audio::AudioSetSubConfiguration* flat_subconfig,
       const le_audio::QosConfiguration* qos_cfg);
 
   static void populateAseQosConfiguration(
       LeAudioAseQosConfiguration& qos,
-      const le_audio::QosConfiguration* qos_cfg, LeAudioAseConfiguration& ase);
+      const le_audio::QosConfiguration* qos_cfg, LeAudioAseConfiguration& ase,
+      uint8_t ase_channel_cnt);
 
   static AseDirectionConfiguration SetConfigurationFromFlatSubconfig(
+      const std::string& name,
       const le_audio::AudioSetSubConfiguration* flat_subconfig,
       const le_audio::QosConfiguration* qos_cfg, CodecLocation location);
 
   static void processSubconfig(
+      const std::string& name,
       const le_audio::AudioSetSubConfiguration* subconfig,
       const le_audio::QosConfiguration* qos_cfg,
       std::vector<std::optional<AseDirectionConfiguration>>&
diff --git a/bluetooth/audio/utils/le_audio_configuration_set/audio_set_configurations.fbs b/bluetooth/audio/utils/le_audio_configuration_set/audio_set_configurations.fbs
index bde467d..ed9ad49 100644
--- a/bluetooth/audio/utils/le_audio_configuration_set/audio_set_configurations.fbs
+++ b/bluetooth/audio/utils/le_audio_configuration_set/audio_set_configurations.fbs
@@ -56,10 +56,9 @@
     HIGH_RELIABILITY = 0x03,
 }
 table AudioSetSubConfiguration {
-    device_cnt: ubyte;
+    ase_channel_cnt: ubyte;
     ase_cnt: ubyte;
     direction: AudioSetConfigurationDirection = SINK;
-    configuration_strategy: AudioSetConfigurationStrategy;
     codec_id : CodecId (required);
     codec_configuration: [CodecSpecificConfiguration] (required);
 }
diff --git a/bluetooth/audio/utils/le_audio_configuration_set/audio_set_configurations.json b/bluetooth/audio/utils/le_audio_configuration_set/audio_set_configurations.json
index 404a48a..fbfa3f9 100644
--- a/bluetooth/audio/utils/le_audio_configuration_set/audio_set_configurations.json
+++ b/bluetooth/audio/utils/le_audio_configuration_set/audio_set_configurations.json
@@ -13,16 +13,11 @@
     "   Codec Configuration parameter types:",
     "     SUPPORTED_SAMPLING_FREQUENCY = 1",
     "     SUPPORTED_FRAME_DURATION = 2",
-    "     SUPPORTED_AUDIO_CHANNEL_ALLOCATION = 3",
     "     SUPPORTED_OCTETS_PER_CODEC_FRAME = 4",
     "     SUPPORTED_CODEC_FRAME_BLOCKS_PER_SDU = 5",
     " Example values which can be used as 'codec_configuration.compound_value'",
     "   Codec Coding formats:",
     "     LC3 = 6",
-    "   ASE Configuration strategies:",
-    "     MONO_ONE_CIS_PER_DEVICE = 0",
-    "     STEREO_TWO_CISES_PER_DEVICE = 1",
-    "     STEREO_ONE_CIS_PER_DEVICE = 2",
     "   Sampling Frequencies: ",
     "     8000Hz = 1",
     "     11025Hz = 2",
@@ -43,1177 +38,1135 @@
   ],
   "configurations": [
     {
-      "name": "DualDev_OneChanStereoSnk_16_1_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_16_1_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_16_1_1",
-      "codec_config_name": "DualDev_OneChanStereoSnk_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_1"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_16_1_2",
-      "codec_config_name": "DualDev_OneChanStereoSnk_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_2"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_16_2_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_16_2_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_16_2_1",
-      "codec_config_name": "DualDev_OneChanStereoSnk_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_1"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_16_2_2",
-      "codec_config_name": "DualDev_OneChanStereoSnk_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_16_1_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_16_1_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_16_1_1",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_1"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_16_1_2",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_16_2_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_16_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_16_2_1",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_1"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_16_2_2",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_2"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_16_1_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_16_1",
+      "name": "One-TwoChan-SnkAse-Lc3_16_1_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_16_1_Balanced_Reliability",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_16_1",
+      "name": "One-TwoChan-SnkAse-Lc3_16_1_Balanced_Reliability",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_16_1_1",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_16_1",
+      "name": "One-TwoChan-SnkAse-Lc3_16_1_1",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_1"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_16_1_2",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_16_1",
+      "name": "One-TwoChan-SnkAse-Lc3_16_1_2",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_2"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_16_2_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_16_2_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_16_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_16_2_Balanced_Reliability",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_16_2_1",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_16_2_1",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_1"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_16_2_2",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_16_2_2",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_32_1_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_32_1",
+      "name": "One-OneChan-SnkAse-Lc3_32_1_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_32_1",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_32_1_1",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_32_1",
+      "name": "One-OneChan-SnkAse-Lc3_32_1_1",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_32_1",
       "qos_config_name": [
         "QoS_Config_32_1_1"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_32_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_32_2",
+      "name": "One-OneChan-SnkAse-Lc3_32_1_2",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_32_1",
+      "qos_config_name": [
+        "QoS_Config_32_1_2"
+      ]
+    },
+    {
+      "name": "One-OneChan-SnkAse-Lc3_32_2_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_32_2_1",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_32_2",
+      "name": "One-OneChan-SnkAse-Lc3_32_2_1",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_32_2_1"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_16_1_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_16_1",
+      "name": "One-OneChan-SnkAse-Lc3_32_2_2",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_32_2",
+      "qos_config_name": [
+        "QoS_Config_32_2_2"
+      ]
+    },
+    {
+      "name": "One-OneChan-SnkAse-Lc3_16_1_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_16_1_1",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_16_1",
+      "name": "One-OneChan-SnkAse-Lc3_16_1_1",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_1"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_16_1_2",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_16_1",
+      "name": "One-OneChan-SnkAse-Lc3_16_1_2",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_2"
       ]
     },
     {
-      "name": "DualDev_OneChanMonoSnk_16_2_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanMonoSnk_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_16_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_16_2",
+      "name": "One-OneChan-SnkAse-Lc3_16_2_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_16_2_1",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_16_2",
+      "name": "One-OneChan-SnkAse-Lc3_16_2_1",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_1"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_16_2_2",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_16_2",
+      "name": "One-OneChan-SnkAse-Lc3_16_2_2",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_2"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_1_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_1_1",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_1"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_1_2",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_2"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2_2",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_2"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2_1",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_1"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1_2",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_2"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1_1",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_1"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_2_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_2_1",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_1"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_2_2",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_2"
       ]
     },
     {
-      "name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_1_Low_Latency",
-      "codec_config_name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_1",
+      "name": "One-TwoChan-SnkAse-Lc3_32_2-One-TwoChan-SrcAse-Lc3_32_2_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_32_2-One-TwoChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_1_1",
-      "codec_config_name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_1",
-      "qos_config_name": [
-        "QoS_Config_16_1_1"
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_32_2_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_32_2",
-      "qos_config_name": [
-        "QoS_Config_Low_Latency"
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_32_2_1",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_32_2",
+      "name": "One-TwoChan-SnkAse-Lc3_32_2-One-TwoChan-SrcAse-Lc3_32_2_1",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_32_2-One-TwoChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_32_2_1"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2_2",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2_2",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_2"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2_1",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2_1",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_1"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1",
+      "name": "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1_2",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1",
+      "name": "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1_2",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_2"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1_1",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1",
+      "name": "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1_1",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_1"
       ]
     },
     {
-      "name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_1_2",
-      "codec_config_name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_1",
-      "qos_config_name": [
-        "QoS_Config_16_1_2"
-      ]
-    },
-    {
-      "name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_2_Low_Latency",
-      "codec_config_name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_2_1",
-      "codec_config_name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_2",
-      "qos_config_name": [
-        "QoS_Config_16_2_1"
-      ]
-    },
-    {
-      "name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_2_2",
-      "codec_config_name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_2",
-      "qos_config_name": [
-        "QoS_Config_16_2_2"
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_1_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_1",
-      "qos_config_name": [
-        "QoS_Config_Low_Latency"
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_1_1",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_1",
+      "name": "One-TwoChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_1",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_1"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_1_2",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_1",
+      "name": "One-TwoChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_2",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_2"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_2_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_2_1",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_1",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_1"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_2_2",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_2",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_1_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_1_1",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_1"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_1_2",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_2_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_2_1",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_1"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_2_2",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_1_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_1",
+      "name": "One-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_1_1",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_1",
+      "name": "One-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_1",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_1"
       ]
     },
     {
-      "name": "DualDev_OneChanMonoSrc_16_2_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanMonoSrc_16_2",
+      "name": "Two-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSrc_16_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanStereoSrc_16_2",
+      "name": "Two-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_48_4_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSrc_48_4",
+      "name": "One-OneChan-SrcAse-Lc3_48_4_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SrcAse-Lc3_48_4",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_48_3_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSrc_48_3",
+      "name": "One-OneChan-SrcAse-Lc3_48_3_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SrcAse-Lc3_48_3",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_48_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSrc_48_2",
+      "name": "One-OneChan-SrcAse-Lc3_48_2_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SrcAse-Lc3_48_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_48_1_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSrc_48_1",
+      "name": "One-OneChan-SrcAse-Lc3_48_1_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SrcAse-Lc3_48_1",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_32_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSrc_32_2",
+      "name": "One-OneChan-SrcAse-Lc3_32_2_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_32_1_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSrc_32_1",
+      "name": "One-OneChan-SrcAse-Lc3_32_1_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SrcAse-Lc3_32_1",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_24_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSrc_24_2",
+      "name": "One-OneChan-SrcAse-Lc3_24_2_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SrcAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_24_1_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSrc_24_1",
+      "name": "One-OneChan-SrcAse-Lc3_24_1_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SrcAse-Lc3_24_1",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_16_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSrc_16_2",
+      "name": "One-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_16_1_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSrc_16_1",
+      "name": "One-OneChan-SrcAse-Lc3_16_1_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_1_2",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_1",
+      "name": "One-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_2",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
       "qos_config_name": [
         "QoS_Config_16_1_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_2_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_2",
+      "name": "One-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_2_1",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_2",
+      "name": "One-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_1",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_1"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_2_2",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_2",
+      "name": "One-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_2",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_16_2_2"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_24_1_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_24_1",
+      "name": "Two-OneChan-SnkAse-Lc3_24_1_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_24_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_24_1_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_24_1",
+      "name": "One-TwoChan-SnkAse-Lc3_24_1_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_24_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_24_1_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_24_2",
+      "name": "Two-OneChan-SnkAse-Lc3_24_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_24_2_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_24_2",
+      "name": "Two-OneChan-SnkAse-Lc3_24_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_24_2_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_24_2",
+      "name": "Two-OneChan-SnkAse-Lc3_24_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_24_2_2",
-      "codec_config_name": "DualDev_OneChanStereoSnk_24_2",
+      "name": "Two-OneChan-SnkAse-Lc3_24_2_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_24_2_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_24_2_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_24_2",
+      "name": "Two-OneChan-SnkAse-Lc3_24_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_24_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_24_2",
+      "name": "Two-OneChan-SnkAse-Lc3_24_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_24_2_2",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_24_2",
+      "name": "Two-OneChan-SnkAse-Lc3_24_2_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_24_2_2"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_24_2_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_24_2",
+      "name": "One-TwoChan-SnkAse-Lc3_24_2_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_24_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_24_2",
+      "name": "One-TwoChan-SnkAse-Lc3_24_2_Balanced_Reliability",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_24_2_2",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_24_2",
+      "name": "One-TwoChan-SnkAse-Lc3_24_2_2",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_24_2_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_24_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_24_2",
+      "name": "One-OneChan-SnkAse-Lc3_24_2_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_24_2_2",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_24_2",
+      "name": "One-OneChan-SnkAse-Lc3_24_2_2",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_24_2_2"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_32_2_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_32_2",
+      "name": "Two-OneChan-SnkAse-Lc3_32_2-Two-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_32_2-Two-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_32_2_1",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_32_2",
+      "name": "Two-OneChan-SnkAse-Lc3_32_2-Two-OneChan-SrcAse-Lc3_32_2_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_32_2-Two-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_32_2_1"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_32_2_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_32_2",
+      "name": "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_32_2_1",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_32_2",
+      "name": "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_32_2_1"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_32_2_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_32_2",
+      "name": "Two-OneChan-SnkAse-Lc3_32_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_32_1_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_32_1",
+      "name": "Two-OneChan-SnkAse-Lc3_32_1_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_32_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_32_1_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_32_1",
+      "name": "One-TwoChan-SnkAse-Lc3_32_1_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_32_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_32_2_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_32_2",
+      "name": "Two-OneChan-SnkAse-Lc3_32_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_32_1_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_32_1",
+      "name": "Two-OneChan-SnkAse-Lc3_32_1_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_32_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_32_2_Low_Latency",
-      "codec_config_name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_32_2",
+      "name": "One-TwoChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_32_2_1",
-      "codec_config_name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_32_2",
+      "name": "One-TwoChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_1",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_32_2_1"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_32_2_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_32_2",
+      "name": "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_32_2_1",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_32_2",
+      "name": "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_32_2_1"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_32_2_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_32_2",
+      "name": "One-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_32_2_1",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_32_2",
+      "name": "One-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_1",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_32_2_1"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_32_2_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_32_2",
+      "name": "One-TwoChan-SnkAse-Lc3_32_2_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_32_2_1",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_32_2",
-      "qos_config_name": [
-        "QoS_Config_32_2_1"
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_32_2_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_32_2",
-      "qos_config_name": [
-        "QoS_Config_Low_Latency"
-      ]
-    },
-    {
-      "name": "DualDev_OneChanStereoSnk_48_4_High_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_4",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4_High_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4_1",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_4",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4",
       "qos_config_name": [
         "QoS_Config_48_4_1"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4_2",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_4",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4",
       "qos_config_name": [
         "QoS_Config_48_4_2"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_3_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_3",
+      "name": "Two-OneChan-SnkAse-Lc3_48_3_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_3",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_3_High_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_3",
+      "name": "Two-OneChan-SnkAse-Lc3_48_3_High_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_3",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_3_2",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_3",
+      "name": "Two-OneChan-SnkAse-Lc3_48_3_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_3",
       "qos_config_name": [
         "QoS_Config_48_3_2"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_2_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_2_High_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_2_High_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_2",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_2_2",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_2_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_2",
       "qos_config_name": [
         "QoS_Config_48_2_2"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_1_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_1",
+      "name": "Two-OneChan-SnkAse-Lc3_48_1_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_1_High_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_1",
+      "name": "Two-OneChan-SnkAse-Lc3_48_1_High_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_1",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_1_2",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_1",
+      "name": "Two-OneChan-SnkAse-Lc3_48_1_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_1",
       "qos_config_name": [
         "QoS_Config_48_1_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_4_High_Reliability",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_4",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4_High_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_4_1",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_4",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4_1",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4",
       "qos_config_name": [
         "QoS_Config_48_4_1"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_4_2",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_4",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4",
       "qos_config_name": [
         "QoS_Config_48_4_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_3_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_3",
+      "name": "Two-OneChan-SnkAse-Lc3_48_3_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_3",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_3_High_Reliability",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_3",
+      "name": "Two-OneChan-SnkAse-Lc3_48_3_High_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_3",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_3_2",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_3",
+      "name": "Two-OneChan-SnkAse-Lc3_48_3_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_3",
       "qos_config_name": [
         "QoS_Config_48_3_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_2_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_2_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_2_High_Reliability",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_2_High_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_2",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_2_2",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_2_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_2",
       "qos_config_name": [
         "QoS_Config_48_2_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_1_Low_Latency",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_1",
+      "name": "Two-OneChan-SnkAse-Lc3_48_1_Low_Latency",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_1_High_Reliability",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_1",
+      "name": "Two-OneChan-SnkAse-Lc3_48_1_High_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_1",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_1_2",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_1",
+      "name": "Two-OneChan-SnkAse-Lc3_48_1_2",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_1",
       "qos_config_name": [
         "QoS_Config_48_1_2"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_High_Reliability",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_4",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4_High_Reliability",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_4",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_1",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_4",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4_1",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_4",
       "qos_config_name": [
         "QoS_Config_48_4_1"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_2",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_4",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4_2",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_4",
       "qos_config_name": [
         "QoS_Config_48_4_2"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_3_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_3",
+      "name": "One-TwoChan-SnkAse-Lc3_48_3_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_3",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_3_High_Reliability",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_3",
+      "name": "One-TwoChan-SnkAse-Lc3_48_3_High_Reliability",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_3",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_3_2",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_3",
+      "name": "One-TwoChan-SnkAse-Lc3_48_3_2",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_3",
       "qos_config_name": [
         "QoS_Config_48_3_2"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_2_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_2_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_2_High_Reliability",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_2_High_Reliability",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_2",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_2_2",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_2_2",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_2",
       "qos_config_name": [
         "QoS_Config_48_2_2"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_1_Low_Latency",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_1",
+      "name": "One-TwoChan-SnkAse-Lc3_48_1_Low_Latency",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_1_High_Reliability",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_1",
+      "name": "One-TwoChan-SnkAse-Lc3_48_1_High_Reliability",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_1",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_1_2",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_1",
+      "name": "One-TwoChan-SnkAse-Lc3_48_1_2",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_1",
       "qos_config_name": [
         "QoS_Config_48_1_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_48_4_High_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_48_4",
+      "name": "One-OneChan-SnkAse-Lc3_48_4_High_Reliability",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_48_4",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_48_4_1",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_48_4",
+      "name": "One-OneChan-SnkAse-Lc3_48_4_1",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_48_4",
       "qos_config_name": [
         "QoS_Config_48_4_1"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_48_4_2",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_48_4",
+      "name": "One-OneChan-SnkAse-Lc3_48_4_2",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_48_4",
       "qos_config_name": [
         "QoS_Config_48_4_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_48_3_High_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_48_3",
+      "name": "One-OneChan-SnkAse-Lc3_48_3_High_Reliability",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_48_3",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_48_3_2",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_48_3",
+      "name": "One-OneChan-SnkAse-Lc3_48_3_2",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_48_3",
       "qos_config_name": [
         "QoS_Config_48_3_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_48_2_High_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_48_2",
+      "name": "One-OneChan-SnkAse-Lc3_48_2_High_Reliability",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_48_2",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_48_2_2",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_48_2",
+      "name": "One-OneChan-SnkAse-Lc3_48_2_2",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_48_2",
       "qos_config_name": [
         "QoS_Config_48_2_2"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_48_1_High_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_48_1",
+      "name": "One-OneChan-SnkAse-Lc3_48_1_High_Reliability",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_48_1",
       "qos_config_name": [
         "QoS_Config_High_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_48_1_2",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_48_1",
+      "name": "One-OneChan-SnkAse-Lc3_48_1_2",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_48_1",
       "qos_config_name": [
         "QoS_Config_48_1_2"
       ]
@@ -1289,176 +1242,155 @@
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4_OneChanStereoSrc_32_2_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_4_OneChanStereoSrc_32_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-Two-OneChan-SrcAse-Lc3_32_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4-Two-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4_OneChanStereoSrc_24_2_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_4_OneChanStereoSrc_24_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-Two-OneChan-SrcAse-Lc3_24_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4-Two-OneChan-SrcAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4_OneChanStereoSrc_16_2_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_4_OneChanStereoSrc_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-Two-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4-Two-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4_OneChanMonoSrc_32_2_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_4_OneChanMonoSrc_32_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_32_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4_OneChanMonoSrc_24_2_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_4_OneChanMonoSrc_24_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_24_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4_OneChanMonoSrc_16_2_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_48_4_OneChanMonoSrc_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanDoubleStereoSnk_48_4_OneChanMonoSrc_32_2_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanDoubleStereoSnk_48_4_OneChanMonoSrc_32_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4-One-TwoChan-SrcAse-Lc3_32_2_Balanced_Reliability",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_4-One-TwoChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanDoubleStereoSnk_48_4_OneChanMonoSrc_24_2_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanDoubleStereoSnk_48_4_OneChanMonoSrc_24_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4-One-TwoChan-SrcAse-Lc3_24_2_Balanced_Reliability",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_4-One-TwoChan-SrcAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanDoubleStereoSnk_48_4_OneChanMonoSrc_16_2_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanDoubleStereoSnk_48_4_OneChanMonoSrc_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4-One-TwoChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_4-One-TwoChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_TwoChanStereoSrc_32_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_4_TwoChanStereoSrc_32_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_32_2_Balanced_Reliability",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_TwoChanStereoSrc_24_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_4_TwoChanStereoSrc_24_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_24_2_Balanced_Reliability",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_TwoChanStereoSrc_16_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_4_TwoChanStereoSrc_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+      "codec_config_name": "One-TwoChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_OneChanMonoSrc_32_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_4_OneChanMonoSrc_32_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_32_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_1_OneChanMonoSrc_24_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_4_OneChanMonoSrc_24_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_24_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_1_OneChanMonoSrc_16_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_TwoChanStereoSnk_48_4_OneChanMonoSrc_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+      "codec_config_name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_4_1_OneChanMonoSrc_32_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_4_OneChanMonoSrc_32_2",
+      "name": "One-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_32_2_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_32_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_4_1_OneChanMonoSrc_24_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_4_OneChanMonoSrc_24_2",
+      "name": "One-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_24_2_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_24_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_4_1_OneChanMonoSrc_16_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanStereoSnk_48_4_OneChanMonoSrc_16_2",
+      "name": "One-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+      "codec_config_name": "One-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_16_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_48_4_1_OneChanMonoSrc_32_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_48_4_OneChanMonoSrc_32_2",
-      "qos_config_name": [
-        "QoS_Config_Balanced_Reliability"
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSnk_48_4_1_OneChanMonoSrc_24_2_1_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_48_4_OneChanMonoSrc_24_2",
-      "qos_config_name": [
-        "QoS_Config_Balanced_Reliability"
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSnk_48_4_1_OneChanMonoSrc_16_2_Balanced_Reliability",
-      "codec_config_name": "SingleDev_OneChanMonoSnk_48_4_OneChanMonoSrc_16_2",
-      "qos_config_name": [
-        "QoS_Config_Balanced_Reliability"
-      ]
-    },
-    {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_1_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_1",
+      "name": "Two-TwoChan-SnkAse-Lc3_48_1-Two-TwoChan-SrcAse-Lc3_48_1_Low_Latency",
+      "codec_config_name": "Two-TwoChan-SnkAse-Lc3_48_1-Two-TwoChan-SrcAse-Lc3_48_1",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_1_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_1",
+      "name": "Two-TwoChan-SnkAse-Lc3_48_1-Two-TwoChan-SrcAse-Lc3_48_1_Balanced_Reliability",
+      "codec_config_name": "Two-TwoChan-SnkAse-Lc3_48_1-Two-TwoChan-SrcAse-Lc3_48_1",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_2_Low_Latency",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_2",
+      "name": "Two-TwoChan-SnkAse-Lc3_48_2-Two-TwoChan-SrcAse-Lc3_48_2_Low_Latency",
+      "codec_config_name": "Two-TwoChan-SnkAse-Lc3_48_2-Two-TwoChan-SrcAse-Lc3_48_2",
       "qos_config_name": [
         "QoS_Config_Low_Latency"
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_2_Balanced_Reliability",
-      "codec_config_name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_2",
+      "name": "Two-TwoChan-SnkAse-Lc3_48_2-Two-TwoChan-SrcAse-Lc3_48_2_Balanced_Reliability",
+      "codec_config_name": "Two-TwoChan-SnkAse-Lc3_48_2-Two-TwoChan-SrcAse-Lc3_48_2",
       "qos_config_name": [
         "QoS_Config_Balanced_Reliability"
       ]
@@ -1495,13 +1427,11 @@
   ],
   "codec_configurations": [
     {
-      "name": "DualDev_OneChanStereoSnk_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_16_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -1527,18 +1457,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -1557,18 +1475,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_16_1",
+      "name": "Two-OneChan-SnkAse-Lc3_16_1",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -1594,18 +1511,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -1624,152 +1529,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_16_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
-          "ase_cnt": 2,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanStereoSnk_16_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 2,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  30,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_16_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -1795,18 +1565,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -1825,18 +1583,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_16_1",
+      "name": "One-TwoChan-SnkAse-Lc3_16_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -1862,18 +1619,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -1892,18 +1637,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSrc_16_2",
+      "name": "Two-OneChan-SrcAse-Lc3_16_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 2,
           "direction": "SOURCE",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -1929,18 +1673,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -1959,15 +1691,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_24_2",
+      "name": "One-OneChan-SrcAse-Lc3_24_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -1995,13 +1727,109 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
+              "name": "octets_per_codec_frame",
+              "type": 4,
               "compound_value": {
                 "value": [
-                  1,
-                  0,
-                  0,
+                  60,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "Two-OneChan-SnkAse-Lc3_32_2",
+      "subconfigurations": [
+        {
+          "ase_cnt": 2,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  6
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  80,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "Two-OneChan-SnkAse-Lc3_32_1",
+      "subconfigurations": [
+        {
+          "ase_cnt": 2,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  6
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
                   0
                 ]
               }
@@ -2025,18 +1853,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_32_2",
+      "name": "One-OneChan-SnkAse-Lc3_32_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
-          "ase_cnt": 2,
+          "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -2062,18 +1889,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -2092,18 +1907,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_32_1",
+      "name": "One-OneChan-SnkAse-Lc3_32_1",
       "subconfigurations": [
         {
-          "device_cnt": 2,
-          "ase_cnt": 2,
+          "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -2129,18 +1943,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -2159,18 +1961,537 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_32_2",
+      "name": "One-OneChan-SnkAse-Lc3_16_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  40,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "One-OneChan-SnkAse-Lc3_16_1",
+      "subconfigurations": [
+        {
+          "ase_cnt": 1,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  0
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  30,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
+      "subconfigurations": [
+        {
+          "ase_cnt": 2,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  40,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        },
+        {
+          "ase_cnt": 1,
+          "direction": "SOURCE",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  40,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2",
+      "subconfigurations": [
+        {
+          "ase_cnt": 2,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  40,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        },
+        {
+          "ase_cnt": 2,
+          "direction": "SOURCE",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  40,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1",
+      "subconfigurations": [
+        {
+          "ase_cnt": 2,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  0
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  30,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        },
+        {
+          "ase_cnt": 2,
+          "direction": "SOURCE",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  0
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  30,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
+      "subconfigurations": [
+        {
+          "ase_cnt": 2,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  0
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  30,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        },
+        {
+          "ase_cnt": 1,
+          "direction": "SOURCE",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  0
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  30,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "One-TwoChan-SnkAse-Lc3_32_2-One-TwoChan-SrcAse-Lc3_32_2",
+      "subconfigurations": [
+        {
+          "ase_cnt": 1,
+          "direction": "SINK",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -2196,18 +2517,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -2226,344 +2535,10 @@
                 ]
               }
             }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSnk_32_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  60,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "DualDev_OneChanMonoSnk_16_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 2,
-          "ase_cnt": 2,
-          "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSnk_16_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSnk_16_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  30,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 2,
-          "ase_cnt": 2,
-          "direction": "SINK",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
+          ],
+          "ase_channel_cnt": 2
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -2577,710 +2552,6 @@
               "type": 1,
               "compound_value": {
                 "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 2,
-          "ase_cnt": 2,
-          "direction": "SINK",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 2,
-          "ase_cnt": 2,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 2,
-          "ase_cnt": 2,
-          "direction": "SINK",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  30,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 2,
-          "ase_cnt": 2,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  30,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 2,
-          "ase_cnt": 2,
-          "direction": "SINK",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  30,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  30,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 2,
-          "ase_cnt": 4,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 2,
-          "ase_cnt": 4,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  30,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  30,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_32_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
                   6
                 ]
               }
@@ -3295,18 +2566,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -3325,847 +2584,15 @@
                 ]
               }
             }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  30,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  30,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  30,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  30,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 2,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  40,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 2,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  30,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  30,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
           "codec_id": {
@@ -4193,18 +2620,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -4223,10 +2638,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -4254,18 +2669,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -4284,15 +2687,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_1",
+      "name": "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
           "codec_id": {
@@ -4320,18 +2723,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -4350,10 +2741,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -4381,18 +2772,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -4411,16 +2790,65 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "DualDev_OneChanMonoSrc_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
-          "ase_cnt": 2,
+          "ase_cnt": 1,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  40,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 2
+        },
+        {
+          "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
             "coding_format": 6,
@@ -4447,18 +2875,163 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
+              "name": "octets_per_codec_frame",
+              "type": 4,
               "compound_value": {
                 "value": [
-                  1,
-                  0,
-                  0,
+                  40,
                   0
                 ]
               }
             },
             {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "One-TwoChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
+      "subconfigurations": [
+        {
+          "ase_cnt": 1,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  0
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  30,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 2
+        },
+        {
+          "ase_cnt": 1,
+          "direction": "SOURCE",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  0
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  30,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "One-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2",
+      "subconfigurations": [
+        {
+          "ase_cnt": 1,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -4477,15 +3050,167 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
+        },
+        {
+          "ase_cnt": 1,
+          "direction": "SOURCE",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  40,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_48_4",
+      "name": "One-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
+          "ase_cnt": 1,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  0
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  30,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        },
+        {
+          "ase_cnt": 1,
+          "direction": "SOURCE",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  3
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  0
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  30,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "One-OneChan-SrcAse-Lc3_48_4",
+      "subconfigurations": [
+        {
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -4513,18 +3238,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -4543,15 +3256,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_48_3",
+      "name": "One-OneChan-SrcAse-Lc3_48_3",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -4579,18 +3292,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -4609,15 +3310,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_48_2",
+      "name": "One-OneChan-SrcAse-Lc3_48_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -4645,18 +3346,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -4675,15 +3364,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_48_1",
+      "name": "One-OneChan-SrcAse-Lc3_48_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -4711,18 +3400,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -4741,15 +3418,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_32_2",
+      "name": "One-OneChan-SrcAse-Lc3_32_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -4777,18 +3454,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -4807,15 +3472,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_32_1",
+      "name": "One-OneChan-SrcAse-Lc3_32_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -4843,18 +3508,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -4873,15 +3526,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_24_2",
+      "name": "One-OneChan-SrcAse-Lc3_24_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -4904,84 +3557,6 @@
               "type": 2,
               "compound_value": {
                 "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  60,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSrc_24_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  5
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
                   0
                 ]
               }
@@ -5005,15 +3580,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_16_2",
+      "name": "One-OneChan-SrcAse-Lc3_16_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -5041,18 +3616,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -5071,15 +3634,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSrc_16_1",
+      "name": "One-OneChan-SrcAse-Lc3_16_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -5107,18 +3670,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -5137,18 +3688,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -5174,18 +3724,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -5204,18 +3742,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_3",
+      "name": "Two-OneChan-SnkAse-Lc3_48_3",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -5241,18 +3778,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -5271,18 +3796,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -5308,18 +3832,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -5338,18 +3850,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_1",
+      "name": "Two-OneChan-SnkAse-Lc3_48_1",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -5375,18 +3886,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -5405,18 +3904,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_4",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4",
       "subconfigurations": [
         {
-          "device_cnt": 1,
-          "ase_cnt": 2,
+          "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -5442,18 +3940,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -5472,18 +3958,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_3",
+      "name": "One-TwoChan-SnkAse-Lc3_48_3",
       "subconfigurations": [
         {
-          "device_cnt": 1,
-          "ase_cnt": 2,
+          "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -5509,18 +3994,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -5539,18 +4012,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
-          "ase_cnt": 2,
+          "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -5576,18 +4048,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -5606,18 +4066,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_1",
+      "name": "One-TwoChan-SnkAse-Lc3_48_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
-          "ase_cnt": 2,
+          "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -5643,18 +4102,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -5673,18 +4120,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_4",
+      "name": "One-OneChan-SnkAse-Lc3_48_4",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -5710,18 +4156,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -5740,18 +4174,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_3",
+      "name": "One-OneChan-SnkAse-Lc3_48_3",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -5777,18 +4210,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -5807,18 +4228,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_2",
+      "name": "One-OneChan-SnkAse-Lc3_48_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -5844,18 +4264,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -5874,18 +4282,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_1",
+      "name": "One-OneChan-SnkAse-Lc3_48_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -5911,18 +4318,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -5941,275 +4336,8 @@
                 ]
               }
             }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSnk_48_4",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  8
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  120,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSnk_48_3",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  8
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  90,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSnk_48_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  8
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  100,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSnk_48_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  8
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  75,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
@@ -6217,10 +4345,8 @@
       "name": "VND_SingleDev_TwoChanStereoSnk_48khz_100octs_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -6246,18 +4372,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -6276,7 +4390,8 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
@@ -6284,10 +4399,8 @@
       "name": "VND_DualDev_OneChanStereoSnk_48khz_100octs_1",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -6313,18 +4426,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -6343,7 +4444,8 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
@@ -6351,10 +4453,8 @@
       "name": "VND_SingleDev_OneChanStereoSnk_48khz_100octs_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 2,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -6380,18 +4480,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -6410,7 +4498,8 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
@@ -6418,10 +4507,8 @@
       "name": "VND_SingleDev_TwoChanStereoSnk_48khz_75octs_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -6447,18 +4534,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -6477,15 +4552,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4_OneChanStereoSrc_32_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-Two-OneChan-SrcAse-Lc3_32_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
           "codec_id": {
@@ -6513,18 +4588,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -6543,10 +4606,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         },
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SOURCE",
           "codec_id": {
@@ -6574,18 +4637,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -6604,15 +4655,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4_OneChanStereoSrc_24_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-Two-OneChan-SrcAse-Lc3_24_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
           "codec_id": {
@@ -6640,18 +4691,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -6670,10 +4709,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         },
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SOURCE",
           "codec_id": {
@@ -6701,23 +4740,11 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
                 "value": [
-                  80,
+                  60,
                   0
                 ]
               }
@@ -6731,15 +4758,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4_OneChanStereoSrc_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-Two-OneChan-SrcAse-Lc3_16_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
           "codec_id": {
@@ -6767,18 +4794,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -6797,10 +4812,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         },
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SOURCE",
           "codec_id": {
@@ -6828,23 +4843,11 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
                 "value": [
-                  80,
+                  40,
                   0
                 ]
               }
@@ -6858,15 +4861,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4_OneChanMonoSrc_32_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_32_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
           "codec_id": {
@@ -6894,18 +4897,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -6924,10 +4915,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -6955,18 +4946,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -6985,15 +4964,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4_OneChanMonoSrc_24_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_24_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
           "codec_id": {
@@ -7021,18 +5000,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -7051,10 +5018,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -7082,23 +5049,11 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
                 "value": [
-                  80,
+                  60,
                   0
                 ]
               }
@@ -7112,15 +5067,15 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_48_4_OneChanMonoSrc_16_2",
+      "name": "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_16_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
           "codec_id": {
@@ -7148,18 +5103,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -7178,10 +5121,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -7209,23 +5152,11 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
                 "value": [
-                  80,
+                  40,
                   0
                 ]
               }
@@ -7239,18 +5170,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "DualDev_OneChanDoubleStereoSnk_48_4_OneChanMonoSrc_32_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4-One-TwoChan-SrcAse-Lc3_32_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
-          "ase_cnt": 4,
+          "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -7276,18 +5206,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -7306,10 +5224,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -7337,18 +5255,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -7367,18 +5273,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "DualDev_OneChanDoubleStereoSnk_48_4_OneChanMonoSrc_24_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4-One-TwoChan-SrcAse-Lc3_24_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
-          "ase_cnt": 4,
+          "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -7404,18 +5309,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -7434,10 +5327,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -7465,23 +5358,11 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
                 "value": [
-                  80,
+                  60,
                   0
                 ]
               }
@@ -7495,18 +5376,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "DualDev_OneChanDoubleStereoSnk_48_4_OneChanMonoSrc_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4-One-TwoChan-SrcAse-Lc3_16_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
-          "ase_cnt": 4,
+          "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -7532,18 +5412,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -7562,10 +5430,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -7593,23 +5461,11 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
                 "value": [
-                  80,
+                  40,
                   0
                 ]
               }
@@ -7623,18 +5479,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_TwoChanStereoSrc_32_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_32_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -7660,18 +5515,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -7690,397 +5533,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         },
         {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_TwoChanStereoSrc_24_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  8
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  120,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  5
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_TwoChanStereoSrc_16_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  8
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  120,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_OneChanMonoSrc_32_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  8
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  120,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -8108,18 +5564,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -8138,18 +5582,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_OneChanMonoSrc_24_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_24_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -8175,18 +5618,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -8205,10 +5636,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -8236,23 +5667,11 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
                 "value": [
-                  80,
+                  60,
                   0
                 ]
               }
@@ -8266,18 +5685,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_48_4_OneChanMonoSrc_16_2",
+      "name": "One-TwoChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_16_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -8303,18 +5721,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -8333,10 +5739,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -8364,23 +5770,11 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
                 "value": [
-                  80,
+                  40,
                   0
                 ]
               }
@@ -8394,18 +5788,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_4_OneChanMonoSrc_32_2",
+      "name": "One-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_32_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
-          "ase_cnt": 2,
+          "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -8431,18 +5824,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -8461,10 +5842,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -8492,18 +5873,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -8522,18 +5891,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_4_OneChanMonoSrc_24_2",
+      "name": "One-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_24_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
-          "ase_cnt": 2,
+          "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -8559,18 +5927,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -8589,10 +5945,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -8620,23 +5976,11 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
                 "value": [
-                  80,
+                  60,
                   0
                 ]
               }
@@ -8650,18 +5994,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_48_4_OneChanMonoSrc_16_2",
+      "name": "One-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_16_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
-          "ase_cnt": 2,
+          "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -8687,18 +6030,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -8717,10 +6048,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -8748,23 +6079,11 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
                 "value": [
-                  80,
+                  40,
                   0
                 ]
               }
@@ -8778,399 +6097,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanMonoSnk_48_4_OneChanMonoSrc_32_2",
+      "name": "Two-TwoChan-SnkAse-Lc3_48_1-Two-TwoChan-SrcAse-Lc3_48_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  8
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  120,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSnk_48_4_OneChanMonoSrc_24_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  8
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  120,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  5
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSnk_48_4_OneChanMonoSrc_16_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  8
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  120,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  3
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SOURCE",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -9196,18 +6133,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -9226,13 +6151,12 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         },
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -9258,18 +6182,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -9288,18 +6200,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_2",
+      "name": "Two-TwoChan-SnkAse-Lc3_48_2-Two-TwoChan-SrcAse-Lc3_48_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SOURCE",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -9325,18 +6236,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -9355,13 +6254,12 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         },
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -9387,18 +6285,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -9417,7 +6303,8 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
@@ -9425,10 +6312,8 @@
       "name": "VND_SingleDev_TwoChanStereoSrc_48khz_100octs_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -9454,18 +6339,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -9484,7 +6357,8 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
@@ -9492,10 +6366,8 @@
       "name": "VND_SingleDev_TwoChanStereoSnk_OneChanStereoSrc_32khz_60octs_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -9521,18 +6393,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -9551,10 +6411,10 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
           "codec_id": {
@@ -9582,18 +6442,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -9612,7 +6460,8 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
@@ -9620,10 +6469,8 @@
       "name": "VND_SingleDev_TwoChanStereoSnk_48khz_75octs_TwoChanStereoSrc_16khz_30octs_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -9649,18 +6496,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -9679,13 +6514,12 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         },
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SOURCE",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -9711,18 +6545,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -9741,18 +6563,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_24_2",
+      "name": "Two-OneChan-SnkAse-Lc3_24_2",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -9778,18 +6599,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -9808,18 +6617,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "DualDev_OneChanStereoSnk_24_1",
+      "name": "Two-OneChan-SnkAse-Lc3_24_1",
       "subconfigurations": [
         {
-          "device_cnt": 2,
           "ase_cnt": 2,
           "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -9845,18 +6653,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -9875,18 +6671,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 1
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_24_2",
+      "name": "One-TwoChan-SnkAse-Lc3_24_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
-          "ase_cnt": 2,
+          "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -9912,18 +6707,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -9942,18 +6725,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "SingleDev_OneChanStereoSnk_24_1",
+      "name": "One-TwoChan-SnkAse-Lc3_24_1",
       "subconfigurations": [
         {
-          "device_cnt": 1,
-          "ase_cnt": 2,
+          "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -9979,18 +6761,6 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
               "name": "octets_per_codec_frame",
               "type": 4,
               "compound_value": {
@@ -10009,18 +6779,17 @@
                 ]
               }
             }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     },
     {
-      "name": "SingleDev_TwoChanStereoSnk_24_2",
+      "name": "One-OneChan-SnkAse-Lc3_24_2",
       "subconfigurations": [
         {
-          "device_cnt": 1,
           "ase_cnt": 1,
           "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
           "codec_id": {
             "coding_format": 6,
             "vendor_company_id": 0,
@@ -10046,13 +6815,521 @@
               }
             },
             {
-              "name": "audio_channel_allocation",
-              "type": 3,
+              "name": "octets_per_codec_frame",
+              "type": 4,
               "compound_value": {
                 "value": [
-                  3,
-                  0,
-                  0,
+                  60,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "Two-OneChan-SnkAse-Lc3_32_2-Two-OneChan-SrcAse-Lc3_32_2",
+      "subconfigurations": [
+        {
+          "ase_cnt": 2,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  6
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  80,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        },
+        {
+          "ase_cnt": 2,
+          "direction": "SOURCE",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  6
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  80,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2",
+      "subconfigurations": [
+        {
+          "ase_cnt": 2,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  6
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  80,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        },
+        {
+          "ase_cnt": 1,
+          "direction": "SOURCE",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  6
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  80,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "One-TwoChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2",
+      "subconfigurations": [
+        {
+          "ase_cnt": 1,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  6
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  80,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 2
+        },
+        {
+          "ase_cnt": 1,
+          "direction": "SOURCE",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  6
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  80,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "One-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2",
+      "subconfigurations": [
+        {
+          "ase_cnt": 1,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  6
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  80,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        },
+        {
+          "ase_cnt": 1,
+          "direction": "SOURCE",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  6
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  80,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 1
+        }
+      ]
+    },
+    {
+      "name": "One-TwoChan-SnkAse-Lc3_32_2",
+      "subconfigurations": [
+        {
+          "ase_cnt": 1,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  6
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            },
+            {
+              "name": "octets_per_codec_frame",
+              "type": 4,
+              "compound_value": {
+                "value": [
+                  80,
+                  0
+                ]
+              }
+            },
+            {
+              "name": "codec_frame_blocks_per_sdu",
+              "type": 5,
+              "compound_value": {
+                "value": [
+                  1
+                ]
+              }
+            }
+          ],
+          "ase_channel_cnt": 2
+        }
+      ]
+    },
+    {
+      "name": "One-TwoChan-SnkAse-Lc3_32_1",
+      "subconfigurations": [
+        {
+          "ase_cnt": 1,
+          "direction": "SINK",
+          "codec_id": {
+            "coding_format": 6,
+            "vendor_company_id": 0,
+            "vendor_codec_id": 0
+          },
+          "codec_configuration": [
+            {
+              "name": "sampling_frequency",
+              "type": 1,
+              "compound_value": {
+                "value": [
+                  6
+                ]
+              }
+            },
+            {
+              "name": "frame_duration",
+              "type": 2,
+              "compound_value": {
+                "value": [
                   0
                 ]
               }
@@ -10076,1174 +7353,8 @@
                 ]
               }
             }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_24_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  5
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  45,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSnk_24_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "MONO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  5
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  60,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "DualDev_OneChanStereoSnk_OneChanStereoSrc_32_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 2,
-          "ase_cnt": 2,
-          "direction": "SINK",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 2,
-          "ase_cnt": 2,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "DualDev_OneChanStereoSnk_OneChanMonoSrc_32_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 2,
-          "ase_cnt": 2,
-          "direction": "SINK",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_32_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 2,
-          "ase_cnt": 4,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_32_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanStereoSnk_OneChanMonoSrc_32_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 2,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanMonoSnk_OneChanMonoSrc_32_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        },
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SOURCE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_32_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_TwoChanStereoSnk_32_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 1,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_ONE_CIS_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  3,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  60,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanStereoSnk_32_2",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 2,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  80,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "name": "SingleDev_OneChanStereoSnk_32_1",
-      "subconfigurations": [
-        {
-          "device_cnt": 1,
-          "ase_cnt": 2,
-          "direction": "SINK",
-          "configuration_strategy": "STEREO_TWO_CISES_PER_DEVICE",
-          "codec_id": {
-            "coding_format": 6,
-            "vendor_company_id": 0,
-            "vendor_codec_id": 0
-          },
-          "codec_configuration": [
-            {
-              "name": "sampling_frequency",
-              "type": 1,
-              "compound_value": {
-                "value": [
-                  6
-                ]
-              }
-            },
-            {
-              "name": "frame_duration",
-              "type": 2,
-              "compound_value": {
-                "value": [
-                  0
-                ]
-              }
-            },
-            {
-              "name": "audio_channel_allocation",
-              "type": 3,
-              "compound_value": {
-                "value": [
-                  1,
-                  0,
-                  0,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "octets_per_codec_frame",
-              "type": 4,
-              "compound_value": {
-                "value": [
-                  60,
-                  0
-                ]
-              }
-            },
-            {
-              "name": "codec_frame_blocks_per_sdu",
-              "type": 5,
-              "compound_value": {
-                "value": [
-                  1
-                ]
-              }
-            }
-          ]
+          ],
+          "ase_channel_cnt": 2
         }
       ]
     }
@@ -11377,6 +7488,5 @@
       "retransmission_number": 0,
       "max_transport_latency": 0
     }
-
   ]
 }
diff --git a/bluetooth/audio/utils/le_audio_configuration_set/audio_set_scenarios.json b/bluetooth/audio/utils/le_audio_configuration_set/audio_set_scenarios.json
index a28c6cd..448adca 100644
--- a/bluetooth/audio/utils/le_audio_configuration_set/audio_set_scenarios.json
+++ b/bluetooth/audio/utils/le_audio_configuration_set/audio_set_scenarios.json
@@ -8,251 +8,206 @@
     {
       "name": "Conversational",
       "configurations": [
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_32_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_32_2_1",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2_1",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2_2",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1_1",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1_2",
-        "DualDev_OneChanStereoSnk_OneChanMonoSrc_32_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanMonoSrc_32_2_1",
-        "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_2_1",
-        "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_1_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanMonoSrc_16_1_1",
-        "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_32_2_Low_Latency",
-        "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_32_2_1",
-        "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_2_Low_Latency",
-        "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_2_1",
-        "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_1_Low_Latency",
-        "DualDev_OneChanDoubleStereoSnk_OneChanMonoSrc_16_1_1",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_32_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_32_2_1",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2_1",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2_2",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1_1",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1_2",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_32_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_32_2_1",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_2_1",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_1_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_1_1",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_32_2_Low_Latency",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_32_2_1",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_2_Low_Latency",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_2_1",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_1_Low_Latency",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_1_1",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_32_2_Low_Latency",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_32_2_1",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_2_Low_Latency",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_2_1",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_1_Low_Latency",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_1_1",
-        "DualDev_OneChanMonoSrc_16_2_Balanced_Reliability",
-        "SingleDev_OneChanStereoSrc_16_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_48_4_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_48_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_48_3_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_48_1_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_32_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_32_1_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_24_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_24_1_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_16_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_16_1_Balanced_Reliability",
-        "VND_SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_32khz_Server_Prefered_1",
-        "VND_SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_32khz_60oct_R3_L22_1",
-        "DualDev_OneChanMonoSnk_16_2_Balanced_Reliability",
-        "SingleDev_OneChanStereoSnk_16_2_Balanced_Reliability",
-        "SingleDev_TwoChanStereoSnk_16_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSnk_16_2_Balanced_Reliability"
+        "Two-OneChan-SnkAse-Lc3_32_2-Two-OneChan-SrcAse-Lc3_32_2_1",
+        "Two-OneChan-SnkAse-Lc3_32_2-Two-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2_1",
+        "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2_2",
+        "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1_1",
+        "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1_2",
+        "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_1",
+        "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_1",
+        "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_1",
+        "One-TwoChan-SnkAse-Lc3_32_2-One-TwoChan-SrcAse-Lc3_32_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_32_2-One-TwoChan-SrcAse-Lc3_32_2_1",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2_1",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2_2",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1_1",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1_2",
+        "One-TwoChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_1",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_1",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_1",
+        "One-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "One-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_1",
+        "One-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "One-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_1",
+        "One-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+        "One-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_1",
+        "Two-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_48_4_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_48_2_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_48_3_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_48_1_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_32_2_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_32_1_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_24_2_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_24_1_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_16_1_Balanced_Reliability",
+        "VND_SingleDev_TwoChanStereoSnk_OneChanStereoSrc_32khz_60oct_R3_L22_1",
+        "Two-OneChan-SnkAse-Lc3_16_2_Balanced_Reliability",
+        "One-TwoChan-SnkAse-Lc3_16_2_Balanced_Reliability",
+        "One-OneChan-SnkAse-Lc3_16_2_Balanced_Reliability"
       ]
     },
     {
       "name": "Media",
       "configurations": [
-        "DualDev_OneChanStereoSnk_48_4_High_Reliability",
-        "DualDev_OneChanStereoSnk_48_4_2",
-        "DualDev_OneChanStereoSnk_48_2_High_Reliability",
-        "DualDev_OneChanStereoSnk_48_2_2",
-        "DualDev_OneChanStereoSnk_48_3_High_Reliability",
-        "DualDev_OneChanStereoSnk_48_3_2",
-        "DualDev_OneChanStereoSnk_48_1_High_Reliability",
-        "DualDev_OneChanStereoSnk_48_1_2",
-        "DualDev_OneChanStereoSnk_24_2_Balanced_Reliability",
-        "DualDev_OneChanStereoSnk_24_2_2",
-        "DualDev_OneChanStereoSnk_16_2_Balanced_Reliability",
-        "DualDev_OneChanStereoSnk_16_2_2",
-        "DualDev_OneChanStereoSnk_16_1_Balanced_Reliability",
-        "DualDev_OneChanStereoSnk_16_1_2",
-        "SingleDev_OneChanStereoSnk_48_4_High_Reliability",
-        "SingleDev_OneChanStereoSnk_48_4_2",
-        "SingleDev_OneChanStereoSnk_48_2_High_Reliability",
-        "SingleDev_OneChanStereoSnk_48_2_2",
-        "SingleDev_OneChanStereoSnk_48_3_High_Reliability",
-        "SingleDev_OneChanStereoSnk_48_3_2",
-        "SingleDev_OneChanStereoSnk_48_1_High_Reliability",
-        "SingleDev_OneChanStereoSnk_48_1_2",
-        "SingleDev_OneChanStereoSnk_24_2_Balanced_Reliability",
-        "SingleDev_OneChanStereoSnk_24_2_2",
-        "SingleDev_OneChanStereoSnk_16_2_Balanced_Reliability",
-        "SingleDev_OneChanStereoSnk_16_2_2",
-        "SingleDev_OneChanStereoSnk_16_1_Balanced_Reliability",
-        "SingleDev_OneChanStereoSnk_16_1_2",
-        "SingleDev_TwoChanStereoSnk_48_4_High_Reliability",
-        "SingleDev_TwoChanStereoSnk_48_4_2",
-        "SingleDev_TwoChanStereoSnk_48_4_High_Reliability",
-        "SingleDev_TwoChanStereoSnk_48_4_2",
-        "SingleDev_TwoChanStereoSnk_48_2_High_Reliability",
-        "SingleDev_TwoChanStereoSnk_48_2_2",
-        "SingleDev_TwoChanStereoSnk_48_3_High_Reliability",
-        "SingleDev_TwoChanStereoSnk_48_3_2",
-        "SingleDev_TwoChanStereoSnk_48_1_High_Reliability",
-        "SingleDev_TwoChanStereoSnk_48_1_2",
-        "SingleDev_TwoChanStereoSnk_24_2_Balanced_Reliability",
-        "SingleDev_TwoChanStereoSnk_24_2_2",
-        "SingleDev_TwoChanStereoSnk_16_2_Balanced_Reliability",
-        "SingleDev_TwoChanStereoSnk_16_2_2",
-        "SingleDev_TwoChanStereoSnk_16_1_Balanced_Reliability",
-        "SingleDev_TwoChanStereoSnk_16_1_2",
-        "SingleDev_OneChanMonoSnk_48_4_High_Reliability",
-        "SingleDev_OneChanMonoSnk_48_4_2",
-        "SingleDev_OneChanMonoSnk_48_2_High_Reliability",
-        "SingleDev_OneChanMonoSnk_48_2_2",
-        "SingleDev_OneChanMonoSnk_48_3_High_Reliability",
-        "SingleDev_OneChanMonoSnk_48_3_2",
-        "SingleDev_OneChanMonoSnk_48_1_High_Reliability",
-        "SingleDev_OneChanMonoSnk_48_1_2",
-        "SingleDev_OneChanMonoSnk_32_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSnk_32_2_2",
-        "SingleDev_OneChanMonoSnk_32_1_Balanced_Reliability",
-        "SingleDev_OneChanMonoSnk_32_1_2",
-        "SingleDev_OneChanMonoSnk_24_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSnk_24_2_2",
-        "SingleDev_OneChanMonoSnk_16_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSnk_16_2_2",
-        "SingleDev_OneChanMonoSnk_16_1_Balanced_Reliability",
-        "SingleDev_OneChanMonoSnk_16_1_2",
+        "Two-OneChan-SnkAse-Lc3_48_4_High_Reliability",
+        "Two-OneChan-SnkAse-Lc3_48_4_2",
+        "Two-OneChan-SnkAse-Lc3_48_2_High_Reliability",
+        "Two-OneChan-SnkAse-Lc3_48_2_2",
+        "Two-OneChan-SnkAse-Lc3_48_3_High_Reliability",
+        "Two-OneChan-SnkAse-Lc3_48_3_2",
+        "Two-OneChan-SnkAse-Lc3_48_1_High_Reliability",
+        "Two-OneChan-SnkAse-Lc3_48_1_2",
+        "Two-OneChan-SnkAse-Lc3_24_2_Balanced_Reliability",
+        "Two-OneChan-SnkAse-Lc3_24_2_2",
+        "Two-OneChan-SnkAse-Lc3_16_2_Balanced_Reliability",
+        "Two-OneChan-SnkAse-Lc3_16_2_2",
+        "Two-OneChan-SnkAse-Lc3_16_1_Balanced_Reliability",
+        "Two-OneChan-SnkAse-Lc3_16_1_2",
+        "One-TwoChan-SnkAse-Lc3_48_4_High_Reliability",
+        "One-TwoChan-SnkAse-Lc3_48_4_2",
+        "One-TwoChan-SnkAse-Lc3_48_2_High_Reliability",
+        "One-TwoChan-SnkAse-Lc3_48_2_2",
+        "One-TwoChan-SnkAse-Lc3_48_3_High_Reliability",
+        "One-TwoChan-SnkAse-Lc3_48_3_2",
+        "One-TwoChan-SnkAse-Lc3_48_1_High_Reliability",
+        "One-TwoChan-SnkAse-Lc3_48_1_2",
+        "One-TwoChan-SnkAse-Lc3_24_2_Balanced_Reliability",
+        "One-TwoChan-SnkAse-Lc3_24_2_2",
+        "One-TwoChan-SnkAse-Lc3_16_2_Balanced_Reliability",
+        "One-TwoChan-SnkAse-Lc3_16_2_2",
+        "One-TwoChan-SnkAse-Lc3_16_1_Balanced_Reliability",
+        "One-TwoChan-SnkAse-Lc3_16_1_2",
+        "One-OneChan-SnkAse-Lc3_48_4_High_Reliability",
+        "One-OneChan-SnkAse-Lc3_48_4_2",
+        "One-OneChan-SnkAse-Lc3_48_2_High_Reliability",
+        "One-OneChan-SnkAse-Lc3_48_2_2",
+        "One-OneChan-SnkAse-Lc3_48_3_High_Reliability",
+        "One-OneChan-SnkAse-Lc3_48_3_2",
+        "One-OneChan-SnkAse-Lc3_48_1_High_Reliability",
+        "One-OneChan-SnkAse-Lc3_48_1_2",
+        "One-OneChan-SnkAse-Lc3_32_2_Balanced_Reliability",
+        "One-OneChan-SnkAse-Lc3_32_2_2",
+        "One-OneChan-SnkAse-Lc3_32_1_Balanced_Reliability",
+        "One-OneChan-SnkAse-Lc3_32_1_2",
+        "One-OneChan-SnkAse-Lc3_24_2_Balanced_Reliability",
+        "One-OneChan-SnkAse-Lc3_24_2_2",
+        "One-OneChan-SnkAse-Lc3_16_2_Balanced_Reliability",
+        "One-OneChan-SnkAse-Lc3_16_2_2",
+        "One-OneChan-SnkAse-Lc3_16_1_Balanced_Reliability",
+        "One-OneChan-SnkAse-Lc3_16_1_2",
         "VND_DualDev_OneChanStereoSnk_48khz_100octs_High_Reliability_1",
         "VND_DualDev_OneChanStereoSnk_48khz_100octs_R15_L70_1",
         "VND_SingleDev_TwoChanStereoSnk_48khz_100octs_High_Reliability_1",
         "VND_SingleDev_TwoChanStereoSnk_48khz_100octs_R15_L70_1",
         "VND_SingleDev_OneChanStereoSnk_48khz_100octs_High_Reliability_1",
         "VND_SingleDev_OneChanStereoSnk_48khz_100octs_R15_L70_1",
-        "DualDev_OneChanMonoSrc_16_2_Balanced_Reliability",
-        "SingleDev_OneChanStereoSrc_16_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_16_2_Balanced_Reliability"
+        "Two-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability"
       ]
     },
     {
       "name": "Game",
       "configurations": [
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_32_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_1_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_32_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_32_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_1_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_32_2-Two-OneChan-SrcAse-Lc3_32_2_1",
+        "Two-OneChan-SnkAse-Lc3_32_2-Two-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+        "Two-TwoChan-SnkAse-Lc3_48_2-Two-TwoChan-SrcAse-Lc3_48_2_Low_Latency",
+        "Two-TwoChan-SnkAse-Lc3_48_1-Two-TwoChan-SrcAse-Lc3_48_1_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_32_2-One-TwoChan-SrcAse-Lc3_32_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
         "VND_SingleDev_TwoChanStereoSnk_48khz_75octs_TwoChanStereoSrc_16khz_30octs_Balanced_Reliability_1",
         "VND_SingleDev_TwoChanStereoSnk_48khz_75octs_R5_L12_TwoChanStereoSrc_16khz_30octs_R3_L12_1",
         "VND_SingleDev_TwoChanStereoSnk_48khz_75octs_High_Reliability_1",
         "VND_SingleDev_TwoChanStereoSnk_48khz_75octs_R5_L12_1",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_32_2_Low_Latency",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_2_Low_Latency",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_1_Low_Latency",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_32_2_Low_Latency",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_2_Low_Latency",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_1_Low_Latency",
-        "DualDev_OneChanStereoSnk_48_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_48_3_Low_Latency",
-        "DualDev_OneChanStereoSnk_48_1_Low_Latency",
-        "DualDev_OneChanStereoSnk_32_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_32_1_Low_Latency",
-        "DualDev_OneChanStereoSnk_24_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_24_1_Low_Latency",
-        "DualDev_OneChanStereoSnk_16_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_16_1_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_48_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_48_3_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_48_1_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_32_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_32_1_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_24_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_24_1_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_16_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_16_1_Low_Latency",
-        "SingleDev_OneChanStereoSnk_48_2_Low_Latency",
-        "SingleDev_OneChanStereoSnk_48_3_Low_Latency",
-        "SingleDev_OneChanStereoSnk_48_1_Low_Latency",
-        "SingleDev_OneChanStereoSnk_32_2_Low_Latency",
-        "SingleDev_OneChanStereoSnk_32_1_Low_Latency",
-        "SingleDev_OneChanStereoSnk_24_2_Low_Latency",
-        "SingleDev_OneChanStereoSnk_24_1_Low_Latency",
-        "SingleDev_OneChanStereoSnk_16_2_Low_Latency",
-        "SingleDev_OneChanStereoSnk_16_1_Low_Latency"
+        "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_1",
+        "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+        "One-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "One-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "One-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_48_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_48_3_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_48_1_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_32_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_32_1_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_24_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_24_1_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_1_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_48_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_48_3_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_48_1_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_32_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_32_1_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_24_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_24_1_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_1_Low_Latency"
       ]
     },
     {
       "name": "VoiceAssistants",
       "configurations": [
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_32_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_32_2_1",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2_1",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1_1",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_2_Balanced_Reliability",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_1_Balanced_Reliability",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_32_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_32_2_1",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2_1",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1_1",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_32_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_32_2_1",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_2_1",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_1_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_1_1",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_32_2_Low_Latency",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_32_2_1",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_2_Low_Latency",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_2_1",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_1_Low_Latency",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_1_1",
-        "DualDev_OneChanStereoSnk_48_4_OneChanStereoSrc_16_2_Balanced_Reliability",
-        "DualDev_OneChanStereoSnk_48_4_OneChanStereoSrc_24_2_Balanced_Reliability",
-        "DualDev_OneChanStereoSnk_48_4_OneChanStereoSrc_32_2_Balanced_Reliability",
-        "DualDev_OneChanStereoSnk_48_4_OneChanMonoSrc_16_2_Balanced_Reliability",
-        "DualDev_OneChanStereoSnk_48_4_OneChanMonoSrc_24_2_Balanced_Reliability",
-        "DualDev_OneChanStereoSnk_48_4_OneChanMonoSrc_32_2_Balanced_Reliability",
-        "DualDev_OneChanDoubleStereoSnk_48_4_OneChanMonoSrc_16_2_Balanced_Reliability",
-        "DualDev_OneChanDoubleStereoSnk_48_4_OneChanMonoSrc_24_2_Balanced_Reliability",
-        "DualDev_OneChanDoubleStereoSnk_48_4_OneChanMonoSrc_32_2_Balanced_Reliability",
-        "SingleDev_TwoChanStereoSnk_48_4_TwoChanStereoSrc_16_2_Balanced_Reliability",
-        "SingleDev_TwoChanStereoSnk_48_4_TwoChanStereoSrc_24_2_Balanced_Reliability",
-        "SingleDev_TwoChanStereoSnk_48_4_TwoChanStereoSrc_32_2_Balanced_Reliability",
-        "SingleDev_TwoChanStereoSnk_48_4_OneChanMonoSrc_16_2_Balanced_Reliability",
-        "SingleDev_TwoChanStereoSnk_48_4_OneChanMonoSrc_24_2_Balanced_Reliability",
-        "SingleDev_TwoChanStereoSnk_48_4_OneChanMonoSrc_32_2_Balanced_Reliability",
-        "SingleDev_OneChanStereoSnk_48_4_OneChanMonoSrc_16_2_Balanced_Reliability",
-        "SingleDev_OneChanStereoSnk_48_4_OneChanMonoSrc_24_2_Balanced_Reliability",
-        "SingleDev_OneChanStereoSnk_48_4_OneChanMonoSrc_32_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSnk_48_4_OneChanMonoSrc_16_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSnk_48_4_OneChanMonoSrc_24_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSnk_48_4_OneChanMonoSrc_32_2_Balanced_Reliability"
+        "Two-OneChan-SnkAse-Lc3_32_2-Two-OneChan-SrcAse-Lc3_32_2_1",
+        "Two-OneChan-SnkAse-Lc3_32_2-Two-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2_1",
+        "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1_1",
+        "Two-TwoChan-SnkAse-Lc3_48_2-Two-TwoChan-SrcAse-Lc3_48_2_Balanced_Reliability",
+        "Two-TwoChan-SnkAse-Lc3_48_1-Two-TwoChan-SrcAse-Lc3_48_1_Balanced_Reliability",
+        "One-TwoChan-SnkAse-Lc3_32_2-One-TwoChan-SrcAse-Lc3_32_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_32_2-One-TwoChan-SrcAse-Lc3_32_2_1",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2_1",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1_1",
+        "One-TwoChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_1",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_1",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_1",
+        "One-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "One-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_1",
+        "One-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "One-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_1",
+        "One-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+        "One-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_1",
+        "Two-OneChan-SnkAse-Lc3_48_4-Two-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+        "Two-OneChan-SnkAse-Lc3_48_4-Two-OneChan-SrcAse-Lc3_24_2_Balanced_Reliability",
+        "Two-OneChan-SnkAse-Lc3_48_4-Two-OneChan-SrcAse-Lc3_32_2_Balanced_Reliability",
+        "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+        "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_24_2_Balanced_Reliability",
+        "Two-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_32_2_Balanced_Reliability",
+        "One-TwoChan-SnkAse-Lc3_48_4-One-TwoChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+        "One-TwoChan-SnkAse-Lc3_48_4-One-TwoChan-SrcAse-Lc3_24_2_Balanced_Reliability",
+        "One-TwoChan-SnkAse-Lc3_48_4-One-TwoChan-SrcAse-Lc3_32_2_Balanced_Reliability",
+        "One-TwoChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+        "One-TwoChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_24_2_Balanced_Reliability",
+        "One-TwoChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_32_2_Balanced_Reliability",
+        "One-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+        "One-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_24_2_Balanced_Reliability",
+        "One-OneChan-SnkAse-Lc3_48_4-One-OneChan-SrcAse-Lc3_32_2_Balanced_Reliability"
       ]
     },
     {
@@ -260,44 +215,44 @@
       "configurations": [
         "VND_SingleDev_TwoChanStereoSrc_48khz_100octs_Balanced_Reliability_1",
         "VND_SingleDev_TwoChanStereoSrc_48khz_100octs_R11_L40_1",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_32_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_32_2_1",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_2_1",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1_Low_Latency",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_16_1_1",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_2_Balanced_Reliability",
-        "DualDev_OneChanStereoSnk_OneChanStereoSrc_48_1_Balanced_Reliability",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_32_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_32_2_1",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_2_1",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_TwoChanStereoSrc_16_1_1",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_32_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_32_2_1",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_2_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_2_1",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_1_Low_Latency",
-        "SingleDev_TwoChanStereoSnk_OneChanMonoSrc_16_1_1",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_32_2_Low_Latency",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_32_2_1",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_2_Low_Latency",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_2_1",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_1_Low_Latency",
-        "SingleDev_OneChanStereoSnk_OneChanMonoSrc_16_1_1",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_32_2_Low_Latency",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_32_2_1",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_2_Low_Latency",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_2_1",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_1_Low_Latency",
-        "SingleDev_OneChanMonoSnk_OneChanMonoSrc_16_1_1",
-        "SingleDev_OneChanMonoSrc_48_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_48_1_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_32_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_32_1_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_16_2_Balanced_Reliability",
-        "SingleDev_OneChanMonoSrc_16_1_Balanced_Reliability"
+        "Two-OneChan-SnkAse-Lc3_32_2-Two-OneChan-SrcAse-Lc3_32_2_1",
+        "Two-OneChan-SnkAse-Lc3_32_2-Two-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_2-Two-OneChan-SrcAse-Lc3_16_2_1",
+        "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_1-Two-OneChan-SrcAse-Lc3_16_1_1",
+        "Two-TwoChan-SnkAse-Lc3_48_2-Two-TwoChan-SrcAse-Lc3_48_2_Balanced_Reliability",
+        "Two-TwoChan-SnkAse-Lc3_48_1-Two-TwoChan-SrcAse-Lc3_48_1_Balanced_Reliability",
+        "One-TwoChan-SnkAse-Lc3_32_2-One-TwoChan-SrcAse-Lc3_32_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_32_2-One-TwoChan-SrcAse-Lc3_32_2_1",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-TwoChan-SrcAse-Lc3_16_2_1",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-TwoChan-SrcAse-Lc3_16_1_1",
+        "One-TwoChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_1",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_1",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+        "One-TwoChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_1",
+        "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_1",
+        "Two-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_1",
+        "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+        "Two-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_1",
+        "One-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_Low_Latency",
+        "One-OneChan-SnkAse-Lc3_32_2-One-OneChan-SrcAse-Lc3_32_2_1",
+        "One-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_Low_Latency",
+        "One-OneChan-SnkAse-Lc3_16_2-One-OneChan-SrcAse-Lc3_16_2_1",
+        "One-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_Low_Latency",
+        "One-OneChan-SnkAse-Lc3_16_1-One-OneChan-SrcAse-Lc3_16_1_1",
+        "One-OneChan-SrcAse-Lc3_48_2_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_48_1_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_32_2_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_32_1_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_16_2_Balanced_Reliability",
+        "One-OneChan-SrcAse-Lc3_16_1_Balanced_Reliability"
       ]
     }
   ]
diff --git a/common/fmq/aidl/Android.bp b/common/fmq/aidl/Android.bp
index 9c1b45d..4a3658e 100644
--- a/common/fmq/aidl/Android.bp
+++ b/common/fmq/aidl/Android.bp
@@ -35,8 +35,7 @@
         ndk: {
             apex_available: [
                 "//apex_available:platform",
-                "com.android.btservices",
-                "com.android.media.swcodec",
+                "//apex_available:anyapex",
             ],
             min_sdk_version: "29",
         },
diff --git a/compatibility_matrices/bump.py b/compatibility_matrices/bump.py
index a5a453b..35633c1 100755
--- a/compatibility_matrices/bump.py
+++ b/compatibility_matrices/bump.py
@@ -21,7 +21,7 @@
 import argparse
 import os
 import pathlib
-import shutil
+import re
 import subprocess
 import textwrap
 
@@ -44,6 +44,7 @@
 
         self.current_level = cmdline_args.current_level
         self.current_letter = cmdline_args.current_letter
+        self.current_version = cmdline_args.platform_version
         self.current_module_name = f"framework_compatibility_matrix.{self.current_level}.xml"
         self.current_xml = self.interfaces_dir / f"compatibility_matrices/compatibility_matrix.{self.current_level}.xml"
         self.device_module_name = "framework_compatibility_matrix.device.xml"
@@ -58,12 +59,13 @@
         self.copy_matrix()
         self.edit_android_bp()
         self.edit_android_mk()
+        self.bump_libvintf()
 
     def bump_kernel_configs(self):
         check_call([
             self.top / "kernel/configs/tools/bump.py",
-            self.current_letter,
-            self.next_letter,
+            self.current_letter.lower(),
+            self.next_letter.lower(),
         ])
 
     def copy_matrix(self):
@@ -87,7 +89,7 @@
         next_kernel_configs = check_output(
             """grep -rh name: | sed -E 's/^.*"(.*)".*/\\1/g'""",
             cwd=self.top / "kernel/configs" /
-            self.next_letter,
+            self.next_letter.lower(),
             text=True,
             shell=True,
         ).splitlines()
@@ -128,21 +130,69 @@
         with open(android_mk, "w") as f:
             f.write("".join(lines))
 
+    def bump_libvintf(self):
+        if not self.current_version:
+            print("Skip libvintf update...")
+            return
+        try:
+            check_call(["grep", "-h",
+                        f"{self.current_letter.upper()} = {self.current_level}",
+                        "system/libvintf/include/vintf/Level.h"])
+        except subprocess.CalledProcessError:
+            print("Adding new API level to libvintf")
+            add_lines_above("system/libvintf/analyze_matrix/analyze_matrix.cpp",
+                            "        case Level::UNSPECIFIED:",
+                            textwrap.indent(textwrap.dedent(f"""\
+                                    case Level::{self.current_letter.upper()}:
+                                        return "Android {self.current_version} ({self.current_letter.upper()})";"""),
+                            "    "*2))
+            add_lines_above("system/libvintf/include/vintf/Level.h",
+                            "    // To add new values:",
+                            f"    {self.current_letter.upper()} = {self.current_level},")
+            add_lines_above("system/libvintf/include/vintf/Level.h",
+                            "        Level::UNSPECIFIED,",
+                            f"        Level::{self.current_letter.upper()},")
+            add_lines_above("system/libvintf/RuntimeInfo.cpp",
+                            "            // Add more levels above this line.",
+                            textwrap.indent(textwrap.dedent(f"""\
+                                        case {self.current_version}: {{
+                                            ret = Level::{self.current_letter.upper()};
+                                        }} break;"""),
+                            "    "*3))
+
+
+def add_lines_above(file, pattern, lines):
+    with open(file, 'r+') as f:
+        text = f.read()
+        split_text = re.split(rf"\n{pattern}\n", text)
+        if len(split_text) != 2:
+            # Only one pattern must be found, otherwise the source must be
+            # changed unexpectedly.
+            raise Exception(
+                f'Pattern "{pattern}" not found or multiple patterns found in {file}')
+        f.seek(0)
+        f.write(f"\n{lines}\n{pattern}\n".join(split_text))
+        f.truncate()
+
 
 def main():
     parser = argparse.ArgumentParser(description=__doc__)
     parser.add_argument("current_level",
                         type=str,
-                        help="VINTF level of the current version (e.g. 9)")
+                        help="VINTF level of the current version (e.g. 202404)")
     parser.add_argument("next_level",
                         type=str,
-                        help="VINTF level of the next version (e.g. 10)")
+                        help="VINTF level of the next version (e.g. 202504)")
     parser.add_argument("current_letter",
                         type=str,
                         help="Letter of the API level of the current version (e.g. v)")
     parser.add_argument("next_letter",
                         type=str,
                         help="Letter of the API level of the next version (e.g. w)")
+    parser.add_argument("platform_version",
+                        type=str,
+                        nargs="?",
+                        help="Android release version number number (e.g. 15)")
     cmdline_args = parser.parse_args()
 
     Bump(cmdline_args).run()
diff --git a/compatibility_matrices/clear_vars.mk b/compatibility_matrices/clear_vars.mk
index 0e53885..3c62377 100644
--- a/compatibility_matrices/clear_vars.mk
+++ b/compatibility_matrices/clear_vars.mk
@@ -16,10 +16,6 @@
 
 # Clear input variables to BUILD_FRAMEWORK_COMPATIBILITY_MATRIX
 LOCAL_ADD_VBMETA_VERSION :=
-LOCAL_ADD_VBMETA_VERSION_OVERRIDE :=
 LOCAL_ASSEMBLE_VINTF_ENV_VARS :=
-LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE :=
-LOCAL_ASSEMBLE_VINTF_ERROR_MESSAGE :=
 LOCAL_ASSEMBLE_VINTF_FLAGS :=
-LOCAL_KERNEL_CONFIG_DATA_PATHS :=
 LOCAL_GEN_FILE_DEPENDENCIES :=
diff --git a/compatibility_matrices/compatibility_matrix.202404.xml b/compatibility_matrices/compatibility_matrix.202404.xml
index 9ea476a..aa6b8f0 100644
--- a/compatibility_matrices/compatibility_matrix.202404.xml
+++ b/compatibility_matrices/compatibility_matrix.202404.xml
@@ -28,7 +28,7 @@
     </hal>
     <hal format="aidl">
         <name>android.hardware.audio.sounddose</name>
-        <version>1-2</version>
+        <version>1-3</version>
         <interface>
             <name>ISoundDoseFactory</name>
             <instance>default</instance>
diff --git a/compatibility_matrices/compatibility_matrix.202504.xml b/compatibility_matrices/compatibility_matrix.202504.xml
index ee62163..7e19852 100644
--- a/compatibility_matrices/compatibility_matrix.202504.xml
+++ b/compatibility_matrices/compatibility_matrix.202504.xml
@@ -26,14 +26,6 @@
             <instance>default</instance>
         </interface>
     </hal>
-    <hal format="aidl">
-        <name>android.hardware.audio.sounddose</name>
-        <version>1-3</version>
-        <interface>
-            <name>ISoundDoseFactory</name>
-            <instance>default</instance>
-        </interface>
-    </hal>
     <hal format="aidl" updatable-via-apex="true">
          <name>android.hardware.authsecret</name>
          <version>1</version>
@@ -372,6 +364,7 @@
     </hal>
     <hal format="aidl" updatable-via-apex="true">
         <name>android.hardware.nfc</name>
+        <version>1-2</version>
         <interface>
             <name>INfc</name>
             <instance>default</instance>
diff --git a/compatibility_matrices/compatibility_matrix.mk b/compatibility_matrices/compatibility_matrix.mk
index d22e510..64cd645 100644
--- a/compatibility_matrices/compatibility_matrix.mk
+++ b/compatibility_matrices/compatibility_matrix.mk
@@ -29,11 +29,7 @@
 #       (corresponds to <avb><vbmeta-version> tag)
 # LOCAL_ASSEMBLE_VINTF_ENV_VARS: Add a list of environment variable names from global variables in
 #       the build system that is lazily evaluated (e.g. PRODUCT_ENFORCE_VINTF_MANIFEST).
-# LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE: Add a list of environment variables that is local to
-#       assemble_vintf invocation. Format is "VINTF_ENFORCE_NO_UNUSED_HALS=true".
 # LOCAL_ASSEMBLE_VINTF_FLAGS: Add additional command line arguments to assemble_vintf invocation.
-# LOCAL_KERNEL_CONFIG_DATA_PATHS: Paths to search for kernel config requirements. Format for each is
-#       <kernel version x.y.z>:<path that contains android-base*.config>.
 # LOCAL_GEN_FILE_DEPENDENCIES: A list of additional dependencies for the generated file.
 
 ifndef LOCAL_MODULE
@@ -64,15 +60,11 @@
 ifeq (true,$(strip $(LOCAL_ADD_VBMETA_VERSION)))
 ifeq (true,$(BOARD_AVB_ENABLE))
 $(GEN): $(AVBTOOL)
-# INTERNAL_AVB_SYSTEM_SIGNING_ARGS consists of BOARD_AVB_SYSTEM_KEY_PATH and
-# BOARD_AVB_SYSTEM_ALGORITHM. We should add the dependency of key path, which
-# is a file, here.
 $(GEN): $(BOARD_AVB_SYSTEM_KEY_PATH)
 # Use deferred assignment (=) instead of immediate assignment (:=).
 # Otherwise, cannot get INTERNAL_AVB_SYSTEM_SIGNING_ARGS.
 $(GEN): FRAMEWORK_VBMETA_VERSION = $$("$(AVBTOOL)" add_hashtree_footer \
                            --print_required_libavb_version \
-                           $(INTERNAL_AVB_SYSTEM_SIGNING_ARGS) \
                            $(BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS))
 else
 $(GEN): FRAMEWORK_VBMETA_VERSION := 0.0
@@ -80,43 +72,17 @@
 $(GEN): PRIVATE_ENV_VARS += FRAMEWORK_VBMETA_VERSION
 endif # LOCAL_ADD_VBMETA_VERSION
 
-ifeq (true,$(strip $(LOCAL_ADD_VBMETA_VERSION_OVERRIDE)))
-ifneq ($(BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE),)
-$(GEN): FRAMEWORK_VBMETA_VERSION_OVERRIDE := $(BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE)
-$(GEN): PRIVATE_ENV_VARS += FRAMEWORK_VBMETA_VERSION_OVERRIDE
-endif
-endif
-
-ifneq (,$(strip $(LOCAL_KERNEL_CONFIG_DATA_PATHS)))
-$(GEN): PRIVATE_KERNEL_CONFIG_DATA_PATHS := $(LOCAL_KERNEL_CONFIG_DATA_PATHS)
-$(GEN): $(foreach pair,$(LOCAL_KERNEL_CONFIG_DATA_PATHS),\
-    $(wildcard $(call word-colon,2,$(pair))/android-base*.config))
-$(GEN): PRIVATE_FLAGS += $(foreach pair,$(PRIVATE_KERNEL_CONFIG_DATA_PATHS),\
-	--kernel=$(call word-colon,1,$(pair)):$(call normalize-path-list,\
-		$(wildcard $(call word-colon,2,$(pair))/android-base*.config)))
-endif
-
 my_matrix_src_files := \
 	$(addprefix $(LOCAL_PATH)/,$(LOCAL_SRC_FILES)) \
 	$(LOCAL_GENERATED_SOURCES)
 
-$(GEN): PRIVATE_ADDITIONAL_ENV_VARS := $(LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE)
-
-ifneq (,$(strip $(LOCAL_ASSEMBLE_VINTF_ERROR_MESSAGE)))
-$(GEN): PRIVATE_COMMAND_TAIL := || (echo $(strip $(LOCAL_ASSEMBLE_VINTF_ERROR_MESSAGE)) && false)
-endif
-
 $(GEN): PRIVATE_SRC_FILES := $(my_matrix_src_files)
 $(GEN): $(my_matrix_src_files) $(HOST_OUT_EXECUTABLES)/assemble_vintf
-	$(foreach varname,$(PRIVATE_ENV_VARS),\
-		$(if $(findstring $(varname),$(PRIVATE_ADDITIONAL_ENV_VARS)),\
-			$(error $(varname) should not be overridden by LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE.)))
 	$(foreach varname,$(PRIVATE_ENV_VARS),$(varname)="$($(varname))") \
-		$(PRIVATE_ADDITIONAL_ENV_VARS) \
 		$(HOST_OUT_EXECUTABLES)/assemble_vintf \
 		-i $(call normalize-path-list,$(PRIVATE_SRC_FILES)) \
 		-o $@ \
-		$(PRIVATE_FLAGS) $(PRIVATE_COMMAND_TAIL)
+		$(PRIVATE_FLAGS)
 
 LOCAL_PREBUILT_MODULE_FILE := $(GEN)
 LOCAL_SRC_FILES :=
diff --git a/compatibility_matrices/exclude/fcm_exclude.cpp b/compatibility_matrices/exclude/fcm_exclude.cpp
index fca9e1c..b86f399 100644
--- a/compatibility_matrices/exclude/fcm_exclude.cpp
+++ b/compatibility_matrices/exclude/fcm_exclude.cpp
@@ -167,6 +167,7 @@
             "android.hardware.audio.core.sounddose@3",
 
             // Deprecated HALs.
+            "android.hardware.audio.sounddose@3",
             "android.hardware.bluetooth.audio@1",
     };
 
diff --git a/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp b/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp
index ba15421..eaf23b5 100644
--- a/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp
+++ b/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp
@@ -1845,7 +1845,7 @@
         writer.setDisplayBrightness(getPrimaryDisplayId(), /*brightness*/ 0.5f, -1.f);
         execute();
         const auto errors = mReader.takeErrors();
-        EXPECT_EQ(1, errors.size());
+        ASSERT_EQ(1, errors.size());
         EXPECT_EQ(IComposerClient::EX_UNSUPPORTED, errors[0].errorCode);
         GTEST_SUCCEED() << "SetDisplayBrightness is not supported";
         return;
diff --git a/health/2.1/default/Android.bp b/health/2.1/default/Android.bp
index b7bcea5..00d89e2 100644
--- a/health/2.1/default/Android.bp
+++ b/health/2.1/default/Android.bp
@@ -81,7 +81,7 @@
     ],
 
     vintf_fragments: [
-        "android.hardware.health@2.1.xml"
+        "android.hardware.health@2.1.xml",
     ],
 
     overrides: [
diff --git a/health/utils/libhealthloop/Android.bp b/health/utils/libhealthloop/Android.bp
index 7aaf905..4ebc575 100644
--- a/health/utils/libhealthloop/Android.bp
+++ b/health/utils/libhealthloop/Android.bp
@@ -21,6 +21,17 @@
     default_applicable_licenses: ["hardware_interfaces_license"],
 }
 
+bpf {
+    name: "filterPowerSupplyEvents.o",
+    srcs: ["filterPowerSupplyEvents.c"],
+    // "vendor: true" because all binaries that use this BPF filter are vendor
+    // binaries.
+    vendor: true,
+}
+
+// Since "required" sections are ignored in static library definitions,
+// filterPowerSupplyEvents.o has been added in
+// build/make/target/product/base_vendor.mk.
 cc_library_static {
     name: "libhealthloop",
     vendor_available: true,
@@ -30,10 +41,11 @@
         "utils.cpp",
     ],
     shared_libs: [
-        "libcutils",
         "libbase",
+        "libcutils",
     ],
     header_libs: [
+        "bpf_headers",
         "libbatteryservice_headers",
         "libhealthd_headers",
         "libutils_headers",
@@ -42,3 +54,30 @@
         "include",
     ],
 }
+
+genrule {
+    name: "filterPowerSupplyEvents.h",
+    out: ["filterPowerSupplyEvents.h"],
+    srcs: [":filterPowerSupplyEvents.o"],
+    cmd: "cat $(in) | od -v -tx1 | cut -c9- | grep -v '^$$' | sed 's/^/0x/;s/ /, 0x/g;s/^, //;s/$$/,/' > $(out)",
+}
+
+cc_test_host {
+    name: "filterPowerSupplyEventsTest",
+    team: "trendy_team_pixel_system_sw_storage",
+    srcs: [
+        "filterPowerSupplyEventsTest.cpp",
+    ],
+    shared_libs: [
+        "libbase",
+        "libbpf",
+    ],
+    static_libs: [
+        "libgmock",
+    ],
+    generated_headers: [
+        "filterPowerSupplyEvents.h",
+        "libbpf_headers",
+    ],
+    compile_multilib: "64",
+}
diff --git a/health/utils/libhealthloop/HealthLoop.cpp b/health/utils/libhealthloop/HealthLoop.cpp
index 4190769..d43c2d5 100644
--- a/health/utils/libhealthloop/HealthLoop.cpp
+++ b/health/utils/libhealthloop/HealthLoop.cpp
@@ -20,23 +20,22 @@
 #include <health/HealthLoop.h>
 
 #include <errno.h>
-#include <libgen.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/epoll.h>
+#include <sys/epoll.h>  // epoll_create1(), epoll_ctl(), epoll_wait()
 #include <sys/timerfd.h>
-#include <unistd.h>
+#include <unistd.h>  // read()
 
 #include <android-base/logging.h>
 #include <batteryservice/BatteryService.h>
-#include <cutils/klog.h>
+#include <cutils/klog.h>  // KLOG_*()
 #include <cutils/uevent.h>
 #include <healthd/healthd.h>
-#include <utils/Errors.h>
 
+#include <BpfSyscallWrappers.h>
 #include <health/utils.h>
 
+using android::base::ErrnoError;
+using android::base::Result;
+using android::base::unique_fd;
 using namespace android;
 using namespace std::chrono_literals;
 
@@ -57,10 +56,10 @@
 int HealthLoop::RegisterEvent(int fd, BoundFunction func, EventWakeup wakeup) {
     CHECK(!reject_event_register_);
 
-    auto* event_handler =
-            event_handlers_
-                    .emplace_back(std::make_unique<EventHandler>(EventHandler{this, fd, func}))
-                    .get();
+    auto* event_handler = event_handlers_
+                                  .emplace_back(std::make_unique<EventHandler>(
+                                          EventHandler{this, fd, std::move(func)}))
+                                  .get();
 
     struct epoll_event ev;
 
@@ -122,7 +121,6 @@
     ScheduleBatteryUpdate();
 }
 
-// TODO(b/140330870): Use BPF instead.
 #define UEVENT_MSG_LEN 2048
 void HealthLoop::UeventEvent(uint32_t /*epevents*/) {
     // No need to lock because uevent_fd_ is guaranteed to be initialized.
@@ -152,8 +150,26 @@
     }
 }
 
+// Attach a BPF filter to the @uevent_fd file descriptor. This fails in recovery mode because BPF is
+// not supported in recovery mode. This fails for kernel versions 5.4 and before because the BPF
+// program is rejected by the BPF verifier of older kernels.
+Result<void> HealthLoop::AttachFilter(int uevent_fd) {
+    static const char prg[] =
+            "/sys/fs/bpf/vendor/prog_filterPowerSupplyEvents_skfilter_power_supply";
+    int filter_fd(bpf::retrieveProgram(prg));
+    if (filter_fd < 0) {
+        return ErrnoError() << "failed to load BPF program " << prg;
+    }
+    if (setsockopt(uevent_fd, SOL_SOCKET, SO_ATTACH_BPF, &filter_fd, sizeof(filter_fd)) < 0) {
+        close(filter_fd);
+        return ErrnoError() << "failed to attach BPF program";
+    }
+    close(filter_fd);
+    return {};
+}
+
 void HealthLoop::UeventInit(void) {
-    uevent_fd_.reset(uevent_open_socket(64 * 1024, true));
+    uevent_fd_.reset(uevent_create_socket(64 * 1024, true));
 
     if (uevent_fd_ < 0) {
         KLOG_ERROR(LOG_TAG, "uevent_init: uevent_open_socket failed\n");
@@ -161,8 +177,25 @@
     }
 
     fcntl(uevent_fd_, F_SETFL, O_NONBLOCK);
+
+    Result<void> attach_result = AttachFilter(uevent_fd_);
+    if (!attach_result.ok()) {
+        std::string error_msg = attach_result.error().message();
+        error_msg +=
+                ". This is expected in recovery mode and also for kernel versions before 5.10.";
+        KLOG_WARNING(LOG_TAG, "%s", error_msg.c_str());
+    } else {
+        KLOG_INFO(LOG_TAG, "Successfully attached the BPF filter to the uevent socket");
+    }
+
     if (RegisterEvent(uevent_fd_, &HealthLoop::UeventEvent, EVENT_WAKEUP_FD))
         KLOG_ERROR(LOG_TAG, "register for uevent events failed\n");
+
+    if (uevent_bind(uevent_fd_.get()) < 0) {
+        uevent_fd_.reset();
+        KLOG_ERROR(LOG_TAG, "uevent_init: binding socket failed\n");
+        return;
+    }
 }
 
 void HealthLoop::WakeAlarmEvent(uint32_t /*epevents*/) {
diff --git a/health/utils/libhealthloop/filterPowerSupplyEvents.c b/health/utils/libhealthloop/filterPowerSupplyEvents.c
new file mode 100644
index 0000000..5296993
--- /dev/null
+++ b/health/utils/libhealthloop/filterPowerSupplyEvents.c
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <bpf_helpers.h>    // load_word()
+#include <linux/bpf.h>      // struct __sk_buff
+#include <linux/netlink.h>  // struct nlmsghdr
+#include <stdint.h>         // uint32_t
+
+// M4: match 4 bytes. Returns 0 if all bytes match.
+static inline uint32_t M4(struct __sk_buff* skb, unsigned int offset, uint8_t c0, uint8_t c1,
+                          uint8_t c2, uint8_t c3) {
+    return load_word(skb, offset) ^ ((c0 << 24) | (c1 << 16) | (c2 << 8) | c3);
+}
+
+// M2: match 2 bytes. Returns 0 if all bytes match.
+static inline uint16_t M2(struct __sk_buff* skb, unsigned int offset, uint8_t c0, uint8_t c1) {
+    return load_half(skb, offset) ^ ((c0 << 8) | c1);
+}
+
+// M1: match 1 byte. Returns 0 in case of a match.
+static inline uint8_t M1(struct __sk_buff* skb, unsigned int offset, uint8_t c0) {
+    return load_byte(skb, offset) ^ c0;
+}
+
+// Match "\0SUBSYSTEM=". Returns 0 in case of a match.
+#define MATCH_SUBSYSTEM_LENGTH 11
+static inline uint32_t match_subsystem(struct __sk_buff* skb, unsigned int offset) {
+    return M4(skb, offset + 0, '\0', 'S', 'U', 'B') | M4(skb, offset + 4, 'S', 'Y', 'S', 'T') |
+           M2(skb, offset + 8, 'E', 'M') | M1(skb, offset + 10, '=');
+}
+
+// Match "power_supply\0". Returns 0 in case of a match.
+#define MATCH_POWER_SUPPLY_LENGTH 13
+static inline uint32_t match_power_supply(struct __sk_buff* skb, unsigned int offset) {
+    return M4(skb, offset + 0, 'p', 'o', 'w', 'e') | M4(skb, offset + 4, 'r', '_', 's', 'u') |
+           M4(skb, offset + 8, 'p', 'p', 'l', 'y') | M1(skb, offset + 12, '\0');
+}
+
+// The Linux kernel 5.4 BPF verifier rejects this program, probably because of its size. Hence the
+// restriction that the kernel version must be at least 5.10.
+DEFINE_BPF_PROG_KVER("skfilter/power_supply", AID_ROOT, AID_SYSTEM, filterPowerSupplyEvents,
+                     KVER(5, 10, 0))
+(struct __sk_buff* skb) {
+    uint32_t i;
+
+    // The first character matched by match_subsystem() is a '\0'. Starting
+    // right past the netlink message header is fine since the SUBSYSTEM= text
+    // never occurs at the start. See also the kobject_uevent_env() implementation:
+    // https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/lib/kobject_uevent.c?#n473
+    // The upper bound of this loop has been chosen not to exceed the maximum
+    // number of instructions in a BPF program (BPF loops are unrolled).
+    for (i = sizeof(struct nlmsghdr); i < 256; ++i) {
+        if (i + MATCH_SUBSYSTEM_LENGTH > skb->len) {
+            break;
+        }
+        if (match_subsystem(skb, i) == 0) {
+            goto found_subsystem;
+        }
+    }
+
+    // The SUBSYSTEM= text has not been found in the bytes that have been
+    // examined: let the user space software perform filtering.
+    return skb->len;
+
+found_subsystem:
+    i += MATCH_SUBSYSTEM_LENGTH;
+    if (i + MATCH_POWER_SUPPLY_LENGTH <= skb->len && match_power_supply(skb, i) == 0) {
+        return skb->len;
+    }
+    return 0;
+}
+
+LICENSE("Apache 2.0");
+CRITICAL("healthd");
diff --git a/health/utils/libhealthloop/filterPowerSupplyEventsTest.cpp b/health/utils/libhealthloop/filterPowerSupplyEventsTest.cpp
new file mode 100644
index 0000000..e885f0b
--- /dev/null
+++ b/health/utils/libhealthloop/filterPowerSupplyEventsTest.cpp
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <android-base/unique_fd.h>
+#include <bpf/libbpf.h>
+#include <gtest/gtest.h>
+#include <linux/bpf.h>  // SO_ATTACH_BPF
+#include <linux/netlink.h>
+#include <netinet/in.h>
+#include <stdio.h>
+#include <sys/socket.h>
+#include <string>
+#include <string_view>
+
+#define ASSERT_UNIX_OK(e) ASSERT_GE(e, 0) << strerror(errno)
+
+// TODO(bvanassche): remove the code below. See also b/357099095.
+#ifndef SO_ATTACH_BPF
+#define SO_ATTACH_BPF 50  // From <asm-generic/socket.h>.
+#endif
+
+using ::android::base::unique_fd;
+using ::testing::ScopedTrace;
+
+struct test_data {
+    bool discarded;
+    std::string_view str;
+};
+
+static const uint8_t binary_bpf_prog[] = {
+#include "filterPowerSupplyEvents.h"
+};
+
+static std::vector<std::unique_ptr<ScopedTrace>>* msg_vec;
+
+std::ostream& operator<<(std::ostream& os, const test_data& td) {
+    os << "{.discarded=" << td.discarded << ", .str=";
+    for (auto c : td.str) {
+        if (isprint(c)) {
+            os << c;
+        } else {
+            os << ".";
+        }
+    }
+    return os << '}';
+}
+
+#define RECORD_ERR_MSG(fmt, ...)                                          \
+    do {                                                                  \
+        char* str;                                                        \
+        if (asprintf(&str, fmt, ##__VA_ARGS__) < 0) break;                \
+        auto st = std::make_unique<ScopedTrace>(__FILE__, __LINE__, str); \
+        msg_vec->emplace_back(std::move(st));                             \
+        free(str);                                                        \
+    } while (0)
+
+int libbpf_print_fn(enum libbpf_print_level, const char* fmt, va_list args) {
+    char* str;
+    if (vasprintf(&str, fmt, args) < 0) {
+        return 0;
+    }
+    msg_vec->emplace_back(std::make_unique<ScopedTrace>(__FILE__, -1, str));
+    free(str);
+    return 0;
+}
+
+static void record_libbpf_output() {
+    libbpf_set_print(libbpf_print_fn);
+}
+
+class filterPseTest : public testing::TestWithParam<test_data> {};
+
+struct ConnectedSockets {
+    unique_fd write_fd;
+    unique_fd read_fd;
+};
+
+// socketpair() only supports AF_UNIX sockets. AF_UNIX sockets do not
+// support BPF filters. Hence connect two TCP sockets with each other.
+static ConnectedSockets ConnectSockets(int domain, int type, int protocol) {
+    int _server_fd = socket(domain, type, protocol);
+    if (_server_fd < 0) {
+        return {};
+    }
+    unique_fd server_fd(_server_fd);
+
+    int _write_fd = socket(domain, type, protocol);
+    if (_write_fd < 0) {
+        RECORD_ERR_MSG("socket: %s", strerror(errno));
+        return {};
+    }
+    unique_fd write_fd(_write_fd);
+
+    struct sockaddr_in sa = {.sin_family = AF_INET, .sin_addr.s_addr = INADDR_ANY};
+    if (bind(_server_fd, (const struct sockaddr*)&sa, sizeof(sa)) < 0) {
+        RECORD_ERR_MSG("bind: %s", strerror(errno));
+        return {};
+    }
+    if (listen(_server_fd, 1) < 0) {
+        RECORD_ERR_MSG("listen: %s", strerror(errno));
+        return {};
+    }
+    socklen_t addr_len = sizeof(sa);
+    if (getsockname(_server_fd, (struct sockaddr*)&sa, &addr_len) < 0) {
+        RECORD_ERR_MSG("getsockname: %s", strerror(errno));
+        return {};
+    }
+    errno = 0;
+    if (connect(_write_fd, (const struct sockaddr*)&sa, sizeof(sa)) < 0 && errno != EINPROGRESS) {
+        RECORD_ERR_MSG("connect: %s", strerror(errno));
+        return {};
+    }
+    int _read_fd = accept(_server_fd, NULL, NULL);
+    if (_read_fd < 0) {
+        RECORD_ERR_MSG("accept: %s", strerror(errno));
+        return {};
+    }
+    unique_fd read_fd(_read_fd);
+
+    return {.write_fd = std::move(write_fd), .read_fd = std::move(read_fd)};
+}
+
+TEST_P(filterPseTest, filterPse) {
+    if (getuid() != 0) {
+        GTEST_SKIP() << "Must be run as root.";
+        return;
+    }
+    if (!msg_vec) {
+        msg_vec = new typeof(*msg_vec);
+    }
+    std::unique_ptr<int, void (*)(int*)> clear_msg_vec_at_end_of_scope(new int, [](int* p) {
+        msg_vec->clear();
+        delete p;
+    });
+    record_libbpf_output();
+
+    auto connected_sockets = ConnectSockets(AF_INET, SOCK_STREAM, 0);
+    unique_fd write_fd = std::move(connected_sockets.write_fd);
+    unique_fd read_fd = std::move(connected_sockets.read_fd);
+
+    ASSERT_UNIX_OK(fcntl(read_fd, F_SETFL, O_NONBLOCK));
+
+    bpf_object* obj = bpf_object__open_mem(binary_bpf_prog, sizeof(binary_bpf_prog), NULL);
+    ASSERT_TRUE(obj) << "bpf_object__open() failed" << strerror(errno);
+
+    // Find the BPF program within the object.
+    bpf_program* prog = bpf_object__find_program_by_name(obj, "filterPowerSupplyEvents");
+    ASSERT_TRUE(prog);
+
+    ASSERT_UNIX_OK(bpf_program__set_type(prog, BPF_PROG_TYPE_SOCKET_FILTER));
+
+    ASSERT_UNIX_OK(bpf_object__load(obj));
+
+    int filter_fd = bpf_program__fd(prog);
+    ASSERT_UNIX_OK(filter_fd);
+
+    int setsockopt_result =
+            setsockopt(read_fd, SOL_SOCKET, SO_ATTACH_BPF, &filter_fd, sizeof(filter_fd));
+    ASSERT_UNIX_OK(setsockopt_result);
+
+    const test_data param = GetParam();
+    const std::string header(sizeof(struct nlmsghdr), '\0');
+    ASSERT_EQ(header.length(), sizeof(struct nlmsghdr));
+    const std::string data = header + std::string(param.str);
+    const size_t len = data.length();
+    std::cerr.write(data.data(), data.length());
+    std::cerr << ")\n";
+    ASSERT_EQ(write(write_fd, data.data(), len), len);
+    std::array<uint8_t, 512> read_buf;
+    int bytes_read = read(read_fd, read_buf.data(), read_buf.size());
+    if (bytes_read < 0) {
+        ASSERT_EQ(errno, EAGAIN);
+        bytes_read = 0;
+    } else {
+        ASSERT_LT(bytes_read, read_buf.size());
+    }
+    EXPECT_EQ(bytes_read, param.discarded ? 0 : len);
+
+    bpf_object__close(obj);
+}
+
+INSTANTIATE_TEST_SUITE_P(
+        filterPse, filterPseTest,
+        testing::Values(test_data{false, "a"},
+                        test_data{true, std::string_view("abc\0SUBSYSTEM=block\0", 20)},
+                        test_data{true, std::string_view("\0SUBSYSTEM=block", 16)},
+                        test_data{true, std::string_view("\0SUBSYSTEM=power_supply", 23)},
+                        test_data{false, std::string_view("\0SUBSYSTEM=power_supply\0", 24)},
+                        test_data{
+                                false,
+                                "012345678901234567890123456789012345678901234567890123456789012345"
+                                "678901234567890123456789012345678901234567890123456789012345678901"
+                                "234567890123456789012345678901234567890123456789012345678901234567"
+                                "890123456789012345678901234567890123456789\0SUBSYSTEM=block\0"}));
diff --git a/health/utils/libhealthloop/include/health/HealthLoop.h b/health/utils/libhealthloop/include/health/HealthLoop.h
index fc3066e..1af7274 100644
--- a/health/utils/libhealthloop/include/health/HealthLoop.h
+++ b/health/utils/libhealthloop/include/health/HealthLoop.h
@@ -20,6 +20,7 @@
 #include <mutex>
 #include <vector>
 
+#include <android-base/result.h>
 #include <android-base/unique_fd.h>
 #include <healthd/healthd.h>
 
@@ -87,6 +88,7 @@
     };
 
     int InitInternal();
+    static android::base::Result<void> AttachFilter(int uevent_fd);
     void MainLoop();
     void WakeAlarmInit();
     void WakeAlarmEvent(uint32_t);
diff --git a/media/bufferpool/aidl/default/BufferPoolClient.cpp b/media/bufferpool/aidl/default/BufferPoolClient.cpp
index ce4ad8e..b61893f 100644
--- a/media/bufferpool/aidl/default/BufferPoolClient.cpp
+++ b/media/bufferpool/aidl/default/BufferPoolClient.cpp
@@ -748,6 +748,10 @@
     } else {
         connection = mRemoteConnection;
     }
+    if (!connection) {
+        ALOGE("connection null: fetchBufferHandle()");
+        return ResultStatus::CRITICAL_ERROR;
+    }
     std::vector<FetchInfo> infos;
     std::vector<FetchResult> results;
     infos.emplace_back(FetchInfo{ToAidl(transactionId), ToAidl(bufferId)});
diff --git a/memtrack/OWNERS b/memtrack/OWNERS
index a182ed9..8017da6 100644
--- a/memtrack/OWNERS
+++ b/memtrack/OWNERS
@@ -1,2 +1,3 @@
-# Bug component: 30545
-connoro@google.com
+# Bug component: 356484
+kaleshsingh@google.com
+surenb@google.com
diff --git a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
index 2fc9e65..6d4936b 100644
--- a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
+++ b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
@@ -108,7 +108,7 @@
     EXPECT_EQ(NfcStatus::OK, nfc_->open(nfc_cb_));
     // Wait for OPEN_CPLT event
     auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-    EXPECT_TRUE(res.no_timeout);
+    ASSERT_TRUE(res.no_timeout);
     EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
     EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 
@@ -118,7 +118,7 @@
     EXPECT_EQ(data.size(), nfc_->write(data));
     // Wait for CORE_RESET_RSP
     res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-    EXPECT_TRUE(res.no_timeout);
+    ASSERT_TRUE(res.no_timeout);
     EXPECT_GE(6ul, res.args->last_data_.size());
     EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
     if (res.args->last_data_.size() == 6) {
@@ -127,7 +127,7 @@
         EXPECT_EQ(4ul, res.args->last_data_.size());
         nci_version = NCI_VERSION_2;
         res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-        EXPECT_TRUE(res.no_timeout);
+        ASSERT_TRUE(res.no_timeout);
     }
 
     /*
@@ -137,14 +137,14 @@
     EXPECT_EQ(NfcStatus::OK, nfc_->close());
     // Wait for CLOSE_CPLT event
     res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-    EXPECT_TRUE(res.no_timeout);
+    ASSERT_TRUE(res.no_timeout);
     EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_);
     EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 
     EXPECT_EQ(NfcStatus::OK, nfc_->open(nfc_cb_));
     // Wait for OPEN_CPLT event
     res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-    EXPECT_TRUE(res.no_timeout);
+    ASSERT_TRUE(res.no_timeout);
     EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
     EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
   }
@@ -153,7 +153,7 @@
     EXPECT_EQ(NfcStatus::OK, nfc_->close());
     // Wait for CLOSE_CPLT event
     auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-    EXPECT_TRUE(res.no_timeout);
+    ASSERT_TRUE(res.no_timeout);
     EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_);
     EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
   }
@@ -186,7 +186,7 @@
   EXPECT_EQ(data.size(), nfc_->write(data));
   // Wait for CORE_RESET_RSP
   auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
 
   /* The response/notification format for CORE_RESET_CMD differs
    * with NCI 1.0 and 2.0. */
@@ -200,7 +200,7 @@
       EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
       // Wait for CORE_RESET_NTF
       res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-      EXPECT_TRUE(res.no_timeout);
+      ASSERT_TRUE(res.no_timeout);
       // Check if reset trigger was due to CORE_RESET_CMD
       EXPECT_LE(8ul, res.args->last_data_.size());
       EXPECT_EQ(2ul, res.args->last_data_[3]);
@@ -221,7 +221,7 @@
   EXPECT_EQ(data.size(), nfc_->write(data));
   // Wait for CORE_RESET_RSP
   auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
 
   /* The response/notification format for CORE_RESET_CMD differs
    * with NCI 1.0 and 2.0. */
@@ -235,7 +235,7 @@
       EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
       // Wait for CORE_RESET_NTF
       res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-      EXPECT_TRUE(res.no_timeout);
+      ASSERT_TRUE(res.no_timeout);
       // Check if reset trigger was due to CORE_RESET_CMD
       EXPECT_LE(8ul, res.args->last_data_.size());
       EXPECT_EQ(2ul, res.args->last_data_[3]);
@@ -257,7 +257,7 @@
   EXPECT_EQ(data.size(), nfc_->write(data));
   // Wait for RSP
   auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
   EXPECT_EQ(4ul, res.args->last_data_.size());
   EXPECT_EQ(SYNTAX_ERROR, res.args->last_data_[3]);
 }
@@ -277,14 +277,14 @@
     EXPECT_EQ(data.size(), nfc_->write(data));
     // Wait for CORE_RESET_RSP
     auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-    EXPECT_TRUE(res.no_timeout);
+    ASSERT_TRUE(res.no_timeout);
     EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
 
     /* NCI 2.0 sends CORE_RESET_NTF everytime. */
     if (nci_version == NCI_VERSION_2) {
         // Wait for CORE_RESET_NTF
         res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-        EXPECT_TRUE(res.no_timeout);
+        ASSERT_TRUE(res.no_timeout);
         cmd = CORE_INIT_CMD_NCI20;
     } else {
         cmd = CORE_INIT_CMD;
@@ -294,7 +294,7 @@
     EXPECT_EQ(data.size(), nfc_->write(data));
     // Wait for CORE_INIT_RSP
     res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-    EXPECT_TRUE(res.no_timeout);
+    ASSERT_TRUE(res.no_timeout);
     EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
     // Send an Error Data Packet
     cmd = INVALID_COMMAND;
@@ -307,7 +307,7 @@
         EXPECT_EQ(data.size(), nfc_->write(data));
         // Wait for response with SYNTAX_ERROR
         res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-        EXPECT_TRUE(res.no_timeout);
+        ASSERT_TRUE(res.no_timeout);
         EXPECT_EQ(4ul, res.args->last_data_.size());
         EXPECT_EQ(SYNTAX_ERROR, res.args->last_data_[3]);
   }
@@ -317,7 +317,7 @@
   EXPECT_EQ(data.size(), nfc_->write(data));
   // Wait for CORE_CONN_CREATE_RSP
   res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
   EXPECT_EQ(7ul, res.args->last_data_.size());
   EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
 }
@@ -335,14 +335,14 @@
     EXPECT_EQ(data.size(), nfc_->write(data));
     // Wait for CORE_RESET_RSP
     auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-    EXPECT_TRUE(res.no_timeout);
+    ASSERT_TRUE(res.no_timeout);
     EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
 
     /* NCI 2.0 sends CORE_RESET_NTF everytime. */
     if (nci_version == NCI_VERSION_2) {
         // Wait for CORE_RESET_NTF
         res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-        EXPECT_TRUE(res.no_timeout);
+        ASSERT_TRUE(res.no_timeout);
         cmd = CORE_INIT_CMD_NCI20;
     } else {
         cmd = CORE_INIT_CMD;
@@ -352,15 +352,15 @@
     EXPECT_EQ(data.size(), nfc_->write(data));
     // Wait for CORE_INIT_RSP
     res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-    EXPECT_TRUE(res.no_timeout);
+    ASSERT_TRUE(res.no_timeout);
     EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
     cmd = CORE_CONN_CREATE_CMD;
     data = cmd;
     EXPECT_EQ(data.size(), nfc_->write(data));
     // Wait for CORE_CONN_CREATE_RSP
     res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-    EXPECT_TRUE(res.no_timeout);
-    EXPECT_TRUE(res.no_timeout);
+    ASSERT_TRUE(res.no_timeout);
+    ASSERT_TRUE(res.no_timeout);
     EXPECT_EQ(7ul, res.args->last_data_.size());
     EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
     uint8_t conn_id = res.args->last_data_[6];
@@ -414,7 +414,7 @@
   EXPECT_EQ(NfcStatus::OK, nfc_->powerCycle());
   // Wait for NfcEvent.OPEN_CPLT
   auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
   EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
   EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 }
@@ -428,7 +428,7 @@
   EXPECT_EQ(NfcStatus::OK, nfc_->close());
   // Wait for CLOSE_CPLT event
   auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
   EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_);
   EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 
@@ -437,7 +437,7 @@
   EXPECT_EQ(NfcStatus::OK, nfc_->open(nfc_cb_));
   // Wait for OPEN_CPLT event
   res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
   EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
   EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 }
@@ -464,7 +464,7 @@
       EXPECT_EQ(NfcStatus::OK, status);
       // Wait for NfcEvent.POST_INIT_CPLT
       auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-      EXPECT_TRUE(res.no_timeout);
+      ASSERT_TRUE(res.no_timeout);
       EXPECT_EQ(NfcEvent::POST_INIT_CPLT, res.args->last_event_);
   }
 }
@@ -487,7 +487,7 @@
   EXPECT_EQ(NfcStatus::OK, nfc_->close());
   // Wait for CLOSE_CPLT event
   auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
   EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_);
   EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 
@@ -496,7 +496,7 @@
   EXPECT_EQ(NfcStatus::OK, nfc_->open(nfc_cb_));
   // Wait for OPEN_CPLT event
   res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
   EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
   EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 }
@@ -518,7 +518,7 @@
   EXPECT_EQ(NfcStatus::OK, nfc_->close());
   // Wait for CLOSE_CPLT event
   auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
   EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_);
   EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 
@@ -527,7 +527,7 @@
   EXPECT_EQ(NfcStatus::OK, nfc_->open(nfc_cb_));
   // Wait for OPEN_CPLT event
   res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
   EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
   EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 }
@@ -541,7 +541,7 @@
   EXPECT_EQ(NfcStatus::OK, nfc_->close());
   // Wait for CLOSE_CPLT event
   auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
   EXPECT_EQ(NfcEvent::CLOSE_CPLT, res.args->last_event_);
   EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 
@@ -550,7 +550,7 @@
   EXPECT_EQ(NfcStatus::OK, nfc_->open(nfc_cb_));
   // Wait for OPEN_CPLT event
   res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
   EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
   EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 }
@@ -564,14 +564,14 @@
   EXPECT_EQ(NfcStatus::OK, nfc_->open(nfc_cb_));
   // Wait for OPEN_CPLT event
   auto res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
   EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
   EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 
   EXPECT_EQ(NfcStatus::OK, nfc_->open(nfc_cb_));
   // Wait for OPEN_CPLT event
   res = nfc_cb_->WaitForCallback(kCallbackNameSendEvent);
-  EXPECT_TRUE(res.no_timeout);
+  ASSERT_TRUE(res.no_timeout);
   EXPECT_EQ(NfcEvent::OPEN_CPLT, res.args->last_event_);
   EXPECT_EQ(NfcStatus::OK, res.args->last_status_);
 }
diff --git a/nfc/aidl/aidl_api/android.hardware.nfc/current/android/hardware/nfc/INfc.aidl b/nfc/aidl/aidl_api/android.hardware.nfc/current/android/hardware/nfc/INfc.aidl
index 7a0ae54..220912e 100644
--- a/nfc/aidl/aidl_api/android.hardware.nfc/current/android/hardware/nfc/INfc.aidl
+++ b/nfc/aidl/aidl_api/android.hardware.nfc/current/android/hardware/nfc/INfc.aidl
@@ -44,4 +44,5 @@
   int write(in byte[] data);
   void setEnableVerboseLogging(in boolean enable);
   boolean isVerboseLoggingEnabled();
+  android.hardware.nfc.NfcStatus controlGranted();
 }
diff --git a/nfc/aidl/aidl_api/android.hardware.nfc/current/android/hardware/nfc/NfcEvent.aidl b/nfc/aidl/aidl_api/android.hardware.nfc/current/android/hardware/nfc/NfcEvent.aidl
index dda258e..aebe836 100644
--- a/nfc/aidl/aidl_api/android.hardware.nfc/current/android/hardware/nfc/NfcEvent.aidl
+++ b/nfc/aidl/aidl_api/android.hardware.nfc/current/android/hardware/nfc/NfcEvent.aidl
@@ -40,4 +40,6 @@
   PRE_DISCOVER_CPLT = 3,
   HCI_NETWORK_RESET = 4,
   ERROR = 5,
+  REQUEST_CONTROL = 6,
+  RELEASE_CONTROL = 7,
 }
diff --git a/nfc/aidl/android/hardware/nfc/INfc.aidl b/nfc/aidl/android/hardware/nfc/INfc.aidl
index 662f8d4..1d18b9e 100644
--- a/nfc/aidl/android/hardware/nfc/INfc.aidl
+++ b/nfc/aidl/android/hardware/nfc/INfc.aidl
@@ -140,4 +140,13 @@
      * @return true if verbose logging flag value is enabled, false if disabled.
      */
     boolean isVerboseLoggingEnabled();
+
+    /**
+     * Requests control of NFCC to libnfc-nci.
+     * If an API request is sent when the framework has no control of NFCC, the request will be
+     * queued until the control is released from HAL.
+     * The control will be taken out of the framework for at most 2 seconds.
+     * @return NfcStatus::OK on success and NfcStatus::FAILED on error.
+     */
+    NfcStatus controlGranted();
 }
diff --git a/nfc/aidl/android/hardware/nfc/NfcEvent.aidl b/nfc/aidl/android/hardware/nfc/NfcEvent.aidl
index a78b1cd..7e0231a 100644
--- a/nfc/aidl/android/hardware/nfc/NfcEvent.aidl
+++ b/nfc/aidl/android/hardware/nfc/NfcEvent.aidl
@@ -50,4 +50,14 @@
      * Error event to notify upper layer when there's an unknown error.
      */
     ERROR = 5,
+    /**
+     * Request control event to notify upper layer when HAL
+     * request control of NFCC to libnfc-nci
+     */
+    REQUEST_CONTROL = 6,
+    /**
+     * Release control event to notify upper layer when HAL
+     * release control of NFCC to libnfc-nci.
+     */
+    RELEASE_CONTROL = 7,
 }
diff --git a/nfc/aidl/vts/functional/Android.bp b/nfc/aidl/vts/functional/Android.bp
index d0b684b..f97405e 100644
--- a/nfc/aidl/vts/functional/Android.bp
+++ b/nfc/aidl/vts/functional/Android.bp
@@ -38,7 +38,7 @@
         "libbinder_ndk",
     ],
     static_libs: [
-        "android.hardware.nfc-V1-ndk",
+        "android.hardware.nfc-V2-ndk",
     ],
     test_suites: [
         "general-tests",
@@ -49,6 +49,7 @@
 cc_test {
     name: "VtsNfcBehaviorChangesTest",
     defaults: [
+        "aconfig_lib_cc_shared_link.defaults",
         "VtsHalTargetTestDefaults",
         "use_libaidlvintf_gtest_helper_static",
     ],
@@ -65,13 +66,14 @@
         "system/nfc/utils/include",
     ],
     shared_libs: [
+        "liblog",
         "libbinder",
         "libbinder_ndk",
         "libnativehelper",
         "libstatssocket",
     ],
     static_libs: [
-        "android.hardware.nfc-V1-ndk",
+        "android.hardware.nfc-V2-ndk",
         "android.hardware.nfc@1.0",
         "android.hardware.nfc@1.1",
         "android.hardware.nfc@1.2",
diff --git a/nfc/aidl/vts/functional/VtsAidlHalNfcTargetTest.cpp b/nfc/aidl/vts/functional/VtsAidlHalNfcTargetTest.cpp
index 977b25c..12f4364 100644
--- a/nfc/aidl/vts/functional/VtsAidlHalNfcTargetTest.cpp
+++ b/nfc/aidl/vts/functional/VtsAidlHalNfcTargetTest.cpp
@@ -440,6 +440,16 @@
     EXPECT_TRUE(!enabled);
 }
 
+TEST_P(NfcAidl, CheckControlGrantedStatus) {
+    int interface_version;
+    EXPECT_TRUE(infc_->getInterfaceVersion(&interface_version).isOk());
+    if (interface_version > 1) {
+        NfcStatus status;
+        EXPECT_TRUE(infc_->controlGranted(&status).isOk());
+        EXPECT_EQ(status, NfcStatus::OK);
+    }
+}
+
 GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(NfcAidl);
 INSTANTIATE_TEST_SUITE_P(Nfc, NfcAidl,
                          testing::ValuesIn(::android::getAidlHalInstanceNames(INfc::descriptor)),
diff --git a/radio/aidl/android/hardware/radio/config/IRadioConfig.aidl b/radio/aidl/android/hardware/radio/config/IRadioConfig.aidl
index 8f4dff4..936315c 100644
--- a/radio/aidl/android/hardware/radio/config/IRadioConfig.aidl
+++ b/radio/aidl/android/hardware/radio/config/IRadioConfig.aidl
@@ -17,9 +17,10 @@
  * This interface is used by telephony and telecom to talk to cellular radio for the purpose of
  * radio configuration, and it is not associated with any specific modem or slot.
  * All the functions have minimum one parameter:
- * serial: which corresponds to serial no. of request. Serial numbers must only be memorized for the
- * duration of a method call. If clients provide colliding serials (including passing the same
- * serial to different methods), multiple responses (one for each method call) must still be served.
+ * serial: which corresponds to the serial number of the request. Serial numbers must only be
+ * memorized for the duration of a method call. If clients provide colliding serials (including
+ * passing the same serial to different methods), multiple responses (one for each method call) must
+ * still be served.
  */
 
 package android.hardware.radio.config;
@@ -108,12 +109,12 @@
 
     /**
      * Set preferred data modem Id.
-     * In a multi-SIM device, notify modem layer which logical modem will be used primarily
-     * for data. It helps modem with resource optimization and decisions of what data connections
-     * should be satisfied.
+     * In a multi-SIM device, notify the modem layer which logical modem will be used primarily
+     * for data. It helps the modem with resource optimization and decisions of what data
+     * connections should be satisfied.
      *
      * @param serial Serial number of request.
-     * @param modem Id the logical modem ID, which should match one of modem IDs returned
+     * @param modemId the logical modem ID which should match one of the modem IDs returned
      * from getPhoneCapability().
      *
      * Response callback is IRadioConfigResponse.setPreferredDataModemResponse()
@@ -136,30 +137,30 @@
     /**
      * Set SIM Slot mapping.
      *
-     * Maps the logical slots to the SlotPortMapping which consist of both physical slot id and port
-     * id. Logical slot is the slot that is seen by modem. Physical slot is the actual physical
-     * slot. PortId is the id (enumerated value) for the associated port available on the SIM. Each
-     * physical slot can have multiple ports which enables multi-enabled profile(MEP). If eUICC
-     * physical slot supports 2 ports, then the portId is numbered 0,1 and if eUICC2 supports 4
-     * ports then the portID is numbered 0,1,2,3. Each portId is unique within a UICC physical slot
-     * but not necessarily unique across UICC’s. SEP(Single enabled profile) eUICC and non-eUICC
-     * will only have portId 0.
+     * Maps the logical slots to the SlotPortMapping, which consists of both physical slot id and
+     * port id. Logical slot is the slot that is seen by the modem. Physical slot is the actual
+     * physical slot. PortId is the id (enumerated value) for the associated port available on the
+     * SIM. Each physical slot can have multiple ports, which enables multi-enabled profile(MEP). If
+     * eUICC physical slot supports 2 ports, then the portId is numbered 0,1 and if eUICC2 supports
+     * 4 ports then the portID is numbered 0,1,2,3. Each portId is unique within a UICC physical
+     * slot but not necessarily unique across UICC’s. SEP(Single enabled profile) eUICC and
+     * non-eUICC will only have portId 0.
      *
      * Logical slots that are already mapped to the requested SlotPortMapping are not impacted.
      *
-     * Example no. of logical slots 1 and physical slots 2 do not support MEP, each physical slot
-     * has one port:
-     * The only logical slot (index 0) can be mapped to first physical slot (value 0), port(index
-     * 0). or second
-     * physical slot(value 1), port (index 0), while the other physical slot remains unmapped and
-     * inactive.
+     * Example: There is 1 logical slot, 2 physical slots, MEP is not supported and each physical
+     * slot has one port:
+     * The only logical slot (index 0) can be mapped to the first physical slot (value 0),
+     * port(index 0), or second physical slot(value 1), port (index 0), while the other physical
+     * slot remains unmapped and inactive.
      * slotMap[0] = SlotPortMapping{0 //physical slot//, 0 //port//}
      * slotMap[0] = SlotPortMapping{1 //physical slot//, 0 //port//}
      *
-     * Example no. of logical slots 2 and physical slots 2 supports MEP with 2 ports available:
-     * Each logical slot must be mapped to a port (physical slot and port combination).
-     * First logical slot (index 0) can be mapped to physical slot 1 and the second logical slot
-     * can be mapped to either port from physical slot 2.
+     * Example: There are 2 logical slots, 2 physical slots, MEP is supported and there are 2 ports
+     * available:
+     * Each logical slot must be mapped to a port (physical slot and port combination). The first
+     * logical slot (index 0) can be mapped to the physical slot 1 and the second logical slot can
+     * be mapped to either port from physical slot 2.
      *
      * slotMap[0] = SlotPortMapping{0, 0} and slotMap[1] = SlotPortMapping{1, 0} or
      * slotMap[0] = SlotPortMapping{0, 0} and slotMap[1] = SlotPortMapping{1, 1}
@@ -178,10 +179,10 @@
      *
      * @param serial Serial number of request
      * @param slotMap Logical to physical slot and port mapping.
-     *        Index is mapping to logical slot and value to physical slot and port id, need to
-     *        provide all the slots mapping when sending request in case of multi slot device.
+     *        The index maps to the logical slot, and the value to the physical slot and port id. In
+     *        the case of a multi-slot device, provide all the slot mappings when sending a request.
      *
-     *        EX: SlotPortMapping(physical slot, port id)
+     *        Example: SlotPortMapping(physical slot, port id)
      *        index 0 is the first logical_slot number of logical slots is equal to number of Radio
      *        instances and number of physical slots is equal to size of slotStatus in
      *        getSimSlotsStatusResponse
diff --git a/radio/aidl/android/hardware/radio/config/IRadioConfigIndication.aidl b/radio/aidl/android/hardware/radio/config/IRadioConfigIndication.aidl
index 9eacb8e..0b60dbb 100644
--- a/radio/aidl/android/hardware/radio/config/IRadioConfigIndication.aidl
+++ b/radio/aidl/android/hardware/radio/config/IRadioConfigIndication.aidl
@@ -27,9 +27,9 @@
     /**
      * Indicates SIM slot status change.
      *
-     * This indication must be sent by the modem whenever there is any slot status change, even the
-     * slot is inactive. For example, this indication must be triggered if a SIM card is inserted
-     * into an inactive slot.
+     * This indication must be sent by the modem whenever there is any slot status change, even if
+     * the slot is inactive. For example, this indication must be triggered if a SIM card is
+     * inserted into an inactive slot.
      *
      * @param type Type of radio indication
      * @param slotStatus new slot status info with size equals to the number of physical slots on
@@ -39,7 +39,7 @@
             in android.hardware.radio.RadioIndicationType type, in SimSlotStatus[] slotStatus);
 
     /**
-     * The logical slots supporting simultaneous cellular calling has changed.
+     * The logical slots supporting simultaneous cellular calling have changed.
      *
      * @param enabledLogicalSlots The slots that have simultaneous cellular calling enabled. If
      * there is a call active on logical slot X, then a simultaneous cellular call is only possible
diff --git a/radio/aidl/android/hardware/radio/config/IRadioConfigResponse.aidl b/radio/aidl/android/hardware/radio/config/IRadioConfigResponse.aidl
index 33b0ff0..8182cd1 100644
--- a/radio/aidl/android/hardware/radio/config/IRadioConfigResponse.aidl
+++ b/radio/aidl/android/hardware/radio/config/IRadioConfigResponse.aidl
@@ -26,18 +26,18 @@
 @VintfStability
 oneway interface IRadioConfigResponse {
     /**
-     * @param info Response info struct containing response type, serial no. and error
+     * @param info Response info struct containing response type, serial number and error
      * @param modemReducedFeatureSet1 True indicates that the modem does NOT support the following
-     *        features.
-     *        - Providing either LinkCapacityEstimate:secondaryDownlinkCapacityKbps
-     *          or LinkCapacityEstimate:secondaryUplinkCapacityKbps when given from
-     *          RadioIndication:currentLinkCapacityEstimate
-     *        - Calling IRadio.setNrDualConnectivityState or querying
-     *          IRadio.isNrDualConnectivityEnabled
-     *        - Requesting IRadio.setDataThrottling()
-     *        - Providing SlicingConfig through getSlicingConfig()
+     *        features:
+     *        - Providing either LinkCapacityEstimate#secondaryDownlinkCapacityKbps
+     *          or LinkCapacityEstimate#secondaryUplinkCapacityKbps when given from
+     *          IRadioNetworkIndication#currentLinkCapacityEstimate
+     *        - Calling IRadioNetwork#setNrDualConnectivityState or querying
+     *          IRadioNetwork#isNrDualConnectivityEnabled
+     *        - Requesting IRadioData#setDataThrottling
+     *        - Providing SlicingConfig through IRadioData#getSlicingConfig
      *        - Providing PhysicalChannelConfig through
-     *          IRadioIndication.currentPhysicalChannelConfigs_1_6()
+     *          IRadioNetworkIndication#currentPhysicalChannelConfigs
      *
      * Valid errors returned:
      *   RadioError:REQUEST_NOT_SUPPORTED when android.hardware.telephony is not defined
@@ -49,7 +49,7 @@
             in android.hardware.radio.RadioResponseInfo info, in boolean modemReducedFeatureSet1);
 
     /**
-     * @param info Response info struct containing response type, serial no. and error
+     * @param info Response info struct containing response type, serial number and error
      * @param numOfLiveModems <byte> indicate the number of live modems i.e. modems that
      *        are enabled and actively working as part of a working connectivity stack
      *
@@ -62,8 +62,8 @@
             in android.hardware.radio.RadioResponseInfo info, in byte numOfLiveModems);
 
     /**
-     * @param info Response info struct containing response type, serial no. and error
-     * @param phoneCapability <PhoneCapability> it defines modem's capability for example
+     * @param info Response info struct containing response type, serial number and error
+     * @param phoneCapability <PhoneCapability> it defines the modem's capability. For example,
      *        how many logical modems it has, how many data connections it supports.
      *
      * Valid errors returned:
@@ -76,7 +76,7 @@
             in android.hardware.radio.RadioResponseInfo info, in PhoneCapability phoneCapability);
 
     /**
-     * @param info Response info struct containing response type, serial no. and error
+     * @param info Response info struct containing response type, serial number and error
      * @param slotStatus Sim slot struct containing all the physical SIM slots info with size
      *        equal to the number of physical slots on the device
      *
@@ -93,7 +93,7 @@
             in android.hardware.radio.RadioResponseInfo info, in SimSlotStatus[] slotStatus);
 
     /**
-     * @param info Response info struct containing response type, serial no. and error
+     * @param info Response info struct containing response type, serial number and error
      *
      * Valid errors returned:
      *   RadioError:REQUEST_NOT_SUPPORTED when android.hardware.telephony is not defined
@@ -104,7 +104,7 @@
     void setNumOfLiveModemsResponse(in android.hardware.radio.RadioResponseInfo info);
 
     /**
-     * @param info Response info struct containing response type, serial no. and error
+     * @param info Response info struct containing response type, serial number and error
      *
      * Valid errors returned:
      *   RadioError:REQUEST_NOT_SUPPORTED when android.hardware.telephony.data is not defined
@@ -116,7 +116,7 @@
     void setPreferredDataModemResponse(in android.hardware.radio.RadioResponseInfo info);
 
     /**
-     * @param info Response info struct containing response type, serial no. and error
+     * @param info Response info struct containing response type, serial number and error
      *
      * Valid errors returned:
      *   RadioError:REQUEST_NOT_SUPPORTED when android.hardware.telephony.subscription is not
@@ -134,7 +134,7 @@
      * Response to the asynchronous
      * {@link IRadioConfig#getSimultaneousCallingSupport} request.
      *
-     * @param info Response info struct containing response type, serial no. and error
+     * @param info Response info struct containing response type, serial number and error
      * @param enabledLogicalSlots The slots that have simultaneous cellular calling enabled. If
      * there is a call active on logical slot X, then a simultaneous cellular call is only possible
      * on logical slot Y if BOTH slot X and slot Y are in enabledLogicalSlots. If simultaneous
diff --git a/radio/aidl/android/hardware/radio/config/PhoneCapability.aidl b/radio/aidl/android/hardware/radio/config/PhoneCapability.aidl
index 7936eb6..265ab96 100644
--- a/radio/aidl/android/hardware/radio/config/PhoneCapability.aidl
+++ b/radio/aidl/android/hardware/radio/config/PhoneCapability.aidl
@@ -17,8 +17,8 @@
 package android.hardware.radio.config;
 
 /**
- * Phone capability which describes the data connection capability of modem.
- * It's used to evaluate possible phone config change, for example from single
+ * Phone capability which describes the data connection capability of the modem.
+ * It's used to evaluate a possible phone config change, for example, from single
  * SIM device to multi-SIM device.
  * @hide
  */
@@ -27,21 +27,18 @@
 parcelable PhoneCapability {
     const byte UNKNOWN = -1;
     /**
-     * maxActiveData defines how many logical modems can have
-     * PS attached simultaneously. For example, for L+L modem it
-     * should be 2.
+     * maxActiveData defines how many logical modems can have PS attached simultaneously. For
+     * example, for a L+L modem, it should be 2.
      */
     byte maxActiveData;
     /**
-     * maxActiveData defines how many logical modems can have
-     * internet PDN connections simultaneously. For example, for L+L
-     * DSDS modem it’s 1, and for DSDA modem it’s 2.
+     * maxActiveInternetData defines how many logical modems can have internet PDN connections
+     * simultaneously. For example, for a L+L DSDS modem, it’s 1, and for a DSDA modem, it’s 2.
      */
     byte maxActiveInternetData;
     /**
-     * Whether modem supports both internet PDN up so
-     * that we can do ping test before tearing down the
-     * other one.
+     * Whether the modem supports both internet PDNs up, so that we can do a ping test on one PDN
+     * before tearing down the other PDN.
      */
     boolean isInternetLingeringSupported;
     /**
@@ -49,9 +46,8 @@
      */
     byte[] logicalModemIds;
     /**
-     * maxActiveVoice defines how many logical modems can have
-     * cellular voice calls simultaneously. For example, for cellular DSDA
-     * with simultaneous calling support, it should be 2.
+     * maxActiveVoice defines how many logical modems can have cellular voice calls simultaneously.
+     * For example, for cellular DSDA with simultaneous calling support, it should be 2.
      */
     byte maxActiveVoice = UNKNOWN;
 }
diff --git a/radio/aidl/android/hardware/radio/config/SimPortInfo.aidl b/radio/aidl/android/hardware/radio/config/SimPortInfo.aidl
index f579639..380932e 100644
--- a/radio/aidl/android/hardware/radio/config/SimPortInfo.aidl
+++ b/radio/aidl/android/hardware/radio/config/SimPortInfo.aidl
@@ -21,8 +21,8 @@
 @JavaDerive(toString=true)
 parcelable SimPortInfo {
     /**
-     * Integrated Circuit Card IDentifier (ICCID) is unique identifier of the SIM card. File is
-     * located in the SIM card at EFiccid (0x2FE2) as per ETSI 102.221. The ICCID is defined by
+     * Integrated Circuit Card IDentifier (ICCID) is the unique identifier of the SIM card. The file
+     * is located in the SIM card at EFiccid (0x2FE2) as per ETSI 102.221. The ICCID is defined by
      * the ITU-T recommendation E.118 ISO/IEC 7816.
      *
      * This data is applicable only when cardState is CardStatus.STATE_PRESENT.
@@ -33,13 +33,13 @@
      */
     String iccId;
     /**
-     * Logical slot id is identifier of the active slot
+     * The identifier of the active slot.
      */
     int logicalSlotId;
     /**
      * Port active status in the slot.
-     * Inactive means logical modem is no longer associated to the port.
-     * Active means logical modem is associated to the port.
+     * Inactive means that the logical modem is no longer associated to the port.
+     * Active means that the logical modem is associated to the port.
      */
     boolean portActive;
 }
diff --git a/radio/aidl/android/hardware/radio/config/SimSlotStatus.aidl b/radio/aidl/android/hardware/radio/config/SimSlotStatus.aidl
index 34f98c5..171d97a 100644
--- a/radio/aidl/android/hardware/radio/config/SimSlotStatus.aidl
+++ b/radio/aidl/android/hardware/radio/config/SimSlotStatus.aidl
@@ -46,12 +46,12 @@
     String eid;
     /**
      * PortInfo contains the ICCID, logical slot ID, and port state.
-     * Cardstate has no relationship with whether the slot is active or inactive. Should always
-     * report up at least 1 port otherwise the logicalSlotIndex and portActive info will be lost.
+     * Cardstate has no relationship with whether the slot is active or inactive. At least one port
+     * shall always be reported, otherwise the logicalSlotIndex and portActive info will be lost.
      * For example, the pSIM can be removed, but the slot can still be active. In that case, the
      * SIM_STATUS reported for the corresponding logical stack will show CARDSTATE_ABSENT.
-     * Similarly, even if there is no profile enabled on the eSIM, that port can still be the
-     * active port in the slot mapping.
+     * Similarly, even if there is no profile enabled on the eSIM, that port can still be the active
+     * port in the slot mapping.
      */
     SimPortInfo[] portInfo;
     /**
diff --git a/radio/aidl/vts/Android.bp b/radio/aidl/vts/Android.bp
index e83a7c1..9521068 100644
--- a/radio/aidl/vts/Android.bp
+++ b/radio/aidl/vts/Android.bp
@@ -25,6 +25,7 @@
 cc_test {
     name: "VtsHalRadioTargetTest",
     defaults: [
+        "aconfig_lib_cc_shared_link.defaults",
         "VtsHalTargetTestDefaults",
         "use_libaidlvintf_gtest_helper_static",
     ],
diff --git a/security/keymint/support/fuzzer/keymint_attestation_fuzzer.cpp b/security/keymint/support/fuzzer/keymint_attestation_fuzzer.cpp
index bd781ac..1757997 100644
--- a/security/keymint/support/fuzzer/keymint_attestation_fuzzer.cpp
+++ b/security/keymint/support/fuzzer/keymint_attestation_fuzzer.cpp
@@ -151,7 +151,7 @@
 
 extern "C" int LLVMFuzzerInitialize(int /* *argc */, char /* ***argv */) {
     ::ndk::SpAIBinder binder(AServiceManager_waitForService(kServiceName.c_str()));
-    gKeyMint = std::move(IKeyMintDevice::fromBinder(binder));
+    gKeyMint = IKeyMintDevice::fromBinder(binder);
     LOG_ALWAYS_FATAL_IF(!gKeyMint, "Failed to get IKeyMintDevice instance.");
     return 0;
 }
diff --git a/security/keymint/support/include/remote_prov/remote_prov_utils.h b/security/keymint/support/include/remote_prov/remote_prov_utils.h
index 1d7db6a..b7c32ca 100644
--- a/security/keymint/support/include/remote_prov/remote_prov_utils.h
+++ b/security/keymint/support/include/remote_prov/remote_prov_utils.h
@@ -167,7 +167,8 @@
         const DeviceInfo& deviceInfo, const cppbor::Array& keysToSign,
         const std::vector<uint8_t>& keysToSignMac, const ProtectedData& protectedData,
         const EekChain& eekChain, const std::vector<uint8_t>& eekId, int32_t supportedEekCurve,
-        IRemotelyProvisionedComponent* provisionable, const std::vector<uint8_t>& challenge);
+        IRemotelyProvisionedComponent* provisionable, const std::vector<uint8_t>& challenge,
+        bool allowAnyMode = false);
 
 /**
  * Verify the CSR as if the device is still early in the factory process and may not
@@ -181,7 +182,8 @@
  */
 ErrMsgOr<std::unique_ptr<cppbor::Array>> verifyProductionCsr(
         const cppbor::Array& keysToSign, const std::vector<uint8_t>& csr,
-        IRemotelyProvisionedComponent* provisionable, const std::vector<uint8_t>& challenge);
+        IRemotelyProvisionedComponent* provisionable, const std::vector<uint8_t>& challenge,
+        bool allowAnyMode = false);
 
 /** Checks whether the CSR has a proper DICE chain. */
 ErrMsgOr<bool> isCsrWithProperDiceChain(const std::vector<uint8_t>& csr);
diff --git a/security/keymint/support/remote_prov_utils.cpp b/security/keymint/support/remote_prov_utils.cpp
index 6638775..646037c 100644
--- a/security/keymint/support/remote_prov_utils.cpp
+++ b/security/keymint/support/remote_prov_utils.cpp
@@ -325,9 +325,16 @@
 }
 
 ErrMsgOr<std::vector<BccEntryData>> validateBcc(const cppbor::Array* bcc,
-                                                hwtrust::DiceChain::Kind kind) {
+                                                hwtrust::DiceChain::Kind kind, bool allowAnyMode) {
     auto encodedBcc = bcc->encode();
-    auto chain = hwtrust::DiceChain::Verify(encodedBcc, kind);
+
+    // Use ro.build.type instead of ro.debuggable because ro.debuggable=1 for VTS testing
+    std::string build_type = ::android::base::GetProperty("ro.build.type", "");
+    if (!build_type.empty() && build_type != "user") {
+        allowAnyMode = true;
+    }
+
+    auto chain = hwtrust::DiceChain::Verify(encodedBcc, kind, allowAnyMode);
     if (!chain.ok()) return chain.error().message();
     auto keys = chain->CosePublicKeys();
     if (!keys.ok()) return keys.error().message();
@@ -638,7 +645,7 @@
         const std::vector<uint8_t>& keysToSignMac, const ProtectedData& protectedData,
         const EekChain& eekChain, const std::vector<uint8_t>& eekId, int32_t supportedEekCurve,
         IRemotelyProvisionedComponent* provisionable, const std::vector<uint8_t>& challenge,
-        bool isFactory) {
+        bool isFactory, bool allowAnyMode = false) {
     auto [parsedProtectedData, _, protDataErrMsg] = cppbor::parse(protectedData.protectedData);
     if (!parsedProtectedData) {
         return protDataErrMsg;
@@ -694,7 +701,7 @@
     }
 
     // BCC is [ pubkey, + BccEntry]
-    auto bccContents = validateBcc(bcc->asArray(), hwtrust::DiceChain::Kind::kVsr13);
+    auto bccContents = validateBcc(bcc->asArray(), hwtrust::DiceChain::Kind::kVsr13, allowAnyMode);
     if (!bccContents) {
         return bccContents.message() + "\n" + prettyPrint(bcc.get());
     }
@@ -747,10 +754,11 @@
         const DeviceInfo& deviceInfo, const cppbor::Array& keysToSign,
         const std::vector<uint8_t>& keysToSignMac, const ProtectedData& protectedData,
         const EekChain& eekChain, const std::vector<uint8_t>& eekId, int32_t supportedEekCurve,
-        IRemotelyProvisionedComponent* provisionable, const std::vector<uint8_t>& challenge) {
+        IRemotelyProvisionedComponent* provisionable, const std::vector<uint8_t>& challenge,
+        bool allowAnyMode) {
     return verifyProtectedData(deviceInfo, keysToSign, keysToSignMac, protectedData, eekChain,
                                eekId, supportedEekCurve, provisionable, challenge,
-                               /*isFactory=*/false);
+                               /*isFactory=*/false, allowAnyMode);
 }
 
 ErrMsgOr<X509_Ptr> parseX509Cert(const std::vector<uint8_t>& cert) {
@@ -974,20 +982,22 @@
 
 ErrMsgOr<hwtrust::DiceChain::Kind> getDiceChainKind() {
     int vendor_api_level = ::android::base::GetIntProperty("ro.vendor.api_level", -1);
-    switch (vendor_api_level) {
-        case __ANDROID_API_T__:
-            return hwtrust::DiceChain::Kind::kVsr13;
-        case __ANDROID_API_U__:
-            return hwtrust::DiceChain::Kind::kVsr14;
-        case 202404: /* TODO(b/315056516) Use a version macro for vendor API 24Q2 */
-            return hwtrust::DiceChain::Kind::kVsr15;
-        default:
-            return "Unsupported vendor API level: " + std::to_string(vendor_api_level);
+    if (vendor_api_level == __ANDROID_API_T__) {
+        return hwtrust::DiceChain::Kind::kVsr13;
+    } else if (vendor_api_level == __ANDROID_API_U__) {
+        return hwtrust::DiceChain::Kind::kVsr14;
+    } else if (vendor_api_level == 202404) {
+        return hwtrust::DiceChain::Kind::kVsr15;
+    } else if (vendor_api_level > 202404) {
+        return hwtrust::DiceChain::Kind::kVsr16;
+    } else {
+        return "Unsupported vendor API level: " + std::to_string(vendor_api_level);
     }
 }
 
 ErrMsgOr<bytevec> parseAndValidateAuthenticatedRequest(const std::vector<uint8_t>& request,
-                                                       const std::vector<uint8_t>& challenge) {
+                                                       const std::vector<uint8_t>& challenge,
+                                                       bool allowAnyMode = false) {
     auto [parsedRequest, _, csrErrMsg] = cppbor::parse(request);
     if (!parsedRequest) {
         return csrErrMsg;
@@ -1025,7 +1035,7 @@
         return diceChainKind.message();
     }
 
-    auto diceContents = validateBcc(diceCertChain, *diceChainKind);
+    auto diceContents = validateBcc(diceCertChain, *diceChainKind, allowAnyMode);
     if (!diceContents) {
         return diceContents.message() + "\n" + prettyPrint(diceCertChain);
     }
@@ -1054,7 +1064,7 @@
                                                    const std::vector<uint8_t>& csr,
                                                    IRemotelyProvisionedComponent* provisionable,
                                                    const std::vector<uint8_t>& challenge,
-                                                   bool isFactory) {
+                                                   bool isFactory, bool allowAnyMode = false) {
     RpcHardwareInfo info;
     provisionable->getHardwareInfo(&info);
     if (info.versionNumber != 3) {
@@ -1062,7 +1072,7 @@
                ") does not match expected version (3).";
     }
 
-    auto csrPayload = parseAndValidateAuthenticatedRequest(csr, challenge);
+    auto csrPayload = parseAndValidateAuthenticatedRequest(csr, challenge, allowAnyMode);
     if (!csrPayload) {
         return csrPayload.message();
     }
@@ -1078,8 +1088,9 @@
 
 ErrMsgOr<std::unique_ptr<cppbor::Array>> verifyProductionCsr(
         const cppbor::Array& keysToSign, const std::vector<uint8_t>& csr,
-        IRemotelyProvisionedComponent* provisionable, const std::vector<uint8_t>& challenge) {
-    return verifyCsr(keysToSign, csr, provisionable, challenge, /*isFactory=*/false);
+        IRemotelyProvisionedComponent* provisionable, const std::vector<uint8_t>& challenge,
+        bool allowAnyMode) {
+    return verifyCsr(keysToSign, csr, provisionable, challenge, /*isFactory=*/false, allowAnyMode);
 }
 
 ErrMsgOr<bool> isCsrWithProperDiceChain(const std::vector<uint8_t>& csr) {
@@ -1113,7 +1124,8 @@
     }
 
     auto encodedDiceChain = diceCertChain->encode();
-    auto chain = hwtrust::DiceChain::Verify(encodedDiceChain, *diceChainKind);
+    auto chain =
+            hwtrust::DiceChain::Verify(encodedDiceChain, *diceChainKind, /*allowAnyMode=*/false);
     if (!chain.ok()) return chain.error().message();
     return chain->IsProper();
 }
diff --git a/security/rkp/aidl/android/hardware/security/keymint/generateCertificateRequestV2.cddl b/security/rkp/aidl/android/hardware/security/keymint/generateCertificateRequestV2.cddl
index 3c43238..40cf685 100644
--- a/security/rkp/aidl/android/hardware/security/keymint/generateCertificateRequestV2.cddl
+++ b/security/rkp/aidl/android/hardware/security/keymint/generateCertificateRequestV2.cddl
@@ -62,9 +62,13 @@
 SignerName = tstr
 
 UdsCertChain = [
-    2* X509Certificate      ; Root -> ... -> Leaf. "Root" is the vendor self-signed
-                            ; cert, "Leaf" contains UDS_Public. There may also be
-                            ; intermediate certificates between Root and Leaf.
+    + X509Certificate       ; Root -> ... -> Leaf. "Root" is the vendor self-signed
+                            ; cert, "Leaf" contains UDS_Public. It's recommended to
+                            ; have at least 3 certificates in the chain.
+                            ; The Root certificate is recommended to be generated in an air-gapped,
+                            ; HSM-based secure environment. The intermediate signing keys may be
+                            ; online, and should be rotated regularly (e.g. annually). Additionally,
+                            ; the intermediate certificates may contain product family identifiers.
 ]
 
 ; A bstr containing a DER-encoded X.509 certificate (RSA, NIST P-curve, or EdDSA)
diff --git a/security/rkp/aidl/vts/functional/VtsRemotelyProvisionedComponentTests.cpp b/security/rkp/aidl/vts/functional/VtsRemotelyProvisionedComponentTests.cpp
index 2dbc73f..f68ff91 100644
--- a/security/rkp/aidl/vts/functional/VtsRemotelyProvisionedComponentTests.cpp
+++ b/security/rkp/aidl/vts/functional/VtsRemotelyProvisionedComponentTests.cpp
@@ -188,7 +188,8 @@
         }
         ASSERT_NE(provisionable_, nullptr);
         auto status = provisionable_->getHardwareInfo(&rpcHardwareInfo);
-        if (GetParam() == RKP_VM_INSTANCE_NAME) {
+        isRkpVmInstance_ = GetParam() == RKP_VM_INSTANCE_NAME;
+        if (isRkpVmInstance_) {
             if (status.getExceptionCode() == EX_UNSUPPORTED_OPERATION) {
                 GTEST_SKIP() << "The RKP VM is not supported on this system.";
             }
@@ -209,6 +210,7 @@
   protected:
     std::shared_ptr<IRemotelyProvisionedComponent> provisionable_;
     RpcHardwareInfo rpcHardwareInfo;
+    bool isRkpVmInstance_;
 };
 
 /**
@@ -765,7 +767,8 @@
                 provisionable_->generateCertificateRequestV2({} /* keysToSign */, challenge, &csr);
         ASSERT_TRUE(status.isOk()) << status.getDescription();
 
-        auto result = verifyProductionCsr(cppbor::Array(), csr, provisionable_.get(), challenge);
+        auto result = verifyProductionCsr(cppbor::Array(), csr, provisionable_.get(), challenge,
+                                          isRkpVmInstance_);
         ASSERT_TRUE(result) << result.message();
     }
 }
@@ -786,7 +789,8 @@
         auto status = provisionable_->generateCertificateRequestV2(keysToSign_, challenge, &csr);
         ASSERT_TRUE(status.isOk()) << status.getDescription();
 
-        auto result = verifyProductionCsr(cborKeysToSign_, csr, provisionable_.get(), challenge);
+        auto result = verifyProductionCsr(cborKeysToSign_, csr, provisionable_.get(), challenge,
+                                          isRkpVmInstance_);
         ASSERT_TRUE(result) << result.message();
     }
 }
@@ -816,13 +820,15 @@
     auto status = provisionable_->generateCertificateRequestV2(keysToSign_, challenge_, &csr);
     ASSERT_TRUE(status.isOk()) << status.getDescription();
 
-    auto firstCsr = verifyProductionCsr(cborKeysToSign_, csr, provisionable_.get(), challenge_);
+    auto firstCsr = verifyProductionCsr(cborKeysToSign_, csr, provisionable_.get(), challenge_,
+                                        isRkpVmInstance_);
     ASSERT_TRUE(firstCsr) << firstCsr.message();
 
     status = provisionable_->generateCertificateRequestV2(keysToSign_, challenge_, &csr);
     ASSERT_TRUE(status.isOk()) << status.getDescription();
 
-    auto secondCsr = verifyProductionCsr(cborKeysToSign_, csr, provisionable_.get(), challenge_);
+    auto secondCsr = verifyProductionCsr(cborKeysToSign_, csr, provisionable_.get(), challenge_,
+                                         isRkpVmInstance_);
     ASSERT_TRUE(secondCsr) << secondCsr.message();
 
     ASSERT_EQ(**firstCsr, **secondCsr);
@@ -840,7 +846,8 @@
     auto status = provisionable_->generateCertificateRequestV2(keysToSign_, challenge_, &csr);
     ASSERT_TRUE(status.isOk()) << status.getDescription();
 
-    auto result = verifyProductionCsr(cborKeysToSign_, csr, provisionable_.get(), challenge_);
+    auto result = verifyProductionCsr(cborKeysToSign_, csr, provisionable_.get(), challenge_,
+                                      isRkpVmInstance_);
     ASSERT_TRUE(result) << result.message();
 }
 
diff --git a/staging/security/see/hwcrypto/aidl/Android.bp b/staging/security/see/hwcrypto/aidl/Android.bp
index 3e7ee9e..0a7e8be 100644
--- a/staging/security/see/hwcrypto/aidl/Android.bp
+++ b/staging/security/see/hwcrypto/aidl/Android.bp
@@ -10,6 +10,8 @@
 aidl_interface {
     name: "android.hardware.security.see",
     unstable: false,
+    // TODO Remove this owner field when this interface is moved out of /staging
+    owner: "google_while_staging",
     host_supported: true,
     srcs: [
         "android/hardware/security/see/hwcrypto/*.aidl",
diff --git a/staging/security/see/storage/aidl/android/hardware/security/see/storage/FileAvailability.aidl b/staging/security/see/storage/aidl/android/hardware/security/see/storage/Availability.aidl
similarity index 97%
rename from staging/security/see/storage/aidl/android/hardware/security/see/storage/FileAvailability.aidl
rename to staging/security/see/storage/aidl/android/hardware/security/see/storage/Availability.aidl
index d339170..21a275c 100644
--- a/staging/security/see/storage/aidl/android/hardware/security/see/storage/FileAvailability.aidl
+++ b/staging/security/see/storage/aidl/android/hardware/security/see/storage/Availability.aidl
@@ -16,7 +16,7 @@
 package android.hardware.security.see.storage;
 
 /** Determines how early during the boot process file is able to be accessed. */
-enum FileAvailability {
+enum Availability {
     /** Available before userdata is mounted, but after android has booted. */
     BEFORE_USERDATA,
 
diff --git a/staging/security/see/storage/aidl/android/hardware/security/see/storage/DeleteOptions.aidl b/staging/security/see/storage/aidl/android/hardware/security/see/storage/DeleteOptions.aidl
deleted file mode 100644
index 1a94eb2..0000000
--- a/staging/security/see/storage/aidl/android/hardware/security/see/storage/DeleteOptions.aidl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.hardware.security.see.storage;
-
-import android.hardware.security.see.storage.ReadIntegrity;
-
-parcelable DeleteOptions {
-    /**
-     * Set to acknowledge possible files tampering.
-     *
-     * If unacknowledged tampering is detected, the operation will fail with an ERR_FS_*
-     * service-specific code.
-     */
-    ReadIntegrity readIntegrity = ReadIntegrity.NO_TAMPER;
-
-    /**
-     * Allow writes to succeed while the filesystem is in the middle of an A/B update.
-     *
-     * If the A/B update fails, the operation will be rolled back. This rollback will not
-     * cause subsequent operations fail with any ERR_FS_* code nor will need to be
-     * acknowledged by setting the `readIntegrity`.
-     */
-    boolean allowWritesDuringAbUpdate = false;
-}
diff --git a/staging/security/see/storage/aidl/android/hardware/security/see/storage/FileProperties.aidl b/staging/security/see/storage/aidl/android/hardware/security/see/storage/FileProperties.aidl
deleted file mode 100644
index 733b5b0..0000000
--- a/staging/security/see/storage/aidl/android/hardware/security/see/storage/FileProperties.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.hardware.security.see.storage;
-
-import android.hardware.security.see.storage.FileAvailability;
-import android.hardware.security.see.storage.FileIntegrity;
-
-parcelable FileProperties {
-    FileIntegrity integrity = FileIntegrity.TAMPER_PROOF_AT_REST;
-    FileAvailability availability = FileAvailability.BEFORE_USERDATA;
-
-    /** Whether the file is reset when user data is wiped. */
-    boolean persistent;
-}
diff --git a/staging/security/see/storage/aidl/android/hardware/security/see/storage/Filesystem.aidl b/staging/security/see/storage/aidl/android/hardware/security/see/storage/Filesystem.aidl
new file mode 100644
index 0000000..ea8db53
--- /dev/null
+++ b/staging/security/see/storage/aidl/android/hardware/security/see/storage/Filesystem.aidl
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.hardware.security.see.storage;
+
+import android.hardware.security.see.storage.Availability;
+import android.hardware.security.see.storage.Integrity;
+
+/**
+ * Specifies minimum security requirements for a Secure Storage filesystem.
+ */
+parcelable Filesystem {
+    Integrity integrity = Integrity.TAMPER_PROOF_AT_REST;
+    Availability availability = Availability.BEFORE_USERDATA;
+
+    /**
+     * Whether the file is reset on factory resets. Factory resets will not be reported as
+     * tampering.
+     */
+    boolean persistent;
+}
diff --git a/staging/security/see/storage/aidl/android/hardware/security/see/storage/IDir.aidl b/staging/security/see/storage/aidl/android/hardware/security/see/storage/IDir.aidl
index a0a9f3d..5d9a761 100644
--- a/staging/security/see/storage/aidl/android/hardware/security/see/storage/IDir.aidl
+++ b/staging/security/see/storage/aidl/android/hardware/security/see/storage/IDir.aidl
@@ -26,15 +26,15 @@
      *
      * @maxCount:
      *     the maximum number of filenames to return. A @maxCount of 0 signifies no limit on the
-     * number of filenames returned.
+     *     number of filenames returned.
      *
      * Returns:
      *     An ordered list of filenames. If @maxCount > 0, the length of the returned list will be
-     * less than or equal to @maxCount.
+     *     less than or equal to @maxCount.
      *
      * May return service-specific errors:
-     *   - ERR_FS_* if the filesystem has been tampered with in a way that the `readIntegrity` the
-     *       dir was opened with does not acknowledge
+     *   - ERR_FS_* if the filesystem has been tampered with in a way that the session did not
+     *       acknowledge
      */
     @utf8InCpp String[] readNextFilenames(int maxCount);
 }
diff --git a/staging/security/see/storage/aidl/android/hardware/security/see/storage/IFile.aidl b/staging/security/see/storage/aidl/android/hardware/security/see/storage/IFile.aidl
index ff26aa4..fd2032e 100644
--- a/staging/security/see/storage/aidl/android/hardware/security/see/storage/IFile.aidl
+++ b/staging/security/see/storage/aidl/android/hardware/security/see/storage/IFile.aidl
@@ -32,8 +32,8 @@
      *     the sequence of bytes at [offset, offset + size) in the file
      *
      * May return service-specific errors:
-     *   - ERR_FS_* if the filesystem has been tampered with in a way that the `readIntegrity` the
-     *       file was opened with does not acknowledge
+     *   - ERR_FS_* if the filesystem has been tampered with in a way that the session did not
+     *       acknowledge
      */
     byte[] read(long size, long offset);
 
@@ -47,8 +47,8 @@
      *     the number of bytes written successfully
      *
      * May return service-specific errors:
-     *   - ERR_FS_* if the filesystem has been tampered with in a way that the `readIntegrity` the
-     *       file was opened with does not acknowledge
+     *   - ERR_FS_* if the filesystem has been tampered with in a way that the session did not
+     *       acknowledge
      */
     long write(long offset, in byte[] buffer);
 
@@ -56,8 +56,8 @@
      * Reads this file's size.
      *
      * May return service-specific errors:
-     *   - ERR_FS_* if the filesystem has been tampered with in a way that the `readIntegrity` the
-     *       file was opened with does not acknowledge
+     *   - ERR_FS_* if the filesystem has been tampered with in a way that the session did not
+     *       acknowledge
      */
     long getSize();
 
@@ -71,8 +71,8 @@
      *     the file's new size
      *
      * May return service-specific errors:
-     *   - ERR_FS_* if the filesystem has been tampered with in a way that the `readIntegrity` the
-     *       file was opened with does not acknowledge
+     *   - ERR_FS_* if the filesystem has been tampered with in a way that the session did not
+     *       acknowledge
      */
     void setSize(long newSize);
 
@@ -88,8 +88,8 @@
      *   - ERR_NOT_FOUND if no file exists at @destPath and @destCreateMode is `NO_CREATE`
      *   - ERR_ALREADY_EXISTS if a file already exists at @destPath and @destCreateMode is
      *       `CREATE_EXCLUSIVE`
-     *   - ERR_FS_* if the filesystem has been tampered with in a way that the `readIntegrity` the
-     *       file was opened with does not acknowledge
+     *   - ERR_FS_* if the filesystem has been tampered with in a way that the session did not
+     *       acknowledge
      */
     void rename(in @utf8InCpp String destPath, in CreationMode destCreateMode);
 }
diff --git a/staging/security/see/storage/aidl/android/hardware/security/see/storage/ISecureStorage.aidl b/staging/security/see/storage/aidl/android/hardware/security/see/storage/ISecureStorage.aidl
index be3c045..022de9a 100644
--- a/staging/security/see/storage/aidl/android/hardware/security/see/storage/ISecureStorage.aidl
+++ b/staging/security/see/storage/aidl/android/hardware/security/see/storage/ISecureStorage.aidl
@@ -15,7 +15,7 @@
  */
 package android.hardware.security.see.storage;
 
-import android.hardware.security.see.storage.FileProperties;
+import android.hardware.security.see.storage.Filesystem;
 import android.hardware.security.see.storage.IStorageSession;
 
 /**
@@ -28,20 +28,18 @@
     const int ERR_NOT_FOUND = 2;
     const int ERR_ALREADY_EXISTS = 3;
     const int ERR_BAD_TRANSACTION = 4;
-
-    const int ERR_FS_RESET = 5;
-    const int ERR_FS_ROLLED_BACK = 6;
-    const int ERR_FS_TAMPERED = 7;
+    const int ERR_AB_UPDATE_IN_PROGRESS = 5;
+    const int ERR_FS_TAMPERED = 6;
 
     /**
      * Starts a storage session for a filesystem.
      *
-     * @properties:
-     *     the minimum filesystem properties requested for the session.
+     * @filesystem:
+     *     The minimum filesystem properties requested.
      *
      * May return service-specific errors:
      *   - ERR_UNSUPPORTED_PROPERTIES if no filesystems exist which meet the minimum requested
-     * requirements
+     *       requirements
      */
-    IStorageSession startSession(in FileProperties properties);
+    IStorageSession startSession(in Filesystem filesystem);
 }
diff --git a/staging/security/see/storage/aidl/android/hardware/security/see/storage/IStorageSession.aidl b/staging/security/see/storage/aidl/android/hardware/security/see/storage/IStorageSession.aidl
index cd126b8..1b70a0e 100644
--- a/staging/security/see/storage/aidl/android/hardware/security/see/storage/IStorageSession.aidl
+++ b/staging/security/see/storage/aidl/android/hardware/security/see/storage/IStorageSession.aidl
@@ -15,12 +15,10 @@
  */
 package android.hardware.security.see.storage;
 
-import android.hardware.security.see.storage.DeleteOptions;
+import android.hardware.security.see.storage.CreationMode;
 import android.hardware.security.see.storage.IDir;
 import android.hardware.security.see.storage.IFile;
 import android.hardware.security.see.storage.OpenOptions;
-import android.hardware.security.see.storage.ReadIntegrity;
-import android.hardware.security.see.storage.RenameOptions;
 
 /**
  * Interface for a Secure Storage session
@@ -66,8 +64,8 @@
      * May return service-specific errors:
      *   - ERR_NOT_FOUND
      *   - ERR_ALREADY_EXISTS
-     *   - ERR_FS_* if the filesystem has been tampered with in a way that @options.readIntegrity
-     *       does not acknowledge
+     *   - ERR_FS_* if the filesystem has been tampered with in a way that the session did not
+     *       acknowledge
      */
     IFile openFile(in @utf8InCpp String filePath, in OpenOptions options);
 
@@ -81,10 +79,10 @@
      *
      * May return service-specific errors:
      *   - ERR_NOT_FOUND
-     *   - ERR_FS_* if the filesystem has been tampered with in a way that @options.readIntegrity
-     *       does not acknowledge
+     *   - ERR_FS_* if the filesystem has been tampered with in a way that the session did not
+     *       acknowledge
      */
-    void deleteFile(in @utf8InCpp String filePath, in DeleteOptions options);
+    void deleteFile(in @utf8InCpp String filePath);
 
     /**
      * Renames an existing file.
@@ -95,19 +93,19 @@
      *     path to the file, relative to filesystem root
      * @destPath:
      *     the file's new path, relative to filesystem root
-     * @options:
-     *     options controlling rename behavior
+     * @destCreateMode:
+     *     creation behavior for the dest file
      *
      * May return service-specific errors:
-     *   - ERR_NOT_FOUND if no file exists at @currentPath, or if @options.destCreateMode is
-     *       `NO_CREATE` and no file exists at @destPath
-     *   - ERR_ALREADY_EXISTS if @options.destCreateMode is `CREATE_EXCLUSIVE` and a file exists at
+     *   - ERR_NOT_FOUND if no file exists at @currentPath, or if @destCreateMode is `NO_CREATE` and
+     *       no file exists at @destPath
+     *   - ERR_ALREADY_EXISTS if @destCreateMode is `CREATE_EXCLUSIVE` and a file exists at
      *       @destPath
-     *   - ERR_FS_* if the filesystem has been tampered with in a way that @options.readIntegrity
-     *       does not acknowledge
+     *   - ERR_FS_* if the filesystem has been tampered with in a way that the session did not
+     *       acknowledge
      */
     void renameFile(in @utf8InCpp String currentPath, in @utf8InCpp String destPath,
-            in RenameOptions options);
+            in CreationMode destCreateMode);
 
     /**
      * Opens a directory from a filesystem with the given properties.
@@ -116,14 +114,11 @@
      *
      * @path:
      *     path to the directory, relative to filesystem root
-     * @readIntegrity:
-     *     allow opening (and subsequent read/write operations) despite possible tampering for the
-     * directory
      *
      * May return service-specific errors:
      *   - ERR_NOT_FOUND
-     *   - ERR_FS_* if the filesystem has been tampered with in a way that @readIntegrity does not
+     *   - ERR_FS_* if the filesystem has been tampered with in a way that the session did not
      *       acknowledge
      */
-    IDir openDir(in @utf8InCpp String path, in ReadIntegrity readIntegrity);
+    IDir openDir(in @utf8InCpp String path);
 }
diff --git a/staging/security/see/storage/aidl/android/hardware/security/see/storage/FileIntegrity.aidl b/staging/security/see/storage/aidl/android/hardware/security/see/storage/Integrity.aidl
similarity index 83%
rename from staging/security/see/storage/aidl/android/hardware/security/see/storage/FileIntegrity.aidl
rename to staging/security/see/storage/aidl/android/hardware/security/see/storage/Integrity.aidl
index 1879b16..2f7f7ab 100644
--- a/staging/security/see/storage/aidl/android/hardware/security/see/storage/FileIntegrity.aidl
+++ b/staging/security/see/storage/aidl/android/hardware/security/see/storage/Integrity.aidl
@@ -15,7 +15,7 @@
  */
 package android.hardware.security.see.storage;
 
-enum FileIntegrity {
+enum Integrity {
     /** REE may prevent operations, but cannot alter data once written. */
     TAMPER_PROOF_AT_REST,
 
@@ -24,10 +24,4 @@
      * an error on read.
      */
     TAMPER_DETECT,
-
-    /**
-     * REE may alter written data. Changes other than full filesystem resets will be detected and
-     * reported.
-     */
-    TAMPER_DETECT_IGNORE_RESET,
 }
diff --git a/staging/security/see/storage/aidl/android/hardware/security/see/storage/OpenOptions.aidl b/staging/security/see/storage/aidl/android/hardware/security/see/storage/OpenOptions.aidl
index 997ca62..9fdf9e5 100644
--- a/staging/security/see/storage/aidl/android/hardware/security/see/storage/OpenOptions.aidl
+++ b/staging/security/see/storage/aidl/android/hardware/security/see/storage/OpenOptions.aidl
@@ -17,7 +17,6 @@
 
 import android.hardware.security.see.storage.CreationMode;
 import android.hardware.security.see.storage.FileMode;
-import android.hardware.security.see.storage.ReadIntegrity;
 
 parcelable OpenOptions {
     /** Controls creation behavior of the to-be-opened file. See `CreationMode` docs for details. */
@@ -27,25 +26,8 @@
     FileMode accessMode = FileMode.READ_WRITE;
 
     /**
-     * Set to acknowledge possible files tampering.
-     *
-     * If unacknowledged tampering is detected, the operation will fail with an ERR_FS_*
-     * service-specific code.
-     */
-    ReadIntegrity readIntegrity = ReadIntegrity.NO_TAMPER;
-
-    /**
      * If this file already exists, discard existing content and open
      * it as a new file. No semantic change if the file does not exist.
      */
     boolean truncateOnOpen;
-
-    /**
-     * Allow writes to succeed while the filesystem is in the middle of an A/B update.
-     *
-     * If the A/B update fails, the operation will be rolled back. This rollback will not
-     * cause subsequent operations fail with any ERR_FS_* code nor will need to be
-     * acknowledged by setting the `readIntegrity`.
-     */
-    boolean allowWritesDuringAbUpdate = false;
 }
diff --git a/staging/security/see/storage/aidl/android/hardware/security/see/storage/ReadIntegrity.aidl b/staging/security/see/storage/aidl/android/hardware/security/see/storage/ReadIntegrity.aidl
deleted file mode 100644
index cc0e4f9..0000000
--- a/staging/security/see/storage/aidl/android/hardware/security/see/storage/ReadIntegrity.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.hardware.security.see.storage;
-
-enum ReadIntegrity {
-    /**
-     * Return an error on reads if any REE alteration of the written data
-     * has been detected.
-     */
-    NO_TAMPER,
-
-    /**
-     * Return an error on reads if any REE alteration other than a reset
-     * has been detected.
-     */
-    IGNORE_RESET,
-
-    /**
-     * Return an error if any REE alteration other than a rollback to a
-     * valid checkpoint has been detected. (What makes a checkpoint valid is
-     * implementation defined; an implementation might take a checkpoint on its
-     * first post-factory boot. A reset is a rollback to the initial state.)
-     */
-    IGNORE_ROLLBACK,
-
-    // There's no `IGNORE_ALL` because if REE has done any alteration other
-    // than a rollback, the file contents will be known-bad data.
-}
diff --git a/staging/security/see/storage/aidl/android/hardware/security/see/storage/RenameOptions.aidl b/staging/security/see/storage/aidl/android/hardware/security/see/storage/RenameOptions.aidl
deleted file mode 100644
index f55ea7f..0000000
--- a/staging/security/see/storage/aidl/android/hardware/security/see/storage/RenameOptions.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.hardware.security.see.storage;
-
-import android.hardware.security.see.storage.CreationMode;
-import android.hardware.security.see.storage.ReadIntegrity;
-
-parcelable RenameOptions {
-    /** Controls creation behavior of the dest file. See `CreationMode` docs for details. */
-    CreationMode destCreateMode = CreationMode.CREATE_EXCLUSIVE;
-
-    /**
-     * Set to acknowledge possible files tampering.
-     *
-     * If unacknowledged tampering is detected, the operation will fail with an ERR_FS_*
-     * service-specific code.
-     */
-    ReadIntegrity readIntegrity = ReadIntegrity.NO_TAMPER;
-
-    /**
-     * Allow writes to succeed while the filesystem is in the middle of an A/B update.
-     *
-     * If the A/B update fails, the operation will be rolled back. This rollback will not
-     * cause subsequent operations fail with any ERR_FS_* code nor will need to be
-     * acknowledged by setting the `readIntegrity`.
-     */
-    boolean allowWritesDuringAbUpdate = false;
-}
diff --git a/staging/security/see/storage/aidl/android/hardware/security/see/storage/Tamper.aidl b/staging/security/see/storage/aidl/android/hardware/security/see/storage/Tamper.aidl
deleted file mode 100644
index 0a39fdd..0000000
--- a/staging/security/see/storage/aidl/android/hardware/security/see/storage/Tamper.aidl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.hardware.security.see.storage;
-
-/** Specifies types of REE tampering the filesystem may detect */
-enum Tamper {
-    /** REE has reset this file or the containing file system. */
-    RESET,
-
-    /** REE has rolled back this file or the containing file system to a previous state. */
-    ROLLBACK,
-
-    /** REE has made some other modification to the file. */
-    OTHER,
-}
diff --git a/tests/msgq/1.0/ITestMsgQ.hal b/tests/msgq/1.0/ITestMsgQ.hal
index 0cf9c7c..62bef0a 100644
--- a/tests/msgq/1.0/ITestMsgQ.hal
+++ b/tests/msgq/1.0/ITestMsgQ.hal
@@ -18,8 +18,8 @@
 
 interface ITestMsgQ {
     enum EventFlagBits : uint32_t {
-        FMQ_NOT_EMPTY = 1 << 0,
-        FMQ_NOT_FULL  = 1 << 1,
+        FMQ_NOT_FULL = 1 << 0,
+        FMQ_NOT_EMPTY  = 1 << 1,
     };
 
     /**
diff --git a/tests/msgq/TEST_MAPPING b/tests/msgq/TEST_MAPPING
new file mode 100644
index 0000000..51c6c97
--- /dev/null
+++ b/tests/msgq/TEST_MAPPING
@@ -0,0 +1,18 @@
+{
+  "presubmit": [
+    {
+      "name": "fmq_unit_tests"
+    },
+    {
+      "name": "fmq_test"
+    }
+  ],
+  "hwasan-presubmit": [
+    {
+      "name": "fmq_unit_tests"
+    },
+    {
+      "name": "fmq_test"
+    }
+  ]
+}
diff --git a/threadnetwork/aidl/default/Android.bp b/threadnetwork/aidl/default/Android.bp
index 82a76e0..51e5c25 100644
--- a/threadnetwork/aidl/default/Android.bp
+++ b/threadnetwork/aidl/default/Android.bp
@@ -90,10 +90,20 @@
     installable: false,
 }
 
+filegroup {
+    name: "com.android.hardware.threadnetwork_manifest",
+    srcs: ["manifest.json"],
+}
+
+filegroup {
+    name: "com.android.hardware.threadnetwork_file_contexts",
+    srcs: ["file_contexts"],
+}
+
 apex {
     name: "com.android.hardware.threadnetwork",
-    manifest: "manifest.json",
-    file_contexts: "file_contexts",
+    manifest: ":com.android.hardware.threadnetwork_manifest",
+    file_contexts: ":com.android.hardware.threadnetwork_file_contexts",
     key: "com.android.hardware.key",
     certificate: ":com.android.hardware.certificate",
     updatable: false,
@@ -110,3 +120,21 @@
         "android.hardware.thread_network.prebuilt.xml", // permission
     ],
 }
+
+prebuilt_etc {
+    name: "threadnetwork-service-simulation-rcp.rc",
+    src: "threadnetwork-service-simulation-rcp.rc",
+    installable: false,
+}
+
+// Thread HAL service which uses a simulation RCP (i.e. ot-rcp),
+// typically used in emulator devices.
+override_apex {
+    name: "com.android.hardware.threadnetwork-simulation-rcp",
+    base: "com.android.hardware.threadnetwork",
+    prebuilts: [
+        "threadnetwork-service-simulation-rcp.rc",
+        "threadnetwork-default.xml",
+        "android.hardware.thread_network.prebuilt.xml",
+    ],
+}
diff --git a/threadnetwork/aidl/default/threadnetwork-service-simulation-rcp.rc b/threadnetwork/aidl/default/threadnetwork-service-simulation-rcp.rc
new file mode 100644
index 0000000..3b889eb
--- /dev/null
+++ b/threadnetwork/aidl/default/threadnetwork-service-simulation-rcp.rc
@@ -0,0 +1,3 @@
+service vendor.threadnetwork_hal /apex/com.android.hardware.threadnetwork/bin/hw/android.hardware.threadnetwork-service spinel+hdlc+forkpty:///apex/com.android.hardware.threadnetwork/bin/ot-rcp?forkpty-arg=1
+    class hal
+    user thread_network
diff --git a/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl b/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
index 58919d1..09cdc26 100644
--- a/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
+++ b/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
@@ -35,6 +35,7 @@
 @Backing(type="int") @VintfStability
 enum UwbVendorCapabilityTlvTypes {
   SUPPORTED_POWER_STATS_QUERY = 0xC0,
+  SUPPORTED_ANTENNA_MODES = 0xC1,
   CCC_SUPPORTED_CHAPS_PER_SLOT = 0xA0,
   CCC_SUPPORTED_SYNC_CODES = 0xA1,
   CCC_SUPPORTED_HOPPING_CONFIG_MODES_AND_SEQUENCES = 0xA2,
diff --git a/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvValues.aidl b/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvValues.aidl
index 702e561..d9b7220 100644
--- a/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvValues.aidl
+++ b/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvValues.aidl
@@ -34,6 +34,8 @@
 package android.hardware.uwb.fira_android;
 @Backing(type="long") @VintfStability
 enum UwbVendorCapabilityTlvValues {
+  ANTENNA_MODE_OMNI = 1,
+  ANTENNA_MODE_DIRECTIONAL = (1 << 1) /* 2 */,
   UWB_CONFIG_0 = 0,
   UWB_CONFIG_1 = 1,
   PULSE_SHAPE_SYMMETRICAL_ROOT_RAISED_COSINE = 0,
diff --git a/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl b/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
index 4df45b6..28e44ef 100644
--- a/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
+++ b/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
@@ -41,6 +41,13 @@
      */
     SUPPORTED_POWER_STATS_QUERY = 0xC0,
 
+    /**
+     * 1 byte bitmask to indicate which antennas modes are supported.
+     * 0x01 = "Omni mode",
+     * 0x02 = "Directional mode",
+     */
+    SUPPORTED_ANTENNA_MODES = 0xC1,
+
     /*********************************************
      * CCC specific
      ********************************************/
diff --git a/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvValues.aidl b/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvValues.aidl
index 6ef52fe..e5165dc 100644
--- a/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvValues.aidl
+++ b/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvValues.aidl
@@ -25,6 +25,12 @@
 @Backing(type="long")
 enum UwbVendorCapabilityTlvValues {
     /*********************************************
+     * Protocol agnostic
+     ********************************************/
+    ANTENNA_MODE_OMNI = 1,
+    ANTENNA_MODE_DIRECTIONAL = 1 << 1,
+
+    /*********************************************
      * CCC specific
      ********************************************/
     UWB_CONFIG_0 = 0,
diff --git a/weaver/vts/VtsHalWeaverTargetTest.cpp b/weaver/vts/VtsHalWeaverTargetTest.cpp
index 40e9558..8952dfc 100644
--- a/weaver/vts/VtsHalWeaverTargetTest.cpp
+++ b/weaver/vts/VtsHalWeaverTargetTest.cpp
@@ -221,7 +221,10 @@
         }
     }
     // Starting in Android 14, the system will always use at least one Weaver slot if Weaver is
-    // supported at all.  Make sure we saw at least one.
+    // supported at all.  This is true even if an LSKF hasn't been set yet, since Weaver is used to
+    // protect the initial binding of each user's synthetic password to ensure that binding can be
+    // securely deleted if an LSKF is set later.  Make sure we saw at least one slot, as otherwise
+    // the Weaver implementation must have a bug that makes it not fully usable by Android.
     ASSERT_FALSE(used_slots.empty())
             << "Could not determine which Weaver slots are in use by the system";
 
diff --git a/wifi/aidl/default/Android.bp b/wifi/aidl/default/Android.bp
index 362ef1b..2047807 100644
--- a/wifi/aidl/default/Android.bp
+++ b/wifi/aidl/default/Android.bp
@@ -218,3 +218,8 @@
     name: "default-android.hardware.wifi-service.xml",
     srcs: ["android.hardware.wifi-service.xml"],
 }
+
+filegroup {
+    name: "default-android.hardware.wifi-service-lazy.rc",
+    srcs: ["android.hardware.wifi-service-lazy.rc"],
+}
diff --git a/wifi/netlinkinterceptor/aidl/default/Android.bp b/wifi/netlinkinterceptor/aidl/default/Android.bp
index 6bdd9fc..52f15e4 100644
--- a/wifi/netlinkinterceptor/aidl/default/Android.bp
+++ b/wifi/netlinkinterceptor/aidl/default/Android.bp
@@ -76,3 +76,13 @@
     sub_dir: "vintf",
     installable: false,
 }
+
+filegroup {
+    name: "android.hardware.net.nlinterceptor-service.rc",
+    srcs: ["nlinterceptor.rc"],
+}
+
+filegroup {
+    name: "android.hardware.net.nlinterceptor.xml",
+    srcs: ["nlinterceptor.xml"],
+}