1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #pragma once 18 19 #include <RoutingStrategy.h> 20 #include <EngineDefinition.h> 21 #include <Volume.h> 22 #include <system/audio.h> 23 #include <utils/Errors.h> 24 #include <string> 25 #include <vector> 26 27 namespace android { 28 29 /** 30 * This interface allows the parameter plugin to: 31 * - instantiate all the members of the policy engine (strategies, input sources, usages, profiles) 32 * - keep up to date the attributes of these policy members ( i.e. devices to be used for a 33 * strategy, strategy to be followed by a usage or a stream, ...) 34 */ 35 class AudioPolicyPluginInterface 36 { 37 public: 38 /** 39 * Add a strategy to the engine 40 * 41 * @param[in] name of the strategy to add 42 * @param[in] identifier: the numerical value associated to this member. It MUST match either 43 * system/audio.h or system/audio_policy.h enumration value in order to link the 44 * parameter controled by the PFW and the policy manager component. 45 * 46 * @return NO_ERROR if the strategy has been added successfully, error code otherwise. 47 * 48 */ 49 virtual android::status_t addStrategy(const std::string &name, routing_strategy id) = 0; 50 51 /** 52 * Add a streams to the engine. 53 * 54 * @param[in] name of the stream to add 55 * @param[in] identifier: the numerical value associated to this member. It MUST match either 56 * system/audio.h or system/audio_policy.h enumration value in order to link the 57 * parameter controled by the PFW and the policy manager component. 58 * 59 * @return NO_ERROR if the stream has been added successfully, error code otherwise. 60 * 61 */ 62 virtual android::status_t addStream(const std::string &name, audio_stream_type_t id) = 0; 63 64 /** 65 * Add a usage to the engine 66 * 67 * @param[in] name of the usage to add 68 * @param[in] identifier: the numerical value associated to this member. It MUST match either 69 * system/audio.h or system/audio_policy.h enumration value in order to link the 70 * parameter controled by the PFW and the policy manager component. 71 * 72 * @return NO_ERROR if the usage has been added successfully, error code otherwise. 73 * 74 */ 75 virtual android::status_t addUsage(const std::string &name, audio_usage_t id) = 0; 76 77 /** 78 * Add an input source to the engine 79 * 80 * @param[in] name of the input source to add 81 * @param[in] identifier: the numerical value associated to this member. It MUST match either 82 * system/audio.h or system/audio_policy.h enumration value in order to link the 83 * parameter controled by the PFW and the policy manager component. 84 * 85 * @return NO_ERROR if the input source has been added successfully, error code otherwise. 86 * 87 */ 88 virtual android::status_t addInputSource(const std::string &name, audio_source_t id) = 0; 89 90 /** 91 * Set the device to be used by a strategy. 92 * 93 * @param[in] strategy: name of the strategy for which the device to use has to be set 94 * @param[in] devices; mask of devices to be used for the given strategy. 95 * 96 * @return true if the devices were set correclty for this strategy, false otherwise. 97 */ 98 virtual bool setDeviceForStrategy(const routing_strategy &strategy, audio_devices_t devices) = 0; 99 100 /** 101 * Set the strategy to be followed by a stream. 102 * 103 * @param[in] stream: name of the stream for which the strategy to use has to be set 104 * @param[in] strategy to follow for the given stream. 105 * 106 * @return true if the strategy were set correclty for this stream, false otherwise. 107 */ 108 virtual bool setStrategyForStream(const audio_stream_type_t &stream, routing_strategy strategy) = 0; 109 110 /** 111 * Set the strategy to be followed by a stream. 112 * 113 * @param[in] stream: name of the stream for which the strategy to use has to be set 114 * @param[in] volumeProfile to follow for the given stream. 115 * 116 * @return true if the profile was set correclty for this stream, false otherwise. 117 */ 118 virtual bool setVolumeProfileForStream(const audio_stream_type_t &stream, 119 const audio_stream_type_t &volumeProfile) = 0; 120 121 /** 122 * Set the strategy to be followed by a usage. 123 * 124 * @param[in] usage: name of the usage for which the strategy to use has to be set 125 * @param[in] strategy to follow for the given usage. 126 * 127 * @return true if the strategy were set correclty for this usage, false otherwise. 128 */ 129 virtual bool setStrategyForUsage(const audio_usage_t &usage, routing_strategy strategy) = 0; 130 131 /** 132 * Set the input device to be used by an input source. 133 * 134 * @param[in] inputSource: name of the input source for which the device to use has to be set 135 * @param[in] devices; mask of devices to be used for the given input source. 136 * 137 * @return true if the devices were set correclty for this input source, false otherwise. 138 */ 139 virtual bool setDeviceForInputSource(const audio_source_t &inputSource, 140 audio_devices_t device) = 0; 141 142 protected: ~AudioPolicyPluginInterface()143 virtual ~AudioPolicyPluginInterface() {} 144 }; 145 146 }; // namespace android 147