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