diff options
Diffstat (limited to 'bluetooth/audio/utils/aidl_session/HidlToAidlMiddleware.cpp')
-rw-r--r-- | bluetooth/audio/utils/aidl_session/HidlToAidlMiddleware.cpp | 248 |
1 files changed, 48 insertions, 200 deletions
diff --git a/bluetooth/audio/utils/aidl_session/HidlToAidlMiddleware.cpp b/bluetooth/audio/utils/aidl_session/HidlToAidlMiddleware.cpp index 1ef9365918..a4664f1636 100644 --- a/bluetooth/audio/utils/aidl_session/HidlToAidlMiddleware.cpp +++ b/bluetooth/audio/utils/aidl_session/HidlToAidlMiddleware.cpp @@ -28,7 +28,6 @@ #include "../aidl_session/BluetoothAudioSessionControl.h" #include "HidlToAidlMiddleware_2_0.h" #include "HidlToAidlMiddleware_2_1.h" -#include "HidlToAidlMiddleware_2_2.h" namespace aidl { namespace android { @@ -82,15 +81,10 @@ using Lc3Config_2_1 = using Lc3FrameDuration_2_1 = ::android::hardware::bluetooth::audio::V2_1::Lc3FrameDuration; -using LeAudioConfig_2_2 = - ::android::hardware::bluetooth::audio::V2_2::LeAudioConfiguration; -using LeAudioMode_2_2 = - ::android::hardware::bluetooth::audio::V2_2::LeAudioMode; - std::mutex legacy_callback_lock; std::unordered_map< SessionType, - std::unordered_map<uint16_t, std::shared_ptr<PortStatusCallbacks_2_2>>> + std::unordered_map<uint16_t, std::shared_ptr<PortStatusCallbacks_2_0>>> legacy_callback_table; const static std::unordered_map<SessionType_2_1, SessionType> @@ -461,50 +455,6 @@ inline Lc3CodecConfig_2_1 to_hidl_leaudio_broadcast_config_2_1( return hidl_lc3_codec_config; } -inline LeAudioConfig_2_2 to_hidl_leaudio_config_2_2( - const LeAudioConfiguration& unicast_config) { - LeAudioConfig_2_2 hidl_leaudio_config; - hidl_leaudio_config.mode = LeAudioMode_2_2::UNICAST; - ::android::hardware::bluetooth::audio::V2_2::UnicastConfig - hidl_unicast_config; - hidl_unicast_config.peerDelay = - static_cast<uint32_t>(unicast_config.peerDelayUs / 1000); - - auto& lc3_config = unicast_config.leAudioCodecConfig - .get<LeAudioCodecConfiguration::lc3Config>(); - hidl_unicast_config.lc3Config = to_hidl_lc3_config_2_1(lc3_config); - - hidl_unicast_config.streamMap.resize(unicast_config.streamMap.size()); - for (int i = 0; i < unicast_config.streamMap.size(); i++) { - hidl_unicast_config.streamMap[i].audioChannelAllocation = - static_cast<uint32_t>( - unicast_config.streamMap[i].audioChannelAllocation); - hidl_unicast_config.streamMap[i].streamHandle = - static_cast<uint16_t>(unicast_config.streamMap[i].streamHandle); - } - return hidl_leaudio_config; -} - -inline LeAudioConfig_2_2 to_hidl_leaudio_broadcast_config_2_2( - const LeAudioBroadcastConfiguration& broadcast_config) { - LeAudioConfig_2_2 hidl_leaudio_config; - hidl_leaudio_config.mode = LeAudioMode_2_2::BROADCAST; - ::android::hardware::bluetooth::audio::V2_2::BroadcastConfig - hidl_bcast_config; - hidl_bcast_config.streamMap.resize(broadcast_config.streamMap.size()); - for (int i = 0; i < broadcast_config.streamMap.size(); i++) { - hidl_bcast_config.streamMap[i].audioChannelAllocation = - static_cast<uint32_t>( - broadcast_config.streamMap[i].audioChannelAllocation); - hidl_bcast_config.streamMap[i].streamHandle = - static_cast<uint16_t>(broadcast_config.streamMap[i].streamHandle); - hidl_bcast_config.streamMap[i].lc3Config = to_hidl_lc3_config_2_1( - broadcast_config.streamMap[i] - .leAudioCodecConfig.get<LeAudioCodecConfiguration::lc3Config>()); - } - return hidl_leaudio_config; -} - inline AudioConfig_2_1 to_hidl_audio_config_2_1( const AudioConfiguration& audio_config) { AudioConfig_2_1 hidl_audio_config; @@ -529,30 +479,6 @@ inline AudioConfig_2_1 to_hidl_audio_config_2_1( return hidl_audio_config; } -inline AudioConfig_2_2 to_hidl_audio_config_2_2( - const AudioConfiguration& audio_config) { - AudioConfig_2_2 hidl_audio_config; - switch (audio_config.getTag()) { - case AudioConfiguration::pcmConfig: - hidl_audio_config.pcmConfig(to_hidl_pcm_config_2_1( - audio_config.get<AudioConfiguration::pcmConfig>())); - break; - case AudioConfiguration::a2dpConfig: - hidl_audio_config.codecConfig(to_hidl_codec_config_2_0( - audio_config.get<AudioConfiguration::a2dpConfig>())); - break; - case AudioConfiguration::leAudioConfig: - hidl_audio_config.leAudioConfig(to_hidl_leaudio_config_2_2( - audio_config.get<AudioConfiguration::leAudioConfig>())); - break; - case AudioConfiguration::leAudioBroadcastConfig: - hidl_audio_config.leAudioConfig(to_hidl_leaudio_broadcast_config_2_2( - audio_config.get<AudioConfiguration::leAudioBroadcastConfig>())); - break; - } - return hidl_audio_config; -} - /*** * * 2.0 @@ -568,18 +494,58 @@ bool HidlToAidlMiddleware_2_0::IsSessionReady( uint16_t HidlToAidlMiddleware_2_0::RegisterControlResultCback( const SessionType_2_0& session_type, const PortStatusCallbacks_2_0& cbacks) { - PortStatusCallbacks_2_2 callback_2_2{ - .control_result_cb_ = cbacks.control_result_cb_, - .session_changed_cb_ = cbacks.session_changed_cb_, + LOG(INFO) << __func__ << ": " << toString(session_type); + auto aidl_session_type = from_session_type_2_0(session_type); + // Pass the exact reference to the lambda + auto& session_legacy_callback_table = + legacy_callback_table[aidl_session_type]; + PortStatusCallbacks aidl_callbacks{}; + if (cbacks.control_result_cb_) { + aidl_callbacks.control_result_cb_ = + [&session_legacy_callback_table](uint16_t cookie, bool start_resp, + const BluetoothAudioStatus& status) { + if (session_legacy_callback_table.find(cookie) == + session_legacy_callback_table.end()) { + LOG(ERROR) << __func__ << ": Unknown callback invoked!"; + return; + } + auto& cback = session_legacy_callback_table[cookie]; + cback->control_result_cb_(cookie, start_resp, to_hidl_status(status)); + }; + } + if (cbacks.session_changed_cb_) { + aidl_callbacks.session_changed_cb_ = + [&session_legacy_callback_table](uint16_t cookie) { + if (session_legacy_callback_table.find(cookie) == + session_legacy_callback_table.end()) { + LOG(ERROR) << __func__ << ": Unknown callback invoked!"; + return; + } + auto& cback = session_legacy_callback_table[cookie]; + cback->session_changed_cb_(cookie); + }; }; - return HidlToAidlMiddleware_2_2::RegisterControlResultCback( - static_cast<SessionType_2_1>(session_type), callback_2_2); + auto cookie = BluetoothAudioSessionControl::RegisterControlResultCback( + aidl_session_type, aidl_callbacks); + { + std::lock_guard<std::mutex> guard(legacy_callback_lock); + session_legacy_callback_table[cookie] = + std::make_shared<PortStatusCallbacks_2_0>(cbacks); + } + return cookie; } void HidlToAidlMiddleware_2_0::UnregisterControlResultCback( const SessionType_2_0& session_type, uint16_t cookie) { - HidlToAidlMiddleware_2_2::UnregisterControlResultCback( - static_cast<SessionType_2_1>(session_type), cookie); + LOG(INFO) << __func__ << ": " << toString(session_type); + auto aidl_session_type = from_session_type_2_0(session_type); + BluetoothAudioSessionControl::UnregisterControlResultCback(aidl_session_type, + cookie); + auto& session_callback_table = legacy_callback_table[aidl_session_type]; + if (session_callback_table.find(cookie) != session_callback_table.end()) { + std::lock_guard<std::mutex> guard(legacy_callback_lock); + session_callback_table.erase(cookie); + } } const AudioConfig_2_0 HidlToAidlMiddleware_2_0::GetAudioConfig( @@ -659,124 +625,6 @@ const AudioConfig_2_1 HidlToAidlMiddleware_2_1::GetAudioConfig( from_session_type_2_1(session_type))); } -/*** - * - * 2.2 - * - ***/ - -bool HidlToAidlMiddleware_2_2::IsSessionReady( - const SessionType_2_1& session_type) { - return BluetoothAudioSessionControl::IsSessionReady( - from_session_type_2_1(session_type)); -} - -uint16_t HidlToAidlMiddleware_2_2::RegisterControlResultCback( - const SessionType_2_1& session_type, - const PortStatusCallbacks_2_2& cbacks) { - LOG(INFO) << __func__ << ": " << toString(session_type); - auto aidl_session_type = from_session_type_2_1(session_type); - // Pass the exact reference to the lambda - auto& session_legacy_callback_table = - legacy_callback_table[aidl_session_type]; - PortStatusCallbacks aidl_callbacks{}; - if (cbacks.control_result_cb_) { - aidl_callbacks.control_result_cb_ = - [&session_legacy_callback_table](uint16_t cookie, bool start_resp, - const BluetoothAudioStatus& status) { - if (session_legacy_callback_table.find(cookie) == - session_legacy_callback_table.end()) { - LOG(ERROR) << __func__ << ": Unknown callback invoked!"; - return; - } - auto& cback = session_legacy_callback_table[cookie]; - cback->control_result_cb_(cookie, start_resp, to_hidl_status(status)); - }; - } - if (cbacks.session_changed_cb_) { - aidl_callbacks.session_changed_cb_ = - [&session_legacy_callback_table](uint16_t cookie) { - if (session_legacy_callback_table.find(cookie) == - session_legacy_callback_table.end()) { - LOG(ERROR) << __func__ << ": Unknown callback invoked!"; - return; - } - auto& cback = session_legacy_callback_table[cookie]; - cback->session_changed_cb_(cookie); - }; - }; - if (cbacks.audio_configuration_changed_cb_) { - aidl_callbacks.audio_configuration_changed_cb_ = - [&session_legacy_callback_table](uint16_t cookie) { - if (session_legacy_callback_table.find(cookie) == - session_legacy_callback_table.end()) { - LOG(ERROR) << __func__ << ": Unknown callback invoked!"; - return; - } - auto& cback = session_legacy_callback_table[cookie]; - cback->audio_configuration_changed_cb_(cookie); - }; - }; - auto cookie = BluetoothAudioSessionControl::RegisterControlResultCback( - aidl_session_type, aidl_callbacks); - { - std::lock_guard<std::mutex> guard(legacy_callback_lock); - session_legacy_callback_table[cookie] = - std::make_shared<PortStatusCallbacks_2_2>(cbacks); - } - return cookie; -} - -void HidlToAidlMiddleware_2_2::UnregisterControlResultCback( - const SessionType_2_1& session_type, uint16_t cookie) { - LOG(INFO) << __func__ << ": " << toString(session_type); - auto aidl_session_type = from_session_type_2_1(session_type); - BluetoothAudioSessionControl::UnregisterControlResultCback(aidl_session_type, - cookie); - auto& session_callback_table = legacy_callback_table[aidl_session_type]; - if (session_callback_table.find(cookie) != session_callback_table.end()) { - std::lock_guard<std::mutex> guard(legacy_callback_lock); - session_callback_table.erase(cookie); - } -} - -const AudioConfig_2_2 HidlToAidlMiddleware_2_2::GetAudioConfig( - const SessionType_2_1& session_type) { - return to_hidl_audio_config_2_2(BluetoothAudioSessionControl::GetAudioConfig( - from_session_type_2_1(session_type))); -} - -bool HidlToAidlMiddleware_2_2::StartStream( - const SessionType_2_1& session_type) { - return BluetoothAudioSessionControl::StartStream( - from_session_type_2_1(session_type)); -} - -bool HidlToAidlMiddleware_2_2::SuspendStream( - const SessionType_2_1& session_type) { - return BluetoothAudioSessionControl::SuspendStream( - from_session_type_2_1(session_type)); -} - -void HidlToAidlMiddleware_2_2::StopStream(const SessionType_2_1& session_type) { - return BluetoothAudioSessionControl::StopStream( - from_session_type_2_1(session_type)); -} - -void HidlToAidlMiddleware_2_2::UpdateTracksMetadata( - const SessionType_2_1& session_type, - const struct source_metadata* source_metadata) { - return BluetoothAudioSessionControl::UpdateSourceMetadata( - from_session_type_2_1(session_type), *source_metadata); -} - -void HidlToAidlMiddleware_2_2::UpdateSinkMetadata( - const SessionType_2_1& session_type, - const struct sink_metadata* sink_metadata) { - return BluetoothAudioSessionControl::UpdateSinkMetadata( - from_session_type_2_1(session_type), *sink_metadata); -} - } // namespace audio } // namespace bluetooth } // namespace hardware |