blob: 87ee8c3a9d4a842e5b4216a343689fa7fcec3843 [file]
/*
* Copyright (c) 2022 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.
*
*/
namespace bluetooth.fbs.le_audio;
enum CodecSpecificLtvGenericTypes : byte {
SUPPORTED_SAMPLING_FREQUENCY = 0x01,
SUPPORTED_FRAME_DURATION = 0x02,
SUPPORTED_AUDIO_CHANNEL_ALLOCATION = 0x03,
SUPPORTED_OCTETS_PER_CODEC_FRAME = 0x04,
SUPPORTED_CODEC_FRAME_BLOCKS_PER_SDU = 0x05,
}
/// Note: Holds either a single value (when `value_width == 0`) or multiple
/// values if `value.length()` is no-remainder divisible by the non-zero
/// `value_width`.
/// Note: Consider extending it with `flags` field, to hold additional info like
/// IsBitfield, IsRange, etc. if we need these type-specific validations.
table CompoundValue {
value: [ubyte] (required);
value_width: ubyte = 0;
}
table CodecSpecificConfiguration {
name: string;
type: ubyte (key);
compound_value: CompoundValue;
}
struct CodecId {
coding_format: ubyte;
vendor_company_id : ushort;
vendor_codec_id : ushort;
}
enum AudioSetConfigurationStrategy : byte {
MONO_ONE_CIS_PER_DEVICE = 0x00,
STEREO_TWO_CISES_PER_DEVICE = 0x01,
STEREO_ONE_CIS_PER_DEVICE = 0x02,
}
enum AudioSetConfigurationDirection : byte {
SINK = 0x01,
SOURCE = 0x02,
}
enum AudioSetConfigurationTargetLatency : byte {
LOW = 0x01,
BALANCED_RELIABILITY = 0x02,
HIGH_RELIABILITY = 0x03,
}
table AudioSetSubConfiguration {
ase_channel_cnt: ubyte;
ase_cnt: ubyte;
direction: AudioSetConfigurationDirection = SINK;
codec_id : CodecId (required);
codec_configuration: [CodecSpecificConfiguration] (required);
}
table CodecConfiguration {
name: string (key, required);
subconfigurations: [AudioSetSubConfiguration] (required);
}
table QosConfiguration {
name: string (key, required);
target_latency: AudioSetConfigurationTargetLatency = BALANCED_RELIABILITY;
retransmission_number: ubyte;
max_transport_latency : ushort;
}
/// Each set configration can contain multiple logical subconfigurations, which
/// all must be configurable with the current set of audio devices. For example,
/// one can define multiple output stream configurations with different
/// qualities, or assign different configurations to each stream direction.
table AudioSetConfiguration {
name: string (key, required);
codec_config_name: string (required);
qos_config_name: [string] (required);
}
table AudioSetConfigurations {
_comments_: [string];
configurations: [AudioSetConfiguration] (required);
codec_configurations: [CodecConfiguration] (required);
qos_configurations: [QosConfiguration] (required);
}
root_type AudioSetConfigurations;