110548295023bee99108e418499aff09fe578211eMikhail Naganov/* 210548295023bee99108e418499aff09fe578211eMikhail Naganov * Copyright (C) 2016 The Android Open Source Project 310548295023bee99108e418499aff09fe578211eMikhail Naganov * 410548295023bee99108e418499aff09fe578211eMikhail Naganov * Licensed under the Apache License, Version 2.0 (the "License"); 510548295023bee99108e418499aff09fe578211eMikhail Naganov * you may not use this file except in compliance with the License. 610548295023bee99108e418499aff09fe578211eMikhail Naganov * You may obtain a copy of the License at 710548295023bee99108e418499aff09fe578211eMikhail Naganov * 810548295023bee99108e418499aff09fe578211eMikhail Naganov * http://www.apache.org/licenses/LICENSE-2.0 910548295023bee99108e418499aff09fe578211eMikhail Naganov * 1010548295023bee99108e418499aff09fe578211eMikhail Naganov * Unless required by applicable law or agreed to in writing, software 1110548295023bee99108e418499aff09fe578211eMikhail Naganov * distributed under the License is distributed on an "AS IS" BASIS, 1210548295023bee99108e418499aff09fe578211eMikhail Naganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1310548295023bee99108e418499aff09fe578211eMikhail Naganov * See the License for the specific language governing permissions and 1410548295023bee99108e418499aff09fe578211eMikhail Naganov * limitations under the License. 1510548295023bee99108e418499aff09fe578211eMikhail Naganov */ 1610548295023bee99108e418499aff09fe578211eMikhail Naganov 17e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocard#include <common/all-versions/IncludeGuard.h> 1810548295023bee99108e418499aff09fe578211eMikhail Naganov 1910548295023bee99108e418499aff09fe578211eMikhail Naganov#include <memory> 2010548295023bee99108e418499aff09fe578211eMikhail Naganov 2110548295023bee99108e418499aff09fe578211eMikhail Naganov#include <hardware/audio.h> 2282cb03632c15976838407c231fd85804de9bf84cKevin Rocard#include <media/AudioParameter.h> 2310548295023bee99108e418499aff09fe578211eMikhail Naganov 2410548295023bee99108e418499aff09fe578211eMikhail Naganov#include <hidl/Status.h> 2510548295023bee99108e418499aff09fe578211eMikhail Naganov 2610548295023bee99108e418499aff09fe578211eMikhail Naganov#include <hidl/MQDescriptor.h> 2710548295023bee99108e418499aff09fe578211eMikhail Naganov 285ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard#include <VersionUtils.h> 295ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard 3010548295023bee99108e418499aff09fe578211eMikhail Naganovnamespace android { 3110548295023bee99108e418499aff09fe578211eMikhail Naganovnamespace hardware { 3210548295023bee99108e418499aff09fe578211eMikhail Naganovnamespace audio { 33e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardnamespace AUDIO_HAL_VERSION { 3410548295023bee99108e418499aff09fe578211eMikhail Naganovnamespace implementation { 3510548295023bee99108e418499aff09fe578211eMikhail Naganov 36e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardusing ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioConfig; 37e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardusing ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioHwSync; 38e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardusing ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioInputFlag; 39e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardusing ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioOutputFlag; 40e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardusing ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioPatchHandle; 41e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardusing ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioPort; 42e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardusing ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioPortConfig; 43e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardusing ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioSource; 445ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocardusing ::android::hardware::audio::common::AUDIO_HAL_VERSION::implementation::AudioInputFlagBitfield; 455ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocardusing ::android::hardware::audio::common::AUDIO_HAL_VERSION::implementation:: 465ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard AudioOutputFlagBitfield; 47e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardusing ::android::hardware::audio::AUDIO_HAL_VERSION::DeviceAddress; 48e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardusing ::android::hardware::audio::AUDIO_HAL_VERSION::IDevice; 49e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardusing ::android::hardware::audio::AUDIO_HAL_VERSION::IStreamIn; 50e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardusing ::android::hardware::audio::AUDIO_HAL_VERSION::IStreamOut; 51e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardusing ::android::hardware::audio::AUDIO_HAL_VERSION::ParameterValue; 52e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocardusing ::android::hardware::audio::AUDIO_HAL_VERSION::Result; 5310548295023bee99108e418499aff09fe578211eMikhail Naganovusing ::android::hardware::Return; 5410548295023bee99108e418499aff09fe578211eMikhail Naganovusing ::android::hardware::Void; 5510548295023bee99108e418499aff09fe578211eMikhail Naganovusing ::android::hardware::hidl_vec; 5610548295023bee99108e418499aff09fe578211eMikhail Naganovusing ::android::hardware::hidl_string; 5710548295023bee99108e418499aff09fe578211eMikhail Naganovusing ::android::sp; 5810548295023bee99108e418499aff09fe578211eMikhail Naganov 595ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard#ifdef AUDIO_HAL_VERSION_4_0 605ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocardusing ::android::hardware::audio::AUDIO_HAL_VERSION::SourceMetadata; 615ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocardusing ::android::hardware::audio::AUDIO_HAL_VERSION::SinkMetadata; 625ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard#endif 635ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard 6486685f56da0941027406d1ffba67bd4272faa526Mikhail Naganovstruct Device : public IDevice, public ParametersUtil { 65f811acf049b785ccce05a9fca9e01aa2031ab357Mikhail Naganov explicit Device(audio_hw_device_t* device); 6610548295023bee99108e418499aff09fe578211eMikhail Naganov 67e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocard // Methods from ::android::hardware::audio::AUDIO_HAL_VERSION::IDevice follow. 6882cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<Result> initCheck() override; 6982cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<Result> setMasterVolume(float volume) override; 7082cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<void> getMasterVolume(getMasterVolume_cb _hidl_cb) override; 7182cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<Result> setMicMute(bool mute) override; 7282cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<void> getMicMute(getMicMute_cb _hidl_cb) override; 7382cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<Result> setMasterMute(bool mute) override; 7482cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<void> getMasterMute(getMasterMute_cb _hidl_cb) override; 7582cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<void> getInputBufferSize(const AudioConfig& config, 7682cb03632c15976838407c231fd85804de9bf84cKevin Rocard getInputBufferSize_cb _hidl_cb) override; 775ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard 785ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard // V2 openInputStream is called by V4 input stream thus present in both versions 795ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard Return<void> openInputStream(int32_t ioHandle, const DeviceAddress& device, 805ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard const AudioConfig& config, AudioInputFlagBitfield flags, 815ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard AudioSource source, openInputStream_cb _hidl_cb); 825ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard#ifdef AUDIO_HAL_VERSION_2_0 8382cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<void> openOutputStream(int32_t ioHandle, const DeviceAddress& device, 845ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard const AudioConfig& config, AudioOutputFlagBitfield flags, 855ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard openOutputStream_cb _hidl_cb) override; 865ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard#elif defined(AUDIO_HAL_VERSION_4_0) 875ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard Return<void> openOutputStream(int32_t ioHandle, const DeviceAddress& device, 885ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard const AudioConfig& config, AudioOutputFlagBitfield flags, 895ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard const SourceMetadata& sourceMetadata, 9082cb03632c15976838407c231fd85804de9bf84cKevin Rocard openOutputStream_cb _hidl_cb) override; 9182cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<void> openInputStream(int32_t ioHandle, const DeviceAddress& device, 925ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard const AudioConfig& config, AudioInputFlagBitfield flags, 935ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard const SinkMetadata& sinkMetadata, 945ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard openInputStream_cb _hidl_cb) override; 955ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard#endif 965ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard 9782cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<bool> supportsAudioPatches() override; 9882cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<void> createAudioPatch(const hidl_vec<AudioPortConfig>& sources, 9982cb03632c15976838407c231fd85804de9bf84cKevin Rocard const hidl_vec<AudioPortConfig>& sinks, 10082cb03632c15976838407c231fd85804de9bf84cKevin Rocard createAudioPatch_cb _hidl_cb) override; 10182cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<Result> releaseAudioPatch(int32_t patch) override; 10282cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<void> getAudioPort(const AudioPort& port, getAudioPort_cb _hidl_cb) override; 10382cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<Result> setAudioPortConfig(const AudioPortConfig& config) override; 1045ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard 10582cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<Result> setScreenState(bool turnedOn) override; 1065ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard 1075ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard#ifdef AUDIO_HAL_VERSION_2_0 1085ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard Return<AudioHwSync> getHwAvSync() override; 10982cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<void> getParameters(const hidl_vec<hidl_string>& keys, 11082cb03632c15976838407c231fd85804de9bf84cKevin Rocard getParameters_cb _hidl_cb) override; 11182cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<Result> setParameters(const hidl_vec<ParameterValue>& parameters) override; 11282cb03632c15976838407c231fd85804de9bf84cKevin Rocard Return<void> debugDump(const hidl_handle& fd) override; 1135ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard#elif defined(AUDIO_HAL_VERSION_4_0) 1145ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard Return<void> getHwAvSync(getHwAvSync_cb _hidl_cb) override; 1155ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard Return<void> getParameters(const hidl_vec<ParameterValue>& context, 1165ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard const hidl_vec<hidl_string>& keys, 1175ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard getParameters_cb _hidl_cb) override; 1185ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard Return<Result> setParameters(const hidl_vec<ParameterValue>& context, 1195ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard const hidl_vec<ParameterValue>& parameters) override; 1205ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard Return<void> getMicrophones(getMicrophones_cb _hidl_cb) override; 1215ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard Return<Result> setConnectedState(const DeviceAddress& address, bool connected) override; 1225ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard#endif 1235ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard 1245ec293316e7ea1f768161695a113e50b0ea41d45Kevin Rocard Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& options) override; 12510548295023bee99108e418499aff09fe578211eMikhail Naganov 12610548295023bee99108e418499aff09fe578211eMikhail Naganov // Utility methods for extending interfaces. 12710548295023bee99108e418499aff09fe578211eMikhail Naganov Result analyzeStatus(const char* funcName, int status); 128936279e1ffe6bf7e842c46f9a94d98a48dce6754Mikhail Naganov void closeInputStream(audio_stream_in_t* stream); 129936279e1ffe6bf7e842c46f9a94d98a48dce6754Mikhail Naganov void closeOutputStream(audio_stream_out_t* stream); 13010548295023bee99108e418499aff09fe578211eMikhail Naganov audio_hw_device_t* device() const { return mDevice; } 13186685f56da0941027406d1ffba67bd4272faa526Mikhail Naganov 13282cb03632c15976838407c231fd85804de9bf84cKevin Rocard private: 13382cb03632c15976838407c231fd85804de9bf84cKevin Rocard audio_hw_device_t* mDevice; 13410548295023bee99108e418499aff09fe578211eMikhail Naganov 13510548295023bee99108e418499aff09fe578211eMikhail Naganov virtual ~Device(); 13610548295023bee99108e418499aff09fe578211eMikhail Naganov 13786685f56da0941027406d1ffba67bd4272faa526Mikhail Naganov // Methods from ParametersUtil. 13886685f56da0941027406d1ffba67bd4272faa526Mikhail Naganov char* halGetParameters(const char* keys) override; 13986685f56da0941027406d1ffba67bd4272faa526Mikhail Naganov int halSetParameters(const char* keysAndValues) override; 140f811acf049b785ccce05a9fca9e01aa2031ab357Mikhail Naganov 141f811acf049b785ccce05a9fca9e01aa2031ab357Mikhail Naganov uint32_t version() const { return mDevice->common.version; } 14210548295023bee99108e418499aff09fe578211eMikhail Naganov}; 14310548295023bee99108e418499aff09fe578211eMikhail Naganov 14410548295023bee99108e418499aff09fe578211eMikhail Naganov} // namespace implementation 145e9e4e16564c2949960bf9dd3ab49c9dee2273f3cKevin Rocard} // namespace AUDIO_HAL_VERSION 14610548295023bee99108e418499aff09fe578211eMikhail Naganov} // namespace audio 14710548295023bee99108e418499aff09fe578211eMikhail Naganov} // namespace hardware 14810548295023bee99108e418499aff09fe578211eMikhail Naganov} // namespace android 149