1 #ifndef AIDL_ANDROID_HARDWARE_BLUETOOTH_AUDIO_HFP_SETTING_H
2 #define AIDL_ANDROID_HARDWARE_BLUETOOTH_AUDIO_HFP_SETTING_H
3 
4 #include <array>
5 #include <map>
6 #include <optional>
7 #include <string>
8 #include <vector>
9 #include <sstream>
10 
11 #if __has_include(<libxml/parser.h>)
12 #include <libxml/parser.h>
13 #include <libxml/xinclude.h>
14 #else
15 #error Require libxml2 library. Please add libxml2 to shared_libs or static_libs
16 #endif
17 
18 #include "aidl_android_hardware_bluetooth_audio_hfp_setting_enums.h"
19 
20 namespace aidl {
21     namespace android {
22         namespace hardware {
23             namespace bluetooth {
24                 namespace audio {
25                     namespace hfp {
26                         namespace setting {
27                             class HfpOffloadSetting;
28                             class PathConfiguration;
29                             class TransportConfiguration;
30                             class Configuration;
31                             std::optional<HfpOffloadSetting> readHfpOffloadSetting(const char* configFile);
32 
33                             std::optional<HfpOffloadSetting> parseHfpOffloadSetting(const char* xml);
34 
35                             class HfpOffloadSetting {
36                                 private:
37                                 const std::vector<PathConfiguration> pathConfiguration_;
38                                 const std::vector<TransportConfiguration> transportConfiguration_;
39                                 const std::vector<Configuration> configuration_;
40                                 public:
41                                 HfpOffloadSetting(std::vector<PathConfiguration> pathConfiguration, std::vector<TransportConfiguration> transportConfiguration, std::vector<Configuration> configuration);
42                                 const std::vector<PathConfiguration>& getPathConfiguration() const;
43                                 bool hasPathConfiguration() const;
44                                 const PathConfiguration* getFirstPathConfiguration() const;
45                                 const std::vector<TransportConfiguration>& getTransportConfiguration() const;
46                                 bool hasTransportConfiguration() const;
47                                 const TransportConfiguration* getFirstTransportConfiguration() const;
48                                 const std::vector<Configuration>& getConfiguration() const;
49                                 bool hasConfiguration() const;
50                                 const Configuration* getFirstConfiguration() const;
51                                 static HfpOffloadSetting read(xmlNode *root);
52                             };
53 
54                             class PathConfiguration {
55                                 private:
56                                 const std::optional<std::string> name_;
57                                 const std::optional<unsigned int> bandwidth_;
58                                 const std::optional<CodecType> codec_;
59                                 const std::optional<unsigned short> codedDataSize_;
60                                 const std::optional<unsigned char> pcmDataFormat_;
61                                 const std::optional<unsigned char> pcmPayloadMsbPosition_;
62                                 const std::optional<unsigned char> dataPath_;
63                                 const std::optional<unsigned char> transportUnitSize_;
64                                 public:
65                                 PathConfiguration(std::optional<std::string> name, std::optional<unsigned int> bandwidth, std::optional<CodecType> codec, std::optional<unsigned short> codedDataSize, std::optional<unsigned char> pcmDataFormat, std::optional<unsigned char> pcmPayloadMsbPosition, std::optional<unsigned char> dataPath, std::optional<unsigned char> transportUnitSize);
66                                 const std::string& getName() const;
67                                 bool hasName() const;
68                                 const unsigned int& getBandwidth() const;
69                                 bool hasBandwidth() const;
70                                 const CodecType& getCodec() const;
71                                 bool hasCodec() const;
72                                 const unsigned short& getCodedDataSize() const;
73                                 bool hasCodedDataSize() const;
74                                 const unsigned char& getPcmDataFormat() const;
75                                 bool hasPcmDataFormat() const;
76                                 const unsigned char& getPcmPayloadMsbPosition() const;
77                                 bool hasPcmPayloadMsbPosition() const;
78                                 const unsigned char& getDataPath() const;
79                                 bool hasDataPath() const;
80                                 const unsigned char& getTransportUnitSize() const;
81                                 bool hasTransportUnitSize() const;
82                                 static PathConfiguration read(xmlNode *root);
83                             };
84 
85                             class TransportConfiguration {
86                                 private:
87                                 const std::optional<std::string> name_;
88                                 const std::optional<unsigned int> bandwidth_;
89                                 const std::optional<CodecType> codec_;
90                                 const std::optional<unsigned short> codedFrameSize_;
91                                 public:
92                                 TransportConfiguration(std::optional<std::string> name, std::optional<unsigned int> bandwidth, std::optional<CodecType> codec, std::optional<unsigned short> codedFrameSize);
93                                 const std::string& getName() const;
94                                 bool hasName() const;
95                                 const unsigned int& getBandwidth() const;
96                                 bool hasBandwidth() const;
97                                 const CodecType& getCodec() const;
98                                 bool hasCodec() const;
99                                 const unsigned short& getCodedFrameSize() const;
100                                 bool hasCodedFrameSize() const;
101                                 static TransportConfiguration read(xmlNode *root);
102                             };
103 
104                             class Configuration {
105                                 private:
106                                 const std::optional<std::string> name_;
107                                 const std::optional<CodecType> codec_;
108                                 const std::optional<unsigned short> maxLatencyMs_;
109                                 const std::optional<unsigned short> packetTypes_;
110                                 const std::optional<unsigned char> retransmissionEffort_;
111                                 const std::optional<bool> useControllerCodec_;
112                                 const std::optional<std::string> inputPathConfiguration_;
113                                 const std::optional<std::string> outputPathConfiguration_;
114                                 const std::optional<std::string> inputTransportConfiguration_;
115                                 const std::optional<std::string> outputTransportConfiguration_;
116                                 public:
117                                 Configuration(std::optional<std::string> name, std::optional<CodecType> codec, std::optional<unsigned short> maxLatencyMs, std::optional<unsigned short> packetTypes, std::optional<unsigned char> retransmissionEffort, std::optional<bool> useControllerCodec, std::optional<std::string> inputPathConfiguration, std::optional<std::string> outputPathConfiguration, std::optional<std::string> inputTransportConfiguration, std::optional<std::string> outputTransportConfiguration);
118                                 const std::string& getName() const;
119                                 bool hasName() const;
120                                 const CodecType& getCodec() const;
121                                 bool hasCodec() const;
122                                 const unsigned short& getMaxLatencyMs() const;
123                                 bool hasMaxLatencyMs() const;
124                                 const unsigned short& getPacketTypes() const;
125                                 bool hasPacketTypes() const;
126                                 const unsigned char& getRetransmissionEffort() const;
127                                 bool hasRetransmissionEffort() const;
128                                 const bool& getUseControllerCodec() const;
129                                 bool hasUseControllerCodec() const;
130                                 const std::string& getInputPathConfiguration() const;
131                                 bool hasInputPathConfiguration() const;
132                                 const std::string& getOutputPathConfiguration() const;
133                                 bool hasOutputPathConfiguration() const;
134                                 const std::string& getInputTransportConfiguration() const;
135                                 bool hasInputTransportConfiguration() const;
136                                 const std::string& getOutputTransportConfiguration() const;
137                                 bool hasOutputTransportConfiguration() const;
138                                 static Configuration read(xmlNode *root);
139                             };
140 
141                         } // setting
142                     } // hfp
143                 } // audio
144             } // bluetooth
145         } // hardware
146     } // android
147 } // aidl
148 #endif // AIDL_ANDROID_HARDWARE_BLUETOOTH_AUDIO_HFP_SETTING_H
149