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