blob: 5bf67e2f9501e5cea4d64f20e41bd2679687d51e [file] [log] [blame]
shihchienc8ed901a2022-09-06 08:44:44 +00001/*
2 * Copyright (C) 2022 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <aidl/android/hardware/bluetooth/audio/LeAudioCodecCapabilitiesSetting.h>
20#include <android-base/logging.h>
21
22#include <unordered_map>
Patty Huangac077ef2022-11-23 14:45:15 +080023#include <vector>
shihchienc8ed901a2022-09-06 08:44:44 +000024
Bao Do6aeb5d72023-12-11 10:53:18 +000025#include "aidl/android/hardware/bluetooth/audio/CodecInfo.h"
26#include "aidl/android/hardware/bluetooth/audio/SessionType.h"
shihchienc8ed901a2022-09-06 08:44:44 +000027#include "aidl_android_hardware_bluetooth_audio_setting.h"
28
29namespace aidl {
30namespace android {
31namespace hardware {
32namespace bluetooth {
33namespace audio {
34
35class BluetoothLeAudioCodecsProvider {
36 public:
shihchiencd7f565a2022-10-14 13:45:37 +000037 static std::optional<setting::LeAudioOffloadSetting>
38 ParseFromLeAudioOffloadSettingFile();
shihchienc8ed901a2022-09-06 08:44:44 +000039 static std::vector<LeAudioCodecCapabilitiesSetting>
shihchiencd7f565a2022-10-14 13:45:37 +000040 GetLeAudioCodecCapabilities(
41 const std::optional<setting::LeAudioOffloadSetting>&
42 le_audio_offload_setting);
43 static void ClearLeAudioCodecCapabilities();
Bao Do6aeb5d72023-12-11 10:53:18 +000044 static std::unordered_map<SessionType, std::vector<CodecInfo>>
45 GetLeAudioCodecInfo(const std::optional<setting::LeAudioOffloadSetting>&
46 le_audio_offload_setting);
shihchienc8ed901a2022-09-06 08:44:44 +000047
48 private:
Bao Do6aeb5d72023-12-11 10:53:18 +000049 static inline std::vector<setting::Scenario> supported_scenarios_;
shihchienc8ed901a2022-09-06 08:44:44 +000050 static inline std::unordered_map<std::string, setting::Configuration>
51 configuration_map_;
52 static inline std::unordered_map<std::string, setting::CodecConfiguration>
53 codec_configuration_map_;
54 static inline std::unordered_map<std::string, setting::StrategyConfiguration>
55 strategy_configuration_map_;
Bao Do6aeb5d72023-12-11 10:53:18 +000056 static inline std::unordered_map<SessionType, std::vector<CodecInfo>>
57 session_codecs_map_;
shihchienc8ed901a2022-09-06 08:44:44 +000058
59 static std::vector<setting::Scenario> GetScenarios(
60 const std::optional<setting::LeAudioOffloadSetting>&
61 le_audio_offload_setting);
62 static void UpdateConfigurationsToMap(
63 const std::optional<setting::LeAudioOffloadSetting>&
64 le_audio_offload_setting);
65 static void UpdateCodecConfigurationsToMap(
66 const std::optional<setting::LeAudioOffloadSetting>&
67 le_audio_offload_setting);
68 static void UpdateStrategyConfigurationsToMap(
69 const std::optional<setting::LeAudioOffloadSetting>&
70 le_audio_offload_setting);
Bao Do6aeb5d72023-12-11 10:53:18 +000071 static void LoadConfigurationToMap(
72 const std::optional<setting::LeAudioOffloadSetting>&
73 le_audio_offload_setting);
shihchienc8ed901a2022-09-06 08:44:44 +000074
75 static std::vector<LeAudioCodecCapabilitiesSetting>
76 ComposeLeAudioCodecCapabilities(
77 const std::vector<setting::Scenario>& supported_scenarios);
78
79 static UnicastCapability GetUnicastCapability(
80 const std::string& coding_direction);
Patty Huangac077ef2022-11-23 14:45:15 +080081 static BroadcastCapability GetBroadcastCapability(
82 const std::string& coding_direction);
83
shihchienc8ed901a2022-09-06 08:44:44 +000084 template <class T>
85 static inline UnicastCapability ComposeUnicastCapability(
86 const CodecType& codec_type, const AudioLocation& audio_location,
87 const uint8_t& device_cnt, const uint8_t& channel_count,
88 const T& capability);
89
Patty Huangac077ef2022-11-23 14:45:15 +080090 template <class T>
91 static inline BroadcastCapability ComposeBroadcastCapability(
92 const CodecType& codec_type, const AudioLocation& audio_location,
93 const uint8_t& channel_count, const std::vector<T>& capability);
94
shihchienc8ed901a2022-09-06 08:44:44 +000095 static inline Lc3Capabilities ComposeLc3Capability(
96 const setting::CodecConfiguration& codec_configuration);
97
Alice Kuof850de62023-10-04 04:02:24 +080098 static inline AptxAdaptiveLeCapabilities ComposeAptxAdaptiveLeCapability(
99 const setting::CodecConfiguration& codec_configuration);
100
shihchienc8ed901a2022-09-06 08:44:44 +0000101 static inline AudioLocation GetAudioLocation(
102 const setting::AudioLocation& audio_location);
103 static inline CodecType GetCodecType(const setting::CodecType& codec_type);
104
105 static inline bool IsValidCodecConfiguration(
106 const setting::CodecConfiguration& codec_configuration);
107 static inline bool IsValidStrategyConfiguration(
108 const setting::StrategyConfiguration& strategy_configuration);
109};
110
111} // namespace audio
112} // namespace bluetooth
113} // namespace hardware
114} // namespace android
115} // namespace aidl