1/* 2 * Copyright (C) 2016 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#include <common/all-versions/IncludeGuard.h> 18 19#include <hidl/Status.h> 20 21#include <hidl/MQDescriptor.h> 22 23namespace android { 24namespace hardware { 25namespace audio { 26namespace AUDIO_HAL_VERSION { 27namespace implementation { 28 29using ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioConfig; 30using ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioInputFlag; 31using ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioMode; 32using ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioOutputFlag; 33using ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioPort; 34using ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioPortConfig; 35using ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioSource; 36using ::android::hardware::audio::AUDIO_HAL_VERSION::DeviceAddress; 37using ::android::hardware::audio::AUDIO_HAL_VERSION::IDevice; 38using ::android::hardware::audio::AUDIO_HAL_VERSION::IPrimaryDevice; 39using ::android::hardware::audio::AUDIO_HAL_VERSION::IStreamIn; 40using ::android::hardware::audio::AUDIO_HAL_VERSION::IStreamOut; 41using ::android::hardware::audio::AUDIO_HAL_VERSION::ParameterValue; 42using ::android::hardware::audio::AUDIO_HAL_VERSION::Result; 43using ::android::hardware::Return; 44using ::android::hardware::Void; 45using ::android::hardware::hidl_vec; 46using ::android::hardware::hidl_string; 47using ::android::sp; 48 49struct PrimaryDevice : public IPrimaryDevice { 50 explicit PrimaryDevice(audio_hw_device_t* device); 51 52 // Methods from ::android::hardware::audio::AUDIO_HAL_VERSION::IDevice follow. 53 Return<Result> initCheck() override; 54 Return<Result> setMasterVolume(float volume) override; 55 Return<void> getMasterVolume(getMasterVolume_cb _hidl_cb) override; 56 Return<Result> setMicMute(bool mute) override; 57 Return<void> getMicMute(getMicMute_cb _hidl_cb) override; 58 Return<Result> setMasterMute(bool mute) override; 59 Return<void> getMasterMute(getMasterMute_cb _hidl_cb) override; 60 Return<void> getInputBufferSize(const AudioConfig& config, 61 getInputBufferSize_cb _hidl_cb) override; 62 63 Return<void> openOutputStream(int32_t ioHandle, const DeviceAddress& device, 64 const AudioConfig& config, AudioOutputFlagBitfield flags, 65#ifdef AUDIO_HAL_VERSION_4_0 66 const SourceMetadata& sourceMetadata, 67#endif 68 openOutputStream_cb _hidl_cb) override; 69 70 Return<void> openInputStream(int32_t ioHandle, const DeviceAddress& device, 71 const AudioConfig& config, AudioInputFlagBitfield flags, 72 AudioSource source, openInputStream_cb _hidl_cb); 73#ifdef AUDIO_HAL_VERSION_4_0 74 Return<void> openInputStream(int32_t ioHandle, const DeviceAddress& device, 75 const AudioConfig& config, AudioInputFlagBitfield flags, 76 const SinkMetadata& sinkMetadata, 77 openInputStream_cb _hidl_cb) override; 78#endif 79 80 Return<bool> supportsAudioPatches() override; 81 Return<void> createAudioPatch(const hidl_vec<AudioPortConfig>& sources, 82 const hidl_vec<AudioPortConfig>& sinks, 83 createAudioPatch_cb _hidl_cb) override; 84 Return<Result> releaseAudioPatch(int32_t patch) override; 85 Return<void> getAudioPort(const AudioPort& port, getAudioPort_cb _hidl_cb) override; 86 Return<Result> setAudioPortConfig(const AudioPortConfig& config) override; 87 88 Return<Result> setScreenState(bool turnedOn) override; 89 90#ifdef AUDIO_HAL_VERSION_2_0 91 Return<AudioHwSync> getHwAvSync() override; 92 Return<void> getParameters(const hidl_vec<hidl_string>& keys, 93 getParameters_cb _hidl_cb) override; 94 Return<Result> setParameters(const hidl_vec<ParameterValue>& parameters) override; 95 Return<void> debugDump(const hidl_handle& fd) override; 96#elif defined(AUDIO_HAL_VERSION_4_0) 97 Return<void> getHwAvSync(getHwAvSync_cb _hidl_cb) override; 98 Return<void> getParameters(const hidl_vec<ParameterValue>& context, 99 const hidl_vec<hidl_string>& keys, 100 getParameters_cb _hidl_cb) override; 101 Return<Result> setParameters(const hidl_vec<ParameterValue>& context, 102 const hidl_vec<ParameterValue>& parameters) override; 103 Return<void> getMicrophones(getMicrophones_cb _hidl_cb) override; 104 Return<Result> setConnectedState(const DeviceAddress& address, bool connected) override; 105#endif 106 107 Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& options) override; 108 109 // Methods from ::android::hardware::audio::AUDIO_HAL_VERSION::IPrimaryDevice follow. 110 Return<Result> setVoiceVolume(float volume) override; 111 Return<Result> setMode(AudioMode mode) override; 112 Return<void> getBtScoNrecEnabled(getBtScoNrecEnabled_cb _hidl_cb) override; 113 Return<Result> setBtScoNrecEnabled(bool enabled) override; 114 Return<void> getBtScoWidebandEnabled(getBtScoWidebandEnabled_cb _hidl_cb) override; 115 Return<Result> setBtScoWidebandEnabled(bool enabled) override; 116 Return<void> getTtyMode(getTtyMode_cb _hidl_cb) override; 117 Return<Result> setTtyMode(IPrimaryDevice::TtyMode mode) override; 118 Return<void> getHacEnabled(getHacEnabled_cb _hidl_cb) override; 119 Return<Result> setHacEnabled(bool enabled) override; 120 121#ifdef AUDIO_HAL_VERSION_4_0 122 Return<Result> setBtScoHeadsetDebugName(const hidl_string& name) override; 123 Return<void> getBtHfpEnabled(getBtHfpEnabled_cb _hidl_cb) override; 124 Return<Result> setBtHfpEnabled(bool enabled) override; 125 Return<Result> setBtHfpSampleRate(uint32_t sampleRateHz) override; 126 Return<Result> setBtHfpVolume(float volume) override; 127 Return<Result> updateRotation(IPrimaryDevice::Rotation rotation) override; 128#endif 129 130 private: 131 sp<Device> mDevice; 132 133 virtual ~PrimaryDevice(); 134}; 135 136} // namespace implementation 137} // namespace AUDIO_HAL_VERSION 138} // namespace audio 139} // namespace hardware 140} // namespace android 141