1f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov/*
2f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov * Copyright (C) 2016 The Android Open Source Project
3f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov *
4f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov * Licensed under the Apache License, Version 2.0 (the "License");
5f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov * you may not use this file except in compliance with the License.
6f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov * You may obtain a copy of the License at
7f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov *
8f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov *      http://www.apache.org/licenses/LICENSE-2.0
9f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov *
10f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov * Unless required by applicable law or agreed to in writing, software
11f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov * distributed under the License is distributed on an "AS IS" BASIS,
12f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov * See the License for the specific language governing permissions and
14f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov * limitations under the License.
15f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov */
16f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
17f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov#ifndef ANDROID_HARDWARE_DEVICE_HAL_HIDL_H
18f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov#define ANDROID_HARDWARE_DEVICE_HAL_HIDL_H
19f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
20f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov#include <android/hardware/audio/2.0/IDevice.h>
219063fa7966a6d531595d8ada46d7667c569fc308Mikhail Naganov#include <android/hardware/audio/2.0/IPrimaryDevice.h>
22f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov#include <media/audiohal/DeviceHalInterface.h>
23f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
24f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov#include "ConversionHelperHidl.h"
25f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
26f558e0218d2677a813c9c600886f673894eec927Mikhail Naganovusing ::android::hardware::audio::V2_0::IDevice;
279063fa7966a6d531595d8ada46d7667c569fc308Mikhail Naganovusing ::android::hardware::audio::V2_0::IPrimaryDevice;
28f558e0218d2677a813c9c600886f673894eec927Mikhail Naganovusing ::android::hardware::Return;
29f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
30f558e0218d2677a813c9c600886f673894eec927Mikhail Naganovnamespace android {
31f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
32f558e0218d2677a813c9c600886f673894eec927Mikhail Naganovclass DeviceHalHidl : public DeviceHalInterface, public ConversionHelperHidl
33f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov{
34f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov  public:
35f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Sets the value of 'devices' to a bitmask of 1 or more values of audio_devices_t.
36f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t getSupportedDevices(uint32_t *devices);
37f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
38f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Check to see if the audio hardware interface has been initialized.
39f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t initCheck();
40f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
41f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Set the audio volume of a voice call. Range is between 0.0 and 1.0.
42f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t setVoiceVolume(float volume);
43f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
44f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Set the audio volume for all audio activities other than voice call.
45f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t setMasterVolume(float volume);
46f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
47f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Get the current master volume value for the HAL.
48f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t getMasterVolume(float *volume);
49f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
50f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Called when the audio mode changes.
51f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t setMode(audio_mode_t mode);
52f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
53f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Muting control.
54f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t setMicMute(bool state);
55f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t getMicMute(bool *state);
56f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t setMasterMute(bool state);
57f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t getMasterMute(bool *state);
58f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
59f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Set global audio parameters.
60f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t setParameters(const String8& kvPairs);
61f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
62f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Get global audio parameters.
63f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t getParameters(const String8& keys, String8 *values);
64f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
65f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Returns audio input buffer size according to parameters passed.
66f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t getInputBufferSize(const struct audio_config *config,
67f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            size_t *size);
68f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
69f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Creates and opens the audio hardware output stream. The stream is closed
70f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // by releasing all references to the returned object.
71f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t openOutputStream(
72f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            audio_io_handle_t handle,
73f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            audio_devices_t devices,
74f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            audio_output_flags_t flags,
75f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            struct audio_config *config,
76f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            const char *address,
77f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            sp<StreamOutHalInterface> *outStream);
78f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
79f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Creates and opens the audio hardware input stream. The stream is closed
80f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // by releasing all references to the returned object.
81f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t openInputStream(
82f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            audio_io_handle_t handle,
83f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            audio_devices_t devices,
84f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            struct audio_config *config,
85f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            audio_input_flags_t flags,
86f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            const char *address,
87f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            audio_source_t source,
88f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            sp<StreamInHalInterface> *inStream);
89f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
90f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Returns whether createAudioPatch and releaseAudioPatch operations are supported.
91f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t supportsAudioPatches(bool *supportsPatches);
92f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
93f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Creates an audio patch between several source and sink ports.
94f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t createAudioPatch(
95f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            unsigned int num_sources,
96f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            const struct audio_port_config *sources,
97f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            unsigned int num_sinks,
98f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            const struct audio_port_config *sinks,
99f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov            audio_patch_handle_t *patch);
100f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
101f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Releases an audio patch.
102f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t releaseAudioPatch(audio_patch_handle_t patch);
103f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
104f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Fills the list of supported attributes for a given audio port.
105f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t getAudioPort(struct audio_port *port);
106f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
107f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Set audio port configuration.
108f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t setAudioPortConfig(const struct audio_port_config *config);
109f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
110f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual status_t dump(int fd);
111f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
112f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov  private:
113f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    friend class DevicesFactoryHalHidl;
114f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    sp<IDevice> mDevice;
1159063fa7966a6d531595d8ada46d7667c569fc308Mikhail Naganov    sp<IPrimaryDevice> mPrimaryDevice;  // Null if it's not a primary device.
116f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
117f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // Can not be constructed directly by clients.
118f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    explicit DeviceHalHidl(const sp<IDevice>& device);
119f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
120f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    // The destructor automatically closes the device.
121f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov    virtual ~DeviceHalHidl();
122f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov};
123f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
124f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov} // namespace android
125f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov
126f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov#endif // ANDROID_HARDWARE_DEVICE_HAL_HIDL_H
127