156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi/*
256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * Copyright (C) 2015 The Android Open Source Project
356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi *
456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License");
556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * you may not use this file except in compliance with the License.
656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * You may obtain a copy of the License at
756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi *
856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi *      http://www.apache.org/licenses/LICENSE-2.0
956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi *
1056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * Unless required by applicable law or agreed to in writing, software
1156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS,
1256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * See the License for the specific language governing permissions and
1456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * limitations under the License.
1556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi */
1656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi
17ad3183e2d4cecd02f6261270a7ea1c68be0efa0fFrançois Gaffie#pragma once
18ad3183e2d4cecd02f6261270a7ea1c68be0efa0fFrançois Gaffie
19a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie#include "AudioPolicyConfig.h"
2053615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include "DeviceDescriptor.h"
2153615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include "HwModule.h"
2253615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include "audio_policy_conf.h"
23ad3183e2d4cecd02f6261270a7ea1c68be0efa0fFrançois Gaffie#include <system/audio.h>
2453615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include <utils/Log.h>
2553615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include <utils/Vector.h>
2653615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include <utils/SortedVector.h>
2753615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include <cutils/config_utils.h>
2853615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include <utils/RefBase.h>
2953615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie#include <system/audio_policy.h>
30ad3183e2d4cecd02f6261270a7ea1c68be0efa0fFrançois Gaffie
3156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivinamespace android {
3256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi
3356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi// ----------------------------------------------------------------------------
3456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi// Definitions for audio_policy.conf file parsing
3556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi// ----------------------------------------------------------------------------
3656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi
3756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Triviclass ConfigParsingUtils
3856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi{
3956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivipublic:
40a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    static status_t loadConfig(const char *path, AudioPolicyConfig &config);
4153615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffie
4253615e29c99c5e9d2ca77aaefd7bf5c770513120François Gaffieprivate:
43a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    static void loadAudioPortGain(cnode *root, AudioPort &audioPort, int index);
44a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    static void loadAudioPortGains(cnode *root, AudioPort &audioPort);
45a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    static void loadDeviceDescriptorGains(cnode *root, sp<DeviceDescriptor> &deviceDesc);
46a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    static status_t loadHwModuleDevice(cnode *root, DeviceVector &devices);
47112b0af826aeca45855690b9c105b2cdf9938bbeFrançois Gaffie    static status_t loadHwModuleProfile(cnode *root, sp<HwModule> &module, audio_port_role_t role);
48a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    static void loadDevicesFromTag(const char *tag, DeviceVector &devices,
49a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie                            const DeviceVector &declaredDevices);
50a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    static void loadHwModules(cnode *root, HwModuleCollection &hwModules,
51a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie                              AudioPolicyConfig &config);
52a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    static void loadGlobalConfig(cnode *root, AudioPolicyConfig &config,
53a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie                                 const sp<HwModule> &primaryModule);
54a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    static void loadModuleGlobalConfig(cnode *root, const sp<HwModule> &module,
55a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie                                       AudioPolicyConfig &config);
56a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    static status_t loadHwModule(cnode *root, sp<HwModule> &module, AudioPolicyConfig &config);
5756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi};
5856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi
5956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi}; // namespace android
60