xref: /aosp_15_r20/hardware/interfaces/bluetooth/audio/aidl/default/BluetoothAudioProvider.cpp (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker  * Copyright (C) 2022 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker  *
4*4d7e907cSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker  *
8*4d7e907cSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker  *
10*4d7e907cSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker  * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker  */
16*4d7e907cSAndroid Build Coastguard Worker 
17*4d7e907cSAndroid Build Coastguard Worker #define LOG_TAG "BTAudioProviderStub"
18*4d7e907cSAndroid Build Coastguard Worker 
19*4d7e907cSAndroid Build Coastguard Worker #include "BluetoothAudioProvider.h"
20*4d7e907cSAndroid Build Coastguard Worker 
21*4d7e907cSAndroid Build Coastguard Worker #include <BluetoothAudioSessionReport.h>
22*4d7e907cSAndroid Build Coastguard Worker #include <android-base/logging.h>
23*4d7e907cSAndroid Build Coastguard Worker 
24*4d7e907cSAndroid Build Coastguard Worker #include "A2dpOffloadCodecFactory.h"
25*4d7e907cSAndroid Build Coastguard Worker 
26*4d7e907cSAndroid Build Coastguard Worker namespace aidl {
27*4d7e907cSAndroid Build Coastguard Worker namespace android {
28*4d7e907cSAndroid Build Coastguard Worker namespace hardware {
29*4d7e907cSAndroid Build Coastguard Worker namespace bluetooth {
30*4d7e907cSAndroid Build Coastguard Worker namespace audio {
31*4d7e907cSAndroid Build Coastguard Worker 
32*4d7e907cSAndroid Build Coastguard Worker struct BluetoothAudioProviderContext {
33*4d7e907cSAndroid Build Coastguard Worker   SessionType session_type;
34*4d7e907cSAndroid Build Coastguard Worker };
35*4d7e907cSAndroid Build Coastguard Worker 
binderUnlinkedCallbackAidl(void * cookie)36*4d7e907cSAndroid Build Coastguard Worker static void binderUnlinkedCallbackAidl(void* cookie) {
37*4d7e907cSAndroid Build Coastguard Worker   LOG(INFO) << __func__;
38*4d7e907cSAndroid Build Coastguard Worker   BluetoothAudioProviderContext* ctx =
39*4d7e907cSAndroid Build Coastguard Worker       static_cast<BluetoothAudioProviderContext*>(cookie);
40*4d7e907cSAndroid Build Coastguard Worker   delete ctx;
41*4d7e907cSAndroid Build Coastguard Worker }
42*4d7e907cSAndroid Build Coastguard Worker 
binderDiedCallbackAidl(void * cookie)43*4d7e907cSAndroid Build Coastguard Worker static void binderDiedCallbackAidl(void* cookie) {
44*4d7e907cSAndroid Build Coastguard Worker   LOG(INFO) << __func__;
45*4d7e907cSAndroid Build Coastguard Worker   BluetoothAudioProviderContext* ctx =
46*4d7e907cSAndroid Build Coastguard Worker       static_cast<BluetoothAudioProviderContext*>(cookie);
47*4d7e907cSAndroid Build Coastguard Worker   CHECK_NE(ctx, nullptr);
48*4d7e907cSAndroid Build Coastguard Worker 
49*4d7e907cSAndroid Build Coastguard Worker   BluetoothAudioSessionReport::OnSessionEnded(ctx->session_type);
50*4d7e907cSAndroid Build Coastguard Worker }
51*4d7e907cSAndroid Build Coastguard Worker 
BluetoothAudioProvider()52*4d7e907cSAndroid Build Coastguard Worker BluetoothAudioProvider::BluetoothAudioProvider() {
53*4d7e907cSAndroid Build Coastguard Worker   death_recipient_ = ::ndk::ScopedAIBinder_DeathRecipient(
54*4d7e907cSAndroid Build Coastguard Worker       AIBinder_DeathRecipient_new(binderDiedCallbackAidl));
55*4d7e907cSAndroid Build Coastguard Worker   AIBinder_DeathRecipient_setOnUnlinked(death_recipient_.get(),
56*4d7e907cSAndroid Build Coastguard Worker                                         binderUnlinkedCallbackAidl);
57*4d7e907cSAndroid Build Coastguard Worker }
58*4d7e907cSAndroid Build Coastguard Worker 
startSession(const std::shared_ptr<IBluetoothAudioPort> & host_if,const AudioConfiguration & audio_config,const std::vector<LatencyMode> & latencyModes,DataMQDesc * _aidl_return)59*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::startSession(
60*4d7e907cSAndroid Build Coastguard Worker     const std::shared_ptr<IBluetoothAudioPort>& host_if,
61*4d7e907cSAndroid Build Coastguard Worker     const AudioConfiguration& audio_config,
62*4d7e907cSAndroid Build Coastguard Worker     const std::vector<LatencyMode>& latencyModes,
63*4d7e907cSAndroid Build Coastguard Worker     DataMQDesc* _aidl_return) {
64*4d7e907cSAndroid Build Coastguard Worker   if (host_if == nullptr) {
65*4d7e907cSAndroid Build Coastguard Worker     *_aidl_return = DataMQDesc();
66*4d7e907cSAndroid Build Coastguard Worker     LOG(ERROR) << __func__ << " - SessionType=" << toString(session_type_)
67*4d7e907cSAndroid Build Coastguard Worker                << " Illegal argument";
68*4d7e907cSAndroid Build Coastguard Worker     return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
69*4d7e907cSAndroid Build Coastguard Worker   }
70*4d7e907cSAndroid Build Coastguard Worker 
71*4d7e907cSAndroid Build Coastguard Worker   latency_modes_ = latencyModes;
72*4d7e907cSAndroid Build Coastguard Worker   audio_config_ = std::make_unique<AudioConfiguration>(audio_config);
73*4d7e907cSAndroid Build Coastguard Worker   stack_iface_ = host_if;
74*4d7e907cSAndroid Build Coastguard Worker   BluetoothAudioProviderContext* cookie =
75*4d7e907cSAndroid Build Coastguard Worker       new BluetoothAudioProviderContext{session_type_};
76*4d7e907cSAndroid Build Coastguard Worker 
77*4d7e907cSAndroid Build Coastguard Worker   AIBinder_linkToDeath(stack_iface_->asBinder().get(), death_recipient_.get(),
78*4d7e907cSAndroid Build Coastguard Worker                        cookie);
79*4d7e907cSAndroid Build Coastguard Worker 
80*4d7e907cSAndroid Build Coastguard Worker   LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_);
81*4d7e907cSAndroid Build Coastguard Worker   onSessionReady(_aidl_return);
82*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::ok();
83*4d7e907cSAndroid Build Coastguard Worker }
84*4d7e907cSAndroid Build Coastguard Worker 
endSession()85*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::endSession() {
86*4d7e907cSAndroid Build Coastguard Worker   LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_);
87*4d7e907cSAndroid Build Coastguard Worker 
88*4d7e907cSAndroid Build Coastguard Worker   if (stack_iface_ != nullptr) {
89*4d7e907cSAndroid Build Coastguard Worker     BluetoothAudioSessionReport::OnSessionEnded(session_type_);
90*4d7e907cSAndroid Build Coastguard Worker 
91*4d7e907cSAndroid Build Coastguard Worker     AIBinder_unlinkToDeath(stack_iface_->asBinder().get(),
92*4d7e907cSAndroid Build Coastguard Worker                            death_recipient_.get(), this);
93*4d7e907cSAndroid Build Coastguard Worker   } else {
94*4d7e907cSAndroid Build Coastguard Worker     LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
95*4d7e907cSAndroid Build Coastguard Worker               << " has NO session";
96*4d7e907cSAndroid Build Coastguard Worker   }
97*4d7e907cSAndroid Build Coastguard Worker 
98*4d7e907cSAndroid Build Coastguard Worker   stack_iface_ = nullptr;
99*4d7e907cSAndroid Build Coastguard Worker   audio_config_ = nullptr;
100*4d7e907cSAndroid Build Coastguard Worker 
101*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::ok();
102*4d7e907cSAndroid Build Coastguard Worker }
103*4d7e907cSAndroid Build Coastguard Worker 
streamStarted(BluetoothAudioStatus status)104*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::streamStarted(
105*4d7e907cSAndroid Build Coastguard Worker     BluetoothAudioStatus status) {
106*4d7e907cSAndroid Build Coastguard Worker   if (stack_iface_ != nullptr) {
107*4d7e907cSAndroid Build Coastguard Worker     LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
108*4d7e907cSAndroid Build Coastguard Worker               << ", status=" << toString(status);
109*4d7e907cSAndroid Build Coastguard Worker     BluetoothAudioSessionReport::ReportControlStatus(session_type_, true,
110*4d7e907cSAndroid Build Coastguard Worker                                                      status);
111*4d7e907cSAndroid Build Coastguard Worker   } else {
112*4d7e907cSAndroid Build Coastguard Worker     LOG(WARNING) << __func__ << " - SessionType=" << toString(session_type_)
113*4d7e907cSAndroid Build Coastguard Worker                  << ", status=" << toString(status) << " has NO session";
114*4d7e907cSAndroid Build Coastguard Worker   }
115*4d7e907cSAndroid Build Coastguard Worker 
116*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::ok();
117*4d7e907cSAndroid Build Coastguard Worker }
118*4d7e907cSAndroid Build Coastguard Worker 
streamSuspended(BluetoothAudioStatus status)119*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::streamSuspended(
120*4d7e907cSAndroid Build Coastguard Worker     BluetoothAudioStatus status) {
121*4d7e907cSAndroid Build Coastguard Worker   LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
122*4d7e907cSAndroid Build Coastguard Worker             << ", status=" << toString(status);
123*4d7e907cSAndroid Build Coastguard Worker 
124*4d7e907cSAndroid Build Coastguard Worker   if (stack_iface_ != nullptr) {
125*4d7e907cSAndroid Build Coastguard Worker     BluetoothAudioSessionReport::ReportControlStatus(session_type_, false,
126*4d7e907cSAndroid Build Coastguard Worker                                                      status);
127*4d7e907cSAndroid Build Coastguard Worker   } else {
128*4d7e907cSAndroid Build Coastguard Worker     LOG(WARNING) << __func__ << " - SessionType=" << toString(session_type_)
129*4d7e907cSAndroid Build Coastguard Worker                  << ", status=" << toString(status) << " has NO session";
130*4d7e907cSAndroid Build Coastguard Worker   }
131*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::ok();
132*4d7e907cSAndroid Build Coastguard Worker }
133*4d7e907cSAndroid Build Coastguard Worker 
updateAudioConfiguration(const AudioConfiguration & audio_config)134*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::updateAudioConfiguration(
135*4d7e907cSAndroid Build Coastguard Worker     const AudioConfiguration& audio_config) {
136*4d7e907cSAndroid Build Coastguard Worker   if (stack_iface_ == nullptr || audio_config_ == nullptr) {
137*4d7e907cSAndroid Build Coastguard Worker     LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
138*4d7e907cSAndroid Build Coastguard Worker               << " has NO session";
139*4d7e907cSAndroid Build Coastguard Worker     return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
140*4d7e907cSAndroid Build Coastguard Worker   }
141*4d7e907cSAndroid Build Coastguard Worker 
142*4d7e907cSAndroid Build Coastguard Worker   if (audio_config.getTag() != audio_config_->getTag()) {
143*4d7e907cSAndroid Build Coastguard Worker     LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
144*4d7e907cSAndroid Build Coastguard Worker               << " audio config type is not match";
145*4d7e907cSAndroid Build Coastguard Worker     return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
146*4d7e907cSAndroid Build Coastguard Worker   }
147*4d7e907cSAndroid Build Coastguard Worker 
148*4d7e907cSAndroid Build Coastguard Worker   audio_config_ = std::make_unique<AudioConfiguration>(audio_config);
149*4d7e907cSAndroid Build Coastguard Worker   BluetoothAudioSessionReport::ReportAudioConfigChanged(session_type_,
150*4d7e907cSAndroid Build Coastguard Worker                                                         *audio_config_);
151*4d7e907cSAndroid Build Coastguard Worker   LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
152*4d7e907cSAndroid Build Coastguard Worker             << " | audio_config=" << audio_config.toString();
153*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::ok();
154*4d7e907cSAndroid Build Coastguard Worker }
155*4d7e907cSAndroid Build Coastguard Worker 
setLowLatencyModeAllowed(bool allowed)156*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::setLowLatencyModeAllowed(
157*4d7e907cSAndroid Build Coastguard Worker     bool allowed) {
158*4d7e907cSAndroid Build Coastguard Worker   if (stack_iface_ == nullptr) {
159*4d7e907cSAndroid Build Coastguard Worker     LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
160*4d7e907cSAndroid Build Coastguard Worker               << " has NO session";
161*4d7e907cSAndroid Build Coastguard Worker     return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
162*4d7e907cSAndroid Build Coastguard Worker   }
163*4d7e907cSAndroid Build Coastguard Worker   LOG(INFO) << __func__ << " - allowed " << allowed;
164*4d7e907cSAndroid Build Coastguard Worker   BluetoothAudioSessionReport::ReportLowLatencyModeAllowedChanged(
165*4d7e907cSAndroid Build Coastguard Worker     session_type_, allowed);
166*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::ok();
167*4d7e907cSAndroid Build Coastguard Worker }
168*4d7e907cSAndroid Build Coastguard Worker 
parseA2dpConfiguration(const CodecId & codec_id,const std::vector<uint8_t> & configuration,CodecParameters * codec_parameters,A2dpStatus * _aidl_return)169*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::parseA2dpConfiguration(
170*4d7e907cSAndroid Build Coastguard Worker     [[maybe_unused]] const CodecId& codec_id,
171*4d7e907cSAndroid Build Coastguard Worker     [[maybe_unused]] const std::vector<uint8_t>& configuration,
172*4d7e907cSAndroid Build Coastguard Worker     [[maybe_unused]] CodecParameters* codec_parameters,
173*4d7e907cSAndroid Build Coastguard Worker     [[maybe_unused]] A2dpStatus* _aidl_return) {
174*4d7e907cSAndroid Build Coastguard Worker   LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
175*4d7e907cSAndroid Build Coastguard Worker             << " is illegal";
176*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
177*4d7e907cSAndroid Build Coastguard Worker }
178*4d7e907cSAndroid Build Coastguard Worker 
getA2dpConfiguration(const std::vector<A2dpRemoteCapabilities> & remote_a2dp_capabilities,const A2dpConfigurationHint & hint,std::optional<audio::A2dpConfiguration> * _aidl_return)179*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::getA2dpConfiguration(
180*4d7e907cSAndroid Build Coastguard Worker     [[maybe_unused]] const std::vector<A2dpRemoteCapabilities>&
181*4d7e907cSAndroid Build Coastguard Worker         remote_a2dp_capabilities,
182*4d7e907cSAndroid Build Coastguard Worker     [[maybe_unused]] const A2dpConfigurationHint& hint,
183*4d7e907cSAndroid Build Coastguard Worker     [[maybe_unused]] std::optional<audio::A2dpConfiguration>* _aidl_return) {
184*4d7e907cSAndroid Build Coastguard Worker   LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
185*4d7e907cSAndroid Build Coastguard Worker             << " is illegal";
186*4d7e907cSAndroid Build Coastguard Worker 
187*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
188*4d7e907cSAndroid Build Coastguard Worker }
189*4d7e907cSAndroid Build Coastguard Worker 
setCodecPriority(const::aidl::android::hardware::bluetooth::audio::CodecId & in_codecId,int32_t in_priority)190*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::setCodecPriority(
191*4d7e907cSAndroid Build Coastguard Worker     const ::aidl::android::hardware::bluetooth::audio::CodecId& in_codecId,
192*4d7e907cSAndroid Build Coastguard Worker     int32_t in_priority) {
193*4d7e907cSAndroid Build Coastguard Worker   /* TODO: Implement */
194*4d7e907cSAndroid Build Coastguard Worker   (void)in_codecId;
195*4d7e907cSAndroid Build Coastguard Worker   (void)in_priority;
196*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
197*4d7e907cSAndroid Build Coastguard Worker };
198*4d7e907cSAndroid Build Coastguard Worker 
getLeAudioAseConfiguration(const std::optional<std::vector<std::optional<::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::LeAudioDeviceCapabilities>>> & in_remoteSinkAudioCapabilities,const std::optional<std::vector<std::optional<::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::LeAudioDeviceCapabilities>>> & in_remoteSourceAudioCapabilities,const std::vector<::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::LeAudioConfigurationRequirement> & in_requirements,std::vector<::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::LeAudioAseConfigurationSetting> * _aidl_return)199*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::getLeAudioAseConfiguration(
200*4d7e907cSAndroid Build Coastguard Worker     const std::optional<std::vector<std::optional<
201*4d7e907cSAndroid Build Coastguard Worker         ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
202*4d7e907cSAndroid Build Coastguard Worker             LeAudioDeviceCapabilities>>>& in_remoteSinkAudioCapabilities,
203*4d7e907cSAndroid Build Coastguard Worker     const std::optional<std::vector<std::optional<
204*4d7e907cSAndroid Build Coastguard Worker         ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
205*4d7e907cSAndroid Build Coastguard Worker             LeAudioDeviceCapabilities>>>& in_remoteSourceAudioCapabilities,
206*4d7e907cSAndroid Build Coastguard Worker     const std::vector<
207*4d7e907cSAndroid Build Coastguard Worker         ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
208*4d7e907cSAndroid Build Coastguard Worker             LeAudioConfigurationRequirement>& in_requirements,
209*4d7e907cSAndroid Build Coastguard Worker     std::vector<::aidl::android::hardware::bluetooth::audio::
210*4d7e907cSAndroid Build Coastguard Worker                     IBluetoothAudioProvider::LeAudioAseConfigurationSetting>*
211*4d7e907cSAndroid Build Coastguard Worker         _aidl_return) {
212*4d7e907cSAndroid Build Coastguard Worker   /* TODO: Implement */
213*4d7e907cSAndroid Build Coastguard Worker   (void)in_remoteSinkAudioCapabilities;
214*4d7e907cSAndroid Build Coastguard Worker   (void)in_remoteSourceAudioCapabilities;
215*4d7e907cSAndroid Build Coastguard Worker   (void)in_requirements;
216*4d7e907cSAndroid Build Coastguard Worker   (void)_aidl_return;
217*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
218*4d7e907cSAndroid Build Coastguard Worker };
219*4d7e907cSAndroid Build Coastguard Worker 
getLeAudioAseQosConfiguration(const::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::LeAudioAseQosConfigurationRequirement & in_qosRequirement,::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::LeAudioAseQosConfigurationPair * _aidl_return)220*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::getLeAudioAseQosConfiguration(
221*4d7e907cSAndroid Build Coastguard Worker     const ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
222*4d7e907cSAndroid Build Coastguard Worker         LeAudioAseQosConfigurationRequirement& in_qosRequirement,
223*4d7e907cSAndroid Build Coastguard Worker     ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
224*4d7e907cSAndroid Build Coastguard Worker         LeAudioAseQosConfigurationPair* _aidl_return) {
225*4d7e907cSAndroid Build Coastguard Worker   /* TODO: Implement */
226*4d7e907cSAndroid Build Coastguard Worker   (void)in_qosRequirement;
227*4d7e907cSAndroid Build Coastguard Worker   (void)_aidl_return;
228*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
229*4d7e907cSAndroid Build Coastguard Worker };
230*4d7e907cSAndroid Build Coastguard Worker 
getLeAudioAseDatapathConfiguration(const std::optional<::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::StreamConfig> & in_sinkConfig,const std::optional<::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::StreamConfig> & in_sourceConfig,::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::LeAudioDataPathConfigurationPair * _aidl_return)231*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::getLeAudioAseDatapathConfiguration(
232*4d7e907cSAndroid Build Coastguard Worker     const std::optional<::aidl::android::hardware::bluetooth::audio::
233*4d7e907cSAndroid Build Coastguard Worker                             IBluetoothAudioProvider::StreamConfig>&
234*4d7e907cSAndroid Build Coastguard Worker         in_sinkConfig,
235*4d7e907cSAndroid Build Coastguard Worker     const std::optional<::aidl::android::hardware::bluetooth::audio::
236*4d7e907cSAndroid Build Coastguard Worker                             IBluetoothAudioProvider::StreamConfig>&
237*4d7e907cSAndroid Build Coastguard Worker         in_sourceConfig,
238*4d7e907cSAndroid Build Coastguard Worker     ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
239*4d7e907cSAndroid Build Coastguard Worker         LeAudioDataPathConfigurationPair* _aidl_return) {
240*4d7e907cSAndroid Build Coastguard Worker   /* TODO: Implement */
241*4d7e907cSAndroid Build Coastguard Worker   (void)in_sinkConfig;
242*4d7e907cSAndroid Build Coastguard Worker   (void)in_sourceConfig;
243*4d7e907cSAndroid Build Coastguard Worker   (void)_aidl_return;
244*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
245*4d7e907cSAndroid Build Coastguard Worker }
246*4d7e907cSAndroid Build Coastguard Worker 
onSinkAseMetadataChanged(::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::AseState in_state,int32_t cigId,int32_t cisId,const std::optional<std::vector<std::optional<::aidl::android::hardware::bluetooth::audio::MetadataLtv>>> & in_metadata)247*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::onSinkAseMetadataChanged(
248*4d7e907cSAndroid Build Coastguard Worker     ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
249*4d7e907cSAndroid Build Coastguard Worker         AseState in_state,
250*4d7e907cSAndroid Build Coastguard Worker     int32_t cigId, int32_t cisId,
251*4d7e907cSAndroid Build Coastguard Worker     const std::optional<std::vector<std::optional<
252*4d7e907cSAndroid Build Coastguard Worker         ::aidl::android::hardware::bluetooth::audio::MetadataLtv>>>&
253*4d7e907cSAndroid Build Coastguard Worker         in_metadata) {
254*4d7e907cSAndroid Build Coastguard Worker   /* TODO: Implement */
255*4d7e907cSAndroid Build Coastguard Worker   (void)in_state;
256*4d7e907cSAndroid Build Coastguard Worker   (void)cigId;
257*4d7e907cSAndroid Build Coastguard Worker   (void)cisId;
258*4d7e907cSAndroid Build Coastguard Worker   (void)in_metadata;
259*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
260*4d7e907cSAndroid Build Coastguard Worker };
261*4d7e907cSAndroid Build Coastguard Worker 
onSourceAseMetadataChanged(::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::AseState in_state,int32_t cigId,int32_t cisId,const std::optional<std::vector<std::optional<::aidl::android::hardware::bluetooth::audio::MetadataLtv>>> & in_metadata)262*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::onSourceAseMetadataChanged(
263*4d7e907cSAndroid Build Coastguard Worker     ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
264*4d7e907cSAndroid Build Coastguard Worker         AseState in_state,
265*4d7e907cSAndroid Build Coastguard Worker     int32_t cigId, int32_t cisId,
266*4d7e907cSAndroid Build Coastguard Worker     const std::optional<std::vector<std::optional<
267*4d7e907cSAndroid Build Coastguard Worker         ::aidl::android::hardware::bluetooth::audio::MetadataLtv>>>&
268*4d7e907cSAndroid Build Coastguard Worker         in_metadata) {
269*4d7e907cSAndroid Build Coastguard Worker   /* TODO: Implement */
270*4d7e907cSAndroid Build Coastguard Worker   (void)in_state;
271*4d7e907cSAndroid Build Coastguard Worker   (void)cigId;
272*4d7e907cSAndroid Build Coastguard Worker   (void)cisId;
273*4d7e907cSAndroid Build Coastguard Worker   (void)in_metadata;
274*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
275*4d7e907cSAndroid Build Coastguard Worker };
276*4d7e907cSAndroid Build Coastguard Worker 
getLeAudioBroadcastConfiguration(const std::optional<std::vector<std::optional<::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::LeAudioDeviceCapabilities>>> & in_remoteSinkAudioCapabilities,const::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::LeAudioBroadcastConfigurationRequirement & in_requirement,::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::LeAudioBroadcastConfigurationSetting * _aidl_return)277*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus BluetoothAudioProvider::getLeAudioBroadcastConfiguration(
278*4d7e907cSAndroid Build Coastguard Worker     const std::optional<std::vector<std::optional<
279*4d7e907cSAndroid Build Coastguard Worker         ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
280*4d7e907cSAndroid Build Coastguard Worker             LeAudioDeviceCapabilities>>>& in_remoteSinkAudioCapabilities,
281*4d7e907cSAndroid Build Coastguard Worker     const ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
282*4d7e907cSAndroid Build Coastguard Worker         LeAudioBroadcastConfigurationRequirement& in_requirement,
283*4d7e907cSAndroid Build Coastguard Worker     ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
284*4d7e907cSAndroid Build Coastguard Worker         LeAudioBroadcastConfigurationSetting* _aidl_return) {
285*4d7e907cSAndroid Build Coastguard Worker   /* TODO: Implement */
286*4d7e907cSAndroid Build Coastguard Worker   (void)in_remoteSinkAudioCapabilities;
287*4d7e907cSAndroid Build Coastguard Worker   (void)in_requirement;
288*4d7e907cSAndroid Build Coastguard Worker   (void)_aidl_return;
289*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
290*4d7e907cSAndroid Build Coastguard Worker };
291*4d7e907cSAndroid Build Coastguard Worker 
292*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus
getLeAudioBroadcastDatapathConfiguration(const::aidl::android::hardware::bluetooth::audio::AudioContext & in_context,const std::vector<::aidl::android::hardware::bluetooth::audio::LeAudioBroadcastConfiguration::BroadcastStreamMap> & in_streamMap,::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::LeAudioDataPathConfiguration * _aidl_return)293*4d7e907cSAndroid Build Coastguard Worker BluetoothAudioProvider::getLeAudioBroadcastDatapathConfiguration(
294*4d7e907cSAndroid Build Coastguard Worker     const ::aidl::android::hardware::bluetooth::audio::AudioContext& in_context,
295*4d7e907cSAndroid Build Coastguard Worker     const std::vector<::aidl::android::hardware::bluetooth::audio::
296*4d7e907cSAndroid Build Coastguard Worker                           LeAudioBroadcastConfiguration::BroadcastStreamMap>&
297*4d7e907cSAndroid Build Coastguard Worker         in_streamMap,
298*4d7e907cSAndroid Build Coastguard Worker     ::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
299*4d7e907cSAndroid Build Coastguard Worker         LeAudioDataPathConfiguration* _aidl_return) {
300*4d7e907cSAndroid Build Coastguard Worker   /* TODO: Implement */
301*4d7e907cSAndroid Build Coastguard Worker   (void)in_context;
302*4d7e907cSAndroid Build Coastguard Worker   (void)in_streamMap;
303*4d7e907cSAndroid Build Coastguard Worker   (void)_aidl_return;
304*4d7e907cSAndroid Build Coastguard Worker   return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
305*4d7e907cSAndroid Build Coastguard Worker }
306*4d7e907cSAndroid Build Coastguard Worker 
307*4d7e907cSAndroid Build Coastguard Worker }  // namespace audio
308*4d7e907cSAndroid Build Coastguard Worker }  // namespace bluetooth
309*4d7e907cSAndroid Build Coastguard Worker }  // namespace hardware
310*4d7e907cSAndroid Build Coastguard Worker }  // namespace android
311*4d7e907cSAndroid Build Coastguard Worker }  // namespace aidl
312