| /* |
| * 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; |