bluetooth: LE Audio multi-codec extensibility - unicast

Bug: 308428217
Bug: 307258939
Test: m android.hardware.bluetooth.audio-update-api
Change-Id: I9a40c24212cc36829a11b54977d313bef5e652ca
This commit is contained in:
Jakub Tyszkowski
2023-09-21 09:20:14 +00:00
committed by Bao Do
parent 71f56141e7
commit c11ac5844b
20 changed files with 1394 additions and 5 deletions

View File

@@ -49,7 +49,15 @@ parcelable CodecInfo {
int outputDataPath = 1;
boolean useControllerCodec = true;
}
parcelable LeAudio {
android.hardware.bluetooth.audio.ChannelMode[] channelMode;
int[] samplingFrequencyHz;
int[] frameDurationUs;
int[] bitdepth;
@nullable android.hardware.bluetooth.audio.ConfigurationFlags flags;
}
union Transport {
android.hardware.bluetooth.audio.CodecInfo.LeAudio leAudio;
android.hardware.bluetooth.audio.CodecInfo.A2dp a2dp;
android.hardware.bluetooth.audio.CodecInfo.Hfp hfp;
}

View File

@@ -0,0 +1,83 @@
/*
* Copyright 2023 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.bluetooth.audio;
@VintfStability
union CodecSpecificCapabilitiesLtv {
android.hardware.bluetooth.audio.CodecSpecificCapabilitiesLtv.SupportedSamplingFrequencies supportedSamplingFrequencies;
android.hardware.bluetooth.audio.CodecSpecificCapabilitiesLtv.SupportedFrameDurations supportedFrameDurations;
android.hardware.bluetooth.audio.CodecSpecificCapabilitiesLtv.SupportedAudioChannelCounts supportedAudioChannelCounts;
android.hardware.bluetooth.audio.CodecSpecificCapabilitiesLtv.SupportedOctetsPerCodecFrame supportedOctetsPerCodecFrame;
android.hardware.bluetooth.audio.CodecSpecificCapabilitiesLtv.SupportedMaxCodecFramesPerSDU supportedMaxCodecFramesPerSDU;
parcelable SupportedSamplingFrequencies {
int bitmask;
const int HZ8000 = 0x0001;
const int HZ11025 = 0x0002;
const int HZ16000 = 0x0004;
const int HZ22050 = 0x0008;
const int HZ24000 = 0x0010;
const int HZ32000 = 0x0020;
const int HZ44100 = 0x0040;
const int HZ48000 = 0x0080;
const int HZ88200 = 0x0100;
const int HZ96000 = 0x0200;
const int HZ176400 = 0x0400;
const int HZ192000 = 0x0800;
const int HZ384000 = 0x1000;
}
parcelable SupportedFrameDurations {
int bitmask;
const int US7500 = 0x01;
const int US10000 = 0x02;
const int US7500PREFERRED = 0x10;
const int US10000PREFERRED = 0x20;
}
parcelable SupportedAudioChannelCounts {
int bitmask;
const int ONE = 0x01;
const int TWO = 0x02;
const int THREE = 0x04;
const int FOUR = 0x08;
const int FIVE = 0x10;
const int SIX = 0x20;
const int SEVEN = 0x40;
const int EIGHT = 0x80;
}
parcelable SupportedOctetsPerCodecFrame {
int minimum;
int maximum;
}
parcelable SupportedMaxCodecFramesPerSDU {
int value;
}
}

View File

@@ -0,0 +1,101 @@
/*
* Copyright 2023 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.bluetooth.audio;
@VintfStability
union CodecSpecificConfigurationLtv {
android.hardware.bluetooth.audio.CodecSpecificConfigurationLtv.CodecFrameBlocksPerSDU codecFrameBlocksPerSDU;
android.hardware.bluetooth.audio.CodecSpecificConfigurationLtv.SamplingFrequency samplingFrequency;
android.hardware.bluetooth.audio.CodecSpecificConfigurationLtv.FrameDuration frameDuration;
android.hardware.bluetooth.audio.CodecSpecificConfigurationLtv.AudioChannelAllocation audioChannelAllocation;
android.hardware.bluetooth.audio.CodecSpecificConfigurationLtv.OctetsPerCodecFrame octetsPerCodecFrame;
@Backing(type="byte")
enum SamplingFrequency {
HZ8000 = 0x01,
HZ11025 = 0x02,
HZ16000 = 0x03,
HZ22050 = 0x04,
HZ24000 = 0x05,
HZ32000 = 0x06,
HZ44100 = 0x07,
HZ48000 = 0x08,
HZ88200 = 0x09,
HZ96000 = 0x0A,
HZ176400 = 0x0B,
HZ192000 = 0x0C,
HZ384000 = 0x0D,
}
@Backing(type="byte")
enum FrameDuration {
US7500 = 0x00,
US10000 = 0x01,
}
parcelable AudioChannelAllocation {
int bitmask;
const int NOT_ALLOWED = 0x00000000;
const int FRONT_LEFT = 0x00000001;
const int FRONT_RIGHT = 0x00000002;
const int FRONT_CENTER = 0x00000004;
const int LOW_FREQUENCY_EFFECTS_1 = 0x00000008;
const int BACK_LEFT = 0x00000010;
const int BACK_RIGHT = 0x00000020;
const int FRONT_LEFT_OF_CENTER = 0x00000040;
const int FRONT_RIGHT_OF_CENTER = 0x00000080;
const int BACK_CENTER = 0x00000100;
const int LOW_FREQUENCY_EFFECTS_2 = 0x00000200;
const int SIDE_LEFT = 0x00000400;
const int SIDE_RIGHT = 0x00000800;
const int TOP_FRONT_LEFT = 0x00001000;
const int TOP_FRONT_RIGHT = 0x00002000;
const int TOP_FRONT_CENTER = 0x00004000;
const int TOP_CENTER = 0x00008000;
const int TOP_BACK_LEFT = 0x00010000;
const int TOP_BACK_RIGHT = 0x00020000;
const int TOP_SIDE_LEFT = 0x00040000;
const int TOP_SIDE_RIGHT = 0x00080000;
const int TOP_BACK_CENTER = 0x00100000;
const int BOTTOM_FRONT_CENTER = 0x00200000;
const int BOTTOM_FRONT_LEFT = 0x00400000;
const int BOTTOM_FRONT_RIGHT = 0x00800000;
const int FRONT_LEFT_WIDE = 0x01000000;
const int FRONT_RIGHT_WIDE = 0x02000000;
const int LEFT_SURROUND = 0x04000000;
const int RIGHT_SURROUND = 0x08000000;
}
parcelable OctetsPerCodecFrame {
int value;
}
parcelable CodecFrameBlocksPerSDU {
int value;
}
}

View File

@@ -0,0 +1,45 @@
/*
* Copyright 2023 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.bluetooth.audio;
@VintfStability
parcelable ConfigurationFlags {
int bitmask;
const int NONE = 0x0000;
const int LOSSLESS = 0x0001;
const int LOW_LATENCY = 0x0002;
const int ALLOW_ASYMMETRIC_CONFIGURATIONS = 0x0003;
const int SPATIAL_AUDIO = 0x0004;
const int PROVIDE_ASE_METADATA = 0x0005;
const int MONO_MIC_CONFIGURATION = 0x0006;
}

View File

@@ -42,4 +42,112 @@ interface IBluetoothAudioProvider {
void setLowLatencyModeAllowed(in boolean allowed);
android.hardware.bluetooth.audio.A2dpStatus parseA2dpConfiguration(in android.hardware.bluetooth.audio.CodecId codecId, in byte[] configuration, out android.hardware.bluetooth.audio.CodecParameters codecParameters);
@nullable android.hardware.bluetooth.audio.A2dpConfiguration getA2dpConfiguration(in List<android.hardware.bluetooth.audio.A2dpRemoteCapabilities> remoteA2dpCapabilities, in android.hardware.bluetooth.audio.A2dpConfigurationHint hint);
void setCodecPriority(in android.hardware.bluetooth.audio.CodecId codecId, int priority);
List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseConfigurationSetting> getLeAudioAseConfiguration(in @nullable List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDeviceCapabilities> remoteSinkAudioCapabilities, in @nullable List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDeviceCapabilities> remoteSourceAudioCapabilities, in List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioConfigurationRequirement> requirements);
android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseQosConfigurationPair getLeAudioAseQosConfiguration(in android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseQosConfigurationRequirement qosRequirement);
android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDataPathConfigurationPair getLeAudioAseDatapathConfiguration(in android.hardware.bluetooth.audio.AudioContext context, in android.hardware.bluetooth.audio.LeAudioConfiguration.StreamMap[] streamMap);
void onSinkAseMetadataChanged(in android.hardware.bluetooth.audio.IBluetoothAudioProvider.AseState state, int cigId, int cisId, in @nullable android.hardware.bluetooth.audio.MetadataLtv[] metadata);
void onSourceAseMetadataChanged(in android.hardware.bluetooth.audio.IBluetoothAudioProvider.AseState state, int cigId, int cisId, in @nullable android.hardware.bluetooth.audio.MetadataLtv[] metadata);
@VintfStability
parcelable LeAudioDeviceCapabilities {
android.hardware.bluetooth.audio.CodecId codecId;
android.hardware.bluetooth.audio.CodecSpecificCapabilitiesLtv[] codecSpecificCapabilities;
@nullable byte[] vendorCodecSpecificCapabilities;
@nullable android.hardware.bluetooth.audio.MetadataLtv[] metadata;
}
@VintfStability
parcelable LeAudioDataPathConfiguration {
int dataPathId;
android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDataPathConfiguration.DataPathConfiguration dataPathConfiguration;
android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDataPathConfiguration.IsoDataPathConfiguration isoDataPathConfiguration;
@VintfStability
parcelable IsoDataPathConfiguration {
android.hardware.bluetooth.audio.CodecId codecId;
boolean isTransparent;
int controllerDelayUs;
@nullable byte[] configuration;
}
@VintfStability
parcelable DataPathConfiguration {
@nullable byte[] configuration;
}
}
@VintfStability
parcelable LeAudioAseQosConfiguration {
int sduIntervalUs;
android.hardware.bluetooth.audio.IBluetoothAudioProvider.Framing framing;
android.hardware.bluetooth.audio.Phy[] phy;
int maxTransportLatencyMs;
int maxSdu;
int retransmissionNum;
}
@Backing(type="byte") @VintfStability
enum Packing {
SEQUENTIAL = 0x00,
INTERLEAVED = 0x01,
}
@Backing(type="byte") @VintfStability
enum Framing {
UNFRAMED = 0x00,
FRAMED = 0x01,
}
@VintfStability
parcelable LeAudioAseConfigurationSetting {
android.hardware.bluetooth.audio.AudioContext audioContext;
android.hardware.bluetooth.audio.IBluetoothAudioProvider.Packing packing;
@nullable List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseConfigurationSetting.AseDirectionConfiguration> sinkAseConfiguration;
@nullable List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseConfigurationSetting.AseDirectionConfiguration> sourceAseConfiguration;
@nullable android.hardware.bluetooth.audio.ConfigurationFlags flags;
@VintfStability
parcelable AseDirectionConfiguration {
android.hardware.bluetooth.audio.LeAudioAseConfiguration aseConfiguration;
@nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseQosConfiguration qosConfiguration;
@nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDataPathConfiguration dataPathConfiguration;
}
}
@VintfStability
parcelable LeAudioConfigurationRequirement {
android.hardware.bluetooth.audio.AudioContext audioContext;
@nullable List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioConfigurationRequirement.AseDirectionRequirement> sinkAseRequirement;
@nullable List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioConfigurationRequirement.AseDirectionRequirement> sourceAseRequirement;
@nullable android.hardware.bluetooth.audio.ConfigurationFlags flags;
@VintfStability
parcelable AseDirectionRequirement {
android.hardware.bluetooth.audio.LeAudioAseConfiguration aseConfiguration;
}
}
@VintfStability
parcelable LeAudioAseQosConfigurationRequirement {
android.hardware.bluetooth.audio.AudioContext contextType;
@nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseQosConfigurationRequirement.AseQosDirectionRequirement sinkAseQosRequirement;
@nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseQosConfigurationRequirement.AseQosDirectionRequirement sourceAseQosRequirement;
@nullable android.hardware.bluetooth.audio.ConfigurationFlags[] flags;
@VintfStability
parcelable AseQosDirectionRequirement {
android.hardware.bluetooth.audio.IBluetoothAudioProvider.Framing framing;
android.hardware.bluetooth.audio.Phy[] preferredPhy;
int preferredRetransmissionNum;
int maxTransportLatencyMs;
int presentationDelayMinUs;
int presentationDelayMaxUs;
int preferredPresentationDelayMinUs;
int preferredPresentationDelayMaxUs;
android.hardware.bluetooth.audio.LeAudioAseConfiguration aseConfiguration;
}
}
@VintfStability
parcelable LeAudioAseQosConfigurationPair {
@nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseQosConfiguration sinkQosConfiguration;
@nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseQosConfiguration sourceQosConfiguration;
}
parcelable LeAudioDataPathConfigurationPair {
@nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDataPathConfiguration inputConfig;
@nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDataPathConfiguration outputConfig;
}
@Backing(type="byte") @VintfStability
enum AseState {
ENABLING = 0x00,
STREAMING = 0x01,
DISABLING = 0x02,
}
}

View File

@@ -41,5 +41,6 @@ interface IBluetoothAudioProviderFactory {
parcelable ProviderInfo {
String name;
android.hardware.bluetooth.audio.CodecInfo[] codecInfos;
boolean supportsMultidirectionalCapabilities;
}
}

View File

@@ -0,0 +1,50 @@
/*
* Copyright 2023 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.bluetooth.audio;
@VintfStability
parcelable LeAudioAseConfiguration {
android.hardware.bluetooth.audio.LeAudioAseConfiguration.TargetLatency targetLatency;
android.hardware.bluetooth.audio.Phy targetPhy;
@nullable android.hardware.bluetooth.audio.CodecId codecId;
android.hardware.bluetooth.audio.CodecSpecificConfigurationLtv[] codecConfiguration;
@nullable byte[] vendorCodecConfiguration;
@nullable android.hardware.bluetooth.audio.MetadataLtv[] metadata;
@Backing(type="byte") @VintfStability
enum TargetLatency {
UNDEFINED = 0x00,
LOWER = 0x01,
BALANCED_LATENCY_RELIABILITY = 0x02,
HIGHER_RELIABILITY = 0x03,
}
}

View File

@@ -44,5 +44,16 @@ parcelable LeAudioConfiguration {
char streamHandle;
int audioChannelAllocation;
boolean isStreamActive;
@nullable android.hardware.bluetooth.audio.LeAudioAseConfiguration aseConfiguration;
@nullable android.hardware.bluetooth.audio.ConfigurationFlags flags;
@nullable android.hardware.bluetooth.audio.LeAudioConfiguration.StreamMap.BluetoothDeviceAddress bluetoothDeviceAddress;
parcelable BluetoothDeviceAddress {
byte[6] deviceAddress;
android.hardware.bluetooth.audio.LeAudioConfiguration.StreamMap.BluetoothDeviceAddress.DeviceAddressType deviceAddressType;
enum DeviceAddressType {
BLE_ADDRESS_PUBLIC = 0x00,
BLE_ADDRESS_RANDOM = 0x01,
}
}
}
}

View File

@@ -0,0 +1,50 @@
/*
* Copyright 2023 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.bluetooth.audio;
@VintfStability
union MetadataLtv {
android.hardware.bluetooth.audio.MetadataLtv.PreferredAudioContexts preferredAudioContexts;
android.hardware.bluetooth.audio.MetadataLtv.StreamingAudioContexts streamingAudioContexts;
android.hardware.bluetooth.audio.MetadataLtv.VendorSpecific vendorSpecific;
parcelable PreferredAudioContexts {
android.hardware.bluetooth.audio.AudioContext values;
}
parcelable StreamingAudioContexts {
android.hardware.bluetooth.audio.AudioContext values;
}
parcelable VendorSpecific {
int companyId;
byte[] opaqueValue;
}
}

View File

@@ -0,0 +1,41 @@
/*
* Copyright 2023 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.bluetooth.audio;
@Backing(type="byte") @VintfStability
enum Phy {
UNDEFINED = 0x00,
ONE_M = 0x01,
TWO_M = 0x02,
CODED = 0x03,
}

View File

@@ -18,6 +18,7 @@ package android.hardware.bluetooth.audio;
import android.hardware.bluetooth.audio.ChannelMode;
import android.hardware.bluetooth.audio.CodecId;
import android.hardware.bluetooth.audio.ConfigurationFlags;
/**
* General information about a Codec
@@ -86,11 +87,47 @@ parcelable CodecInfo {
boolean useControllerCodec = true;
}
/**
* LE Audio Context
*/
parcelable LeAudio {
/**
* Channel configuration: Mono, Dual-Mono or Stereo
*/
ChannelMode[] channelMode;
/**
* Supported sampling frequencies, in Hz.
*/
int[] samplingFrequencyHz;
/*
* FrameDuration in microseconds.
*/
int[] frameDurationUs;
/**
* - Fixed point resolution, basically 16, 24 or 32 bits by samples.
* The value 32 should be used for floating point representation.
*
* When the bitdepth is not an encoding/decoding parameter (don't take
* part in the interoperability), the `bitdepth` list shall have a
* single element indicating the bitdepth selected for the platform.
*/
int[] bitdepth;
/**
* Additional configuration flags
*/
@nullable ConfigurationFlags flags;
}
/**
* Specific informations,
* depending on transport.
*/
union Transport {
LeAudio leAudio;
A2dp a2dp;
Hfp hfp;
}

View File

@@ -0,0 +1,80 @@
/*
* Copyright 2023 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.bluetooth.audio;
/**
* Used to exchange generic remote device codec specific capabilities between
* the stack and the provider. As defined in Bluetooth Assigned Numbers,
* Sec. 6.12.4.
*/
@VintfStability
union CodecSpecificCapabilitiesLtv {
parcelable SupportedSamplingFrequencies {
const int HZ8000 = 0x0001;
const int HZ11025 = 0x0002;
const int HZ16000 = 0x0004;
const int HZ22050 = 0x0008;
const int HZ24000 = 0x0010;
const int HZ32000 = 0x0020;
const int HZ44100 = 0x0040;
const int HZ48000 = 0x0080;
const int HZ88200 = 0x0100;
const int HZ96000 = 0x0200;
const int HZ176400 = 0x0400;
const int HZ192000 = 0x0800;
const int HZ384000 = 0x1000;
/* 16 bits wide bit mask */
int bitmask;
}
parcelable SupportedFrameDurations {
const int US7500 = 0x01;
const int US10000 = 0x02;
// Bits 2-3 are RFU
const int US7500PREFERRED = 0x10;
const int US10000PREFERRED = 0x20;
/* 8 bit wide bit mask */
int bitmask;
}
parcelable SupportedAudioChannelCounts {
const int ONE = 0x01;
const int TWO = 0x02;
const int THREE = 0x04;
const int FOUR = 0x08;
const int FIVE = 0x10;
const int SIX = 0x20;
const int SEVEN = 0x40;
const int EIGHT = 0x80;
/* 8 bit wide bit mask */
int bitmask;
}
parcelable SupportedOctetsPerCodecFrame {
int minimum;
int maximum;
}
parcelable SupportedMaxCodecFramesPerSDU {
int value;
}
SupportedSamplingFrequencies supportedSamplingFrequencies;
SupportedFrameDurations supportedFrameDurations;
SupportedAudioChannelCounts supportedAudioChannelCounts;
SupportedOctetsPerCodecFrame supportedOctetsPerCodecFrame;
SupportedMaxCodecFramesPerSDU supportedMaxCodecFramesPerSDU;
}

View File

@@ -0,0 +1,96 @@
/*
* Copyright 2023 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.bluetooth.audio;
/**
* Used to exchange generic remote device configuration between the stack and
* the provider. As defined in Bluetooth Assigned Numbers, Sec. 6.12.5.
*/
@VintfStability
union CodecSpecificConfigurationLtv {
@Backing(type="byte")
enum SamplingFrequency {
HZ8000 = 0x01,
HZ11025 = 0x02,
HZ16000 = 0x03,
HZ22050 = 0x04,
HZ24000 = 0x05,
HZ32000 = 0x06,
HZ44100 = 0x07,
HZ48000 = 0x08,
HZ88200 = 0x09,
HZ96000 = 0x0A,
HZ176400 = 0x0B,
HZ192000 = 0x0C,
HZ384000 = 0x0D,
}
@Backing(type="byte")
enum FrameDuration {
US7500 = 0x00,
US10000 = 0x01,
}
parcelable AudioChannelAllocation {
const int NOT_ALLOWED = 0x00000000;
const int FRONT_LEFT = 0x00000001;
const int FRONT_RIGHT = 0x00000002;
const int FRONT_CENTER = 0x00000004;
const int LOW_FREQUENCY_EFFECTS_1 = 0x00000008;
const int BACK_LEFT = 0x00000010;
const int BACK_RIGHT = 0x00000020;
const int FRONT_LEFT_OF_CENTER = 0x00000040;
const int FRONT_RIGHT_OF_CENTER = 0x00000080;
const int BACK_CENTER = 0x00000100;
const int LOW_FREQUENCY_EFFECTS_2 = 0x00000200;
const int SIDE_LEFT = 0x00000400;
const int SIDE_RIGHT = 0x00000800;
const int TOP_FRONT_LEFT = 0x00001000;
const int TOP_FRONT_RIGHT = 0x00002000;
const int TOP_FRONT_CENTER = 0x00004000;
const int TOP_CENTER = 0x00008000;
const int TOP_BACK_LEFT = 0x00010000;
const int TOP_BACK_RIGHT = 0x00020000;
const int TOP_SIDE_LEFT = 0x00040000;
const int TOP_SIDE_RIGHT = 0x00080000;
const int TOP_BACK_CENTER = 0x00100000;
const int BOTTOM_FRONT_CENTER = 0x00200000;
const int BOTTOM_FRONT_LEFT = 0x00400000;
const int BOTTOM_FRONT_RIGHT = 0x00800000;
const int FRONT_LEFT_WIDE = 0x01000000;
const int FRONT_RIGHT_WIDE = 0x02000000;
const int LEFT_SURROUND = 0x04000000;
const int RIGHT_SURROUND = 0x08000000;
// Bit mask of Audio Locations
int bitmask;
}
parcelable OctetsPerCodecFrame {
int value;
}
parcelable CodecFrameBlocksPerSDU {
int value;
}
CodecFrameBlocksPerSDU codecFrameBlocksPerSDU;
SamplingFrequency samplingFrequency;
FrameDuration frameDuration;
AudioChannelAllocation audioChannelAllocation;
OctetsPerCodecFrame octetsPerCodecFrame;
}

View File

@@ -0,0 +1,54 @@
/*
* Copyright 2023 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.bluetooth.audio;
/**
* Coding fetures
*/
@VintfStability
parcelable ConfigurationFlags {
const int NONE = 0x0000;
/*
* Set for the lossless configurations
*/
const int LOSSLESS = 0x0001;
/*
* Set for the low latency configurations
*/
const int LOW_LATENCY = 0x0002;
/*
* When set, asymmetric configuration for SINK and SOURCE can be used.
* e.g. in GAMING mode stream for 32kHz and back channel for 16 kHz
*/
const int ALLOW_ASYMMETRIC_CONFIGURATIONS = 0x0003;
/*
* Set for the spatial audio configurations
*/
const int SPATIAL_AUDIO = 0x0004;
/*
* When set, BluetoothAudioProvider requests to receive ASE metadata.
* In such case onSinkAseMetadataChanged() and onSourceAseMetadataChanged
* will be called.
*/
const int PROVIDE_ASE_METADATA = 0x0005;
/*
* Set for mono microphone configurations
*/
const int MONO_MIC_CONFIGURATION = 0x0006;
int bitmask;
}

View File

@@ -21,11 +21,18 @@ import android.hardware.bluetooth.audio.A2dpConfigurationHint;
import android.hardware.bluetooth.audio.A2dpRemoteCapabilities;
import android.hardware.bluetooth.audio.A2dpStatus;
import android.hardware.bluetooth.audio.AudioConfiguration;
import android.hardware.bluetooth.audio.AudioContext;
import android.hardware.bluetooth.audio.BluetoothAudioStatus;
import android.hardware.bluetooth.audio.CodecId;
import android.hardware.bluetooth.audio.CodecParameters;
import android.hardware.bluetooth.audio.CodecSpecificCapabilitiesLtv;
import android.hardware.bluetooth.audio.ConfigurationFlags;
import android.hardware.bluetooth.audio.IBluetoothAudioPort;
import android.hardware.bluetooth.audio.LatencyMode;
import android.hardware.bluetooth.audio.LeAudioAseConfiguration;
import android.hardware.bluetooth.audio.LeAudioConfiguration.StreamMap;
import android.hardware.bluetooth.audio.MetadataLtv;
import android.hardware.bluetooth.audio.Phy;
import android.hardware.common.fmq.MQDescriptor;
import android.hardware.common.fmq.SynchronizedReadWrite;
@@ -124,4 +131,421 @@ interface IBluetoothAudioProvider {
*/
@nullable A2dpConfiguration getA2dpConfiguration(
in List<A2dpRemoteCapabilities> remoteA2dpCapabilities, in A2dpConfigurationHint hint);
/**
* Set specific codec priority
*
* It should be assumed that the external module will start with all its
* integrated codecs priority 0 by default.
*
* @param codecId: codecId
* @param priority: 0 for no priority, -1 for codec disabled,
* from 1 to N, where 1 is highest.
*/
void setCodecPriority(in CodecId codecId, int priority);
/**
* LE Audio device Capabilities - as defined in Bluetooth Published Audio
* Capabilities Service specification, v1.0.1, Sec. 3.1: "Sink PAC", and
* Sec. 3.3: "Source PAC".
*/
@VintfStability
parcelable LeAudioDeviceCapabilities {
/**
* Codec Identifier
*/
CodecId codecId;
/**
* Codec capabilities, packed as LTV.
*/
CodecSpecificCapabilitiesLtv[] codecSpecificCapabilities;
/**
* Vendor codec specific capabilities.
*
* This will not be parsed by the BT stack, but passed to the vendor
* module who can interpret this and based on that select the proper
* vendor specific codec configuration.
*/
@nullable byte[] vendorCodecSpecificCapabilities;
/**
* Audio capabilities metadata, packed as LTV.
*/
@nullable MetadataLtv[] metadata;
}
@VintfStability
parcelable LeAudioDataPathConfiguration {
/**
* Vendor specific data path identifier
*/
int dataPathId;
/**
* Used in the HCI_LE_Setup_ISO_Data_Path (0x006E).
* As defined in Bluetooth Core Specification Version
* 5.3, Vol 4, Part E, Sec. 7.8.109: "LE Setup ISO Data Path command".
*/
@VintfStability
parcelable IsoDataPathConfiguration {
/**
* Codec ID - Valid Codec Identifier matching the selected codec
*/
CodecId codecId;
/**
* Whether the transparent air mode should be set as a coding format
* in the HCI_LE_Setup_ISO_Data_Path command, indicating that the
* codec is not in the controller.
*
* If set to true, 0x03 (transparent air mode) will be used as a
* Codec_ID coding format and the `byte[] configuration` field shall
* remain empty. Otherwise the Codec_ID field will be set to
* according to BT specification (0xFF coding format, company ID,
* codec ID for vendor codecs, or according to Codec_ID identifiers
* defined in the Assigned Numbers for the non-vendor codecs).
*/
boolean isTransparent;
/**
* Controller delay (in microseconds)
*/
int controllerDelayUs;
/**
* Codec specific LE Audio ISO data path configuration
* must be null when codec ID is 0x03 transparent
*/
@nullable byte[] configuration;
}
/**
* Used in HCI_Configure_Data_Path (0x0083)
* As defined in Bluetooth Core Specification Version
* 5.3, Vol 4, Part E, Sec. 7.3.101: "Configure Data Path command".
*/
@VintfStability
parcelable DataPathConfiguration {
/**
* Vendor specific data path configuration
*/
@nullable byte[] configuration;
}
/**
* Data path configuration
*/
DataPathConfiguration dataPathConfiguration;
/**
* ISO data path configuration
*/
IsoDataPathConfiguration isoDataPathConfiguration;
}
/* All the LeAudioAseQosConfiguration parameters are defined by the
* Bluetooth Audio Stream Control Service specification v.1.0, Sec. 5: "ASE
* Control Operations".
*/
@VintfStability
parcelable LeAudioAseQosConfiguration {
/**
* SDU Interval (in microseconds) used in Set CIG Parameters command and
* Configure QoS.
*/
int sduIntervalUs;
/**
* Framing used in Set CIG Parameters command and Configure QoS
*/
Framing framing;
/**
* Phy used in Set CIG Parameters command and Configure QoS
*/
Phy[] phy;
/**
* Max transport latency (in milliseconds) used in Set CIG Parameters
* command and Configure QoS.
*/
int maxTransportLatencyMs;
/**
* Max SDU used in Set CIG Parameters command and Configure QoS
*/
int maxSdu;
/**
* Retransmission number used in Set CIG Parameters command and
* Configure QoS
*/
int retransmissionNum;
}
/**
* Connected Isochronous Channel arrangement within the Connected
* Isochronous Group. As defined in Bluetooth Core Specification Version
* 5.3, Vol 4, Part E, Sec. 7.8.97.
*/
@VintfStability
@Backing(type="byte")
enum Packing {
SEQUENTIAL = 0x00,
INTERLEAVED = 0x01,
}
/**
* Isochronous Data PDU framing parameter. As defined in Bluetooth Core
* Specification Version 5.3, Vol 4, Part E, Sec. 7.8.97.
*/
@VintfStability
@Backing(type="byte")
enum Framing {
UNFRAMED = 0x00,
FRAMED = 0x01,
}
@VintfStability
parcelable LeAudioAseConfigurationSetting {
/**
* Audio Context that this configuration apply to
*/
AudioContext audioContext;
/**
* Sequential or interleave packing used in Set CIG Parameters command
*/
Packing packing;
@VintfStability
parcelable AseDirectionConfiguration {
/**
* ASE configuration
*/
LeAudioAseConfiguration aseConfiguration;
/**
* QoS Configuration
*/
@nullable LeAudioAseQosConfiguration qosConfiguration;
/**
* Data path configuration
* If not provided, getLeAudioAseDatapathConfiguration() will be
* called during the configuration, increasing the stream
* establishment time (not recommended).
*/
@nullable LeAudioDataPathConfiguration dataPathConfiguration;
}
/**
* Sink ASEs configuration
*/
@nullable List<AseDirectionConfiguration> sinkAseConfiguration;
/**
* Source ASEs configuration
*/
@nullable List<AseDirectionConfiguration> sourceAseConfiguration;
/**
* Additional flags, used for configurations with special features
*/
@nullable ConfigurationFlags flags;
}
/**
* ASE configuration requirements set by the BT stack.
*/
@VintfStability
parcelable LeAudioConfigurationRequirement {
/**
* Audio Contect that this requirements apply to
*/
AudioContext audioContext;
@VintfStability
parcelable AseDirectionRequirement {
/**
* Optional ASE configurations requirements
*
* Note that the Host can set as many or as little parameters in
* the `aseConfiguration.codecConfiguration` field as needed, to
* closely or loosely specify the requirements. If any parameter
* is not specified, the offloader can choose it freely. The
* offloader should put all the specified parameters into the
* `aseConfiguration.codecConfiguration` field of the returned
* configuration to let the BT stack verify if the requirements
* were met. The mandatory requirement set by the BT stack will be
* the Audio Location.
*/
LeAudioAseConfiguration aseConfiguration;
}
/**
* Sink ASEs configuration setting
*/
@nullable List<AseDirectionRequirement> sinkAseRequirement;
/**
* Source ASEs configuration setting
*/
@nullable List<AseDirectionRequirement> sourceAseRequirement;
/**
* Additional flags, used to request configurations with special
* features
*/
@nullable ConfigurationFlags flags;
}
/**
* Method that returns a proposed ASE configuration settings for each
* requested audio context type
*
* Note: _ENCODING session provides SINK ASE configuration
* and _DECODING session provides SOURCE ASE configuration unless
* BluetoothAudioProvider sets supportsMultidirectionalCapabilities to
* true in ProviderInfo.
* If supportsMultidirectionalCapabilities is set to true then the
* BluetoothStack expects to get configuration list for SINK and SOURCE
* on either _ENCODING or _DECODING session.
*
* @param remoteSinkAudioCapabilities List of remote sink capabilities
* supported by an active group devices.
* @param remoteSourceAudioCapabilities List of remote source capabilities
* supported by an active group devices.
* @param requirements ASE configuration requirements
*
* @return List<LeAudioAseConfigurationSetting>
*/
List<LeAudioAseConfigurationSetting> getLeAudioAseConfiguration(
in @nullable List<LeAudioDeviceCapabilities> remoteSinkAudioCapabilities,
in @nullable List<LeAudioDeviceCapabilities> remoteSourceAudioCapabilities,
in List<LeAudioConfigurationRequirement> requirements);
@VintfStability
parcelable LeAudioAseQosConfigurationRequirement {
/**
* Audio Contect Type that this requirements apply to
*/
AudioContext contextType;
/**
* QoS preferences received in Codec Configured ASE state. As defined in
* bluetooth service specification: Audio Stream Control Service" V1.0,
* Sec. 4.1 Audio Stream Endpoints, Table 4.3:"Additional_ASE_Parameters
* format when ASE_State = 0x01 (Codec Configured)".
*/
@VintfStability
parcelable AseQosDirectionRequirement {
/**
* Support for unframed Isochronous Adaptation Layer PDUs.
* When set to FRAMED, the unframed PDUs are not supported.
*/
Framing framing;
/**
* Preferred value for the PHY parameter to be written by the client
* for this ASE in the Config QoS operation
*/
Phy[] preferredPhy;
/**
* Preferred value for the Retransmission Number parameter to be
* written by the client for this ASE in the Config QoS operation.
*/
int preferredRetransmissionNum;
/**
* Preferred value for the Max Transport Latency parameter to be
* written by the client for this ASE in the Config QoS operation.
*/
int maxTransportLatencyMs;
/**
* Minimum server supported Presentation Delay (in microseconds) for
* an ASE.
*/
int presentationDelayMinUs;
/**
* Maximum server supported Presentation Delay (in microseconds) for
* an ASE.
*/
int presentationDelayMaxUs;
/**
* Preferred minimum Presentation Delay (in microseconds) for an
* ASE.
*/
int preferredPresentationDelayMinUs;
/**
* Preferred maximum Presentation Delay (in microseconds) for an
* ASE.
*/
int preferredPresentationDelayMaxUs;
/**
* ASE configuration
*/
LeAudioAseConfiguration aseConfiguration;
}
/**
* Sink ASEs configuration setting
*/
@nullable AseQosDirectionRequirement sinkAseQosRequirement;
/**
* Source ASEs configuration setting
*/
@nullable AseQosDirectionRequirement sourceAseQosRequirement;
/**
* Additional configuration flags requirements
*/
@nullable ConfigurationFlags[] flags;
}
/**
* A directional pair for QoS configuration. Either one or both directions
* can be set, depending on the audio context and the requirements provided
* to getLeAudioAseQosConfiguration().
*/
@VintfStability
parcelable LeAudioAseQosConfigurationPair {
@nullable LeAudioAseQosConfiguration sinkQosConfiguration;
@nullable LeAudioAseQosConfiguration sourceQosConfiguration;
}
/**
* Method that returns an ASE QoS configuration settings for the given ASE
* configuration,taking an ASE preferenced QoS parameters. It should be used
* to negotiaite the QoS parameters, when the initialy received QoS
* parameters are not within the boundaries received from the remote device
* after configuring the ASEs.
*
* @param qosRequirement ASE QoS configurations requirements
*
* @return LeAudioAseQosConfigurationPair
*/
LeAudioAseQosConfigurationPair getLeAudioAseQosConfiguration(
in LeAudioAseQosConfigurationRequirement qosRequirement);
/**
* Audio data path configuration.
*/
parcelable LeAudioDataPathConfigurationPair {
/* Host to Controller data path */
@nullable LeAudioDataPathConfiguration inputConfig;
/* Controller to Host data path */
@nullable LeAudioDataPathConfiguration outputConfig;
}
/**
* Used to get a data path configuration which dynamically depends on CIS
* connection handles in StreamMap. This is used if non-dynamic data path
* was not provided in LeAudioAseConfigurationSetting. Calling this during
* the unicast audio stream establishment might slightly delay the stream
* start.
*/
LeAudioDataPathConfigurationPair getLeAudioAseDatapathConfiguration(
in AudioContext context, in StreamMap[] streamMap);
/*
* Audio Stream Endpoint state used to report Metadata changes on the remote
* device audio endpoints.
*/
@VintfStability
@Backing(type="byte")
enum AseState {
ENABLING = 0x00,
STREAMING = 0x01,
DISABLING = 0x02,
}
/**
* Used to report metadata changes to the provider. This allows for a
* pseudo communication channel between the remote device and the provider,
* using the vendor specific metadata of the changing ASE state.
* It is used only when ASE is using configurations marked with the
* `PROVIDE_ASE_METADATA` flag.
*/
void onSinkAseMetadataChanged(
in AseState state, int cigId, int cisId, in @nullable MetadataLtv[] metadata);
void onSourceAseMetadataChanged(
in AseState state, int cigId, int cisId, in @nullable MetadataLtv[] metadata);
}

View File

@@ -69,19 +69,33 @@ interface IBluetoothAudioProviderFactory {
* General information relative to a provider
* - An optional name
* - A list of codec information
* - supportsMultidirectionalCapabilities if is set to false it means each
* session i.e. _ENCODING and _DECODING is responsible to provide
* configuration for a single direction:
* _ENCODING for SINK ASE
* _DECODING for SOURCE ASE
*
* If supportsMultidirectionalCapabilities is set to true, then either
* _ENCODING or _DECODING session can provide the configurations for either
* direction.
*/
@VintfStability
parcelable ProviderInfo {
String name;
CodecInfo[] codecInfos;
boolean supportsMultidirectionalCapabilities;
}
/**
* Get general information relative to a provider.
*
* This can be called at any time, or just once during the BT stack
* initialization.
*
* @param sessionType Hardware Offload provider (*_HARDWARE_OFFLOAD_*)
* @return General information relative to the provider.
* The `null` value can be returned when the provider is not available
* The `null` value can be returned when the provider is not
* available
*/
@nullable ProviderInfo getProviderInfo(in SessionType sessionType);
}

View File

@@ -0,0 +1,87 @@
/*
* Copyright 2023 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.bluetooth.audio;
import android.hardware.bluetooth.audio.CodecId;
import android.hardware.bluetooth.audio.CodecSpecificConfigurationLtv;
import android.hardware.bluetooth.audio.MetadataLtv;
import android.hardware.bluetooth.audio.Phy;
/**
* All the LeAudioAseConfiguration parameters are defined by the Bluetooth Audio
* Stream Control Service specification v.1.0, Sec. 5: "ASE Control Operations".
*/
@VintfStability
parcelable LeAudioAseConfiguration {
@VintfStability
@Backing(type="byte")
enum TargetLatency {
UNDEFINED = 0x00,
LOWER = 0x01,
BALANCED_LATENCY_RELIABILITY = 0x02,
HIGHER_RELIABILITY = 0x03,
}
/**
* Target latency used in Configure Codec command - Can be UNDEFINED when
* used inside the AseDirectionRequirement, but shall not be UNDEFINED when
* used inside LeAudioAseConfigurationSetting.
*/
TargetLatency targetLatency;
/**
* Target PHY used in Configure Codec command - Can be UNDEFINED when used
* inside the AseDirectionRequirement, but shall not be UNDEFINED when used
* inside LeAudioAseConfigurationSetting.
*/
Phy targetPhy;
/**
* Codec ID - Can be Null when used inside the AseDirectionRequirement, but
* shall not be Null when used inside LeAudioAseConfigurationSetting.
*/
@nullable CodecId codecId;
/**
* Codec configuration for ASE represented in the LTV types defined by
* Bluetooth SIG. Regardless of vendor specific configuration being used or
* not, this shall contain Bluetooth LTV types describing the common stream
* parameters, at least CodecSpecificConfigurationLtv.SamplingFrequency and
* CodecSpecificConfigurationLtv.AudioChannelAllocation. In addition, it
* should match aseConfiguration provided in LeAudioConfigurationRequirement
* as this will also be used to verify the requirements on the known LTV
* types.
*/
CodecSpecificConfigurationLtv[] codecConfiguration;
/**
* Vendor specific codec configuration for ASE.
*
* This will not be parsed by the BT stack but will be written to the remote
* device as the codec specific configuration as part of the codec configure
* control point operation. If this is populated, only the
* `vendorCodecConfiguration` will be used for the ASE configuration,
* otherwise `codecConfiguration` will be used. The BT stack will not merge
* it with the codecConfiguration for any purpose.
*/
@nullable byte[] vendorCodecConfiguration;
/**
* Metadata, packed as LTV - used to enable ASE. This is optional
*/
@nullable MetadataLtv[] metadata;
}

View File

@@ -17,6 +17,8 @@
package android.hardware.bluetooth.audio;
import android.hardware.bluetooth.audio.CodecType;
import android.hardware.bluetooth.audio.ConfigurationFlags;
import android.hardware.bluetooth.audio.LeAudioAseConfiguration;
import android.hardware.bluetooth.audio.LeAudioCodecConfiguration;
@VintfStability
@@ -29,16 +31,40 @@ parcelable LeAudioConfiguration {
*/
char streamHandle;
/*
* Audio channel allocation is a bit field, each enabled bit means that given audio
* direction, i.e. "left", or "right" is used. Ordering of audio channels comes from the
* least significant bit to the most significant bit. The valus follows the Bluetooth SIG
* Audio Location assigned number.
* Audio channel allocation is a bit field, each enabled bit means that
* given audio direction, i.e. "left", or "right" is used. Ordering of
* audio channels comes from the least significant bit to the most
* significant bit. The valus follows the Bluetooth SIG Audio Location
* assigned number.
*/
int audioChannelAllocation;
/*
* The stream handle status
*/
boolean isStreamActive;
/*
* LE Audio device ASE configuration
*/
@nullable LeAudioAseConfiguration aseConfiguration;
/*
* Additional flags, used for configurations with special features
*/
@nullable ConfigurationFlags flags;
parcelable BluetoothDeviceAddress {
enum DeviceAddressType {
BLE_ADDRESS_PUBLIC = 0x00,
BLE_ADDRESS_RANDOM = 0x01,
}
/**
* Peer device address. It should be non zero when isStreamActive is true
*/
byte[6] deviceAddress;
/**
* Peer device address type.
*/
DeviceAddressType deviceAddressType;
}
@nullable BluetoothDeviceAddress bluetoothDeviceAddress;
}
CodecType codecType;
StreamMap[] streamMap;

View File

@@ -0,0 +1,44 @@
/*
* Copyright 2023 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.bluetooth.audio;
import android.hardware.bluetooth.audio.AudioContext;
/**
* Used to exchange generic metadata between the stack and the provider.
* As defined in Bluetooth Assigned Numbers, Sec. 6.12.6.
*/
@VintfStability
union MetadataLtv {
parcelable PreferredAudioContexts {
AudioContext values;
}
parcelable StreamingAudioContexts {
AudioContext values;
}
/* This is an opaque container for passing metadata between the provider and
* the remote device. It must not be interpreted by the BT stack.
*/
parcelable VendorSpecific {
int companyId;
byte[] opaqueValue;
}
PreferredAudioContexts preferredAudioContexts;
StreamingAudioContexts streamingAudioContexts;
VendorSpecific vendorSpecific;
}

View File

@@ -0,0 +1,29 @@
/*
* Copyright 2023 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.bluetooth.audio;
/**
* Used to exchange generic Phy parameter between the stack and the provider.
*/
@VintfStability
@Backing(type="byte")
enum Phy {
UNDEFINED = 0x00,
ONE_M = 0x01,
TWO_M = 0x02,
CODED = 0x03,
}