120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie/* 220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * Copyright (C) 2015 The Android Open Source Project 320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * 420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * Licensed under the Apache License, Version 2.0 (the "License"); 520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * you may not use this file except in compliance with the License. 620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * You may obtain a copy of the License at 720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * 820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * http://www.apache.org/licenses/LICENSE-2.0 920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * 1020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * Unless required by applicable law or agreed to in writing, software 1120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * distributed under the License is distributed on an "AS IS" BASIS, 1220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * See the License for the specific language governing permissions and 1420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * limitations under the License. 1520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie */ 1620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 1720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include "PolicySubsystem.h" 1820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include "SubsystemObjectFactory.h" 1920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include "PolicyMappingKeys.h" 2020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include "Strategy.h" 2120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include "Stream.h" 2220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include "InputSource.h" 2320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include "Usage.h" 2420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include <AudioPolicyPluginInterface.h> 2520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include <AudioPolicyEngineInstance.h> 2620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include <utils/Log.h> 2720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 2820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieusing android::audio_policy::EngineInstance; 2920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 3020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieconst char *const PolicySubsystem::mKeyName = "Name"; 3120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieconst char *const PolicySubsystem::mKeyIdentifier = "Identifier"; 3220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieconst char *const PolicySubsystem::mKeyCategory = "Category"; 3320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieconst char *const PolicySubsystem::mKeyAmend1 = "Amend1"; 3420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieconst char *const PolicySubsystem::mKeyAmend2 = "Amend2"; 3520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieconst char *const PolicySubsystem::mKeyAmend3 = "Amend3"; 3620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 3720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 3820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieconst char *const PolicySubsystem::mStreamComponentName = "Stream"; 3920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieconst char *const PolicySubsystem::mStrategyComponentName = "Strategy"; 4020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieconst char *const PolicySubsystem::mInputSourceComponentName = "InputSource"; 4120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieconst char *const PolicySubsystem::mUsageComponentName = "Usage"; 4220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 43c1391f91c4f85f5f2f08b072486455b990817710François GaffiePolicySubsystem::PolicySubsystem(const std::string &name, core::log::Logger &logger) 44c1391f91c4f85f5f2f08b072486455b990817710François Gaffie : CSubsystem(name, logger), 4520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie mPluginInterface(NULL) 4620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie{ 4720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie // Try to connect a Plugin Interface from Audio Policy Engine 4820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie EngineInstance *engineInstance = EngineInstance::getInstance(); 4920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 500f17ab7f9fac4327a8772e9199f411af7df912a4François Gaffie ALOG_ASSERT(engineInstance != NULL, "NULL Plugin Interface"); 510f17ab7f9fac4327a8772e9199f411af7df912a4François Gaffie 5220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie // Retrieve the Route Interface 5320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie mPluginInterface = engineInstance->queryInterface<android::AudioPolicyPluginInterface>(); 540f17ab7f9fac4327a8772e9199f411af7df912a4François Gaffie ALOG_ASSERT(mPluginInterface != NULL, "NULL Plugin Interface"); 5520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 5620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie // Provide mapping keys to the core, necessary when parsing the XML Structure files. 5720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie addContextMappingKey(mKeyName); 5820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie addContextMappingKey(mKeyCategory); 5920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie addContextMappingKey(mKeyIdentifier); 6020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie addContextMappingKey(mKeyAmend1); 6120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie addContextMappingKey(mKeyAmend2); 6220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie addContextMappingKey(mKeyAmend3); 6320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 6420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie // Provide creators to upper layer 6520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie addSubsystemObjectFactory( 6620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie new TSubsystemObjectFactory<Stream>( 6720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie mStreamComponentName, 68d1ab2bd4f1ea166a7e9e81cfd7f3e5dd47135d4dFrançois Gaffie (1 << MappingKeyIdentifier)) 6920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie ); 7020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie addSubsystemObjectFactory( 7120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie new TSubsystemObjectFactory<Strategy>( 7220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie mStrategyComponentName, 7320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie (1 << MappingKeyAmend1) | (1 << MappingKeyIdentifier)) 7420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie ); 7520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie addSubsystemObjectFactory( 7620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie new TSubsystemObjectFactory<Usage>( 7720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie mUsageComponentName, 7820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie (1 << MappingKeyAmend1) | (1 << MappingKeyIdentifier)) 7920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie ); 8020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie addSubsystemObjectFactory( 8120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie new TSubsystemObjectFactory<InputSource>( 8220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie mInputSourceComponentName, 8320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie (1 << MappingKeyAmend1) | (1 << MappingKeyIdentifier)) 8420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie ); 8520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie} 8620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 8720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie// Retrieve Route interface 8820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieandroid::AudioPolicyPluginInterface *PolicySubsystem::getPolicyPluginInterface() const 8920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie{ 9020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie ALOG_ASSERT(mPluginInterface != NULL, "NULL Plugin Interface"); 9120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPluginInterface; 9220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie} 93