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 [email protected]::IEffect; 21*4d7e907cSAndroid Build Coastguard Worker 22*4d7e907cSAndroid Build Coastguard Workerinterface IStream { 23*4d7e907cSAndroid Build Coastguard Worker typedef [email protected]::Result Result; 24*4d7e907cSAndroid Build Coastguard Worker 25*4d7e907cSAndroid Build Coastguard Worker /** 26*4d7e907cSAndroid Build Coastguard Worker * Return the frame size (number of bytes per sample). 27*4d7e907cSAndroid Build Coastguard Worker * 28*4d7e907cSAndroid Build Coastguard Worker * @return frameSize frame size in bytes. 29*4d7e907cSAndroid Build Coastguard Worker */ 30*4d7e907cSAndroid Build Coastguard Worker getFrameSize() generates (uint64_t frameSize); 31*4d7e907cSAndroid Build Coastguard Worker 32*4d7e907cSAndroid Build Coastguard Worker /** 33*4d7e907cSAndroid Build Coastguard Worker * Return the frame count of the buffer. Calling this method is equivalent 34*4d7e907cSAndroid Build Coastguard Worker * to getting AUDIO_PARAMETER_STREAM_FRAME_COUNT on the legacy HAL. 35*4d7e907cSAndroid Build Coastguard Worker * 36*4d7e907cSAndroid Build Coastguard Worker * @return count frame count. 37*4d7e907cSAndroid Build Coastguard Worker */ 38*4d7e907cSAndroid Build Coastguard Worker getFrameCount() generates (uint64_t count); 39*4d7e907cSAndroid Build Coastguard Worker 40*4d7e907cSAndroid Build Coastguard Worker /** 41*4d7e907cSAndroid Build Coastguard Worker * Return the size of input/output buffer in bytes for this stream. 42*4d7e907cSAndroid Build Coastguard Worker * It must be a multiple of the frame size. 43*4d7e907cSAndroid Build Coastguard Worker * 44*4d7e907cSAndroid Build Coastguard Worker * @return buffer buffer size in bytes. 45*4d7e907cSAndroid Build Coastguard Worker */ 46*4d7e907cSAndroid Build Coastguard Worker getBufferSize() generates (uint64_t bufferSize); 47*4d7e907cSAndroid Build Coastguard Worker 48*4d7e907cSAndroid Build Coastguard Worker /** 49*4d7e907cSAndroid Build Coastguard Worker * Return the sampling rate in Hz. 50*4d7e907cSAndroid Build Coastguard Worker * 51*4d7e907cSAndroid Build Coastguard Worker * @return sampleRateHz sample rate in Hz. 52*4d7e907cSAndroid Build Coastguard Worker */ 53*4d7e907cSAndroid Build Coastguard Worker getSampleRate() generates (uint32_t sampleRateHz); 54*4d7e907cSAndroid Build Coastguard Worker 55*4d7e907cSAndroid Build Coastguard Worker /** 56*4d7e907cSAndroid Build Coastguard Worker * Return supported sampling rates of the stream. Calling this method is 57*4d7e907cSAndroid Build Coastguard Worker * equivalent to getting AUDIO_PARAMETER_STREAM_SUP_SAMPLING_RATES on the 58*4d7e907cSAndroid Build Coastguard Worker * legacy HAL. 59*4d7e907cSAndroid Build Coastguard Worker * 60*4d7e907cSAndroid Build Coastguard Worker * @return sampleRateHz supported sample rates. 61*4d7e907cSAndroid Build Coastguard Worker */ 62*4d7e907cSAndroid Build Coastguard Worker getSupportedSampleRates() generates (vec<uint32_t> sampleRates); 63*4d7e907cSAndroid Build Coastguard Worker 64*4d7e907cSAndroid Build Coastguard Worker /** 65*4d7e907cSAndroid Build Coastguard Worker * Sets the sampling rate of the stream. Calling this method is equivalent 66*4d7e907cSAndroid Build Coastguard Worker * to setting AUDIO_PARAMETER_STREAM_SAMPLING_RATE on the legacy HAL. 67*4d7e907cSAndroid Build Coastguard Worker * 68*4d7e907cSAndroid Build Coastguard Worker * @param sampleRateHz sample rate in Hz. 69*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 70*4d7e907cSAndroid Build Coastguard Worker */ 71*4d7e907cSAndroid Build Coastguard Worker setSampleRate(uint32_t sampleRateHz) generates (Result retval); 72*4d7e907cSAndroid Build Coastguard Worker 73*4d7e907cSAndroid Build Coastguard Worker /** 74*4d7e907cSAndroid Build Coastguard Worker * Return the channel mask of the stream. 75*4d7e907cSAndroid Build Coastguard Worker * 76*4d7e907cSAndroid Build Coastguard Worker * @return mask channel mask. 77*4d7e907cSAndroid Build Coastguard Worker */ 78*4d7e907cSAndroid Build Coastguard Worker getChannelMask() generates (AudioChannelMask mask); 79*4d7e907cSAndroid Build Coastguard Worker 80*4d7e907cSAndroid Build Coastguard Worker /** 81*4d7e907cSAndroid Build Coastguard Worker * Return supported channel masks of the stream. Calling this method is 82*4d7e907cSAndroid Build Coastguard Worker * equivalent to getting AUDIO_PARAMETER_STREAM_SUP_CHANNELS on the legacy 83*4d7e907cSAndroid Build Coastguard Worker * HAL. 84*4d7e907cSAndroid Build Coastguard Worker * 85*4d7e907cSAndroid Build Coastguard Worker * @return masks supported audio masks. 86*4d7e907cSAndroid Build Coastguard Worker */ 87*4d7e907cSAndroid Build Coastguard Worker getSupportedChannelMasks() generates (vec<AudioChannelMask> masks); 88*4d7e907cSAndroid Build Coastguard Worker 89*4d7e907cSAndroid Build Coastguard Worker /** 90*4d7e907cSAndroid Build Coastguard Worker * Sets the channel mask of the stream. Calling this method is equivalent to 91*4d7e907cSAndroid Build Coastguard Worker * setting AUDIO_PARAMETER_STREAM_CHANNELS on the legacy HAL. 92*4d7e907cSAndroid Build Coastguard Worker * 93*4d7e907cSAndroid Build Coastguard Worker * @param format audio format. 94*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 95*4d7e907cSAndroid Build Coastguard Worker */ 96*4d7e907cSAndroid Build Coastguard Worker setChannelMask(AudioChannelMask mask) generates (Result retval); 97*4d7e907cSAndroid Build Coastguard Worker 98*4d7e907cSAndroid Build Coastguard Worker /** 99*4d7e907cSAndroid Build Coastguard Worker * Return the audio format of the stream. 100*4d7e907cSAndroid Build Coastguard Worker * 101*4d7e907cSAndroid Build Coastguard Worker * @return format audio format. 102*4d7e907cSAndroid Build Coastguard Worker */ 103*4d7e907cSAndroid Build Coastguard Worker getFormat() generates (AudioFormat format); 104*4d7e907cSAndroid Build Coastguard Worker 105*4d7e907cSAndroid Build Coastguard Worker /** 106*4d7e907cSAndroid Build Coastguard Worker * Return supported audio formats of the stream. Calling this method is 107*4d7e907cSAndroid Build Coastguard Worker * equivalent to getting AUDIO_PARAMETER_STREAM_SUP_FORMATS on the legacy 108*4d7e907cSAndroid Build Coastguard Worker * HAL. 109*4d7e907cSAndroid Build Coastguard Worker * 110*4d7e907cSAndroid Build Coastguard Worker * @return formats supported audio formats. 111*4d7e907cSAndroid Build Coastguard Worker */ 112*4d7e907cSAndroid Build Coastguard Worker getSupportedFormats() generates (vec<AudioFormat> formats); 113*4d7e907cSAndroid Build Coastguard Worker 114*4d7e907cSAndroid Build Coastguard Worker /** 115*4d7e907cSAndroid Build Coastguard Worker * Sets the audio format of the stream. Calling this method is equivalent to 116*4d7e907cSAndroid Build Coastguard Worker * setting AUDIO_PARAMETER_STREAM_FORMAT on the legacy HAL. 117*4d7e907cSAndroid Build Coastguard Worker * 118*4d7e907cSAndroid Build Coastguard Worker * @param format audio format. 119*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 120*4d7e907cSAndroid Build Coastguard Worker */ 121*4d7e907cSAndroid Build Coastguard Worker setFormat(AudioFormat format) generates (Result retval); 122*4d7e907cSAndroid Build Coastguard Worker 123*4d7e907cSAndroid Build Coastguard Worker /** 124*4d7e907cSAndroid Build Coastguard Worker * Convenience method for retrieving several stream parameters in 125*4d7e907cSAndroid Build Coastguard Worker * one transaction. 126*4d7e907cSAndroid Build Coastguard Worker * 127*4d7e907cSAndroid Build Coastguard Worker * @return sampleRateHz sample rate in Hz. 128*4d7e907cSAndroid Build Coastguard Worker * @return mask channel mask. 129*4d7e907cSAndroid Build Coastguard Worker * @return format audio format. 130*4d7e907cSAndroid Build Coastguard Worker */ 131*4d7e907cSAndroid Build Coastguard Worker getAudioProperties() generates ( 132*4d7e907cSAndroid Build Coastguard Worker uint32_t sampleRateHz, AudioChannelMask mask, AudioFormat format); 133*4d7e907cSAndroid Build Coastguard Worker 134*4d7e907cSAndroid Build Coastguard Worker /** 135*4d7e907cSAndroid Build Coastguard Worker * Applies audio effect to the stream. 136*4d7e907cSAndroid Build Coastguard Worker * 137*4d7e907cSAndroid Build Coastguard Worker * @param effectId effect ID (obtained from IEffectsFactory.createEffect) of 138*4d7e907cSAndroid Build Coastguard Worker * the effect to apply. 139*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 140*4d7e907cSAndroid Build Coastguard Worker */ 141*4d7e907cSAndroid Build Coastguard Worker addEffect(uint64_t effectId) generates (Result retval); 142*4d7e907cSAndroid Build Coastguard Worker 143*4d7e907cSAndroid Build Coastguard Worker /** 144*4d7e907cSAndroid Build Coastguard Worker * Stops application of the effect to the stream. 145*4d7e907cSAndroid Build Coastguard Worker * 146*4d7e907cSAndroid Build Coastguard Worker * @param effectId effect ID (obtained from IEffectsFactory.createEffect) of 147*4d7e907cSAndroid Build Coastguard Worker * the effect to remove. 148*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 149*4d7e907cSAndroid Build Coastguard Worker */ 150*4d7e907cSAndroid Build Coastguard Worker removeEffect(uint64_t effectId) generates (Result retval); 151*4d7e907cSAndroid Build Coastguard Worker 152*4d7e907cSAndroid Build Coastguard Worker /** 153*4d7e907cSAndroid Build Coastguard Worker * Put the audio hardware input/output into standby mode. 154*4d7e907cSAndroid Build Coastguard Worker * Driver must exit from standby mode at the next I/O operation. 155*4d7e907cSAndroid Build Coastguard Worker * 156*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 157*4d7e907cSAndroid Build Coastguard Worker */ 158*4d7e907cSAndroid Build Coastguard Worker standby() generates (Result retval); 159*4d7e907cSAndroid Build Coastguard Worker 160*4d7e907cSAndroid Build Coastguard Worker /** 161*4d7e907cSAndroid Build Coastguard Worker * Return the set of device(s) which this stream is connected to. 162*4d7e907cSAndroid Build Coastguard Worker * 163*4d7e907cSAndroid Build Coastguard Worker * @return device set of device(s) which this stream is connected to. 164*4d7e907cSAndroid Build Coastguard Worker */ 165*4d7e907cSAndroid Build Coastguard Worker getDevice() generates (AudioDevice device); 166*4d7e907cSAndroid Build Coastguard Worker 167*4d7e907cSAndroid Build Coastguard Worker /** 168*4d7e907cSAndroid Build Coastguard Worker * Connects the stream to the device. 169*4d7e907cSAndroid Build Coastguard Worker * 170*4d7e907cSAndroid Build Coastguard Worker * This method must only be used for HALs that do not support 171*4d7e907cSAndroid Build Coastguard Worker * 'IDevice.createAudioPatch' method. Calling this method is 172*4d7e907cSAndroid Build Coastguard Worker * equivalent to setting AUDIO_PARAMETER_STREAM_ROUTING in the legacy HAL 173*4d7e907cSAndroid Build Coastguard Worker * interface. 174*4d7e907cSAndroid Build Coastguard Worker * 175*4d7e907cSAndroid Build Coastguard Worker * @param address device to connect the stream to. 176*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 177*4d7e907cSAndroid Build Coastguard Worker */ 178*4d7e907cSAndroid Build Coastguard Worker setDevice(DeviceAddress address) generates (Result retval); 179*4d7e907cSAndroid Build Coastguard Worker 180*4d7e907cSAndroid Build Coastguard Worker /** 181*4d7e907cSAndroid Build Coastguard Worker * Notifies the stream about device connection state. Calling this method is 182*4d7e907cSAndroid Build Coastguard Worker * equivalent to setting AUDIO_PARAMETER_DEVICE_[DIS]CONNECT on the legacy 183*4d7e907cSAndroid Build Coastguard Worker * HAL. 184*4d7e907cSAndroid Build Coastguard Worker * 185*4d7e907cSAndroid Build Coastguard Worker * @param address audio device specification. 186*4d7e907cSAndroid Build Coastguard Worker * @param connected whether the device is connected. 187*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 188*4d7e907cSAndroid Build Coastguard Worker */ 189*4d7e907cSAndroid Build Coastguard Worker setConnectedState(DeviceAddress address, bool connected) 190*4d7e907cSAndroid Build Coastguard Worker generates (Result retval); 191*4d7e907cSAndroid Build Coastguard Worker 192*4d7e907cSAndroid Build Coastguard Worker /** 193*4d7e907cSAndroid Build Coastguard Worker * Sets the HW synchronization source. Calling this method is equivalent to 194*4d7e907cSAndroid Build Coastguard Worker * setting AUDIO_PARAMETER_STREAM_HW_AV_SYNC on the legacy HAL. 195*4d7e907cSAndroid Build Coastguard Worker * 196*4d7e907cSAndroid Build Coastguard Worker * @param hwAvSync HW synchronization source 197*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 198*4d7e907cSAndroid Build Coastguard Worker */ 199*4d7e907cSAndroid Build Coastguard Worker setHwAvSync(AudioHwSync hwAvSync) generates (Result retval); 200*4d7e907cSAndroid Build Coastguard Worker 201*4d7e907cSAndroid Build Coastguard Worker /** 202*4d7e907cSAndroid Build Coastguard Worker * Generic method for retrieving vendor-specific parameter values. 203*4d7e907cSAndroid Build Coastguard Worker * The framework does not interpret the parameters, they are passed 204*4d7e907cSAndroid Build Coastguard Worker * in an opaque manner between a vendor application and HAL. 205*4d7e907cSAndroid Build Coastguard Worker * 206*4d7e907cSAndroid Build Coastguard Worker * @param keys parameter keys. 207*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 208*4d7e907cSAndroid Build Coastguard Worker * @return parameters parameter key value pairs. 209*4d7e907cSAndroid Build Coastguard Worker */ 210*4d7e907cSAndroid Build Coastguard Worker getParameters(vec<string> keys) 211*4d7e907cSAndroid Build Coastguard Worker generates (Result retval, vec<ParameterValue> parameters); 212*4d7e907cSAndroid Build Coastguard Worker 213*4d7e907cSAndroid Build Coastguard Worker /** 214*4d7e907cSAndroid Build Coastguard Worker * Generic method for setting vendor-specific parameter values. 215*4d7e907cSAndroid Build Coastguard Worker * The framework does not interpret the parameters, they are passed 216*4d7e907cSAndroid Build Coastguard Worker * in an opaque manner between a vendor application and HAL. 217*4d7e907cSAndroid Build Coastguard Worker * 218*4d7e907cSAndroid Build Coastguard Worker * @param parameters parameter key value pairs. 219*4d7e907cSAndroid Build Coastguard Worker * @return retval operation completion status. 220*4d7e907cSAndroid Build Coastguard Worker */ 221*4d7e907cSAndroid Build Coastguard Worker setParameters(vec<ParameterValue> parameters) generates (Result retval); 222*4d7e907cSAndroid Build Coastguard Worker 223*4d7e907cSAndroid Build Coastguard Worker /** 224*4d7e907cSAndroid Build Coastguard Worker * Dumps information about the stream into the provided file descriptor. 225*4d7e907cSAndroid Build Coastguard Worker * This is used for the dumpsys facility. 226*4d7e907cSAndroid Build Coastguard Worker * 227*4d7e907cSAndroid Build Coastguard Worker * @param fd dump file descriptor. 228*4d7e907cSAndroid Build Coastguard Worker */ 229*4d7e907cSAndroid Build Coastguard Worker debugDump(handle fd); 230*4d7e907cSAndroid Build Coastguard Worker 231*4d7e907cSAndroid Build Coastguard Worker /** 232*4d7e907cSAndroid Build Coastguard Worker * Called by the framework to start a stream operating in mmap mode. 233*4d7e907cSAndroid Build Coastguard Worker * createMmapBuffer() must be called before calling start(). 234*4d7e907cSAndroid Build Coastguard Worker * Function only implemented by streams operating in mmap mode. 235*4d7e907cSAndroid Build Coastguard Worker * 236*4d7e907cSAndroid Build Coastguard Worker * @return retval OK in case the success. 237*4d7e907cSAndroid Build Coastguard Worker * NOT_SUPPORTED on non mmap mode streams 238*4d7e907cSAndroid Build Coastguard Worker * INVALID_STATE if called out of sequence 239*4d7e907cSAndroid Build Coastguard Worker */ 240*4d7e907cSAndroid Build Coastguard Worker start() generates (Result retval); 241*4d7e907cSAndroid Build Coastguard Worker 242*4d7e907cSAndroid Build Coastguard Worker /** 243*4d7e907cSAndroid Build Coastguard Worker * Called by the framework to stop a stream operating in mmap mode. 244*4d7e907cSAndroid Build Coastguard Worker * Function only implemented by streams operating in mmap mode. 245*4d7e907cSAndroid Build Coastguard Worker * 246*4d7e907cSAndroid Build Coastguard Worker * @return retval OK in case the succes. 247*4d7e907cSAndroid Build Coastguard Worker * NOT_SUPPORTED on non mmap mode streams 248*4d7e907cSAndroid Build Coastguard Worker * INVALID_STATE if called out of sequence 249*4d7e907cSAndroid Build Coastguard Worker */ 250*4d7e907cSAndroid Build Coastguard Worker stop() generates (Result retval) ; 251*4d7e907cSAndroid Build Coastguard Worker 252*4d7e907cSAndroid Build Coastguard Worker /** 253*4d7e907cSAndroid Build Coastguard Worker * Called by the framework to retrieve information on the mmap buffer used for audio 254*4d7e907cSAndroid Build Coastguard Worker * samples transfer. 255*4d7e907cSAndroid Build Coastguard Worker * Function only implemented by streams operating in mmap mode. 256*4d7e907cSAndroid Build Coastguard Worker * 257*4d7e907cSAndroid Build Coastguard Worker * @param minSizeFrames minimum buffer size requested. The actual buffer 258*4d7e907cSAndroid Build Coastguard Worker * size returned in struct MmapBufferInfo can be larger. 259*4d7e907cSAndroid Build Coastguard Worker * @return retval OK in case the success. 260*4d7e907cSAndroid Build Coastguard Worker * NOT_SUPPORTED on non mmap mode streams 261*4d7e907cSAndroid Build Coastguard Worker * NOT_INITIALIZED in case of memory allocation error 262*4d7e907cSAndroid Build Coastguard Worker * INVALID_ARGUMENTS if the requested buffer size is too large 263*4d7e907cSAndroid Build Coastguard Worker * INVALID_STATE if called out of sequence 264*4d7e907cSAndroid Build Coastguard Worker * @return info a MmapBufferInfo struct containing information on the MMMAP buffer created. 265*4d7e907cSAndroid Build Coastguard Worker */ 266*4d7e907cSAndroid Build Coastguard Worker createMmapBuffer(int32_t minSizeFrames) 267*4d7e907cSAndroid Build Coastguard Worker generates (Result retval, MmapBufferInfo info); 268*4d7e907cSAndroid Build Coastguard Worker 269*4d7e907cSAndroid Build Coastguard Worker /** 270*4d7e907cSAndroid Build Coastguard Worker * Called by the framework to read current read/write position in the mmap buffer 271*4d7e907cSAndroid Build Coastguard Worker * with associated time stamp. 272*4d7e907cSAndroid Build Coastguard Worker * Function only implemented by streams operating in mmap mode. 273*4d7e907cSAndroid Build Coastguard Worker * 274*4d7e907cSAndroid Build Coastguard Worker * @return retval OK in case the success. 275*4d7e907cSAndroid Build Coastguard Worker * NOT_SUPPORTED on non mmap mode streams 276*4d7e907cSAndroid Build Coastguard Worker * INVALID_STATE if called out of sequence 277*4d7e907cSAndroid Build Coastguard Worker * @return position a MmapPosition struct containing current HW read/write position in frames 278*4d7e907cSAndroid Build Coastguard Worker * with associated time stamp. 279*4d7e907cSAndroid Build Coastguard Worker */ 280*4d7e907cSAndroid Build Coastguard Worker getMmapPosition() 281*4d7e907cSAndroid Build Coastguard Worker generates (Result retval, MmapPosition position); 282*4d7e907cSAndroid Build Coastguard Worker 283*4d7e907cSAndroid Build Coastguard Worker /** 284*4d7e907cSAndroid Build Coastguard Worker * Called by the framework to deinitialize the stream and free up 285*4d7e907cSAndroid Build Coastguard Worker * all the currently allocated resources. It is recommended to close 286*4d7e907cSAndroid Build Coastguard Worker * the stream on the client side as soon as it is becomes unused. 287*4d7e907cSAndroid Build Coastguard Worker * 288*4d7e907cSAndroid Build Coastguard Worker * @return retval OK in case the success. 289*4d7e907cSAndroid Build Coastguard Worker * NOT_SUPPORTED if called on IStream instead of input or 290*4d7e907cSAndroid Build Coastguard Worker * output stream interface. 291*4d7e907cSAndroid Build Coastguard Worker * INVALID_STATE if the stream was already closed. 292*4d7e907cSAndroid Build Coastguard Worker */ 293*4d7e907cSAndroid Build Coastguard Worker close() generates (Result retval); 294*4d7e907cSAndroid Build Coastguard Worker}; 295