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 "Strategy.h"
1820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include "PolicyMappingKeys.h"
1920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include "PolicySubsystem.h"
2020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
2120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieusing std::string;
2220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieusing android::routing_strategy;
2320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
2420f06f996337c9bf79d0b112083f6427a122ebabFrançois GaffieStrategy::Strategy(const string &mappingValue,
2520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie                   CInstanceConfigurableElement *instanceConfigurableElement,
26c1391f91c4f85f5f2f08b072486455b990817710François Gaffie                   const CMappingContext &context,
27c1391f91c4f85f5f2f08b072486455b990817710François Gaffie                   core::log::Logger& logger)
2820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    : CFormattedSubsystemObject(instanceConfigurableElement,
29c1391f91c4f85f5f2f08b072486455b990817710François Gaffie                                logger,
3020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie                                mappingValue,
3120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie                                MappingKeyAmend1,
3220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie                                (MappingKeyAmendEnd - MappingKeyAmend1 + 1),
3320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie                                context),
3420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie      mPolicySubsystem(static_cast<const PolicySubsystem *>(
3520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie                           instanceConfigurableElement->getBelongingSubsystem())),
36fdb17f649c7480ddd83de9fd99ff48a4166a6acfFrançois Gaffie      mPolicyPluginInterface(mPolicySubsystem->getPolicyPluginInterface())
3720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie{
3820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    mId = static_cast<routing_strategy>(context.getItemAsInteger(MappingKeyIdentifier));
3920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
4020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    // Declares the strategy to audio policy engine
4120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    mPolicyPluginInterface->addStrategy(getFormattedMappingValue(), mId);
4220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie}
4320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
4420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffiebool Strategy::sendToHW(string & /*error*/)
4520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie{
4620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    uint32_t applicableOutputDevice;
4720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    blackboardRead(&applicableOutputDevice, sizeof(applicableOutputDevice));
4820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    return mPolicyPluginInterface->setDeviceForStrategy(mId, applicableOutputDevice);
4920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie}
50