Merge "Fix fingerprint vhal permanent lockout" into main
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/Stream.cpp b/audio/aidl/default/Stream.cpp
index 8f5e839..389860f 100644
--- a/audio/aidl/default/Stream.cpp
+++ b/audio/aidl/default/Stream.cpp
@@ -772,7 +772,7 @@
     if (!isClosed()) {
         stopWorker();
         LOG(DEBUG) << __func__ << ": joining the worker thread...";
-        mWorker->stop();
+        mWorker->join();
         LOG(DEBUG) << __func__ << ": worker thread joined";
         onClose(mWorker->setClosed());
         return ndk::ScopedAStatus::ok();
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/include/core-impl/Stream.h b/audio/aidl/default/include/core-impl/Stream.h
index 6b45866..93ace96 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(); }
 };
 
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/r_submix/StreamRemoteSubmix.cpp b/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp
index ca3f91a..a266b54 100644
--- a/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp
+++ b/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp
@@ -285,9 +285,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/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/automotive/TEST_MAPPING b/automotive/TEST_MAPPING
index c64c880..483a85f 100644
--- a/automotive/TEST_MAPPING
+++ b/automotive/TEST_MAPPING
@@ -19,10 +19,58 @@
     	"name": "CtsCarBuiltinApiHostTestCases"
     },
     {
-      "name": "CarServiceTest"
+      "name": "CarServiceAudioTest"
+    },
+    {
+      "name": "CarServiceCarTest"
+    },
+    {
+      "name": "CarServiceClusterTest"
+    },
+    {
+      "name": "CarServiceDiagnosticTest"
+    },
+    {
+      "name": "CarServiceDrivingStateTest"
+    },
+    {
+      "name": "CarServiceEvsTest"
+    },
+    {
+      "name": "CarServiceGarageModeTest"
+    },
+    {
+      "name": "CarServiceInputTest"
+    },
+    {
+      "name": "CarServiceOsTest"
+    },
+    {
+      "name": "CarServicePmTest"
+    },
+    {
+      "name": "CarServicePowerTest"
+    },
+    {
+      "name": "CarServicePropertyTest"
+    },
+    {
+      "name": "CarServiceRemoteAccessTest"
+    },
+    {
+      "name": "CarServiceStorageMonitoringTest"
+    },
+    {
+      "name": "CarServiceTelemetryTest"
     },
     {
       "name": "CarServiceUnitTest"
+    },
+    {
+      "name": "CarServiceVmsTest"
+    },
+    {
+      "name": "CarServiceWatchdogTest"
     }
   ]
 }
\ No newline at end of file
diff --git a/automotive/evs/aidl/impl/default/manifest_evs-default-service.xml b/automotive/evs/aidl/impl/default/manifest_evs-default-service.xml
index 50692f7..9ddc6ad 100644
--- a/automotive/evs/aidl/impl/default/manifest_evs-default-service.xml
+++ b/automotive/evs/aidl/impl/default/manifest_evs-default-service.xml
@@ -2,6 +2,6 @@
     <hal format="aidl">
         <name>android.hardware.automotive.evs</name>
         <fqname>IEvsEnumerator/hw/0</fqname>
-        <version>1</version>
+        <version>2</version>
     </hal>
 </manifest>
diff --git a/automotive/vehicle/aidl/impl/grpc/GRPCVehicleHardware.cpp b/automotive/vehicle/aidl/impl/grpc/GRPCVehicleHardware.cpp
index 73bb521..201ddb0 100644
--- a/automotive/vehicle/aidl/impl/grpc/GRPCVehicleHardware.cpp
+++ b/automotive/vehicle/aidl/impl/grpc/GRPCVehicleHardware.cpp
@@ -83,6 +83,17 @@
     return configs;
 }
 
+std::optional<aidlvhal::VehiclePropConfig> GRPCVehicleHardware::getPropertyConfig(
+        int32_t propId) const {
+    // TODO(b/354055835): Use GRPC call to get one config instead of getting all the configs.
+    for (const auto& config : getAllPropertyConfigs()) {
+        if (config.prop == propId) {
+            return config;
+        }
+    }
+    return std::nullopt;
+}
+
 aidlvhal::StatusCode GRPCVehicleHardware::setValues(
         std::shared_ptr<const SetValuesCallback> callback,
         const std::vector<aidlvhal::SetValueRequest>& requests) {
diff --git a/automotive/vehicle/aidl/impl/grpc/GRPCVehicleHardware.h b/automotive/vehicle/aidl/impl/grpc/GRPCVehicleHardware.h
index 1edf658..15f473c 100644
--- a/automotive/vehicle/aidl/impl/grpc/GRPCVehicleHardware.h
+++ b/automotive/vehicle/aidl/impl/grpc/GRPCVehicleHardware.h
@@ -50,6 +50,10 @@
     // Get all the property configs.
     std::vector<aidlvhal::VehiclePropConfig> getAllPropertyConfigs() const override;
 
+    // Get the config for the specified propId.
+    std::optional<aidl::android::hardware::automotive::vehicle::VehiclePropConfig>
+    getPropertyConfig(int32_t propId) const override;
+
     // Set property values asynchronously. Server could return before the property set requests
     // are sent to vehicle bus or before property set confirmation is received. The callback is
     // safe to be called after the function returns and is safe to be called in a different thread.
diff --git a/automotive/vehicle/aidl/impl/hardware/include/IVehicleHardware.h b/automotive/vehicle/aidl/impl/hardware/include/IVehicleHardware.h
index f49d91b..0684655 100644
--- a/automotive/vehicle/aidl/impl/hardware/include/IVehicleHardware.h
+++ b/automotive/vehicle/aidl/impl/hardware/include/IVehicleHardware.h
@@ -20,6 +20,7 @@
 #include <VehicleHalTypes.h>
 
 #include <memory>
+#include <optional>
 #include <vector>
 
 namespace android {
@@ -46,33 +47,53 @@
     int32_t areaId;
 };
 
+namespace aidlvhal = ::aidl::android::hardware::automotive::vehicle;
+
 // An abstract interface to access vehicle hardware.
 // For virtualized VHAL, GrpcVehicleHardware would communicate with a VehicleHardware
 // implementation in another VM through GRPC. For non-virtualzied VHAL, VHAL directly communicates
 // with a VehicleHardware through this interface.
 class IVehicleHardware {
   public:
-    using SetValuesCallback = std::function<void(
-            std::vector<aidl::android::hardware::automotive::vehicle::SetValueResult>)>;
-    using GetValuesCallback = std::function<void(
-            std::vector<aidl::android::hardware::automotive::vehicle::GetValueResult>)>;
-    using PropertyChangeCallback = std::function<void(
-            std::vector<aidl::android::hardware::automotive::vehicle::VehiclePropValue>)>;
+    using SetValuesCallback = std::function<void(std::vector<aidlvhal::SetValueResult>)>;
+    using GetValuesCallback = std::function<void(std::vector<aidlvhal::GetValueResult>)>;
+    using PropertyChangeCallback = std::function<void(std::vector<aidlvhal::VehiclePropValue>)>;
     using PropertySetErrorCallback = std::function<void(std::vector<SetValueErrorEvent>)>;
 
     virtual ~IVehicleHardware() = default;
 
     // Get all the property configs.
-    virtual std::vector<aidl::android::hardware::automotive::vehicle::VehiclePropConfig>
-    getAllPropertyConfigs() const = 0;
+    virtual std::vector<aidlvhal::VehiclePropConfig> getAllPropertyConfigs() const = 0;
+
+    // Get the property configs for the specified propId. This is used for early-boot
+    // native VHAL clients to access certain property configs when not all property configs are
+    // available. For example, a config discovery process might be required to determine the
+    // property config for HVAC. However, for early boot properties, e.g. VHAL_HEARTBEAT, it
+    // could return before the config discovery process.
+    //
+    // Currently Android system may try to access the following properties during early boot:
+    // STORAGE_ENCRYPTION_BINDING_SEED, WATCHDOG_ALIVE, WATCHDOG_TERMINATE_PROCESS, VHAL_HEARTBEAT,
+    // CURRENT_POWER_POLICY, POWER_POLICY_REQ, POWER_POLICY_GROUP_REQ. They should return
+    // quickly otherwise the whole bootup process might be blocked.
+    virtual std::optional<aidlvhal::VehiclePropConfig> getPropertyConfig(int32_t propId) const {
+        // The default implementation is to use getAllPropertyConfigs(). This should be
+        // overridden if getAllPropertyConfigs() takes a while to return for initial boot or
+        // relies on ethernet or other communication channel that is not available during early
+        // boot.
+        for (const auto& config : getAllPropertyConfigs()) {
+            if (config.prop == propId) {
+                return config;
+            }
+        }
+        return std::nullopt;
+    }
 
     // Set property values asynchronously. Server could return before the property set requests
     // are sent to vehicle bus or before property set confirmation is received. The callback is
     // safe to be called after the function returns and is safe to be called in a different thread.
-    virtual aidl::android::hardware::automotive::vehicle::StatusCode setValues(
+    virtual aidlvhal::StatusCode setValues(
             std::shared_ptr<const SetValuesCallback> callback,
-            const std::vector<aidl::android::hardware::automotive::vehicle::SetValueRequest>&
-                    requests) = 0;
+            const std::vector<aidlvhal::SetValueRequest>& requests) = 0;
 
     // Get property values asynchronously. Server could return before the property values are ready.
     // The callback is safe to be called after the function returns and is safe to be called in a
@@ -86,7 +107,7 @@
     virtual DumpResult dump(const std::vector<std::string>& options) = 0;
 
     // Check whether the system is healthy, return {@code StatusCode::OK} for healthy.
-    virtual aidl::android::hardware::automotive::vehicle::StatusCode checkHealth() = 0;
+    virtual aidlvhal::StatusCode checkHealth() = 0;
 
     // Register a callback that would be called when there is a property change event from vehicle.
     // This function must only be called once during initialization.
@@ -179,16 +200,14 @@
     // 5. The second subscriber is removed, 'unsubscribe' is called.
     //    The impl can optionally disable the polling for vehicle speed.
     //
-    virtual aidl::android::hardware::automotive::vehicle::StatusCode subscribe(
-            [[maybe_unused]] aidl::android::hardware::automotive::vehicle::SubscribeOptions
-                    options) {
-        return aidl::android::hardware::automotive::vehicle::StatusCode::OK;
+    virtual aidlvhal::StatusCode subscribe([[maybe_unused]] aidlvhal::SubscribeOptions options) {
+        return aidlvhal::StatusCode::OK;
     }
 
     // A [propId, areaId] is unsubscribed. This applies for both continuous or on-change property.
-    virtual aidl::android::hardware::automotive::vehicle::StatusCode unsubscribe(
-            [[maybe_unused]] int32_t propId, [[maybe_unused]] int32_t areaId) {
-        return aidl::android::hardware::automotive::vehicle::StatusCode::OK;
+    virtual aidlvhal::StatusCode unsubscribe([[maybe_unused]] int32_t propId,
+                                             [[maybe_unused]] int32_t areaId) {
+        return aidlvhal::StatusCode::OK;
     }
 
     // This function is deprecated, subscribe/unsubscribe should be used instead.
@@ -216,10 +235,10 @@
     //
     // If the impl is always polling at {@code maxSampleRate} as specified in config, then this
     // function can be a no-op.
-    virtual aidl::android::hardware::automotive::vehicle::StatusCode updateSampleRate(
-            [[maybe_unused]] int32_t propId, [[maybe_unused]] int32_t areaId,
-            [[maybe_unused]] float sampleRate) {
-        return aidl::android::hardware::automotive::vehicle::StatusCode::OK;
+    virtual aidlvhal::StatusCode updateSampleRate([[maybe_unused]] int32_t propId,
+                                                  [[maybe_unused]] int32_t areaId,
+                                                  [[maybe_unused]] float sampleRate) {
+        return aidlvhal::StatusCode::OK;
     }
 };
 
diff --git a/automotive/vehicle/aidl/impl/vhal/include/DefaultVehicleHal.h b/automotive/vehicle/aidl/impl/vhal/include/DefaultVehicleHal.h
index b58d0f5..932a2e2 100644
--- a/automotive/vehicle/aidl/impl/vhal/include/DefaultVehicleHal.h
+++ b/automotive/vehicle/aidl/impl/vhal/include/DefaultVehicleHal.h
@@ -199,6 +199,8 @@
 
     bool checkDumpPermission();
 
+    bool isConfigSupportedForCurrentVhalVersion(const aidlvhal::VehiclePropConfig& config) const;
+
     bool getAllPropConfigsFromHardwareLocked() const EXCLUDES(mConfigLock);
 
     // The looping handler function to process all onBinderDied or onBinderUnlinked events in
diff --git a/automotive/vehicle/aidl/impl/vhal/src/DefaultVehicleHal.cpp b/automotive/vehicle/aidl/impl/vhal/src/DefaultVehicleHal.cpp
index e062a28..0ead819 100644
--- a/automotive/vehicle/aidl/impl/vhal/src/DefaultVehicleHal.cpp
+++ b/automotive/vehicle/aidl/impl/vhal/src/DefaultVehicleHal.cpp
@@ -340,32 +340,37 @@
     return myVersion;
 }
 
+bool DefaultVehicleHal::isConfigSupportedForCurrentVhalVersion(
+        const VehiclePropConfig& config) const {
+    int32_t myVersion = getVhalInterfaceVersion();
+    if (!isSystemProp(config.prop)) {
+        return true;
+    }
+    VehicleProperty property = static_cast<VehicleProperty>(config.prop);
+    std::string propertyName = aidl::android::hardware::automotive::vehicle::toString(property);
+    auto it = VersionForVehicleProperty.find(property);
+    if (it == VersionForVehicleProperty.end()) {
+        ALOGE("The property: %s is not a supported system property, ignore", propertyName.c_str());
+        return false;
+    }
+    int requiredVersion = it->second;
+    if (myVersion < requiredVersion) {
+        ALOGE("The property: %s is not supported for current client VHAL version, "
+              "require %d, current version: %d, ignore",
+              propertyName.c_str(), requiredVersion, myVersion);
+        return false;
+    }
+    return true;
+}
+
 bool DefaultVehicleHal::getAllPropConfigsFromHardwareLocked() const {
     ALOGD("Get all property configs from hardware");
     auto configs = mVehicleHardware->getAllPropertyConfigs();
     std::vector<VehiclePropConfig> filteredConfigs;
-    int32_t myVersion = getVhalInterfaceVersion();
-    for (auto& config : configs) {
-        if (!isSystemProp(config.prop)) {
+    for (const auto& config : configs) {
+        if (isConfigSupportedForCurrentVhalVersion(config)) {
             filteredConfigs.push_back(std::move(config));
-            continue;
         }
-        VehicleProperty property = static_cast<VehicleProperty>(config.prop);
-        std::string propertyName = aidl::android::hardware::automotive::vehicle::toString(property);
-        auto it = VersionForVehicleProperty.find(property);
-        if (it == VersionForVehicleProperty.end()) {
-            ALOGE("The property: %s is not a supported system property, ignore",
-                  propertyName.c_str());
-            continue;
-        }
-        int requiredVersion = it->second;
-        if (myVersion < requiredVersion) {
-            ALOGE("The property: %s is not supported for current client VHAL version, "
-                  "require %d, current version: %d, ignore",
-                  propertyName.c_str(), requiredVersion, myVersion);
-            continue;
-        }
-        filteredConfigs.push_back(std::move(config));
     }
 
     {
@@ -431,6 +436,19 @@
 
 Result<VehiclePropConfig> DefaultVehicleHal::getConfig(int32_t propId) const {
     Result<VehiclePropConfig> result;
+
+    if (!mConfigInit) {
+        std::optional<VehiclePropConfig> config = mVehicleHardware->getPropertyConfig(propId);
+        if (!config.has_value()) {
+            return Error() << "no config for property, ID: " << propId;
+        }
+        if (!isConfigSupportedForCurrentVhalVersion(config.value())) {
+            return Error() << "property not supported for current VHAL interface, ID: " << propId;
+        }
+
+        return config.value();
+    }
+
     getConfigsByPropId([this, &result, propId](const auto& configsByPropId) {
         SharedScopedLockAssertion lockAssertion(mConfigLock);
 
@@ -685,6 +703,22 @@
 ScopedAStatus DefaultVehicleHal::getPropConfigs(const std::vector<int32_t>& props,
                                                 VehiclePropConfigs* output) {
     std::vector<VehiclePropConfig> configs;
+
+    if (!mConfigInit) {
+        for (int32_t prop : props) {
+            auto maybeConfig = mVehicleHardware->getPropertyConfig(prop);
+            if (!maybeConfig.has_value() ||
+                !isConfigSupportedForCurrentVhalVersion(maybeConfig.value())) {
+                return ScopedAStatus::fromServiceSpecificErrorWithMessage(
+                        toInt(StatusCode::INVALID_ARG),
+                        StringPrintf("no config for property, ID: %" PRId32, prop).c_str());
+            }
+            configs.push_back(maybeConfig.value());
+        }
+
+        return vectorToStableLargeParcelable(std::move(configs), output);
+    }
+
     ScopedAStatus status = ScopedAStatus::ok();
     getConfigsByPropId([this, &configs, &status, &props](const auto& configsByPropId) {
         SharedScopedLockAssertion lockAssertion(mConfigLock);
diff --git a/automotive/vehicle/aidl/impl/vhal/test/DefaultVehicleHalTest.cpp b/automotive/vehicle/aidl/impl/vhal/test/DefaultVehicleHalTest.cpp
index 11a8fc7..4891bf5 100644
--- a/automotive/vehicle/aidl/impl/vhal/test/DefaultVehicleHalTest.cpp
+++ b/automotive/vehicle/aidl/impl/vhal/test/DefaultVehicleHalTest.cpp
@@ -650,6 +650,8 @@
 
     auto hardware = std::make_unique<MockVehicleHardware>();
     hardware->setPropertyConfigs(testConfigs);
+    // Store the pointer for testing. We are sure it is valid.
+    MockVehicleHardware* hardwarePtr = hardware.get();
     auto vhal = ndk::SharedRefBase::make<DefaultVehicleHal>(std::move(hardware));
     std::shared_ptr<IVehicle> client = IVehicle::fromBinder(vhal->asBinder());
 
@@ -658,6 +660,7 @@
 
     ASSERT_TRUE(status.isOk()) << "getPropConfigs failed: " << status.getMessage();
     ASSERT_EQ(output.payloads, testConfigs);
+    ASSERT_FALSE(hardwarePtr->getAllPropertyConfigsCalled());
 }
 
 TEST_F(DefaultVehicleHalTest, testGetPropConfigsInvalidArg) {
@@ -704,6 +707,34 @@
     ASSERT_TRUE(maybeGetValueResults.has_value()) << "no results in callback";
     EXPECT_EQ(maybeGetValueResults.value().payloads, expectedResults) << "results mismatch";
     EXPECT_EQ(countClients(), static_cast<size_t>(1));
+    ASSERT_FALSE(getHardware()->getAllPropertyConfigsCalled());
+}
+
+TEST_F(DefaultVehicleHalTest, testGetValuesSmall_AfterGetAllPropConfigs) {
+    GetValueRequests requests;
+    std::vector<GetValueResult> expectedResults;
+    std::vector<GetValueRequest> expectedHardwareRequests;
+
+    // If we already called getAllPropConfigs, the configs will be cached.
+    VehiclePropConfigs output;
+    getClient()->getAllPropConfigs(&output);
+
+    ASSERT_TRUE(getValuesTestCases(10, requests, expectedResults, expectedHardwareRequests).ok());
+
+    getHardware()->addGetValueResponses(expectedResults);
+
+    auto status = getClient()->getValues(getCallbackClient(), requests);
+
+    ASSERT_TRUE(status.isOk()) << "getValues failed: " << status.getMessage();
+
+    EXPECT_EQ(getHardware()->nextGetValueRequests(), expectedHardwareRequests)
+            << "requests to hardware mismatch";
+
+    auto maybeGetValueResults = getCallback()->nextGetValueResults();
+    ASSERT_TRUE(maybeGetValueResults.has_value()) << "no results in callback";
+    EXPECT_EQ(maybeGetValueResults.value().payloads, expectedResults) << "results mismatch";
+    EXPECT_EQ(countClients(), static_cast<size_t>(1));
+    ASSERT_TRUE(getHardware()->getAllPropertyConfigsCalled());
 }
 
 TEST_F(DefaultVehicleHalTest, testGetValuesLarge) {
@@ -1016,6 +1047,34 @@
     ASSERT_TRUE(maybeSetValueResults.has_value()) << "no results in callback";
     ASSERT_EQ(maybeSetValueResults.value().payloads, expectedResults) << "results mismatch";
     EXPECT_EQ(countClients(), static_cast<size_t>(1));
+    ASSERT_FALSE(getHardware()->getAllPropertyConfigsCalled());
+}
+
+TEST_F(DefaultVehicleHalTest, testSetValuesSmall_AfterGetAllPropConfigs) {
+    SetValueRequests requests;
+    std::vector<SetValueResult> expectedResults;
+    std::vector<SetValueRequest> expectedHardwareRequests;
+
+    // If we already called getAllPropConfigs, the configs will be cached.
+    VehiclePropConfigs output;
+    getClient()->getAllPropConfigs(&output);
+
+    ASSERT_TRUE(setValuesTestCases(10, requests, expectedResults, expectedHardwareRequests).ok());
+
+    getHardware()->addSetValueResponses(expectedResults);
+
+    auto status = getClient()->setValues(getCallbackClient(), requests);
+
+    ASSERT_TRUE(status.isOk()) << "setValues failed: " << status.getMessage();
+
+    EXPECT_EQ(getHardware()->nextSetValueRequests(), expectedHardwareRequests)
+            << "requests to hardware mismatch";
+
+    auto maybeSetValueResults = getCallback()->nextSetValueResults();
+    ASSERT_TRUE(maybeSetValueResults.has_value()) << "no results in callback";
+    ASSERT_EQ(maybeSetValueResults.value().payloads, expectedResults) << "results mismatch";
+    EXPECT_EQ(countClients(), static_cast<size_t>(1));
+    ASSERT_TRUE(getHardware()->getAllPropertyConfigsCalled());
 }
 
 TEST_F(DefaultVehicleHalTest, testSetValuesLarge) {
diff --git a/automotive/vehicle/aidl/impl/vhal/test/MockVehicleHardware.cpp b/automotive/vehicle/aidl/impl/vhal/test/MockVehicleHardware.cpp
index db15c89..e796ce5 100644
--- a/automotive/vehicle/aidl/impl/vhal/test/MockVehicleHardware.cpp
+++ b/automotive/vehicle/aidl/impl/vhal/test/MockVehicleHardware.cpp
@@ -45,9 +45,20 @@
 
 std::vector<VehiclePropConfig> MockVehicleHardware::getAllPropertyConfigs() const {
     std::scoped_lock<std::mutex> lockGuard(mLock);
+    mGetAllPropertyConfigsCalled = true;
     return mPropertyConfigs;
 }
 
+std::optional<VehiclePropConfig> MockVehicleHardware::getPropertyConfig(int32_t propId) const {
+    std::scoped_lock<std::mutex> lockGuard(mLock);
+    for (const auto& config : mPropertyConfigs) {
+        if (config.prop == propId) {
+            return config;
+        }
+    }
+    return std::nullopt;
+}
+
 StatusCode MockVehicleHardware::setValues(std::shared_ptr<const SetValuesCallback> callback,
                                           const std::vector<SetValueRequest>& requests) {
     std::scoped_lock<std::mutex> lockGuard(mLock);
@@ -336,6 +347,11 @@
     (*mPropertySetErrorCallback)(errorEvents);
 }
 
+bool MockVehicleHardware::getAllPropertyConfigsCalled() {
+    std::scoped_lock<std::mutex> lockGuard(mLock);
+    return mGetAllPropertyConfigsCalled;
+}
+
 }  // namespace vehicle
 }  // namespace automotive
 }  // namespace hardware
diff --git a/automotive/vehicle/aidl/impl/vhal/test/MockVehicleHardware.h b/automotive/vehicle/aidl/impl/vhal/test/MockVehicleHardware.h
index eeca582..06e01a8 100644
--- a/automotive/vehicle/aidl/impl/vhal/test/MockVehicleHardware.h
+++ b/automotive/vehicle/aidl/impl/vhal/test/MockVehicleHardware.h
@@ -47,6 +47,8 @@
 
     std::vector<aidl::android::hardware::automotive::vehicle::VehiclePropConfig>
     getAllPropertyConfigs() const override;
+    std::optional<aidl::android::hardware::automotive::vehicle::VehiclePropConfig>
+    getPropertyConfig(int32_t propId) const override;
     aidl::android::hardware::automotive::vehicle::StatusCode setValues(
             std::shared_ptr<const SetValuesCallback> callback,
             const std::vector<aidl::android::hardware::automotive::vehicle::SetValueRequest>&
@@ -98,6 +100,9 @@
     std::vector<aidl::android::hardware::automotive::vehicle::SubscribeOptions>
     getSubscribeOptions();
     void clearSubscribeOptions();
+    // Whether getAllPropertyConfigs() has been called, which blocks all all property configs
+    // being ready.
+    bool getAllPropertyConfigsCalled();
 
   private:
     mutable std::mutex mLock;
@@ -143,6 +148,8 @@
 
     DumpResult mDumpResult;
 
+    mutable bool mGetAllPropertyConfigsCalled GUARDED_BY(mLock) = false;
+
     // RecurrentTimer is thread-safe.
     std::shared_ptr<RecurrentTimer> mRecurrentTimer;
     std::unordered_map<int32_t, std::unordered_map<int32_t, std::shared_ptr<std::function<void()>>>>
diff --git a/bluetooth/aidl/vts/VtsHalBluetoothTargetTest.cpp b/bluetooth/aidl/vts/VtsHalBluetoothTargetTest.cpp
index aaf436f..dcb5fac 100644
--- a/bluetooth/aidl/vts/VtsHalBluetoothTargetTest.cpp
+++ b/bluetooth/aidl/vts/VtsHalBluetoothTargetTest.cpp
@@ -27,7 +27,6 @@
 #include <android/binder_process.h>
 #include <binder/IServiceManager.h>
 
-#include <atomic>
 #include <chrono>
 #include <condition_variable>
 #include <future>
@@ -68,8 +67,8 @@
 using ::bluetooth::hci::ReadLocalVersionInformationBuilder;
 using ::bluetooth::hci::ReadLocalVersionInformationCompleteView;
 
-static constexpr uint8_t kMinLeAdvSetForBt5 = 16;
-static constexpr uint8_t kMinLeAdvSetForBt5FoTv = 10;
+static constexpr uint8_t kMinLeAdvSetForBt5 = 10;
+static constexpr uint8_t kMinLeAdvSetForBt5ForTv = 10;
 static constexpr uint8_t kMinLeResolvingListForBt5 = 8;
 
 static constexpr size_t kNumHciCommandsBandwidth = 100;
@@ -1036,7 +1035,7 @@
   auto num_adv_set = num_adv_set_view.GetNumberSupportedAdvertisingSets();
 
   if (isTv() && get_vsr_api_level() == __ANDROID_API_U__) {
-    ASSERT_GE(num_adv_set, kMinLeAdvSetForBt5FoTv);
+    ASSERT_GE(num_adv_set, kMinLeAdvSetForBt5ForTv);
   } else {
     ASSERT_GE(num_adv_set, kMinLeAdvSetForBt5);
   }
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/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/camera/device/aidl/android/hardware/camera/device/ShutterMsg.aidl b/camera/device/aidl/android/hardware/camera/device/ShutterMsg.aidl
index 24ae1a0..f5489d4 100644
--- a/camera/device/aidl/android/hardware/camera/device/ShutterMsg.aidl
+++ b/camera/device/aidl/android/hardware/camera/device/ShutterMsg.aidl
@@ -40,6 +40,9 @@
      * as timestamp, and for a rolling shutter sensor, the value must be
      * timestamp + exposureTime + t_crop_top where t_crop_top is the exposure time
      * skew of the cropped lines on the top.
+     *
+     * If ANDROID_SENSOR_READOUT_TIMESTAMP is set to NOT_SUPPORTED, this field
+     * will be ignored by the camera framework.
      */
     long readoutTimestamp;
 }
diff --git a/camera/provider/aidl/vts/camera_aidl_test.cpp b/camera/provider/aidl/vts/camera_aidl_test.cpp
index 1ad5af9..f905011 100644
--- a/camera/provider/aidl/vts/camera_aidl_test.cpp
+++ b/camera/provider/aidl/vts/camera_aidl_test.cpp
@@ -456,6 +456,22 @@
     return ret;
 }
 
+bool CameraAidlTest::isReadoutTimestampSupported(const camera_metadata_t* staticMeta) {
+    camera_metadata_ro_entry readoutTimestampEntry;
+    int rc = find_camera_metadata_ro_entry(staticMeta, ANDROID_SENSOR_READOUT_TIMESTAMP,
+                                           &readoutTimestampEntry);
+    if (rc != 0) {
+        ALOGI("%s: Failed to find ANDROID_SENSOR_READOUT_TIMESTAMP", __FUNCTION__);
+        return true;
+    }
+    if (readoutTimestampEntry.count == 1 && !readoutTimestampEntry.data.u8[0]) {
+        ALOGI("%s: readout timestamp not supported", __FUNCTION__);
+        return false;
+    }
+    ALOGI("%s: readout timestamp supported", __FUNCTION__);
+    return true;
+}
+
 void CameraAidlTest::verifyLogicalCameraResult(const camera_metadata_t* staticMetadata,
                                                const std::vector<uint8_t>& resultMetadata) {
     camera_metadata_t* metadata = (camera_metadata_t*)resultMetadata.data();
@@ -2383,13 +2399,13 @@
             ASSERT_NE(inflightReq->resultOutputBuffers.size(), 0u);
             ASSERT_EQ(testStream.id, inflightReq->resultOutputBuffers[0].buffer.streamId);
 
-            // shutterReadoutTimestamp must be available, and it must
+            // shutterReadoutTimestamp, if supported, must
             // be >= shutterTimestamp + exposureTime,
             // and < shutterTimestamp + exposureTime + rollingShutterSkew / 2.
-            ASSERT_TRUE(inflightReq->shutterReadoutTimestampValid);
             ASSERT_FALSE(inflightReq->collectedResult.isEmpty());
 
-            if (inflightReq->collectedResult.exists(ANDROID_SENSOR_EXPOSURE_TIME)) {
+            if (mSupportReadoutTimestamp &&
+                inflightReq->collectedResult.exists(ANDROID_SENSOR_EXPOSURE_TIME)) {
                 camera_metadata_entry_t exposureTimeResult =
                         inflightReq->collectedResult.find(ANDROID_SENSOR_EXPOSURE_TIME);
                 nsecs_t exposureToReadout =
@@ -2904,13 +2920,14 @@
             ASSERT_FALSE(inflightReq->errorCodeValid);
             ASSERT_NE(inflightReq->resultOutputBuffers.size(), 0u);
             ASSERT_EQ(testStream.id, inflightReq->resultOutputBuffers[0].buffer.streamId);
-            ASSERT_TRUE(inflightReq->shutterReadoutTimestampValid);
-            nsecs_t readoutTimestamp = inflightReq->shutterReadoutTimestamp;
+            nsecs_t captureTimestamp = mSupportReadoutTimestamp
+                                               ? inflightReq->shutterReadoutTimestamp
+                                               : inflightReq->shutterTimestamp;
 
             if (previewStabilizationOn) {
                 // Here we collect the time difference between the buffer ready
-                // timestamp - notify readout timestamp.
-                // timeLag = buffer ready timestamp - notify readout timestamp.
+                // timestamp - notify timestamp.
+                // timeLag = buffer ready timestamp - notify timestamp.
                 // timeLag(previewStabilization) must be <=
                 //        timeLag(stabilization off) + 1 frame duration.
                 auto it = cameraDeviceToTimeLag.find(name);
@@ -2921,12 +2938,12 @@
                 ASSERT_TRUE(it != cameraDeviceToTimeLag.end());
 
                 nsecs_t previewStabOnLagTime =
-                        inflightReq->resultOutputBuffers[0].timeStamp - readoutTimestamp;
+                        inflightReq->resultOutputBuffers[0].timeStamp - captureTimestamp;
                 ASSERT_TRUE(previewStabOnLagTime <= (it->second + frameDuration));
             } else {
                 // Fill in the buffer ready timestamp - notify timestamp;
                 cameraDeviceToTimeLag[std::string(name)] =
-                        inflightReq->resultOutputBuffers[0].timeStamp - readoutTimestamp;
+                        inflightReq->resultOutputBuffers[0].timeStamp - captureTimestamp;
             }
         }
 
diff --git a/camera/provider/aidl/vts/camera_aidl_test.h b/camera/provider/aidl/vts/camera_aidl_test.h
index 782794b..9edbf41 100644
--- a/camera/provider/aidl/vts/camera_aidl_test.h
+++ b/camera/provider/aidl/vts/camera_aidl_test.h
@@ -346,6 +346,8 @@
 
     static Status isOfflineSessionSupported(const camera_metadata_t* staticMeta);
 
+    static bool isReadoutTimestampSupported(const camera_metadata_t* staticMeta);
+
     static Status getPhysicalCameraIds(const camera_metadata_t* staticMeta,
                                        std::unordered_set<std::string>* physicalIds /*out*/);
 
@@ -456,8 +458,6 @@
     struct InFlightRequest {
         // Set by notify() SHUTTER call.
         nsecs_t shutterTimestamp;
-
-        bool shutterReadoutTimestampValid;
         nsecs_t shutterReadoutTimestamp;
 
         bool errorCodeValid;
@@ -523,7 +523,6 @@
 
         InFlightRequest()
             : shutterTimestamp(0),
-              shutterReadoutTimestampValid(false),
               shutterReadoutTimestamp(0),
               errorCodeValid(false),
               errorCode(ErrorCode::ERROR_BUFFER),
@@ -541,7 +540,6 @@
         InFlightRequest(ssize_t numBuffers, bool hasInput, bool partialResults,
                         int32_t partialCount, std::shared_ptr<ResultMetadataQueue> queue = nullptr)
             : shutterTimestamp(0),
-              shutterReadoutTimestampValid(false),
               shutterReadoutTimestamp(0),
               errorCodeValid(false),
               errorCode(ErrorCode::ERROR_BUFFER),
@@ -561,7 +559,6 @@
                         const std::unordered_set<std::string>& extraPhysicalResult,
                         std::shared_ptr<ResultMetadataQueue> queue = nullptr)
             : shutterTimestamp(0),
-              shutterReadoutTimestampValid(false),
               shutterReadoutTimestamp(0),
               errorCodeValid(false),
               errorCode(ErrorCode::ERROR_BUFFER),
@@ -631,6 +628,8 @@
 
     HandleImporter mHandleImporter;
 
+    bool mSupportReadoutTimestamp;
+
     friend class DeviceCb;
     friend class SimpleDeviceCb;
     friend class TorchProviderCb;
diff --git a/camera/provider/aidl/vts/device_cb.cpp b/camera/provider/aidl/vts/device_cb.cpp
index 8a8b925..bfd1cd1 100644
--- a/camera/provider/aidl/vts/device_cb.cpp
+++ b/camera/provider/aidl/vts/device_cb.cpp
@@ -32,10 +32,11 @@
 
 DeviceCb::DeviceCb(CameraAidlTest* parent, camera_metadata_t* staticMeta) : mParent(parent) {
     mStaticMetadata = staticMeta;
+    parent->mSupportReadoutTimestamp = CameraAidlTest::isReadoutTimestampSupported(staticMeta);
 }
 
 ScopedAStatus DeviceCb::notify(const std::vector<NotifyMsg>& msgs) {
-    std::vector<std::pair<bool, nsecs_t>> readoutTimestamps;
+    std::vector<nsecs_t> readoutTimestamps;
 
     size_t count = msgs.size();
     readoutTimestamps.resize(count);
@@ -44,11 +45,11 @@
         const NotifyMsg& msg = msgs[i];
         switch (msg.getTag()) {
             case NotifyMsg::Tag::error:
-                readoutTimestamps[i] = {false, 0};
+                readoutTimestamps[i] = 0;
                 break;
             case NotifyMsg::Tag::shutter:
                 const auto& shutter = msg.get<NotifyMsg::Tag::shutter>();
-                readoutTimestamps[i] = {true, shutter.readoutTimestamp};
+                readoutTimestamps[i] = shutter.readoutTimestamp;
                 break;
         }
     }
@@ -446,9 +447,8 @@
     return notify;
 }
 
-ScopedAStatus DeviceCb::notifyHelper(
-        const std::vector<NotifyMsg>& msgs,
-        const std::vector<std::pair<bool, nsecs_t>>& readoutTimestamps) {
+ScopedAStatus DeviceCb::notifyHelper(const std::vector<NotifyMsg>& msgs,
+                                     const std::vector<nsecs_t>& readoutTimestamps) {
     std::lock_guard<std::mutex> l(mParent->mLock);
 
     for (size_t i = 0; i < msgs.size(); i++) {
@@ -514,8 +514,7 @@
                 }
                 auto& r = itr->second;
                 r->shutterTimestamp = msg.get<NotifyMsg::Tag::shutter>().timestamp;
-                r->shutterReadoutTimestampValid = readoutTimestamps[i].first;
-                r->shutterReadoutTimestamp = readoutTimestamps[i].second;
+                r->shutterReadoutTimestamp = readoutTimestamps[i];
                 break;
         }
     }
diff --git a/camera/provider/aidl/vts/device_cb.h b/camera/provider/aidl/vts/device_cb.h
index 3ae7d10..d839ab4 100644
--- a/camera/provider/aidl/vts/device_cb.h
+++ b/camera/provider/aidl/vts/device_cb.h
@@ -60,7 +60,7 @@
     bool processCaptureResultLocked(const CaptureResult& results,
                                     std::vector<PhysicalCameraMetadata> physicalCameraMetadata);
     ScopedAStatus notifyHelper(const std::vector<NotifyMsg>& msgs,
-                               const std::vector<std::pair<bool, nsecs_t>>& readoutTimestamps);
+                               const std::vector<nsecs_t>& readoutTimestamps);
 
     CameraAidlTest* mParent;  // Parent object
 
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/compatibility_matrix.202504.xml b/compatibility_matrices/compatibility_matrix.202504.xml
index ee62163..8ec3649 100644
--- a/compatibility_matrices/compatibility_matrix.202504.xml
+++ b/compatibility_matrices/compatibility_matrix.202504.xml
@@ -372,6 +372,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>
@@ -629,7 +630,7 @@
     </hal>
     <hal format="aidl">
         <name>android.hardware.vibrator</name>
-        <version>1-2</version>
+        <version>1-3</version>
         <interface>
             <name>IVibrator</name>
             <instance>default</instance>
@@ -637,7 +638,7 @@
     </hal>
     <hal format="aidl">
         <name>android.hardware.vibrator</name>
-        <version>1-2</version>
+        <version>1-3</version>
         <interface>
             <name>IVibratorManager</name>
             <instance>default</instance>
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..70b7745 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,19 +56,18 @@
 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;
-
-    ev.events = EPOLLIN;
+    struct epoll_event ev = {
+            .events = EPOLLIN | EPOLLERR,
+            .data.ptr = reinterpret_cast<void*>(event_handler),
+    };
 
     if (wakeup == EVENT_WAKEUP_FD) ev.events |= EPOLLWAKEUP;
 
-    ev.data.ptr = reinterpret_cast<void*>(event_handler);
-
     if (epoll_ctl(epollfd_, EPOLL_CTL_ADD, fd, &ev) == -1) {
         KLOG_ERROR(LOG_TAG, "epoll_ctl failed; errno=%d\n", errno);
         return -1;
@@ -122,11 +120,16 @@
     ScheduleBatteryUpdate();
 }
 
-// TODO(b/140330870): Use BPF instead.
 #define UEVENT_MSG_LEN 2048
-void HealthLoop::UeventEvent(uint32_t /*epevents*/) {
+void HealthLoop::UeventEvent(uint32_t epevents) {
     // No need to lock because uevent_fd_ is guaranteed to be initialized.
 
+    if (epevents & EPOLLERR) {
+        // The netlink receive buffer overflowed.
+        ScheduleBatteryUpdate();
+        return;
+    }
+
     char msg[UEVENT_MSG_LEN + 2];
     char* cp;
     int n;
@@ -152,8 +155,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 +182,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/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/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 d2508ce..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",
@@ -73,7 +73,7 @@
         "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/nfc/aidl/vts/functional/VtsNfcBehaviorChangesTest.cpp b/nfc/aidl/vts/functional/VtsNfcBehaviorChangesTest.cpp
index 0b73cc9..ff2522c 100644
--- a/nfc/aidl/vts/functional/VtsNfcBehaviorChangesTest.cpp
+++ b/nfc/aidl/vts/functional/VtsNfcBehaviorChangesTest.cpp
@@ -16,6 +16,10 @@
 
 #define LOG_TAG "nfc_behavior_changes_test"
 
+#include <aidl/Gtest.h>
+#include <aidl/Vintf.h>
+#include <aidl/android/hardware/nfc/BnNfc.h>
+#include <aidl/android/hardware/nfc/INfc.h>
 #include <android-base/logging.h>
 #include <android-base/stringprintf.h>
 #include <android/binder_process.h>
@@ -30,6 +34,9 @@
 #include "nfa_api.h"
 #include "nfa_ee_api.h"
 
+using aidl::android::hardware::nfc::INfc;
+using android::getAidlHalInstanceNames;
+using android::PrintInstanceNameToString;
 using android::base::StringPrintf;
 
 static SyncEvent sNfaEnableEvent;  // event for NFA_Enable()
@@ -162,7 +169,7 @@
     return status;
 }
 
-class NfcBehaviorChanges : public testing::Test {
+class NfcBehaviorChanges : public testing::TestWithParam<std::string> {
   protected:
     void SetUp() override {
         tNFA_STATUS status = NFA_STATUS_OK;
@@ -202,7 +209,7 @@
  *
  * @VsrTest = GMS-VSR-3.2.8-001
  */
-TEST_F(NfcBehaviorChanges, ObserveModeEnableDisable) {
+TEST_P(NfcBehaviorChanges, ObserveModeEnableDisable) {
     tNFA_STATUS status = nfaObserveModeEnable(true);
     ASSERT_EQ(status, NFA_STATUS_OK);
 
@@ -210,6 +217,11 @@
     ASSERT_EQ(status, NFA_STATUS_OK);
 }
 
+GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(NfcBehaviorChanges);
+INSTANTIATE_TEST_SUITE_P(Nfc, NfcBehaviorChanges,
+                         testing::ValuesIn(::android::getAidlHalInstanceNames(INfc::descriptor)),
+                         ::android::PrintInstanceNameToString);
+
 int main(int argc, char** argv) {
     testing::InitGoogleTest(&argc, argv);
     ABinderProcess_startThreadPool();
diff --git a/radio/aidl/vts/radio_network_test.cpp b/radio/aidl/vts/radio_network_test.cpp
index ec2a29c..914cad0 100644
--- a/radio/aidl/vts/radio_network_test.cpp
+++ b/radio/aidl/vts/radio_network_test.cpp
@@ -2171,6 +2171,14 @@
     // exit emergency mode for other tests
     serial = GetRandomSerialNumber();
     radio_network->exitEmergencyMode(serial);
+
+    EXPECT_EQ(std::cv_status::no_timeout, wait());
+    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_network->rspInfo.type);
+    EXPECT_EQ(serial, radioRsp_network->rspInfo.serial);
+
+    ASSERT_TRUE(CheckAnyOfErrors(radioRsp_network->rspInfo.error,
+                                 {RadioError::NONE, RadioError::REQUEST_NOT_SUPPORTED,
+                                  RadioError::RADIO_NOT_AVAILABLE, RadioError::MODEM_ERR}));
 }
 
 /*
diff --git a/radio/aidl/vts/radio_sim_test.cpp b/radio/aidl/vts/radio_sim_test.cpp
index e9b68cc..9d1c356 100644
--- a/radio/aidl/vts/radio_sim_test.cpp
+++ b/radio/aidl/vts/radio_sim_test.cpp
@@ -460,14 +460,41 @@
     serial = GetRandomSerialNumber();
     CarrierRestrictions carrierRestrictions;
     memset(&carrierRestrictions, 0, sizeof(carrierRestrictions));
-    carrierRestrictions.allowedCarriers.resize(1);
-    carrierRestrictions.excludedCarriers.resize(0);
-    carrierRestrictions.allowedCarriers[0].mcc = std::string("123");
-    carrierRestrictions.allowedCarriers[0].mnc = std::string("456");
-    carrierRestrictions.allowedCarriers[0].matchType = Carrier::MATCH_TYPE_ALL;
-    carrierRestrictions.allowedCarriers[0].matchData = std::string();
-    carrierRestrictions.allowedCarriersPrioritized = true;
+    int32_t aidl_version;
+    ndk::ScopedAStatus aidl_status = radio_sim->getInterfaceVersion(&aidl_version);
+    ASSERT_OK(aidl_status);
+
+    // Changes start
+
     SimLockMultiSimPolicy multisimPolicy = SimLockMultiSimPolicy::NO_MULTISIM_POLICY;
+    ALOGI("VTSAllowedCarriers Current AIDL version is %d ", aidl_version);
+    if (aidl_version <= 2) {
+        ALOGI("VTSAllowedCarriers If aidl_version is below 3 then , it will consider old AIDLs");
+        carrierRestrictions.allowedCarrierInfoList.resize(1);
+        if ((carrierRestrictions.allowedCarrierInfoList.size() > 0)) {
+            ALOGI("VTSAllowedCarriers If size of allowedCarrierInfoList is greater than 0");
+        }
+        carrierRestrictions.allowedCarriers.resize(1);
+        carrierRestrictions.excludedCarriers.resize(0);
+        carrierRestrictions.allowedCarriers[0].mcc = std::string("123");
+        carrierRestrictions.allowedCarriers[0].mnc = std::string("456");
+        carrierRestrictions.allowedCarriers[0].matchType = Carrier::MATCH_TYPE_ALL;
+        carrierRestrictions.allowedCarriers[0].matchData = std::string();
+        carrierRestrictions.allowedCarriersPrioritized = true;
+        multisimPolicy = SimLockMultiSimPolicy::NO_MULTISIM_POLICY;
+    } else {
+        carrierRestrictions.allowedCarrierInfoList.resize(1);
+        carrierRestrictions.excludedCarrierInfoList.resize(0);
+        carrierRestrictions.allowedCarrierInfoList[0].mcc = std::string("321");
+        carrierRestrictions.allowedCarrierInfoList[0].mnc = std::string("654");
+        carrierRestrictions.allowedCarrierInfoList[0].spn = std::string("TestNetwork");
+        carrierRestrictions.allowedCarrierInfoList[0].gid1 = std::string("BAE000000000000");
+        carrierRestrictions.allowedCarrierInfoList[0].gid2 = std::string("AE0000000000000");
+        carrierRestrictions.allowedCarrierInfoList[0].imsiPrefix = std::string("9987");
+        carrierRestrictions.allowedCarriersPrioritized = true;
+        carrierRestrictions.status = CarrierRestrictions::CarrierRestrictionStatus::RESTRICTED;
+        multisimPolicy = SimLockMultiSimPolicy::NO_MULTISIM_POLICY;
+    }
 
     radio_sim->setAllowedCarriers(serial, carrierRestrictions, multisimPolicy);
     EXPECT_EQ(std::cv_status::no_timeout, wait());
@@ -503,17 +530,36 @@
         EXPECT_EQ(serial, radioRsp_sim->rspInfo.serial);
         EXPECT_EQ(RadioError::NONE, radioRsp_sim->rspInfo.error);
 
-        EXPECT_EQ(1, radioRsp_sim->carrierRestrictionsResp.allowedCarriers.size());
-        EXPECT_EQ(0, radioRsp_sim->carrierRestrictionsResp.excludedCarriers.size());
-        ASSERT_TRUE(std::string("123") ==
-                    radioRsp_sim->carrierRestrictionsResp.allowedCarriers[0].mcc);
-        ASSERT_TRUE(std::string("456") ==
-                    radioRsp_sim->carrierRestrictionsResp.allowedCarriers[0].mnc);
-        EXPECT_EQ(Carrier::MATCH_TYPE_ALL,
-                  radioRsp_sim->carrierRestrictionsResp.allowedCarriers[0].matchType);
-        ASSERT_TRUE(radioRsp_sim->carrierRestrictionsResp.allowedCarriersPrioritized);
-        EXPECT_EQ(SimLockMultiSimPolicy::NO_MULTISIM_POLICY, radioRsp_sim->multiSimPolicyResp);
+        if (aidl_version <= 2) {
+            EXPECT_EQ(1, radioRsp_sim->carrierRestrictionsResp.allowedCarriers.size());
+            EXPECT_EQ(0, radioRsp_sim->carrierRestrictionsResp.excludedCarriers.size());
 
+            ASSERT_TRUE(std::string("123") ==
+                        radioRsp_sim->carrierRestrictionsResp.allowedCarriers[0].mcc);
+            ASSERT_TRUE(std::string("456") ==
+                        radioRsp_sim->carrierRestrictionsResp.allowedCarriers[0].mnc);
+            EXPECT_EQ(Carrier::MATCH_TYPE_ALL,
+                      radioRsp_sim->carrierRestrictionsResp.allowedCarriers[0].matchType);
+            ASSERT_TRUE(radioRsp_sim->carrierRestrictionsResp.allowedCarriersPrioritized);
+            EXPECT_EQ(SimLockMultiSimPolicy::NO_MULTISIM_POLICY, radioRsp_sim->multiSimPolicyResp);
+        } else {
+            EXPECT_EQ(1, radioRsp_sim->carrierRestrictionsResp.allowedCarrierInfoList.size());
+            EXPECT_EQ(0, radioRsp_sim->carrierRestrictionsResp.excludedCarrierInfoList.size());
+            ASSERT_TRUE(std::string("321") ==
+                        radioRsp_sim->carrierRestrictionsResp.allowedCarrierInfoList[0].mcc);
+            ASSERT_TRUE(std::string("654") ==
+                        radioRsp_sim->carrierRestrictionsResp.allowedCarrierInfoList[0].mnc);
+            ASSERT_TRUE(std::string("BAE000000000000") ==
+                        radioRsp_sim->carrierRestrictionsResp.allowedCarrierInfoList[0].gid1);
+            ASSERT_TRUE(std::string("AE0000000000000") ==
+                        radioRsp_sim->carrierRestrictionsResp.allowedCarrierInfoList[0].gid2);
+            ASSERT_TRUE(std::string("9987") ==
+                        radioRsp_sim->carrierRestrictionsResp.allowedCarrierInfoList[0].imsiPrefix);
+            ASSERT_TRUE(radioRsp_sim->carrierRestrictionsResp.allowedCarriersPrioritized);
+            EXPECT_EQ(CarrierRestrictions::CarrierRestrictionStatus::RESTRICTED,
+                      radioRsp_sim->carrierRestrictionsResp.status);
+            EXPECT_EQ(SimLockMultiSimPolicy::NO_MULTISIM_POLICY, radioRsp_sim->multiSimPolicyResp);
+        }
         sleep(10);
 
         /**
@@ -522,9 +568,15 @@
          * status for cardStatus.
          */
         memset(&carrierRestrictions, 0, sizeof(carrierRestrictions));
-        carrierRestrictions.allowedCarriers.resize(0);
-        carrierRestrictions.excludedCarriers.resize(0);
-        carrierRestrictions.allowedCarriersPrioritized = false;
+        if (aidl_version <= 2) {
+            carrierRestrictions.allowedCarriers.resize(0);
+            carrierRestrictions.excludedCarriers.resize(0);
+            carrierRestrictions.allowedCarriersPrioritized = false;
+        } else {
+            carrierRestrictions.allowedCarrierInfoList.resize(0);
+            carrierRestrictions.excludedCarrierInfoList.resize(0);
+            carrierRestrictions.allowedCarriersPrioritized = false;
+        }
 
         serial = GetRandomSerialNumber();
         radio_sim->setAllowedCarriers(serial, carrierRestrictions, multisimPolicy);
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/sensors/aidl/vts/VtsAidlHalSensorsTargetTest.cpp b/sensors/aidl/vts/VtsAidlHalSensorsTargetTest.cpp
index 0b15d12..b1590f9 100644
--- a/sensors/aidl/vts/VtsAidlHalSensorsTargetTest.cpp
+++ b/sensors/aidl/vts/VtsAidlHalSensorsTargetTest.cpp
@@ -714,11 +714,14 @@
         return;  // Exit early if setting up the new environment failed
     }
 
+    size_t numNonOneShotAndNonSpecialSensors = getNonOneShotAndNonSpecialSensors().size();
     activateAllSensors(true);
     // Verify that the old environment does not receive any events
     EXPECT_EQ(getEnvironment()->collectEvents(kCollectionTimeoutUs, kNumEvents).size(), 0);
-    // Verify that the new event queue receives sensor events
-    EXPECT_GE(newEnv.get()->collectEvents(kCollectionTimeoutUs, kNumEvents).size(), kNumEvents);
+    if (numNonOneShotAndNonSpecialSensors > 0) {
+        // Verify that the new event queue receives sensor events
+        EXPECT_GE(newEnv.get()->collectEvents(kCollectionTimeoutUs, kNumEvents).size(), kNumEvents);
+    }
     activateAllSensors(false);
 
     // Cleanup the test environment
@@ -733,7 +736,9 @@
 
     // Ensure that the original environment is receiving events
     activateAllSensors(true);
-    EXPECT_GE(getEnvironment()->collectEvents(kCollectionTimeoutUs, kNumEvents).size(), kNumEvents);
+    if (numNonOneShotAndNonSpecialSensors > 0) {
+        EXPECT_GE(getEnvironment()->collectEvents(kCollectionTimeoutUs, kNumEvents).size(), kNumEvents);
+    }
     activateAllSensors(false);
 }
 
@@ -743,7 +748,11 @@
     // Verify that events are received
     constexpr useconds_t kCollectionTimeoutUs = 1000 * 1000;  // 1s
     constexpr int32_t kNumEvents = 1;
-    ASSERT_GE(getEnvironment()->collectEvents(kCollectionTimeoutUs, kNumEvents).size(), kNumEvents);
+
+    size_t numNonOneShotAndNonSpecialSensors = getNonOneShotAndNonSpecialSensors().size();
+    if (numNonOneShotAndNonSpecialSensors > 0) {
+        ASSERT_GE(getEnvironment()->collectEvents(kCollectionTimeoutUs, kNumEvents).size(), kNumEvents);
+    }
 
     // Clear the active sensor handles so they are not disabled during TearDown
     auto handles = mSensorHandles;
@@ -757,7 +766,9 @@
     // Verify no events are received until sensors are re-activated
     ASSERT_EQ(getEnvironment()->collectEvents(kCollectionTimeoutUs, kNumEvents).size(), 0);
     activateAllSensors(true);
-    ASSERT_GE(getEnvironment()->collectEvents(kCollectionTimeoutUs, kNumEvents).size(), kNumEvents);
+    if (numNonOneShotAndNonSpecialSensors > 0) {
+        ASSERT_GE(getEnvironment()->collectEvents(kCollectionTimeoutUs, kNumEvents).size(), kNumEvents);
+    }
 
     // Disable sensors
     activateAllSensors(false);
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/extension/vibrator/aidl/Android.bp b/tests/extension/vibrator/aidl/Android.bp
index 9d6fdbc..3ef8749 100644
--- a/tests/extension/vibrator/aidl/Android.bp
+++ b/tests/extension/vibrator/aidl/Android.bp
@@ -43,6 +43,9 @@
         cpp: {
             enabled: false,
         },
+        rust: {
+            enabled: false,
+        },
     },
     frozen: true,
     versions_with_info: [
diff --git a/tests/extension/vibrator/aidl/default/Android.bp b/tests/extension/vibrator/aidl/default/Android.bp
index 5e156af..479b4fd 100644
--- a/tests/extension/vibrator/aidl/default/Android.bp
+++ b/tests/extension/vibrator/aidl/default/Android.bp
@@ -10,11 +10,6 @@
 cc_binary {
     name: "android.hardware.tests.extension.vibrator-service.example",
     relative_install_path: "hw",
-    // normally you implement a service directly, but we are using an implementation
-    // from a library to attach our extension to.
-    static_libs: [
-        "libvibratorexampleimpl",
-    ],
 
     // need to add this in the manifest and to init as well to use, see
     // android.hardware.vibrator-service.example. This binary is being tested
@@ -23,6 +18,7 @@
     vendor: true,
     srcs: [
         "service.cpp",
+        "Vibrator.cpp",
         "CustomVibrator.cpp",
     ],
     shared_libs: [
diff --git a/tests/extension/vibrator/aidl/default/Vibrator.cpp b/tests/extension/vibrator/aidl/default/Vibrator.cpp
new file mode 100644
index 0000000..5084096
--- /dev/null
+++ b/tests/extension/vibrator/aidl/default/Vibrator.cpp
@@ -0,0 +1,131 @@
+/*
+ * 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 "Vibrator.h"
+
+#include <android-base/logging.h>
+
+namespace aidl::android::hardware::vibrator {
+
+ndk::ScopedAStatus Vibrator::getCapabilities(int32_t* _aidl_return) {
+    // basic example with only amplitude control capability
+    *_aidl_return = IVibrator::CAP_AMPLITUDE_CONTROL;
+    return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus Vibrator::off() {
+    LOG(INFO) << "Vibrator off";
+    return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus Vibrator::on(int32_t timeoutMs, const std::shared_ptr<IVibratorCallback>&) {
+    LOG(INFO) << "Vibrator on for timeoutMs: " << timeoutMs;
+    return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus Vibrator::setAmplitude(float amplitude) {
+    LOG(INFO) << "Vibrator set amplitude: " << amplitude;
+    if (amplitude <= 0.0f || amplitude > 1.0f) {
+        return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_ILLEGAL_ARGUMENT));
+    }
+    return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus Vibrator::perform(Effect, EffectStrength,
+                                     const std::shared_ptr<IVibratorCallback>&, int32_t*) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::getSupportedEffects(std::vector<Effect>* _aidl_return) {
+    *_aidl_return = {};
+    return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus Vibrator::setExternalControl(bool) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::getCompositionDelayMax(int32_t*) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::getCompositionSizeMax(int32_t*) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::getSupportedPrimitives(std::vector<CompositePrimitive>*) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::getPrimitiveDuration(CompositePrimitive, int32_t*) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::compose(const std::vector<CompositeEffect>&,
+                                     const std::shared_ptr<IVibratorCallback>&) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::getSupportedAlwaysOnEffects(std::vector<Effect>*) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::alwaysOnEnable(int32_t, Effect, EffectStrength) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::alwaysOnDisable(int32_t) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::getResonantFrequency(float*) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::getQFactor(float*) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::getFrequencyResolution(float*) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::getFrequencyMinimum(float*) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::getBandwidthAmplitudeMap(std::vector<float>*) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::getPwlePrimitiveDurationMax(int32_t*) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::getPwleCompositionSizeMax(int32_t*) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::getSupportedBraking(std::vector<Braking>*) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+ndk::ScopedAStatus Vibrator::composePwle(const std::vector<PrimitivePwle>&,
+                                         const std::shared_ptr<IVibratorCallback>&) {
+    return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_UNSUPPORTED_OPERATION));
+}
+
+}  // namespace aidl::android::hardware::vibrator
diff --git a/tests/extension/vibrator/aidl/default/Vibrator.h b/tests/extension/vibrator/aidl/default/Vibrator.h
new file mode 100644
index 0000000..80916ae
--- /dev/null
+++ b/tests/extension/vibrator/aidl/default/Vibrator.h
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include <aidl/android/hardware/vibrator/BnVibrator.h>
+
+namespace aidl::android::hardware::vibrator {
+
+class Vibrator : public BnVibrator {
+    ndk::ScopedAStatus getCapabilities(int32_t* _aidl_return) override;
+    ndk::ScopedAStatus off() override;
+    ndk::ScopedAStatus on(int32_t timeoutMs,
+                          const std::shared_ptr<IVibratorCallback>& callback) override;
+    ndk::ScopedAStatus perform(Effect effect, EffectStrength strength,
+                               const std::shared_ptr<IVibratorCallback>& callback,
+                               int32_t* _aidl_return) override;
+    ndk::ScopedAStatus getSupportedEffects(std::vector<Effect>* _aidl_return) override;
+    ndk::ScopedAStatus setAmplitude(float amplitude) override;
+    ndk::ScopedAStatus setExternalControl(bool enabled) override;
+    ndk::ScopedAStatus getCompositionDelayMax(int32_t* maxDelayMs);
+    ndk::ScopedAStatus getCompositionSizeMax(int32_t* maxSize);
+    ndk::ScopedAStatus getSupportedPrimitives(std::vector<CompositePrimitive>* supported) override;
+    ndk::ScopedAStatus getPrimitiveDuration(CompositePrimitive primitive,
+                                            int32_t* durationMs) override;
+    ndk::ScopedAStatus compose(const std::vector<CompositeEffect>& composite,
+                               const std::shared_ptr<IVibratorCallback>& callback) override;
+    ndk::ScopedAStatus getSupportedAlwaysOnEffects(std::vector<Effect>* _aidl_return) override;
+    ndk::ScopedAStatus alwaysOnEnable(int32_t id, Effect effect, EffectStrength strength) override;
+    ndk::ScopedAStatus alwaysOnDisable(int32_t id) override;
+    ndk::ScopedAStatus getResonantFrequency(float* resonantFreqHz) override;
+    ndk::ScopedAStatus getQFactor(float* qFactor) override;
+    ndk::ScopedAStatus getFrequencyResolution(float* freqResolutionHz) override;
+    ndk::ScopedAStatus getFrequencyMinimum(float* freqMinimumHz) override;
+    ndk::ScopedAStatus getBandwidthAmplitudeMap(std::vector<float>* _aidl_return) override;
+    ndk::ScopedAStatus getPwlePrimitiveDurationMax(int32_t* durationMs) override;
+    ndk::ScopedAStatus getPwleCompositionSizeMax(int32_t* maxSize) override;
+    ndk::ScopedAStatus getSupportedBraking(std::vector<Braking>* supported) override;
+    ndk::ScopedAStatus composePwle(const std::vector<PrimitivePwle>& composite,
+                                   const std::shared_ptr<IVibratorCallback>& callback) override;
+};
+
+}  // namespace aidl::android::hardware::vibrator
diff --git a/tests/extension/vibrator/aidl/default/service.cpp b/tests/extension/vibrator/aidl/default/service.cpp
index 16290df..5917d0f 100644
--- a/tests/extension/vibrator/aidl/default/service.cpp
+++ b/tests/extension/vibrator/aidl/default/service.cpp
@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
-#include <vibrator-impl/Vibrator.h>
 #include "CustomVibrator.h"
+#include "Vibrator.h"
 
 #include <android-base/logging.h>
 #include <android/binder_manager.h>
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/tv/input/aidl/vts/functional/VtsHalTvInputTargetTest.cpp b/tv/input/aidl/vts/functional/VtsHalTvInputTargetTest.cpp
index 7e095f1..41a78eb 100644
--- a/tv/input/aidl/vts/functional/VtsHalTvInputTargetTest.cpp
+++ b/tv/input/aidl/vts/functional/VtsHalTvInputTargetTest.cpp
@@ -137,13 +137,15 @@
 }
 
 bool TvInputAidlTest::isValidHandle(NativeHandle& handle) {
-    if (handle.fds.empty()) {
+    if (handle.fds.empty() && handle.ints.empty()) {
         return false;
     }
-    for (size_t i = 0; i < handle.fds.size(); i++) {
-        int fd = handle.fds[i].get();
-        if (fcntl(fd, F_GETFL) < 0) {
-            return false;
+    if (!(handle.fds.empty())) {
+        for (size_t i = 0; i < handle.fds.size(); i++) {
+            int fd = handle.fds[i].get();
+            if (fcntl(fd, F_GETFL) < 0) {
+                return false;
+            }
         }
     }
     return true;
diff --git a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.h b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.h
index 6cabb3d..be9b996 100644
--- a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.h
+++ b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.h
@@ -32,9 +32,10 @@
 bool initConfiguration() {
     std::array<char, PROPERTY_VALUE_MAX> variant;
     property_get("ro.vendor.vts_tuner_configuration_variant", variant.data(), "");
+    string variantString = variant.data();
     string configFilePath = "/vendor/etc/tuner_vts_config_aidl_V1";
-    if (variant.size() != 0) {
-        configFilePath = configFilePath + "."  + variant.data();
+    if (variantString.length() != 0) {
+        configFilePath = configFilePath + "." + variantString;
     }
     configFilePath = configFilePath + ".xml";
     TunerTestingConfigAidlReader1_0::setConfigFilePath(configFilePath);
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/vibrator/aidl/Android.bp b/vibrator/aidl/Android.bp
index fe76450..b2d98f5 100644
--- a/vibrator/aidl/Android.bp
+++ b/vibrator/aidl/Android.bp
@@ -15,6 +15,9 @@
     srcs: [
         "android/hardware/vibrator/*.aidl",
     ],
+    headers: [
+        "PersistableBundle_aidl",
+    ],
     stability: "vintf",
     backend: {
         java: {
@@ -26,9 +29,19 @@
         cpp: {
             enabled: false,
         },
+        rust: {
+            enabled: false,
+        },
     },
-    versions: [
-        "1",
-        "2",
+    versions_with_info: [
+        {
+            version: "1",
+            imports: [],
+        },
+        {
+            version: "2",
+            imports: [],
+        },
     ],
+    frozen: false,
 }
diff --git a/vibrator/aidl/aidl_api/android.hardware.vibrator/current/android/hardware/vibrator/IVibrator.aidl b/vibrator/aidl/aidl_api/android.hardware.vibrator/current/android/hardware/vibrator/IVibrator.aidl
index b7afb66..af619c6 100644
--- a/vibrator/aidl/aidl_api/android.hardware.vibrator/current/android/hardware/vibrator/IVibrator.aidl
+++ b/vibrator/aidl/aidl_api/android.hardware.vibrator/current/android/hardware/vibrator/IVibrator.aidl
@@ -58,15 +58,17 @@
   int getPwleCompositionSizeMax();
   android.hardware.vibrator.Braking[] getSupportedBraking();
   void composePwle(in android.hardware.vibrator.PrimitivePwle[] composite, in android.hardware.vibrator.IVibratorCallback callback);
-  const int CAP_ON_CALLBACK = 1;
-  const int CAP_PERFORM_CALLBACK = 2;
-  const int CAP_AMPLITUDE_CONTROL = 4;
-  const int CAP_EXTERNAL_CONTROL = 8;
-  const int CAP_EXTERNAL_AMPLITUDE_CONTROL = 16;
-  const int CAP_COMPOSE_EFFECTS = 32;
-  const int CAP_ALWAYS_ON_CONTROL = 64;
-  const int CAP_GET_RESONANT_FREQUENCY = 128;
-  const int CAP_GET_Q_FACTOR = 256;
-  const int CAP_FREQUENCY_CONTROL = 512;
-  const int CAP_COMPOSE_PWLE_EFFECTS = 1024;
+  void performVendorEffect(in android.hardware.vibrator.VendorEffect vendorEffect, in android.hardware.vibrator.IVibratorCallback callback);
+  const int CAP_ON_CALLBACK = (1 << 0) /* 1 */;
+  const int CAP_PERFORM_CALLBACK = (1 << 1) /* 2 */;
+  const int CAP_AMPLITUDE_CONTROL = (1 << 2) /* 4 */;
+  const int CAP_EXTERNAL_CONTROL = (1 << 3) /* 8 */;
+  const int CAP_EXTERNAL_AMPLITUDE_CONTROL = (1 << 4) /* 16 */;
+  const int CAP_COMPOSE_EFFECTS = (1 << 5) /* 32 */;
+  const int CAP_ALWAYS_ON_CONTROL = (1 << 6) /* 64 */;
+  const int CAP_GET_RESONANT_FREQUENCY = (1 << 7) /* 128 */;
+  const int CAP_GET_Q_FACTOR = (1 << 8) /* 256 */;
+  const int CAP_FREQUENCY_CONTROL = (1 << 9) /* 512 */;
+  const int CAP_COMPOSE_PWLE_EFFECTS = (1 << 10) /* 1024 */;
+  const int CAP_PERFORM_VENDOR_EFFECTS = (1 << 11) /* 2048 */;
 }
diff --git a/vibrator/aidl/aidl_api/android.hardware.vibrator/current/android/hardware/vibrator/IVibratorManager.aidl b/vibrator/aidl/aidl_api/android.hardware.vibrator/current/android/hardware/vibrator/IVibratorManager.aidl
index 290c68d..ef5794c 100644
--- a/vibrator/aidl/aidl_api/android.hardware.vibrator/current/android/hardware/vibrator/IVibratorManager.aidl
+++ b/vibrator/aidl/aidl_api/android.hardware.vibrator/current/android/hardware/vibrator/IVibratorManager.aidl
@@ -40,12 +40,12 @@
   void prepareSynced(in int[] vibratorIds);
   void triggerSynced(in android.hardware.vibrator.IVibratorCallback callback);
   void cancelSynced();
-  const int CAP_SYNC = 1;
-  const int CAP_PREPARE_ON = 2;
-  const int CAP_PREPARE_PERFORM = 4;
-  const int CAP_PREPARE_COMPOSE = 8;
-  const int CAP_MIXED_TRIGGER_ON = 16;
-  const int CAP_MIXED_TRIGGER_PERFORM = 32;
-  const int CAP_MIXED_TRIGGER_COMPOSE = 64;
-  const int CAP_TRIGGER_CALLBACK = 128;
+  const int CAP_SYNC = (1 << 0) /* 1 */;
+  const int CAP_PREPARE_ON = (1 << 1) /* 2 */;
+  const int CAP_PREPARE_PERFORM = (1 << 2) /* 4 */;
+  const int CAP_PREPARE_COMPOSE = (1 << 3) /* 8 */;
+  const int CAP_MIXED_TRIGGER_ON = (1 << 4) /* 16 */;
+  const int CAP_MIXED_TRIGGER_PERFORM = (1 << 5) /* 32 */;
+  const int CAP_MIXED_TRIGGER_COMPOSE = (1 << 6) /* 64 */;
+  const int CAP_TRIGGER_CALLBACK = (1 << 7) /* 128 */;
 }
diff --git a/vibrator/aidl/aidl_api/android.hardware.vibrator/current/android/hardware/vibrator/VendorEffect.aidl b/vibrator/aidl/aidl_api/android.hardware.vibrator/current/android/hardware/vibrator/VendorEffect.aidl
new file mode 100644
index 0000000..1900084
--- /dev/null
+++ b/vibrator/aidl/aidl_api/android.hardware.vibrator/current/android/hardware/vibrator/VendorEffect.aidl
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package android.hardware.vibrator;
+@VintfStability
+parcelable VendorEffect {
+  android.os.PersistableBundle vendorData;
+  android.hardware.vibrator.EffectStrength strength = android.hardware.vibrator.EffectStrength.MEDIUM;
+  float scale;
+}
diff --git a/vibrator/aidl/android/hardware/vibrator/Braking.aidl b/vibrator/aidl/android/hardware/vibrator/Braking.aidl
index 2bc51db..f934ff2 100644
--- a/vibrator/aidl/android/hardware/vibrator/Braking.aidl
+++ b/vibrator/aidl/android/hardware/vibrator/Braking.aidl
@@ -23,12 +23,12 @@
      * No braking mechanism used.
      * This is the default if the hardware does not support any braking mechanism.
      */
-    NONE,
+    NONE = 0,
     /**
      * Closed-loop active braking.
      *
      * This effect should produce a sharp, crisp end to the waveform
      * Support is optional.
      */
-    CLAB,
+    CLAB = 1,
 }
diff --git a/vibrator/aidl/android/hardware/vibrator/CompositePrimitive.aidl b/vibrator/aidl/android/hardware/vibrator/CompositePrimitive.aidl
index 5314898..5f8ee8d 100644
--- a/vibrator/aidl/android/hardware/vibrator/CompositePrimitive.aidl
+++ b/vibrator/aidl/android/hardware/vibrator/CompositePrimitive.aidl
@@ -24,13 +24,13 @@
      *
      * Support is required.
      */
-    NOOP,
+    NOOP = 0,
     /**
      * This effect should produce a sharp, crisp click sensation.
      *
      * Support is required.
      */
-    CLICK,
+    CLICK = 1,
     /**
      * A haptic effect that simulates downwards movement with gravity. Often
      * followed by extra energy of hitting and reverberation to augment
@@ -38,43 +38,43 @@
      *
      * Support is optional.
      */
-    THUD,
+    THUD = 2,
     /**
      * A haptic effect that simulates spinning momentum.
      *
      * Support is optional.
      */
-    SPIN,
+    SPIN = 3,
     /**
      * A haptic effect that simulates quick upward movement against gravity.
      *
      * Support is required.
      */
-    QUICK_RISE,
+    QUICK_RISE = 4,
     /**
      * A haptic effect that simulates slow upward movement against gravity.
      *
      * Support is required.
      */
-    SLOW_RISE,
+    SLOW_RISE = 5,
     /**
      * A haptic effect that simulates quick downwards movement with gravity.
      *
      * Support is required.
      */
-    QUICK_FALL,
+    QUICK_FALL = 6,
     /**
      * This very short effect should produce a light crisp sensation intended
      * to be used repetitively for dynamic feedback.
      *
      * Support is required.
      */
-    LIGHT_TICK,
+    LIGHT_TICK = 7,
     /**
      * This very short low frequency effect should produce a light crisp sensation intended
      * to be used repetitively for dynamic feedback.
      *
      * Support is required.
      */
-    LOW_TICK,
+    LOW_TICK = 8,
 }
diff --git a/vibrator/aidl/android/hardware/vibrator/Effect.aidl b/vibrator/aidl/android/hardware/vibrator/Effect.aidl
index c60bfe9..f5cf9e3 100644
--- a/vibrator/aidl/android/hardware/vibrator/Effect.aidl
+++ b/vibrator/aidl/android/hardware/vibrator/Effect.aidl
@@ -24,57 +24,57 @@
      *
      * This effect should produce a sharp, crisp click sensation.
      */
-    CLICK,
+    CLICK = 0,
     /**
      * A double click effect.
      *
      * This effect should produce two sequential sharp, crisp click sensations with a minimal
      * amount of time between them.
      */
-    DOUBLE_CLICK,
+    DOUBLE_CLICK = 1,
     /**
      * A tick effect.
      *
      * This effect should produce a soft, short sensation, like the tick of a clock.
      */
-    TICK,
+    TICK = 2,
     /**
      * A thud effect.
      *
      * This effect should solid feeling bump, like the depression of a heavy mechanical button.
      */
-    THUD,
+    THUD = 3,
     /**
      * A pop effect.
      *
      * A short, quick burst effect.
      */
-    POP,
+    POP = 4,
     /**
      * A heavy click effect.
      *
      * This should produce a sharp striking sensation, like a click but stronger.
      */
-    HEAVY_CLICK,
+    HEAVY_CLICK = 5,
     /**
      * Ringtone patterns. They may correspond with the device's ringtone audio, or may just be a
      * pattern that can be played as a ringtone with any audio, depending on the device.
      */
-    RINGTONE_1,
-    RINGTONE_2,
-    RINGTONE_3,
-    RINGTONE_4,
-    RINGTONE_5,
-    RINGTONE_6,
-    RINGTONE_7,
-    RINGTONE_8,
-    RINGTONE_9,
-    RINGTONE_10,
-    RINGTONE_11,
-    RINGTONE_12,
-    RINGTONE_13,
-    RINGTONE_14,
-    RINGTONE_15,
+    RINGTONE_1 = 6,
+    RINGTONE_2 = 7,
+    RINGTONE_3 = 8,
+    RINGTONE_4 = 9,
+    RINGTONE_5 = 10,
+    RINGTONE_6 = 11,
+    RINGTONE_7 = 12,
+    RINGTONE_8 = 13,
+    RINGTONE_9 = 14,
+    RINGTONE_10 = 15,
+    RINGTONE_11 = 16,
+    RINGTONE_12 = 17,
+    RINGTONE_13 = 18,
+    RINGTONE_14 = 19,
+    RINGTONE_15 = 20,
     /**
      * A soft tick effect meant to be played as a texture.
      *
@@ -82,5 +82,5 @@
      * are expected to be played multiple times in quick succession, replicating a specific
      * texture to the user as a form of haptic feedback.
      */
-    TEXTURE_TICK,
+    TEXTURE_TICK = 21,
 }
diff --git a/vibrator/aidl/android/hardware/vibrator/EffectStrength.aidl b/vibrator/aidl/android/hardware/vibrator/EffectStrength.aidl
index 66f70e5..c6a78d4 100644
--- a/vibrator/aidl/android/hardware/vibrator/EffectStrength.aidl
+++ b/vibrator/aidl/android/hardware/vibrator/EffectStrength.aidl
@@ -19,7 +19,7 @@
 @VintfStability
 @Backing(type="byte")
 enum EffectStrength {
-    LIGHT,
-    MEDIUM,
-    STRONG,
+    LIGHT = 0,
+    MEDIUM = 1,
+    STRONG = 2,
 }
diff --git a/vibrator/aidl/android/hardware/vibrator/IVibrator.aidl b/vibrator/aidl/android/hardware/vibrator/IVibrator.aidl
index b4e7e44..768ec4f 100644
--- a/vibrator/aidl/android/hardware/vibrator/IVibrator.aidl
+++ b/vibrator/aidl/android/hardware/vibrator/IVibrator.aidl
@@ -16,13 +16,14 @@
 
 package android.hardware.vibrator;
 
-import android.hardware.vibrator.IVibratorCallback;
 import android.hardware.vibrator.Braking;
-import android.hardware.vibrator.Effect;
-import android.hardware.vibrator.EffectStrength;
 import android.hardware.vibrator.CompositeEffect;
 import android.hardware.vibrator.CompositePrimitive;
+import android.hardware.vibrator.Effect;
+import android.hardware.vibrator.EffectStrength;
+import android.hardware.vibrator.IVibratorCallback;
 import android.hardware.vibrator.PrimitivePwle;
+import android.hardware.vibrator.VendorEffect;
 
 @VintfStability
 interface IVibrator {
@@ -70,6 +71,10 @@
      * Whether composePwle is supported.
      */
     const int CAP_COMPOSE_PWLE_EFFECTS = 1 << 10;
+    /**
+     * Whether perform w/ vendor effect is supported.
+     */
+    const int CAP_PERFORM_VENDOR_EFFECTS = 1 << 11;
 
     /**
      * Determine capabilities of the vibrator HAL (CAP_* mask)
@@ -359,4 +364,25 @@
      * @param composite Array of PWLEs.
      */
     void composePwle(in PrimitivePwle[] composite, in IVibratorCallback callback);
+
+    /**
+     * Fire off a vendor-defined haptic event.
+     *
+     * This may not be supported and this support is reflected in
+     * getCapabilities (CAP_PERFORM_VENDOR_EFFECTS).
+     *
+     * The duration of the effect is unknown and can be undefined for looping effects.
+     * IVibratorCallback.onComplete() support is required for this API.
+     *
+     * Doing this operation while the vibrator is already on is undefined behavior. Clients should
+     * explicitly call off.
+     *
+     * @param effect The vendor data representing the effect to be performed.
+     * @param callback A callback used to inform Frameworks of state change.
+     * @throws :
+     *         - EX_UNSUPPORTED_OPERATION if unsupported, as reflected by getCapabilities.
+     *         - EX_ILLEGAL_ARGUMENT for bad framework parameters, e.g. scale or effect strength.
+     *         - EX_SERVICE_SPECIFIC for bad vendor data, vibration is not triggered.
+     */
+    void performVendorEffect(in VendorEffect vendorEffect, in IVibratorCallback callback);
 }
diff --git a/vibrator/aidl/android/hardware/vibrator/VendorEffect.aidl b/vibrator/aidl/android/hardware/vibrator/VendorEffect.aidl
new file mode 100644
index 0000000..2155aca
--- /dev/null
+++ b/vibrator/aidl/android/hardware/vibrator/VendorEffect.aidl
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ */
+
+package android.hardware.vibrator;
+
+import android.hardware.vibrator.EffectStrength;
+import android.os.PersistableBundle;
+
+@VintfStability
+parcelable VendorEffect {
+    /**
+     * Vendor data describing the haptic effect. Expected fields should be defined by the vendor.
+     *
+     * Vendors can use this as a platform extension point for experimental hardware capabilities,
+     * but they are strongly discouraged from using it as an alternative to the AOSP support for
+     * stable vibrator APIs. Implemenitng vendor-specific custom effects outside the platform APIs
+     * will hinder portability for the code and overall user experience.
+     *
+     * Vendors are encouraged to upstream new capabilities to the IVibrator surface once it has
+     * matured into a stable interface.
+     */
+    PersistableBundle vendorData;
+
+    /**
+     * The intensity of the haptic effect.
+     */
+    EffectStrength strength = EffectStrength.MEDIUM;
+
+    /**
+     * A scale to be applied to the haptic effect intensity.
+     *
+     * This value represents a linear scale that should be applied on top of the effect strength to
+     * dynamically adapt to the device state.
+     *
+     * Values in [0,1) should scale down. Values > 1 should scale up within hardware bounds.
+     */
+    float scale;
+}
diff --git a/vibrator/aidl/default/Android.bp b/vibrator/aidl/default/Android.bp
index 0f342db..4b26640 100644
--- a/vibrator/aidl/default/Android.bp
+++ b/vibrator/aidl/default/Android.bp
@@ -15,7 +15,7 @@
     shared_libs: [
         "libbase",
         "libbinder_ndk",
-        "android.hardware.vibrator-V2-ndk",
+        "android.hardware.vibrator-V3-ndk",
     ],
     export_include_dirs: ["include"],
     srcs: [
@@ -49,7 +49,7 @@
     shared_libs: [
         "libbase",
         "libbinder_ndk",
-        "android.hardware.vibrator-V2-ndk",
+        "android.hardware.vibrator-V3-ndk",
     ],
     static_libs: [
         "libvibratorexampleimpl",
@@ -62,7 +62,7 @@
     host_supported: true,
     defaults: ["service_fuzzer_defaults"],
     static_libs: [
-        "android.hardware.vibrator-V2-ndk",
+        "android.hardware.vibrator-V3-ndk",
         "liblog",
         "libvibratorexampleimpl",
     ],
diff --git a/vibrator/aidl/default/Vibrator.cpp b/vibrator/aidl/default/Vibrator.cpp
index 01602ab..acf7d34 100644
--- a/vibrator/aidl/default/Vibrator.cpp
+++ b/vibrator/aidl/default/Vibrator.cpp
@@ -39,6 +39,9 @@
 static constexpr float PWLE_BW_MAP_SIZE =
         1 + ((PWLE_FREQUENCY_MAX_HZ - PWLE_FREQUENCY_MIN_HZ) / PWLE_FREQUENCY_RESOLUTION_HZ);
 
+// Service specific error code used for vendor vibration effects.
+static constexpr int32_t ERROR_CODE_INVALID_DURATION = 1;
+
 ndk::ScopedAStatus Vibrator::getCapabilities(int32_t* _aidl_return) {
     LOG(VERBOSE) << "Vibrator reporting capabilities";
     *_aidl_return = IVibrator::CAP_ON_CALLBACK | IVibrator::CAP_PERFORM_CALLBACK |
@@ -46,7 +49,7 @@
                     IVibrator::CAP_EXTERNAL_AMPLITUDE_CONTROL | IVibrator::CAP_COMPOSE_EFFECTS |
                     IVibrator::CAP_ALWAYS_ON_CONTROL | IVibrator::CAP_GET_RESONANT_FREQUENCY |
                     IVibrator::CAP_GET_Q_FACTOR | IVibrator::CAP_FREQUENCY_CONTROL |
-                    IVibrator::CAP_COMPOSE_PWLE_EFFECTS;
+                    IVibrator::CAP_COMPOSE_PWLE_EFFECTS | IVibrator::CAP_PERFORM_VENDOR_EFFECTS;
     return ndk::ScopedAStatus::ok();
 }
 
@@ -102,6 +105,36 @@
     return ndk::ScopedAStatus::ok();
 }
 
+ndk::ScopedAStatus Vibrator::performVendorEffect(
+        const VendorEffect& effect, const std::shared_ptr<IVibratorCallback>& callback) {
+    LOG(VERBOSE) << "Vibrator perform vendor effect";
+    EffectStrength strength = effect.strength;
+    if (strength != EffectStrength::LIGHT && strength != EffectStrength::MEDIUM &&
+        strength != EffectStrength::STRONG) {
+        return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_ILLEGAL_ARGUMENT));
+    }
+    float scale = effect.scale;
+    if (scale <= 0) {
+        return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+    }
+
+    int32_t durationMs = 0;
+    if (!effect.vendorData.getInt("DURATION_MS", &durationMs) || durationMs <= 0) {
+        return ndk::ScopedAStatus::fromServiceSpecificError(ERROR_CODE_INVALID_DURATION);
+    }
+
+    if (callback != nullptr) {
+        std::thread([callback, durationMs] {
+            LOG(VERBOSE) << "Starting perform on another thread for durationMs:" << durationMs;
+            usleep(durationMs * 1000);
+            LOG(VERBOSE) << "Notifying perform vendor effect complete";
+            callback->onComplete();
+        }).detach();
+    }
+
+    return ndk::ScopedAStatus::ok();
+}
+
 ndk::ScopedAStatus Vibrator::getSupportedEffects(std::vector<Effect>* _aidl_return) {
     *_aidl_return = {Effect::CLICK, Effect::TICK};
     return ndk::ScopedAStatus::ok();
diff --git a/vibrator/aidl/default/android.hardware.vibrator.xml b/vibrator/aidl/default/android.hardware.vibrator.xml
index b5bd3dd..b730046 100644
--- a/vibrator/aidl/default/android.hardware.vibrator.xml
+++ b/vibrator/aidl/default/android.hardware.vibrator.xml
@@ -1,12 +1,12 @@
 <manifest version="1.0" type="device">
     <hal format="aidl">
         <name>android.hardware.vibrator</name>
-        <version>2</version>
+        <version>3</version>
         <fqname>IVibrator/default</fqname>
     </hal>
     <hal format="aidl">
         <name>android.hardware.vibrator</name>
-        <version>2</version>
+        <version>3</version>
         <fqname>IVibratorManager/default</fqname>
     </hal>
 </manifest>
diff --git a/vibrator/aidl/default/include/vibrator-impl/Vibrator.h b/vibrator/aidl/default/include/vibrator-impl/Vibrator.h
index 4203bf2..e8f64ca 100644
--- a/vibrator/aidl/default/include/vibrator-impl/Vibrator.h
+++ b/vibrator/aidl/default/include/vibrator-impl/Vibrator.h
@@ -31,6 +31,9 @@
     ndk::ScopedAStatus perform(Effect effect, EffectStrength strength,
                                const std::shared_ptr<IVibratorCallback>& callback,
                                int32_t* _aidl_return) override;
+    ndk::ScopedAStatus performVendorEffect(
+            const VendorEffect& effect,
+            const std::shared_ptr<IVibratorCallback>& callback) override;
     ndk::ScopedAStatus getSupportedEffects(std::vector<Effect>* _aidl_return) override;
     ndk::ScopedAStatus setAmplitude(float amplitude) override;
     ndk::ScopedAStatus setExternalControl(bool enabled) override;
diff --git a/vibrator/aidl/vts/Android.bp b/vibrator/aidl/vts/Android.bp
index 166b30b..a48bb2e 100644
--- a/vibrator/aidl/vts/Android.bp
+++ b/vibrator/aidl/vts/Android.bp
@@ -20,7 +20,7 @@
         "libbinder_ndk",
     ],
     static_libs: [
-        "android.hardware.vibrator-V2-ndk",
+        "android.hardware.vibrator-V3-ndk",
     ],
     test_suites: [
         "general-tests",
@@ -39,7 +39,7 @@
         "libbinder_ndk",
     ],
     static_libs: [
-        "android.hardware.vibrator-V2-ndk",
+        "android.hardware.vibrator-V3-ndk",
     ],
     test_suites: [
         "general-tests",
diff --git a/vibrator/aidl/vts/VtsHalVibratorTargetTest.cpp b/vibrator/aidl/vts/VtsHalVibratorTargetTest.cpp
index 65a1e84..706ab41 100644
--- a/vibrator/aidl/vts/VtsHalVibratorTargetTest.cpp
+++ b/vibrator/aidl/vts/VtsHalVibratorTargetTest.cpp
@@ -21,10 +21,14 @@
 
 #include <android/binder_manager.h>
 #include <android/binder_process.h>
+#include <android/persistable_bundle_aidl.h>
 
 #include <cmath>
+#include <cstdlib>
+#include <ctime>
 #include <future>
 
+#include "persistable_bundle_utils.h"
 #include "test_utils.h"
 
 using aidl::android::hardware::vibrator::ActivePwle;
@@ -38,6 +42,8 @@
 using aidl::android::hardware::vibrator::IVibrator;
 using aidl::android::hardware::vibrator::IVibratorManager;
 using aidl::android::hardware::vibrator::PrimitivePwle;
+using aidl::android::hardware::vibrator::VendorEffect;
+using aidl::android::os::PersistableBundle;
 using std::chrono::high_resolution_clock;
 
 using namespace ::std::chrono_literals;
@@ -357,6 +363,122 @@
     }
 }
 
+TEST_P(VibratorAidl, PerformVendorEffectSupported) {
+    if ((capabilities & IVibrator::CAP_PERFORM_VENDOR_EFFECTS) == 0) return;
+
+    float scale = 0.5f;
+    for (EffectStrength strength : kEffectStrengths) {
+        PersistableBundle vendorData;
+        ::aidl::android::hardware::vibrator::testing::fillBasicData(&vendorData);
+
+        PersistableBundle nestedData;
+        ::aidl::android::hardware::vibrator::testing::fillBasicData(&nestedData);
+        vendorData.putPersistableBundle("test_nested_bundle", nestedData);
+
+        VendorEffect effect;
+        effect.vendorData = vendorData;
+        effect.strength = strength;
+        effect.scale = scale;
+        scale *= 1.5f;
+
+        auto callback = ndk::SharedRefBase::make<CompletionCallback>([] {});
+        ndk::ScopedAStatus status = vibrator->performVendorEffect(effect, callback);
+
+        // No expectations on the actual status, the effect might be refused with illegal argument
+        // or the vendor might return a service-specific error code.
+        EXPECT_TRUE(status.getExceptionCode() != EX_UNSUPPORTED_OPERATION &&
+                    status.getStatus() != STATUS_UNKNOWN_TRANSACTION)
+                << status << "\n For vendor effect with strength" << toString(strength)
+                << " and scale " << effect.scale;
+
+        if (status.isOk()) {
+            // Generic vendor data should not trigger vibrations, but if it does trigger one
+            // then we make sure the vibrator is reset by triggering off().
+            EXPECT_OK(vibrator->off());
+        }
+    }
+}
+
+TEST_P(VibratorAidl, PerformVendorEffectStability) {
+    if ((capabilities & IVibrator::CAP_PERFORM_VENDOR_EFFECTS) == 0) return;
+
+    // Run some iterations of performVendorEffect with randomized vendor data to check basic
+    // stability of the implementation.
+    uint8_t iterations = 200;
+
+    for (EffectStrength strength : kEffectStrengths) {
+        float scale = 0.5f;
+        for (uint8_t i = 0; i < iterations; i++) {
+            PersistableBundle vendorData;
+            ::aidl::android::hardware::vibrator::testing::fillRandomData(&vendorData);
+
+            VendorEffect effect;
+            effect.vendorData = vendorData;
+            effect.strength = strength;
+            effect.scale = scale;
+            scale *= 2;
+
+            auto callback = ndk::SharedRefBase::make<CompletionCallback>([] {});
+            ndk::ScopedAStatus status = vibrator->performVendorEffect(effect, callback);
+
+            // No expectations on the actual status, the effect might be refused with illegal
+            // argument or the vendor might return a service-specific error code.
+            EXPECT_TRUE(status.getExceptionCode() != EX_UNSUPPORTED_OPERATION &&
+                        status.getStatus() != STATUS_UNKNOWN_TRANSACTION)
+                    << status << "\n For random vendor effect with strength " << toString(strength)
+                    << " and scale " << effect.scale;
+
+            if (status.isOk()) {
+                // Random vendor data should not trigger vibrations, but if it does trigger one
+                // then we make sure the vibrator is reset by triggering off().
+                EXPECT_OK(vibrator->off());
+            }
+        }
+    }
+}
+
+TEST_P(VibratorAidl, PerformVendorEffectEmptyVendorData) {
+    if ((capabilities & IVibrator::CAP_PERFORM_VENDOR_EFFECTS) == 0) return;
+
+    for (EffectStrength strength : kEffectStrengths) {
+        VendorEffect effect;
+        effect.strength = strength;
+        effect.scale = 1.0f;
+
+        ndk::ScopedAStatus status = vibrator->performVendorEffect(effect, nullptr /*callback*/);
+
+        EXPECT_TRUE(status.getExceptionCode() == EX_SERVICE_SPECIFIC)
+                << status << "\n For vendor effect with strength " << toString(strength)
+                << " and scale " << effect.scale;
+    }
+}
+
+TEST_P(VibratorAidl, PerformVendorEffectInvalidScale) {
+    if ((capabilities & IVibrator::CAP_PERFORM_VENDOR_EFFECTS) == 0) return;
+
+    VendorEffect effect;
+    effect.strength = EffectStrength::MEDIUM;
+
+    effect.scale = 0.0f;
+    EXPECT_ILLEGAL_ARGUMENT(vibrator->performVendorEffect(effect, nullptr /*callback*/));
+
+    effect.scale = -1.0f;
+    EXPECT_ILLEGAL_ARGUMENT(vibrator->performVendorEffect(effect, nullptr /*callback*/));
+}
+
+TEST_P(VibratorAidl, PerformVendorEffectUnsupported) {
+    if (capabilities & IVibrator::CAP_PERFORM_VENDOR_EFFECTS) return;
+
+    for (EffectStrength strength : kEffectStrengths) {
+        VendorEffect effect;
+        effect.strength = strength;
+        effect.scale = 1.0f;
+
+        EXPECT_UNKNOWN_OR_UNSUPPORTED(vibrator->performVendorEffect(effect, nullptr /*callback*/))
+                << "\n  For vendor effect with strength " << toString(strength);
+    }
+}
+
 TEST_P(VibratorAidl, ChangeVibrationAmplitude) {
     if (capabilities & IVibrator::CAP_AMPLITUDE_CONTROL) {
         EXPECT_OK(vibrator->setAmplitude(0.1f));
@@ -940,6 +1062,9 @@
                          PrintGeneratedTest);
 
 int main(int argc, char **argv) {
+    // Random values are used in the implementation.
+    std::srand(std::time(nullptr));
+
     ::testing::InitGoogleTest(&argc, argv);
     ABinderProcess_setThreadPoolMaxThreadCount(1);
     ABinderProcess_startThreadPool();
diff --git a/vibrator/aidl/vts/persistable_bundle_utils.h b/vibrator/aidl/vts/persistable_bundle_utils.h
new file mode 100644
index 0000000..a765a49
--- /dev/null
+++ b/vibrator/aidl/vts/persistable_bundle_utils.h
@@ -0,0 +1,134 @@
+/*
+ * 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.
+ */
+#ifndef VIBRATOR_HAL_PERSISTABLE_BUNDLE_UTILS_H
+#define VIBRATOR_HAL_PERSISTABLE_BUNDLE_UTILS_H
+
+#include <android/persistable_bundle_aidl.h>
+
+#include <cstdlib>
+
+namespace aidl {
+namespace android {
+namespace hardware {
+namespace vibrator {
+namespace testing {
+
+using aidl::android::os::PersistableBundle;
+
+namespace {
+
+template <typename T>
+T nextValue() {
+    return static_cast<T>(std::rand());
+}
+
+template <>
+std::string nextValue() {
+    std::string str;
+    uint8_t entryCount = nextValue<uint8_t>();
+    for (uint8_t i = 0; i < entryCount; i++) {
+        str.push_back(nextValue<char>());
+    }
+    return str;
+}
+
+template <typename T>
+T nextValue(T limit) {
+    assert(limit > 0);
+    return static_cast<T>(std::rand()) / (static_cast<T>(RAND_MAX / limit));
+}
+
+template <typename T>
+void fillVector(std::vector<T>* values) {
+    uint8_t entryCount = nextValue<uint8_t>();
+    for (uint8_t i = 0; i < entryCount; i++) {
+        values->push_back(nextValue<T>());
+    }
+}
+
+const std::vector<std::function<void(PersistableBundle*, const std::string&)>>
+        sPersistableBundleSetters = {[](PersistableBundle* bundle, const std::string& key) -> void {
+                                         bundle->putBoolean(key, nextValue<bool>());
+                                     },
+                                     [](PersistableBundle* bundle, const std::string& key) -> void {
+                                         bundle->putInt(key, nextValue<int32_t>());
+                                     },
+                                     [](PersistableBundle* bundle, const std::string& key) -> void {
+                                         bundle->putLong(key, nextValue<int64_t>());
+                                     },
+                                     [](PersistableBundle* bundle, const std::string& key) -> void {
+                                         bundle->putDouble(key, nextValue<double>());
+                                     },
+                                     [](PersistableBundle* bundle, const std::string& key) -> void {
+                                         bundle->putString(key, nextValue<std::string>());
+                                     },
+                                     [](PersistableBundle* bundle, const std::string& key) -> void {
+                                         std::vector<bool> value;
+                                         fillVector<bool>(&value);
+                                         bundle->putBooleanVector(key, value);
+                                     },
+                                     [](PersistableBundle* bundle, const std::string& key) -> void {
+                                         std::vector<int32_t> value;
+                                         fillVector<int32_t>(&value);
+                                         bundle->putIntVector(key, value);
+                                     },
+                                     [](PersistableBundle* bundle, const std::string& key) -> void {
+                                         std::vector<int64_t> value;
+                                         fillVector<int64_t>(&value);
+                                         bundle->putLongVector(key, value);
+                                     },
+                                     [](PersistableBundle* bundle, const std::string& key) -> void {
+                                         std::vector<double> value;
+                                         fillVector<double>(&value);
+                                         bundle->putDoubleVector(key, value);
+                                     },
+                                     [](PersistableBundle* bundle, const std::string& key) -> void {
+                                         std::vector<std::string> value;
+                                         fillVector<std::string>(&value);
+                                         bundle->putStringVector(key, value);
+                                     }};
+
+}  // namespace
+
+void fillBasicData(PersistableBundle* bundle) {
+    bundle->putBoolean("test_bool", true);
+    bundle->putInt("test_int", 2147483647);
+    bundle->putLong("test_long", 2147483647L);
+    bundle->putDouble("test_double", 1.23);
+    bundle->putString("test_string", "test data");
+    bundle->putBooleanVector("test_bool_vector", {true, false, false});
+    bundle->putIntVector("test_int_vector", {1, 2, 3, 4});
+    bundle->putLongVector("test_long_vector", {100L, 200L, 300L});
+    bundle->putDoubleVector("test_double_vector", {1.1, 2.2});
+    bundle->putStringVector("test_string_vector", {"test", "val"});
+}
+
+void fillRandomData(PersistableBundle* bundle) {
+    uint8_t entryCount = nextValue<uint8_t>();
+    for (uint8_t i = 0; i < entryCount; i++) {
+        std::string key(nextValue<std::string>());
+        uint8_t setterIdx = nextValue<uint8_t>(sPersistableBundleSetters.size() - 1);
+        sPersistableBundleSetters[setterIdx](bundle, key);
+    }
+}
+
+}  // namespace testing
+}  // namespace vibrator
+}  // namespace hardware
+}  // namespace android
+}  // namespace aidl
+
+#endif  // VIBRATOR_HAL_PERSISTABLE_BUNDLE_UTILS_H
diff --git a/vibrator/bench/Android.bp b/vibrator/bench/Android.bp
index b31c719..cd56516 100644
--- a/vibrator/bench/Android.bp
+++ b/vibrator/bench/Android.bp
@@ -30,7 +30,7 @@
         "benchmark.cpp",
     ],
     shared_libs: [
-        "android.hardware.vibrator-V2-ndk",
+        "android.hardware.vibrator-V3-ndk",
         "android.hardware.vibrator@1.0",
         "android.hardware.vibrator@1.1",
         "android.hardware.vibrator@1.2",
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/aidl/default/wifi_chip.cpp b/wifi/aidl/default/wifi_chip.cpp
index 9b9c565..fccfc15 100644
--- a/wifi/aidl/default/wifi_chip.cpp
+++ b/wifi/aidl/default/wifi_chip.cpp
@@ -62,7 +62,9 @@
 std::vector<std::string> getNames(std::vector<std::shared_ptr<Iface>>& ifaces) {
     std::vector<std::string> names;
     for (const auto& iface : ifaces) {
-        names.emplace_back(iface->getName());
+        if (iface) {
+            names.emplace_back(iface->getName());
+        }
     }
     return names;
 }
@@ -971,6 +973,10 @@
     }
     std::shared_ptr<WifiNanIface> iface =
             WifiNanIface::create(ifname, is_dedicated_iface, legacy_hal_, iface_util_);
+    if (!iface) {
+        LOG(ERROR) << "Unable to create NAN iface";
+        return {nullptr, createWifiStatus(WifiStatusCode::ERROR_UNKNOWN)};
+    }
     nan_ifaces_.push_back(iface);
     for (const auto& callback : event_cb_handler_.getCallbacks()) {
         if (!callback->onIfaceAdded(IfaceType::NAN_IFACE, ifname).isOk()) {
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"],
+}