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