1*4d7e907cSAndroid Build Coastguard Worker/* 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project 3*4d7e907cSAndroid Build Coastguard Worker * 4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*4d7e907cSAndroid Build Coastguard Worker * 8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*4d7e907cSAndroid Build Coastguard Worker * 10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License. 15*4d7e907cSAndroid Build Coastguard Worker */ 16*4d7e907cSAndroid Build Coastguard Worker 17*4d7e907cSAndroid Build Coastguard Workerpackage [email protected]; 18*4d7e907cSAndroid Build Coastguard Worker 19*4d7e907cSAndroid Build Coastguard Workerimport [email protected]; 20*4d7e907cSAndroid Build Coastguard Workerimport IStreamIn; 21*4d7e907cSAndroid Build Coastguard Workerimport IStreamOut; 22*4d7e907cSAndroid Build Coastguard Worker 23*4d7e907cSAndroid Build Coastguard Workerinterface IDevice { 24*4d7e907cSAndroid Build Coastguard Worker typedef [email protected]::Result Result; 25*4d7e907cSAndroid Build Coastguard Worker 26*4d7e907cSAndroid Build Coastguard Worker /** 27*4d7e907cSAndroid Build Coastguard Worker * Returns whether the audio hardware interface has been initialized. 28*4d7e907cSAndroid Build Coastguard Worker * 29*4d7e907cSAndroid Build Coastguard Worker * @return retval OK on success, NOT_INITIALIZED on failure. 30*4d7e907cSAndroid Build Coastguard Worker */ 31*4d7e907cSAndroid Build Coastguard Worker initCheck() generates (Result retval); 32*4d7e907cSAndroid Build Coastguard Worker 33*4d7e907cSAndroid Build Coastguard Worker /** 34*4d7e907cSAndroid Build Coastguard Worker * Sets the audio volume for all audio activities other than voice call. If 35*4d7e907cSAndroid Build Coastguard Worker * NOT_SUPPORTED is returned, the software mixer will emulate this 36*4d7e907cSAndroid Build Coastguard Worker * capability. 37*4d7e907cSAndroid Build Coastguard Worker * 38*4d7e907cSAndroid Build Coastguard Worker * @param volume 1.0f means unity, 0.0f is zero. 39*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 40*4d7e907cSAndroid Build Coastguard Worker */ 41*4d7e907cSAndroid Build Coastguard Worker setMasterVolume(float volume) generates (Result retval); 42*4d7e907cSAndroid Build Coastguard Worker 43*4d7e907cSAndroid Build Coastguard Worker /** 44*4d7e907cSAndroid Build Coastguard Worker * Get the current master volume value for the HAL, if the HAL supports 45*4d7e907cSAndroid Build Coastguard Worker * master volume control. For example, AudioFlinger will query this value 46*4d7e907cSAndroid Build Coastguard Worker * from the primary audio HAL when the service starts and use the value for 47*4d7e907cSAndroid Build Coastguard Worker * setting the initial master volume across all HALs. HALs which do not 48*4d7e907cSAndroid Build Coastguard Worker * support this method must return NOT_SUPPORTED in 'retval'. 49*4d7e907cSAndroid Build Coastguard Worker * 50*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 51*4d7e907cSAndroid Build Coastguard Worker * @return volume 1.0f means unity, 0.0f is zero. 52*4d7e907cSAndroid Build Coastguard Worker */ 53*4d7e907cSAndroid Build Coastguard Worker getMasterVolume() generates (Result retval, float volume); 54*4d7e907cSAndroid Build Coastguard Worker 55*4d7e907cSAndroid Build Coastguard Worker /** 56*4d7e907cSAndroid Build Coastguard Worker * Sets microphone muting state. 57*4d7e907cSAndroid Build Coastguard Worker * 58*4d7e907cSAndroid Build Coastguard Worker * @param mute whether microphone is muted. 59*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 60*4d7e907cSAndroid Build Coastguard Worker */ 61*4d7e907cSAndroid Build Coastguard Worker setMicMute(bool mute) generates (Result retval); 62*4d7e907cSAndroid Build Coastguard Worker 63*4d7e907cSAndroid Build Coastguard Worker /** 64*4d7e907cSAndroid Build Coastguard Worker * Gets whether microphone is muted. 65*4d7e907cSAndroid Build Coastguard Worker * 66*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 67*4d7e907cSAndroid Build Coastguard Worker * @return mute whether microphone is muted. 68*4d7e907cSAndroid Build Coastguard Worker */ 69*4d7e907cSAndroid Build Coastguard Worker getMicMute() generates (Result retval, bool mute); 70*4d7e907cSAndroid Build Coastguard Worker 71*4d7e907cSAndroid Build Coastguard Worker /** 72*4d7e907cSAndroid Build Coastguard Worker * Set the audio mute status for all audio activities. If the return value 73*4d7e907cSAndroid Build Coastguard Worker * is NOT_SUPPORTED, the software mixer will emulate this capability. 74*4d7e907cSAndroid Build Coastguard Worker * 75*4d7e907cSAndroid Build Coastguard Worker * @param mute whether audio is muted. 76*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 77*4d7e907cSAndroid Build Coastguard Worker */ 78*4d7e907cSAndroid Build Coastguard Worker setMasterMute(bool mute) generates (Result retval); 79*4d7e907cSAndroid Build Coastguard Worker 80*4d7e907cSAndroid Build Coastguard Worker /** 81*4d7e907cSAndroid Build Coastguard Worker * Get the current master mute status for the HAL, if the HAL supports 82*4d7e907cSAndroid Build Coastguard Worker * master mute control. AudioFlinger will query this value from the primary 83*4d7e907cSAndroid Build Coastguard Worker * audio HAL when the service starts and use the value for setting the 84*4d7e907cSAndroid Build Coastguard Worker * initial master mute across all HALs. HAL must indicate that the feature 85*4d7e907cSAndroid Build Coastguard Worker * is not supported by returning NOT_SUPPORTED status. 86*4d7e907cSAndroid Build Coastguard Worker * 87*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 88*4d7e907cSAndroid Build Coastguard Worker * @return mute whether audio is muted. 89*4d7e907cSAndroid Build Coastguard Worker */ 90*4d7e907cSAndroid Build Coastguard Worker getMasterMute() generates (Result retval, bool mute); 91*4d7e907cSAndroid Build Coastguard Worker 92*4d7e907cSAndroid Build Coastguard Worker /** 93*4d7e907cSAndroid Build Coastguard Worker * Returns audio input buffer size according to parameters passed or 94*4d7e907cSAndroid Build Coastguard Worker * INVALID_ARGUMENTS if one of the parameters is not supported. 95*4d7e907cSAndroid Build Coastguard Worker * 96*4d7e907cSAndroid Build Coastguard Worker * @param config audio configuration. 97*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 98*4d7e907cSAndroid Build Coastguard Worker * @return bufferSize input buffer size in bytes. 99*4d7e907cSAndroid Build Coastguard Worker */ 100*4d7e907cSAndroid Build Coastguard Worker getInputBufferSize(AudioConfig config) 101*4d7e907cSAndroid Build Coastguard Worker generates (Result retval, uint64_t bufferSize); 102*4d7e907cSAndroid Build Coastguard Worker 103*4d7e907cSAndroid Build Coastguard Worker /** 104*4d7e907cSAndroid Build Coastguard Worker * This method creates and opens the audio hardware output stream. 105*4d7e907cSAndroid Build Coastguard Worker * If the stream can not be opened with the proposed audio config, 106*4d7e907cSAndroid Build Coastguard Worker * HAL must provide suggested values for the audio config. 107*4d7e907cSAndroid Build Coastguard Worker * 108*4d7e907cSAndroid Build Coastguard Worker * @param ioHandle handle assigned by AudioFlinger. 109*4d7e907cSAndroid Build Coastguard Worker * @param device device type and (if needed) address. 110*4d7e907cSAndroid Build Coastguard Worker * @param config stream configuration. 111*4d7e907cSAndroid Build Coastguard Worker * @param flags additional flags. 112*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 113*4d7e907cSAndroid Build Coastguard Worker * @return outStream created output stream. 114*4d7e907cSAndroid Build Coastguard Worker * @return suggestedConfig in case of invalid parameters, suggested config. 115*4d7e907cSAndroid Build Coastguard Worker */ 116*4d7e907cSAndroid Build Coastguard Worker openOutputStream( 117*4d7e907cSAndroid Build Coastguard Worker AudioIoHandle ioHandle, 118*4d7e907cSAndroid Build Coastguard Worker DeviceAddress device, 119*4d7e907cSAndroid Build Coastguard Worker AudioConfig config, 120*4d7e907cSAndroid Build Coastguard Worker AudioOutputFlag flags) generates ( 121*4d7e907cSAndroid Build Coastguard Worker Result retval, 122*4d7e907cSAndroid Build Coastguard Worker IStreamOut outStream, 123*4d7e907cSAndroid Build Coastguard Worker AudioConfig suggestedConfig); 124*4d7e907cSAndroid Build Coastguard Worker 125*4d7e907cSAndroid Build Coastguard Worker /** 126*4d7e907cSAndroid Build Coastguard Worker * This method creates and opens the audio hardware input stream. 127*4d7e907cSAndroid Build Coastguard Worker * If the stream can not be opened with the proposed audio config, 128*4d7e907cSAndroid Build Coastguard Worker * HAL must provide suggested values for the audio config. 129*4d7e907cSAndroid Build Coastguard Worker * 130*4d7e907cSAndroid Build Coastguard Worker * @param ioHandle handle assigned by AudioFlinger. 131*4d7e907cSAndroid Build Coastguard Worker * @param device device type and (if needed) address. 132*4d7e907cSAndroid Build Coastguard Worker * @param config stream configuration. 133*4d7e907cSAndroid Build Coastguard Worker * @param flags additional flags. 134*4d7e907cSAndroid Build Coastguard Worker * @param source source specification. 135*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 136*4d7e907cSAndroid Build Coastguard Worker * @return inStream in case of success, created input stream. 137*4d7e907cSAndroid Build Coastguard Worker * @return suggestedConfig in case of invalid parameters, suggested config. 138*4d7e907cSAndroid Build Coastguard Worker */ 139*4d7e907cSAndroid Build Coastguard Worker openInputStream( 140*4d7e907cSAndroid Build Coastguard Worker AudioIoHandle ioHandle, 141*4d7e907cSAndroid Build Coastguard Worker DeviceAddress device, 142*4d7e907cSAndroid Build Coastguard Worker AudioConfig config, 143*4d7e907cSAndroid Build Coastguard Worker AudioInputFlag flags, 144*4d7e907cSAndroid Build Coastguard Worker AudioSource source) generates ( 145*4d7e907cSAndroid Build Coastguard Worker Result retval, 146*4d7e907cSAndroid Build Coastguard Worker IStreamIn inStream, 147*4d7e907cSAndroid Build Coastguard Worker AudioConfig suggestedConfig); 148*4d7e907cSAndroid Build Coastguard Worker 149*4d7e907cSAndroid Build Coastguard Worker /** 150*4d7e907cSAndroid Build Coastguard Worker * Returns whether HAL supports audio patches. 151*4d7e907cSAndroid Build Coastguard Worker * 152*4d7e907cSAndroid Build Coastguard Worker * @return supports true if audio patches are supported. 153*4d7e907cSAndroid Build Coastguard Worker */ 154*4d7e907cSAndroid Build Coastguard Worker supportsAudioPatches() generates (bool supports); 155*4d7e907cSAndroid Build Coastguard Worker 156*4d7e907cSAndroid Build Coastguard Worker /** 157*4d7e907cSAndroid Build Coastguard Worker * Creates an audio patch between several source and sink ports. The handle 158*4d7e907cSAndroid Build Coastguard Worker * is allocated by the HAL and must be unique for this audio HAL module. 159*4d7e907cSAndroid Build Coastguard Worker * 160*4d7e907cSAndroid Build Coastguard Worker * @param sources patch sources. 161*4d7e907cSAndroid Build Coastguard Worker * @param sinks patch sinks. 162*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 163*4d7e907cSAndroid Build Coastguard Worker * @return patch created patch handle. 164*4d7e907cSAndroid Build Coastguard Worker */ 165*4d7e907cSAndroid Build Coastguard Worker createAudioPatch(vec<AudioPortConfig> sources, vec<AudioPortConfig> sinks) 166*4d7e907cSAndroid Build Coastguard Worker generates (Result retval, AudioPatchHandle patch); 167*4d7e907cSAndroid Build Coastguard Worker 168*4d7e907cSAndroid Build Coastguard Worker /** 169*4d7e907cSAndroid Build Coastguard Worker * Release an audio patch. 170*4d7e907cSAndroid Build Coastguard Worker * 171*4d7e907cSAndroid Build Coastguard Worker * @param patch patch handle. 172*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 173*4d7e907cSAndroid Build Coastguard Worker */ 174*4d7e907cSAndroid Build Coastguard Worker releaseAudioPatch(AudioPatchHandle patch) generates (Result retval); 175*4d7e907cSAndroid Build Coastguard Worker 176*4d7e907cSAndroid Build Coastguard Worker /** 177*4d7e907cSAndroid Build Coastguard Worker * Returns the list of supported attributes for a given audio port. 178*4d7e907cSAndroid Build Coastguard Worker * 179*4d7e907cSAndroid Build Coastguard Worker * As input, 'port' contains the information (type, role, address etc...) 180*4d7e907cSAndroid Build Coastguard Worker * needed by the HAL to identify the port. 181*4d7e907cSAndroid Build Coastguard Worker * 182*4d7e907cSAndroid Build Coastguard Worker * As output, 'resultPort' contains possible attributes (sampling rates, 183*4d7e907cSAndroid Build Coastguard Worker * formats, channel masks, gain controllers...) for this port. 184*4d7e907cSAndroid Build Coastguard Worker * 185*4d7e907cSAndroid Build Coastguard Worker * @param port port identifier. 186*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 187*4d7e907cSAndroid Build Coastguard Worker * @return resultPort port descriptor with all parameters filled up. 188*4d7e907cSAndroid Build Coastguard Worker */ 189*4d7e907cSAndroid Build Coastguard Worker getAudioPort(AudioPort port) 190*4d7e907cSAndroid Build Coastguard Worker generates (Result retval, AudioPort resultPort); 191*4d7e907cSAndroid Build Coastguard Worker 192*4d7e907cSAndroid Build Coastguard Worker /** 193*4d7e907cSAndroid Build Coastguard Worker * Set audio port configuration. 194*4d7e907cSAndroid Build Coastguard Worker * 195*4d7e907cSAndroid Build Coastguard Worker * @param config audio port configuration. 196*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 197*4d7e907cSAndroid Build Coastguard Worker */ 198*4d7e907cSAndroid Build Coastguard Worker setAudioPortConfig(AudioPortConfig config) generates (Result retval); 199*4d7e907cSAndroid Build Coastguard Worker 200*4d7e907cSAndroid Build Coastguard Worker /** 201*4d7e907cSAndroid Build Coastguard Worker * Gets the HW synchronization source of the device. Calling this method is 202*4d7e907cSAndroid Build Coastguard Worker * equivalent to getting AUDIO_PARAMETER_HW_AV_SYNC on the legacy HAL. 203*4d7e907cSAndroid Build Coastguard Worker * 204*4d7e907cSAndroid Build Coastguard Worker * @return hwAvSync HW synchronization source 205*4d7e907cSAndroid Build Coastguard Worker */ 206*4d7e907cSAndroid Build Coastguard Worker getHwAvSync() generates (AudioHwSync hwAvSync); 207*4d7e907cSAndroid Build Coastguard Worker 208*4d7e907cSAndroid Build Coastguard Worker /** 209*4d7e907cSAndroid Build Coastguard Worker * Sets whether the screen is on. Calling this method is equivalent to 210*4d7e907cSAndroid Build Coastguard Worker * setting AUDIO_PARAMETER_KEY_SCREEN_STATE on the legacy HAL. 211*4d7e907cSAndroid Build Coastguard Worker * 212*4d7e907cSAndroid Build Coastguard Worker * @param turnedOn whether the screen is turned on. 213*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 214*4d7e907cSAndroid Build Coastguard Worker */ 215*4d7e907cSAndroid Build Coastguard Worker setScreenState(bool turnedOn) generates (Result retval); 216*4d7e907cSAndroid Build Coastguard Worker 217*4d7e907cSAndroid Build Coastguard Worker /** 218*4d7e907cSAndroid Build Coastguard Worker * Generic method for retrieving vendor-specific parameter values. 219*4d7e907cSAndroid Build Coastguard Worker * The framework does not interpret the parameters, they are passed 220*4d7e907cSAndroid Build Coastguard Worker * in an opaque manner between a vendor application and HAL. 221*4d7e907cSAndroid Build Coastguard Worker * 222*4d7e907cSAndroid Build Coastguard Worker * @param keys parameter keys. 223*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 224*4d7e907cSAndroid Build Coastguard Worker * @return parameters parameter key value pairs. 225*4d7e907cSAndroid Build Coastguard Worker */ 226*4d7e907cSAndroid Build Coastguard Worker getParameters(vec<string> keys) 227*4d7e907cSAndroid Build Coastguard Worker generates (Result retval, vec<ParameterValue> parameters); 228*4d7e907cSAndroid Build Coastguard Worker 229*4d7e907cSAndroid Build Coastguard Worker /** 230*4d7e907cSAndroid Build Coastguard Worker * Generic method for setting vendor-specific parameter values. 231*4d7e907cSAndroid Build Coastguard Worker * The framework does not interpret the parameters, they are passed 232*4d7e907cSAndroid Build Coastguard Worker * in an opaque manner between a vendor application and HAL. 233*4d7e907cSAndroid Build Coastguard Worker * 234*4d7e907cSAndroid Build Coastguard Worker * @param parameters parameter key value pairs. 235*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 236*4d7e907cSAndroid Build Coastguard Worker */ 237*4d7e907cSAndroid Build Coastguard Worker setParameters(vec<ParameterValue> parameters) generates (Result retval); 238*4d7e907cSAndroid Build Coastguard Worker 239*4d7e907cSAndroid Build Coastguard Worker /** 240*4d7e907cSAndroid Build Coastguard Worker * Dumps information about the stream into the provided file descriptor. 241*4d7e907cSAndroid Build Coastguard Worker * This is used for the dumpsys facility. 242*4d7e907cSAndroid Build Coastguard Worker * 243*4d7e907cSAndroid Build Coastguard Worker * @param fd dump file descriptor. 244*4d7e907cSAndroid Build Coastguard Worker */ 245*4d7e907cSAndroid Build Coastguard Worker debugDump(handle fd); 246*4d7e907cSAndroid Build Coastguard Worker}; 247