blob: 380228ccb1f4b0957f633cd0cd512896442d7e67 [file] [log] [blame]
#ifndef ANDROID_AUDIO_POLICY_CONFIGURATION_V7_0_H
#define ANDROID_AUDIO_POLICY_CONFIGURATION_V7_0_H
#include <array>
#include <map>
#include <optional>
#include <string>
#include <vector>
#include <sstream>
#if __has_include(<libxml/parser.h>)
#include <libxml/parser.h>
#include <libxml/xinclude.h>
#else
#error Require libxml2 library. Please add libxml2 to shared_libs or static_libs
#endif
#include "android_audio_policy_configuration_V7_0_enums.h"
namespace android {
namespace audio {
namespace policy {
namespace configuration {
namespace V7_0 {
class GlobalConfiguration;
class Modules;
class AttachedDevices;
class MixPorts;
class Profile;
class Gains;
class DevicePorts;
class Routes;
class Volumes;
class Volume;
class Reference;
class SurroundSound;
class SurroundFormats;
class AudioPolicyConfiguration;
std::optional<AudioPolicyConfiguration> read(const char* configFile);
std::optional<AudioPolicyConfiguration> parse(const char* xml);
class GlobalConfiguration {
private:
const bool speaker_drc_enabled_;
const std::optional<bool> call_screen_mode_supported_;
const std::optional<EngineSuffix> engine_library_;
public:
GlobalConfiguration(bool speaker_drc_enabled, std::optional<bool> call_screen_mode_supported, std::optional<EngineSuffix> engine_library);
const bool& getSpeaker_drc_enabled() const;
bool hasSpeaker_drc_enabled() const;
const bool& getCall_screen_mode_supported() const;
bool hasCall_screen_mode_supported() const;
const EngineSuffix& getEngine_library() const;
bool hasEngine_library() const;
static GlobalConfiguration read(xmlNode *root);
};
class Modules {
public:
class Module {
private:
const std::vector<AttachedDevices> attachedDevices_;
const std::optional<std::string> defaultOutputDevice_;
const std::vector<MixPorts> mixPorts_;
const std::vector<DevicePorts> devicePorts_;
const std::vector<Routes> routes_;
const std::string name_;
const HalVersion halVersion_;
public:
Module(std::vector<AttachedDevices> attachedDevices, std::optional<std::string> defaultOutputDevice, std::vector<MixPorts> mixPorts, std::vector<DevicePorts> devicePorts, std::vector<Routes> routes, std::string name, HalVersion halVersion);
const std::vector<AttachedDevices>& getAttachedDevices() const;
bool hasAttachedDevices() const;
const AttachedDevices* getFirstAttachedDevices() const;
const std::string& getDefaultOutputDevice() const;
bool hasDefaultOutputDevice() const;
const std::vector<MixPorts>& getMixPorts() const;
bool hasMixPorts() const;
const MixPorts* getFirstMixPorts() const;
const std::vector<DevicePorts>& getDevicePorts() const;
bool hasDevicePorts() const;
const DevicePorts* getFirstDevicePorts() const;
const std::vector<Routes>& getRoutes() const;
bool hasRoutes() const;
const Routes* getFirstRoutes() const;
const std::string& getName() const;
bool hasName() const;
const HalVersion& getHalVersion() const;
bool hasHalVersion() const;
static Modules::Module read(xmlNode *root);
};
private:
const std::vector<Modules::Module> _module_;
public:
explicit Modules(std::vector<Module> _module);
const std::vector<Modules::Module>& get_module() const;
bool has_module() const;
const Modules::Module* getFirst_module() const;
static Modules read(xmlNode *root);
};
class AttachedDevices {
private:
const std::vector<std::string> item_;
public:
explicit AttachedDevices(std::vector<std::string> item);
const std::vector<std::string>& getItem() const;
bool hasItem() const;
const std::string* getFirstItem() const;
static AttachedDevices read(xmlNode *root);
};
class MixPorts {
public:
class MixPort {
private:
const std::vector<Profile> profile_;
const std::vector<Gains> gains_;
const std::string name_;
const Role role_;
const std::optional<std::vector<AudioInOutFlag>> flags_;
const std::optional<unsigned int> maxOpenCount_;
const std::optional<unsigned int> maxActiveCount_;
const std::optional<std::vector<AudioUsage>> preferredUsage_;
public:
MixPort(std::vector<Profile> profile, std::vector<Gains> gains, std::string name, Role role, std::optional<std::vector<AudioInOutFlag>> flags, std::optional<unsigned int> maxOpenCount, std::optional<unsigned int> maxActiveCount, std::optional<std::vector<AudioUsage>> preferredUsage);
const std::vector<Profile>& getProfile() const;
bool hasProfile() const;
const Profile* getFirstProfile() const;
const std::vector<Gains>& getGains() const;
bool hasGains() const;
const Gains* getFirstGains() const;
const std::string& getName() const;
bool hasName() const;
const Role& getRole() const;
bool hasRole() const;
const std::vector<AudioInOutFlag>& getFlags() const;
bool hasFlags() const;
const unsigned int& getMaxOpenCount() const;
bool hasMaxOpenCount() const;
const unsigned int& getMaxActiveCount() const;
bool hasMaxActiveCount() const;
const std::vector<AudioUsage>& getPreferredUsage() const;
bool hasPreferredUsage() const;
static MixPorts::MixPort read(xmlNode *root);
};
private:
const std::vector<MixPorts::MixPort> mixPort_;
public:
explicit MixPorts(std::vector<MixPort> mixPort);
const std::vector<MixPorts::MixPort>& getMixPort() const;
bool hasMixPort() const;
const MixPorts::MixPort* getFirstMixPort() const;
static MixPorts read(xmlNode *root);
};
class Profile {
private:
const std::optional<std::string> name_;
const std::optional<std::string> format_;
const std::optional<std::vector<int64_t>> samplingRates_;
const std::optional<std::vector<AudioChannelMask>> channelMasks_;
const std::optional<AudioEncapsulationType> encapsulationType_;
public:
Profile(std::optional<std::string> name, std::optional<std::string> format, std::optional<std::vector<int64_t>> samplingRates, std::optional<std::vector<AudioChannelMask>> channelMasks, std::optional<AudioEncapsulationType> encapsulationType);
const std::string& getName() const;
bool hasName() const;
const std::string& getFormat() const;
bool hasFormat() const;
const std::vector<int64_t>& getSamplingRates() const;
bool hasSamplingRates() const;
const std::vector<AudioChannelMask>& getChannelMasks() const;
bool hasChannelMasks() const;
const AudioEncapsulationType& getEncapsulationType() const;
bool hasEncapsulationType() const;
static Profile read(xmlNode *root);
};
class Gains {
public:
class Gain {
private:
const std::string name_;
const std::vector<AudioGainMode> mode_;
const std::optional<AudioChannelMask> channel_mask_;
const std::optional<int> minValueMB_;
const std::optional<int> maxValueMB_;
const std::optional<int> defaultValueMB_;
const std::optional<int> stepValueMB_;
const std::optional<int> minRampMs_;
const std::optional<int> maxRampMs_;
const std::optional<bool> useForVolume_;
public:
Gain(std::string name, std::vector<AudioGainMode> mode, std::optional<AudioChannelMask> channel_mask, std::optional<int> minValueMB, std::optional<int> maxValueMB, std::optional<int> defaultValueMB, std::optional<int> stepValueMB, std::optional<int> minRampMs, std::optional<int> maxRampMs, std::optional<bool> useForVolume);
const std::string& getName() const;
bool hasName() const;
const std::vector<AudioGainMode>& getMode() const;
bool hasMode() const;
const AudioChannelMask& getChannel_mask() const;
bool hasChannel_mask() const;
const int& getMinValueMB() const;
bool hasMinValueMB() const;
const int& getMaxValueMB() const;
bool hasMaxValueMB() const;
const int& getDefaultValueMB() const;
bool hasDefaultValueMB() const;
const int& getStepValueMB() const;
bool hasStepValueMB() const;
const int& getMinRampMs() const;
bool hasMinRampMs() const;
const int& getMaxRampMs() const;
bool hasMaxRampMs() const;
const bool& getUseForVolume() const;
bool hasUseForVolume() const;
static Gains::Gain read(xmlNode *root);
};
private:
const std::vector<Gains::Gain> gain_;
public:
explicit Gains(std::vector<Gain> gain);
const std::vector<Gains::Gain>& getGain() const;
bool hasGain() const;
const Gains::Gain* getFirstGain() const;
static Gains read(xmlNode *root);
};
class DevicePorts {
public:
class DevicePort {
private:
const std::vector<Profile> profile_;
const std::vector<Gains> gains_;
const std::string tagName_;
const std::string type_;
const Role role_;
const std::optional<std::string> address_;
const std::optional<bool> _default_;
const std::optional<std::vector<std::string>> encodedFormats_;
public:
DevicePort(std::vector<Profile> profile, std::vector<Gains> gains, std::string tagName, std::string type, Role role, std::optional<std::string> address, std::optional<bool> _default, std::optional<std::vector<std::string>> encodedFormats);
const std::vector<Profile>& getProfile() const;
bool hasProfile() const;
const Profile* getFirstProfile() const;
const std::vector<Gains>& getGains() const;
bool hasGains() const;
const Gains* getFirstGains() const;
const std::string& getTagName() const;
bool hasTagName() const;
const std::string& getType() const;
bool hasType() const;
const Role& getRole() const;
bool hasRole() const;
const std::string& getAddress() const;
bool hasAddress() const;
const bool& get_default() const;
bool has_default() const;
const std::vector<std::string>& getEncodedFormats() const;
bool hasEncodedFormats() const;
static DevicePorts::DevicePort read(xmlNode *root);
};
private:
const std::vector<DevicePorts::DevicePort> devicePort_;
public:
explicit DevicePorts(std::vector<DevicePort> devicePort);
const std::vector<DevicePorts::DevicePort>& getDevicePort() const;
bool hasDevicePort() const;
const DevicePorts::DevicePort* getFirstDevicePort() const;
static DevicePorts read(xmlNode *root);
};
class Routes {
public:
class Route {
private:
const MixType type_;
const std::string sink_;
const std::string sources_;
public:
Route(MixType type, std::string sink, std::string sources);
const MixType& getType() const;
bool hasType() const;
const std::string& getSink() const;
bool hasSink() const;
const std::string& getSources() const;
bool hasSources() const;
static Routes::Route read(xmlNode *root);
};
private:
const std::vector<Routes::Route> route_;
public:
explicit Routes(std::vector<Route> route);
const std::vector<Routes::Route>& getRoute() const;
bool hasRoute() const;
const Routes::Route* getFirstRoute() const;
static Routes read(xmlNode *root);
};
class Volumes {
private:
const std::vector<Volume> volume_;
const std::vector<Reference> reference_;
public:
Volumes(std::vector<Volume> volume, std::vector<Reference> reference);
const std::vector<Volume>& getVolume() const;
bool hasVolume() const;
const Volume* getFirstVolume() const;
const std::vector<Reference>& getReference() const;
bool hasReference() const;
const Reference* getFirstReference() const;
static Volumes read(xmlNode *root);
};
class Volume {
private:
const std::vector<std::string> point_;
const std::optional<AudioStreamType> stream_;
const std::optional<DeviceCategory> deviceCategory_;
const std::optional<std::string> ref_;
public:
Volume(std::vector<std::string> point, std::optional<AudioStreamType> stream, std::optional<DeviceCategory> deviceCategory, std::optional<std::string> ref);
const std::vector<std::string>& getPoint() const;
bool hasPoint() const;
const std::string* getFirstPoint() const;
const AudioStreamType& getStream() const;
bool hasStream() const;
const DeviceCategory& getDeviceCategory() const;
bool hasDeviceCategory() const;
const std::string& getRef() const;
bool hasRef() const;
static Volume read(xmlNode *root);
};
class Reference {
private:
const std::vector<std::string> point_;
const std::string name_;
public:
Reference(std::vector<std::string> point, std::string name);
const std::vector<std::string>& getPoint() const;
bool hasPoint() const;
const std::string* getFirstPoint() const;
const std::string& getName() const;
bool hasName() const;
static Reference read(xmlNode *root);
};
class SurroundSound {
private:
const std::vector<SurroundFormats> formats_;
public:
explicit SurroundSound(std::vector<SurroundFormats> formats);
const std::vector<SurroundFormats>& getFormats() const;
bool hasFormats() const;
const SurroundFormats* getFirstFormats() const;
static SurroundSound read(xmlNode *root);
};
class SurroundFormats {
public:
class Format {
private:
const std::string name_;
const std::optional<std::vector<std::string>> subformats_;
public:
Format(std::string name, std::optional<std::vector<std::string>> subformats);
const std::string& getName() const;
bool hasName() const;
const std::vector<std::string>& getSubformats() const;
bool hasSubformats() const;
static SurroundFormats::Format read(xmlNode *root);
};
private:
const std::vector<SurroundFormats::Format> format_;
public:
explicit SurroundFormats(std::vector<Format> format);
const std::vector<SurroundFormats::Format>& getFormat() const;
bool hasFormat() const;
const SurroundFormats::Format* getFirstFormat() const;
static SurroundFormats read(xmlNode *root);
};
class AudioPolicyConfiguration {
private:
const std::vector<GlobalConfiguration> globalConfiguration_;
const std::vector<Modules> modules_;
const std::vector<Volumes> volumes_;
const std::vector<SurroundSound> surroundSound_;
const std::optional<Version> version_;
public:
AudioPolicyConfiguration(std::vector<GlobalConfiguration> globalConfiguration, std::vector<Modules> modules, std::vector<Volumes> volumes, std::vector<SurroundSound> surroundSound, std::optional<Version> version);
const std::vector<GlobalConfiguration>& getGlobalConfiguration() const;
bool hasGlobalConfiguration() const;
const GlobalConfiguration* getFirstGlobalConfiguration() const;
const std::vector<Modules>& getModules() const;
bool hasModules() const;
const Modules* getFirstModules() const;
const std::vector<Volumes>& getVolumes() const;
bool hasVolumes() const;
const Volumes* getFirstVolumes() const;
const std::vector<SurroundSound>& getSurroundSound() const;
bool hasSurroundSound() const;
const SurroundSound* getFirstSurroundSound() const;
const Version& getVersion() const;
bool hasVersion() const;
static AudioPolicyConfiguration read(xmlNode *root);
};
} // V7_0
} // configuration
} // policy
} // audio
} // android
#endif // ANDROID_AUDIO_POLICY_CONFIGURATION_V7_0_H