xref: /aosp_15_r20/frameworks/av/services/audioflinger/datapath/AudioHwDevice.h (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1*ec779b8eSAndroid Build Coastguard Worker /*
2*ec779b8eSAndroid Build Coastguard Worker  *
3*ec779b8eSAndroid Build Coastguard Worker  * Copyright 2007, The Android Open Source Project
4*ec779b8eSAndroid Build Coastguard Worker  *
5*ec779b8eSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*ec779b8eSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*ec779b8eSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
8*ec779b8eSAndroid Build Coastguard Worker  *
9*ec779b8eSAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
10*ec779b8eSAndroid Build Coastguard Worker  *
11*ec779b8eSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*ec779b8eSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*ec779b8eSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*ec779b8eSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*ec779b8eSAndroid Build Coastguard Worker  * limitations under the License.
16*ec779b8eSAndroid Build Coastguard Worker  */
17*ec779b8eSAndroid Build Coastguard Worker 
18*ec779b8eSAndroid Build Coastguard Worker #pragma once
19*ec779b8eSAndroid Build Coastguard Worker 
20*ec779b8eSAndroid Build Coastguard Worker #include <stdint.h>
21*ec779b8eSAndroid Build Coastguard Worker #include <stdlib.h>
22*ec779b8eSAndroid Build Coastguard Worker #include <sys/types.h>
23*ec779b8eSAndroid Build Coastguard Worker 
24*ec779b8eSAndroid Build Coastguard Worker #include <android/media/audio/common/AudioMMapPolicyInfo.h>
25*ec779b8eSAndroid Build Coastguard Worker #include <android/media/audio/common/AudioMMapPolicyType.h>
26*ec779b8eSAndroid Build Coastguard Worker #include <media/audiohal/DeviceHalInterface.h>
27*ec779b8eSAndroid Build Coastguard Worker #include <utils/Errors.h>
28*ec779b8eSAndroid Build Coastguard Worker #include <system/audio.h>
29*ec779b8eSAndroid Build Coastguard Worker 
30*ec779b8eSAndroid Build Coastguard Worker namespace android {
31*ec779b8eSAndroid Build Coastguard Worker 
32*ec779b8eSAndroid Build Coastguard Worker class AudioStreamIn;
33*ec779b8eSAndroid Build Coastguard Worker class AudioStreamOut;
34*ec779b8eSAndroid Build Coastguard Worker 
35*ec779b8eSAndroid Build Coastguard Worker class AudioHwDevice {
36*ec779b8eSAndroid Build Coastguard Worker public:
37*ec779b8eSAndroid Build Coastguard Worker     enum Flags {
38*ec779b8eSAndroid Build Coastguard Worker         AHWD_CAN_SET_MASTER_VOLUME  = 0x1,
39*ec779b8eSAndroid Build Coastguard Worker         AHWD_CAN_SET_MASTER_MUTE    = 0x2,
40*ec779b8eSAndroid Build Coastguard Worker         // Means that this isn't a terminal module, and software patches
41*ec779b8eSAndroid Build Coastguard Worker         // are used to transport audio data further.
42*ec779b8eSAndroid Build Coastguard Worker         AHWD_IS_INSERT              = 0x4,
43*ec779b8eSAndroid Build Coastguard Worker         // This Module supports BT Latency mode control
44*ec779b8eSAndroid Build Coastguard Worker         AHWD_SUPPORTS_BT_LATENCY_MODES = 0x8,
45*ec779b8eSAndroid Build Coastguard Worker     };
46*ec779b8eSAndroid Build Coastguard Worker 
AudioHwDevice(audio_module_handle_t handle,const char * moduleName,const sp<DeviceHalInterface> & hwDevice,Flags flags)47*ec779b8eSAndroid Build Coastguard Worker     AudioHwDevice(audio_module_handle_t handle,
48*ec779b8eSAndroid Build Coastguard Worker                   const char *moduleName,
49*ec779b8eSAndroid Build Coastguard Worker                   const sp<DeviceHalInterface>& hwDevice,
50*ec779b8eSAndroid Build Coastguard Worker                   Flags flags)
51*ec779b8eSAndroid Build Coastguard Worker         : mHandle(handle)
52*ec779b8eSAndroid Build Coastguard Worker         , mModuleName(strdup(moduleName))
53*ec779b8eSAndroid Build Coastguard Worker         , mHwDevice(hwDevice)
54*ec779b8eSAndroid Build Coastguard Worker         , mFlags(flags) { }
~AudioHwDevice()55*ec779b8eSAndroid Build Coastguard Worker     virtual ~AudioHwDevice() { free((void *)mModuleName); }
56*ec779b8eSAndroid Build Coastguard Worker 
canSetMasterVolume()57*ec779b8eSAndroid Build Coastguard Worker     [[nodiscard]] bool canSetMasterVolume() const {
58*ec779b8eSAndroid Build Coastguard Worker         return (0 != (mFlags & AHWD_CAN_SET_MASTER_VOLUME));
59*ec779b8eSAndroid Build Coastguard Worker     }
60*ec779b8eSAndroid Build Coastguard Worker 
canSetMasterMute()61*ec779b8eSAndroid Build Coastguard Worker     [[nodiscard]] bool canSetMasterMute() const {
62*ec779b8eSAndroid Build Coastguard Worker         return (0 != (mFlags & AHWD_CAN_SET_MASTER_MUTE));
63*ec779b8eSAndroid Build Coastguard Worker     }
64*ec779b8eSAndroid Build Coastguard Worker 
isInsert()65*ec779b8eSAndroid Build Coastguard Worker     [[nodiscard]] bool isInsert() const {
66*ec779b8eSAndroid Build Coastguard Worker         return (0 != (mFlags & AHWD_IS_INSERT));
67*ec779b8eSAndroid Build Coastguard Worker     }
68*ec779b8eSAndroid Build Coastguard Worker 
supportsBluetoothVariableLatency()69*ec779b8eSAndroid Build Coastguard Worker     [[nodiscard]] bool supportsBluetoothVariableLatency() const {
70*ec779b8eSAndroid Build Coastguard Worker         return (0 != (mFlags & AHWD_SUPPORTS_BT_LATENCY_MODES));
71*ec779b8eSAndroid Build Coastguard Worker     }
72*ec779b8eSAndroid Build Coastguard Worker 
handle()73*ec779b8eSAndroid Build Coastguard Worker    [[nodiscard]] audio_module_handle_t handle() const { return mHandle; }
moduleName()74*ec779b8eSAndroid Build Coastguard Worker    [[nodiscard]] const char *moduleName() const { return mModuleName; }
hwDevice()75*ec779b8eSAndroid Build Coastguard Worker    [[nodiscard]] sp<DeviceHalInterface> hwDevice() const { return mHwDevice; }
76*ec779b8eSAndroid Build Coastguard Worker 
77*ec779b8eSAndroid Build Coastguard Worker     /** This method creates and opens the audio hardware output stream.
78*ec779b8eSAndroid Build Coastguard Worker      * The "address" parameter qualifies the "devices" audio device type if needed.
79*ec779b8eSAndroid Build Coastguard Worker      * The format format depends on the device type:
80*ec779b8eSAndroid Build Coastguard Worker      * - Bluetooth devices use the MAC address of the device in the form "00:11:22:AA:BB:CC"
81*ec779b8eSAndroid Build Coastguard Worker      * - USB devices use the ALSA card and device numbers in the form  "card=X;device=Y"
82*ec779b8eSAndroid Build Coastguard Worker      * - Other devices may use a number or any other string.
83*ec779b8eSAndroid Build Coastguard Worker      */
84*ec779b8eSAndroid Build Coastguard Worker     status_t openOutputStream(
85*ec779b8eSAndroid Build Coastguard Worker             AudioStreamOut **ppStreamOut,
86*ec779b8eSAndroid Build Coastguard Worker             audio_io_handle_t handle,
87*ec779b8eSAndroid Build Coastguard Worker             audio_devices_t deviceType,
88*ec779b8eSAndroid Build Coastguard Worker             audio_output_flags_t *flags,
89*ec779b8eSAndroid Build Coastguard Worker             struct audio_config *config,
90*ec779b8eSAndroid Build Coastguard Worker             const char *address,
91*ec779b8eSAndroid Build Coastguard Worker             const std::vector<playback_track_metadata_v7_t>& sourceMetadata);
92*ec779b8eSAndroid Build Coastguard Worker 
93*ec779b8eSAndroid Build Coastguard Worker     status_t openInputStream(
94*ec779b8eSAndroid Build Coastguard Worker             AudioStreamIn **ppStreamIn,
95*ec779b8eSAndroid Build Coastguard Worker             audio_io_handle_t handle,
96*ec779b8eSAndroid Build Coastguard Worker             audio_devices_t deviceType,
97*ec779b8eSAndroid Build Coastguard Worker             audio_input_flags_t flags,
98*ec779b8eSAndroid Build Coastguard Worker             struct audio_config *config,
99*ec779b8eSAndroid Build Coastguard Worker             const char *address,
100*ec779b8eSAndroid Build Coastguard Worker             audio_source_t source,
101*ec779b8eSAndroid Build Coastguard Worker             audio_devices_t outputDevice,
102*ec779b8eSAndroid Build Coastguard Worker             const char *outputDeviceAddress);
103*ec779b8eSAndroid Build Coastguard Worker 
104*ec779b8eSAndroid Build Coastguard Worker     [[nodiscard]] bool supportsAudioPatches() const;
105*ec779b8eSAndroid Build Coastguard Worker 
106*ec779b8eSAndroid Build Coastguard Worker     [[nodiscard]] status_t getAudioPort(struct audio_port_v7 *port) const;
107*ec779b8eSAndroid Build Coastguard Worker 
108*ec779b8eSAndroid Build Coastguard Worker     [[nodiscard]] status_t getMmapPolicyInfos(
109*ec779b8eSAndroid Build Coastguard Worker             media::audio::common::AudioMMapPolicyType policyType,
110*ec779b8eSAndroid Build Coastguard Worker             std::vector<media::audio::common::AudioMMapPolicyInfo> *policyInfos) const;
111*ec779b8eSAndroid Build Coastguard Worker 
112*ec779b8eSAndroid Build Coastguard Worker     [[nodiscard]] int32_t getAAudioMixerBurstCount() const;
113*ec779b8eSAndroid Build Coastguard Worker 
114*ec779b8eSAndroid Build Coastguard Worker     [[nodiscard]] int32_t getAAudioHardwareBurstMinUsec() const;
115*ec779b8eSAndroid Build Coastguard Worker 
116*ec779b8eSAndroid Build Coastguard Worker     [[nodiscard]] status_t getAudioMixPort(const struct audio_port_v7 *devicePort,
117*ec779b8eSAndroid Build Coastguard Worker                                            struct audio_port_v7 *mixPort) const;
118*ec779b8eSAndroid Build Coastguard Worker 
119*ec779b8eSAndroid Build Coastguard Worker private:
120*ec779b8eSAndroid Build Coastguard Worker     const audio_module_handle_t mHandle;
121*ec779b8eSAndroid Build Coastguard Worker     const char * const          mModuleName;
122*ec779b8eSAndroid Build Coastguard Worker     sp<DeviceHalInterface>      mHwDevice;
123*ec779b8eSAndroid Build Coastguard Worker     const Flags                 mFlags;
124*ec779b8eSAndroid Build Coastguard Worker };
125*ec779b8eSAndroid Build Coastguard Worker 
126*ec779b8eSAndroid Build Coastguard Worker } // namespace android
127