1f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie/* 2f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie * Copyright (C) 2015 The Android Open Source Project 3f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie * 4f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie * Licensed under the Apache License, Version 2.0 (the "License"); 5f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie * you may not use this file except in compliance with the License. 6f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie * You may obtain a copy of the License at 7f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie * 8f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie * http://www.apache.org/licenses/LICENSE-2.0 9f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie * 10f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie * Unless required by applicable law or agreed to in writing, software 11f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie * distributed under the License is distributed on an "AS IS" BASIS, 12f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie * See the License for the specific language governing permissions and 14f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie * limitations under the License. 15f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie */ 16f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 17f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie#pragma once 18f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 19f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie#include "AudioPolicyConfig.h" 20f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie#include <utils/StrongPointer.h> 21f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie#include <utils/Errors.h> 22f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie#include <utils/RefBase.h> 23f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie#include <string> 24f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie#include <sstream> 25f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie#include <fstream> 26f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 27f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffiestruct _xmlNode; 28f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffiestruct _xmlDoc; 29f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 30f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffienamespace android { 31f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 32f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffiestruct AudioGainTraits 33f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie{ 34f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const tag; 35f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const collectionTag; 36f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 37f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie struct Attributes 38f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie { 39f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char mode[]; /**< gain modes supported, e.g. AUDIO_GAIN_MODE_CHANNELS. */ 40f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie /** controlled channels, needed if mode AUDIO_GAIN_MODE_CHANNELS. */ 41f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char channelMask[]; 42f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char minValueMB[]; /**< min value in millibel. */ 43f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char maxValueMB[]; /**< max value in millibel. */ 44f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char defaultValueMB[]; /**< default value in millibel. */ 45f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char stepValueMB[]; /**< step value in millibel. */ 46f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char minRampMs[]; /**< needed if mode AUDIO_GAIN_MODE_RAMP. */ 47f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char maxRampMs[]; /**< .needed if mode AUDIO_GAIN_MODE_RAMP */ 48f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie }; 49f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 50f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef AudioGain Element; 51f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef sp<Element> PtrElement; 52f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef AudioGainCollection Collection; 53f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef void *PtrSerializingCtx; 54f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 55f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static status_t deserialize(_xmlDoc *doc, const _xmlNode *root, PtrElement &element, 56f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie PtrSerializingCtx serializingContext); 57f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 58f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie // Gain has no child 59f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie}; 60f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 61f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie// A profile section contains a name, one audio format and the list of supported sampling rates 62f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie// and channel masks for this format 63f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffiestruct AudioProfileTraits 64f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie{ 65f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const tag; 66f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const collectionTag; 67f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 68f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie struct Attributes 69f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie { 70f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char name[]; 71f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char samplingRates[]; 72f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char format[]; 73f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char channelMasks[]; 74f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie }; 75f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 76f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef AudioProfile Element; 77f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef sp<AudioProfile> PtrElement; 78f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef AudioProfileVector Collection; 79f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef void *PtrSerializingCtx; 80f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 81f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static status_t deserialize(_xmlDoc *doc, const _xmlNode *root, PtrElement &element, 82f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie PtrSerializingCtx serializingContext); 83f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie}; 84f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 85f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffiestruct MixPortTraits 86f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie{ 87f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const tag; 88f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const collectionTag; 89f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 90f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie struct Attributes 91f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie { 92f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char name[]; 93f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char role[]; 94f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char flags[]; 95f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie }; 96f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 97f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef IOProfile Element; 98f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef sp<Element> PtrElement; 99f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef IOProfileCollection Collection; 100f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef void *PtrSerializingCtx; 101f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 102f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static status_t deserialize(_xmlDoc *doc, const _xmlNode *root, PtrElement &element, 103f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie PtrSerializingCtx serializingContext); 104f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 105f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie // Children are: GainTraits 106f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie}; 107f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 108f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffiestruct DevicePortTraits 109f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie{ 110f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const tag; 111f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const collectionTag; 112f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 113f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie struct Attributes 114f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie { 115f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char tagName[]; /**< <device tag name>: any string without space. */ 116f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char type[]; /**< <device type>. */ 117f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char role[]; /**< <device role: sink or source>. */ 118f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char roleSource[]; /**< <attribute role source value>. */ 119f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char address[]; /**< optional: device address, char string less than 64. */ 120f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie }; 121f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef DeviceDescriptor Element; 122f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef sp<DeviceDescriptor> PtrElement; 123f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef DeviceVector Collection; 124f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef void *PtrSerializingCtx; 125f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 126f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static status_t deserialize(_xmlDoc *doc, const _xmlNode *root, PtrElement &element, 127f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie PtrSerializingCtx serializingContext); 128f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie // Children are: GainTraits (optionnal) 129f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie}; 130f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 131f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffiestruct RouteTraits 132f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie{ 133f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const tag; 134f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const collectionTag; 135f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 136f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie struct Attributes 137f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie { 138f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char type[]; /**< <route type>: mix or mux. */ 139f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char typeMix[]; /**< type attribute mix value. */ 140f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char sink[]; /**< <sink: involved in this route>. */ 141f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char sources[]; /**< sources: all source that can be involved in this route. */ 142f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie }; 143f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef AudioRoute Element; 144f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef sp<AudioRoute> PtrElement; 145f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef AudioRouteVector Collection; 146f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef HwModule *PtrSerializingCtx; 147f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 148f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static status_t deserialize(_xmlDoc *doc, const _xmlNode *root, PtrElement &element, 149f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie PtrSerializingCtx ctx); 150f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie}; 151f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 152f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffiestruct ModuleTraits 153f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie{ 154f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const tag; 155f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const collectionTag; 156f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 157f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const childAttachedDevicesTag; 158f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const childAttachedDeviceTag; 159f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const childDefaultOutputDeviceTag; 160f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 161f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie struct Attributes 162f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie { 163f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char name[]; 164f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char version[]; 165f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie }; 166f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 167f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef HwModule Element; 168f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef sp<Element> PtrElement; 169f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef HwModuleCollection Collection; 170f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef AudioPolicyConfig *PtrSerializingCtx; 171f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 172f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static status_t deserialize(_xmlDoc *doc, const _xmlNode *root, PtrElement &element, 173f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie PtrSerializingCtx serializingContext); 174f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 175f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie // Children are: mixPortTraits, devicePortTraits and routeTraits 176f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie // Need to call deserialize on each child 177f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie}; 178f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 179f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffiestruct GlobalConfigTraits 180f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie{ 181f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const tag; 182f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 183f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie struct Attributes 184f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie { 185f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char speakerDrcEnabled[]; 186f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie }; 187f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 188f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static status_t deserialize(const _xmlNode *root, AudioPolicyConfig &config); 189f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie}; 190f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 191f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffiestruct VolumeTraits 192f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie{ 193f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const tag; 194f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const collectionTag; 195f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const volumePointTag; 196f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 197f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie struct Attributes 198f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie { 199f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char stream[]; 200f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char deviceCategory[]; 201c9d7c4e35afd48ac8a315f53666943b6210dafa1François Gaffie static const char reference[]; 202f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie }; 203f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 204f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef VolumeCurve Element; 205f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef sp<VolumeCurve> PtrElement; 206d1ab2bd4f1ea166a7e9e81cfd7f3e5dd47135d4dFrançois Gaffie typedef VolumeCurvesCollection Collection; 207f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef void *PtrSerializingCtx; 208f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 209f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static status_t deserialize(_xmlDoc *doc, const _xmlNode *root, PtrElement &element, 210f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie PtrSerializingCtx serializingContext); 211f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 212f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie // No Child 213f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie}; 214f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 215f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffieclass PolicySerializer 216f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie{ 217f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffieprivate: 218f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const rootName; 219f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 220f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const char *const versionAttribute; 221f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const uint32_t gMajor; /**< the major number of the policy xml format version. */ 222f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie static const uint32_t gMinor; /**< the minor number of the policy xml format version. */ 223f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 224f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffiepublic: 225f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie PolicySerializer(); 226f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie status_t deserialize(const char *str, AudioPolicyConfig &config); 227f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 228f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffieprivate: 229f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie typedef AudioPolicyConfig Element; 230f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 231f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie std::string mRootElementName; 232f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie std::string mVersion; 233f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 234f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie // Children are: ModulesTraits, VolumeTraits 235f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie}; 236f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie 237f4ad6e5637b6deccdac4b60615383f290b3806cfFrançois Gaffie}; // namespace android 238