Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 965138aa authored by Alice Kuo's avatar Alice Kuo
Browse files

Add hidl 2.2 for LE audio support

1. Add mode and difference config type for the unicast/broadcast
2. Support multiple audio configuration with broadcast
3. Add the streamMap for unicast/broadcast

Bug: 201292721
Bug: 150670922
Bug: 197297498
Test: m android.hardware.bluetooth.audio@2.2
Change-Id: Ib95850a7e56e9a03c5b400acdaf0625f0aa8726f
parent b1e7ca32
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
// This file is autogenerated by hidl-gen -Landroidbp.

package {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "hardware_interfaces_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["hardware_interfaces_license"],
}

hidl_interface {
    name: "android.hardware.bluetooth.audio@2.2",
    root: "android.hardware",
    srcs: [
        "types.hal",
        "IBluetoothAudioProvider.hal",
        "IBluetoothAudioProvidersFactory.hal",
    ],
    interfaces: [
        "android.hardware.audio.common@5.0",
        "android.hardware.bluetooth.audio@2.0",
        "android.hardware.bluetooth.audio@2.1",
        "android.hidl.base@1.0",
        "android.hidl.safe_union@1.0",
    ],
    apex_available: [
        "//apex_available:platform",
        "com.android.bluetooth.updatable",
    ],
    gen_java: false,
}
+62 −0
Original line number Diff line number Diff line
/*
 * Copyright 2021 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@2.2;

import @2.1::IBluetoothAudioProvider;
import @2.0::IBluetoothAudioPort;
import @2.0::Status;

/**
 * HAL interface from the Bluetooth stack to the Audio HAL
 *
 * The Bluetooth stack calls methods in this interface to start and end audio
 * sessions and sends callback events to the Audio HAL.
 *
 * Note: For HIDL APIs with a "generates" statement, the callback parameter used
 * for return value must be invoked synchronously before the API call returns.
 */
interface IBluetoothAudioProvider extends @2.1::IBluetoothAudioProvider {

    /**
     * This method indicates that the Bluetooth stack is ready to stream audio.
     * It registers an instance of IBluetoothAudioPort with and provides the
     * current negotiated codec to the Audio HAL. After this method is called,
     * the Audio HAL can invoke IBluetoothAudioPort.startStream().
     *
     * Note: endSession() must be called to unregister this IBluetoothAudioPort
     *
     * @param hostIf An instance of IBluetoothAudioPort for stream control
     * @param audioConfig The audio configuration negotiated with the remote
     *    device. The PCM parameters are set if software based encoding,
     *    otherwise the correct codec configuration is used for hardware
     *    encoding.
     *
     * @return status One of the following
     *    SUCCESS if this IBluetoothAudioPort was successfully registered with
     *        the Audio HAL
     *    UNSUPPORTED_CODEC_CONFIGURATION if the Audio HAL cannot register this
     *        IBluetoothAudioPort with the given codec configuration
     *    FAILURE if the Audio HAL cannot register this IBluetoothAudioPort for
     *        any other reason
     * @return dataMQ The fast message queue for audio data from/to this
     *    provider. Audio data will be in PCM format as specified by the
     *    audioConfig.pcmConfig parameter. Invalid if streaming is offloaded
     *    from/to hardware or on failure.
     */
    startSession_2_2(IBluetoothAudioPort hostIf, AudioConfiguration audioConfig)
                generates (Status status, fmq_sync<uint8_t> dataMQ);
};
+33 −0
Original line number Diff line number Diff line
/*
 * Copyright 2021 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@2.2;

import @2.1::IBluetoothAudioProvidersFactory;

/**
 * This factory allows a HAL implementation to be split into multiple
 * independent providers.
 *
 * When the Bluetooth stack is ready to create an audio session, it must first
 * obtain the IBluetoothAudioProvider for that session type by calling
 * openProvider().
 *
 * Note: For HIDL APIs with a "generates" statement, the callback parameter used
 * for return value must be invoked synchronously before the API call returns.
 */
interface IBluetoothAudioProvidersFactory extends @2.1::IBluetoothAudioProvidersFactory {
};
+72 −0
Original line number Diff line number Diff line
/*
 * Copyright 2021 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@2.2;

import @2.1::Lc3Parameters;
import @2.1::PcmParameters;
import @2.0::CodecConfiguration;

enum LeAudioMode : uint8_t {
    UNKNOWN = 0x00,
    UNICAST = 0x01,
    BROADCAST = 0x02,
};

struct UnicastStreamMap {
    /* The connection handle used for a unicast or a broadcast group. */
    uint16_t 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. */
    uint32_t audioChannelAllocation;
};

struct BroadcastStreamMap {
    /* The connection handle used for a unicast or a broadcast group. */
    uint16_t 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. */
    uint32_t audioChannelAllocation;
    Lc3Parameters lc3Config;
};

struct UnicastConfig {
    vec<UnicastStreamMap> streamMap;
    uint32_t peerDelay;
    Lc3Parameters lc3Config;
};

struct BroadcastConfig {
    vec<BroadcastStreamMap> streamMap;
};

struct LeAudioConfiguration {
    /* The mode of the LE audio */
    LeAudioMode mode;
    safe_union CodecConfig {
        UnicastConfig unicastConfig;
        BroadcastConfig broadcastConfig;
    } config;
};

/** Used to configure either a Hardware or Software Encoding session based on session type */
safe_union AudioConfiguration {
    PcmParameters pcmConfig;
    CodecConfiguration CodecConfig;
    LeAudioConfiguration leAudioCofiguration;
};
+1 −1
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@
    </hal>
    <hal format="hidl" optional="true">
        <name>android.hardware.bluetooth.audio</name>
        <version>2.0-1</version>
        <version>2.0-2</version>
        <interface>
            <name>IBluetoothAudioProvidersFactory</name>
            <instance>default</instance>