// Copyright 2016 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // Class to manage audio devices in Brillo. #ifndef BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_MANAGER_H_ #define BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_MANAGER_H_ #include #include "brillo_audio_device_info.h" __BEGIN_DECLS struct BAudioManager; typedef struct BAudioManager BAudioManager; // Get a pointer to a BAudioManager. This object will refer to the same // underlying client object no matter how many times it is called. // // Returns a pointer to a BAudioManager. Returns NULL on failure. BAudioManager* BAudioManager_new(); // Flag to get input devices. static const int GET_DEVICES_INPUTS = 1; // Flag to get output devices. static const int GET_DEVICES_OUTPUTS = 2; // Returns the list of input/output devices connected to the system. // // Arg: // brillo_audio_manager: A pointer to a BAudioManager. // flag: Either GET_DEVICES_INPUTS or GET_DEVICES_OUTPUTS. // device_array: An array of BAudioDeviceInfo pointers. The caller has to // allocate this array. // size: The size of device_array. // num_devices: A pointer to an unsigned int which will represent the number // of audio devices connected to the device. // // Returns 0 on success and errno on failure. int BAudioManager_getDevices( const BAudioManager* brillo_audio_manager, int flag, BAudioDeviceInfo* device_array[], unsigned int size, unsigned int* num_devices); // Select the input device to be used for recording. // // Arg: // brillo_audio_manager: A pointer to a BAudioManager. // device: Device to set as the input device. Note that the device has to be // an input device. // // Returns 0 on success and errno on failure. int BAudioManager_setInputDevice(const BAudioManager* brillo_audio_manager, const BAudioDeviceInfo* device); // Usage types. enum BAudioUsage { kUsageAlarm, kUsageMedia, kUsageNotifications, kUsageSystem, kUsageInvalid }; // Select the output device to be used for playback. // // Arg: // brillo_audio_manager: A pointer to a BAudioManager. // device: Device to set as the output device. Note that the device has to // be an output device. // usage: A BAudioUsage type representing a usage to route to |device|. // // Returns 0 on success and errno on failure. int BAudioManager_setOutputDevice( const BAudioManager* brillo_audio_manager, const BAudioDeviceInfo* device, BAudioUsage usage); // Get the number of steps for a given stream type. // // Args: // brillo_audio_manager: A pointer to a BAudioManager object. // usage: A BAudioUsage representing the audio stream. // max_steps: A pointer to an int representing the number of steps for a given // usage. // // Returns 0 on success and errno on failure. int BAudioManager_getMaxVolumeSteps(const BAudioManager* brillo_audio_manager, BAudioUsage usage, int* max_steps); // Set the number of steps for a given stream type. // // Args: // brillo_audio_manager: A pointer to a BAudioManager object. // usage: A BAudioUsage representing the audio stream. // max_steps: An int representing the number of steps to use for a given // usage. // // Returns 0 on success and errno on failure. int BAudioManager_setMaxVolumeSteps(const BAudioManager* brillo_audio_manager, BAudioUsage usage, int max_steps); // Set the volume for a given stream type. // // Args: // brillo_audio_manager: A pointer to a BAudioManager object. // usage: A BAudioUsage representing the audio stream. // device: A pointer to a BAudioDeviceInfo object. // value: An int representing the index to set the volume to. The index must // be less than max_steps if BAudioManager_setMaxVolumeSteps was // called or 100 otherwise. // // Returns 0 on success and errno on failure. int BAudioManager_setVolumeIndex(const BAudioManager* brillo_audio_manager, BAudioUsage usage, const BAudioDeviceInfo* device, int index); // Get the volume for a given stream type. // // Args: // brillo_audio_manager: A pointer to a BAudioManager object. // usage: A BAudioUsage representing the audio stream. // device: A pointer to a BAudioDeviceInfo object. // value: A pointer to int. This will be set to an int representing the volume // index for |usage|. // // Returns 0 on success and errno on failure. int BAudioManager_getVolumeIndex(const BAudioManager* brillo_audio_manager, BAudioUsage usage, const BAudioDeviceInfo* device, int* index); // Get the default stream for volume buttons. If // BAudioManager_setVolumeControlUsage has not been called, this will return // kInvalidUsage. // // Args: // brillo_audio_manager: A pointer to a BAudioManager object. // usage: A pointer to a BAudioUsage representing the audio stream. // // Returns 0 on success and errno on failure. int BAudioManager_getVolumeControlUsage( const BAudioManager* brillo_audio_manager, BAudioUsage* usage); // Set the default stream to use for volume buttons. By default, streams will be // ordered by priority: // 1. kUsageAlarm // 2. kUsageNotifications // 3. kUsageSystem // 4. kUsageMedia // // Calling BAudioMananager_setVolumeControlUsage with kInvalidUsage will reset // the volume control stream to its default priorities and undo the effects of // previous calls to BAudioManager_setVolumeControlUsage. // // Args: // brillo_audio_manager: A pointer to a BAudioManager object. // usage: A BAudioUsage representing the audio stream. // // Returns 0 on success and errno on failure. int BAudioManager_setVolumeControlUsage( const BAudioManager* brillo_audio_manager, BAudioUsage usage); // Increment the volume of active streams or stream selected using // BAudioManager_setVolumeControlUsage. // // Args: // brillo_audio_manager: A pointer to a BAudioManager object. // // Returns 0 on success and errno on failure. int BAudioManager_incrementVolume(const BAudioManager* brillo_audio_manager); // Decrement the volume of active streams or stream selected using // BAudioManager_setVolumeControlUsage. // // Args: // brillo_audio_manager: A pointer to a BAudioManager object. // // Returns 0 on success and errno on failure. int BAudioManager_decrementVolume(const BAudioManager* brillo_audio_manager); // Object used for callbacks. struct BAudioCallback { // Function to be called when an audio device is added. If multiple audio // devices are added, then this function will be called multiple times. The // user is not responsible for freeing added_device. void (*OnAudioDeviceAdded)(const BAudioDeviceInfo* added_device, void* user_data); // Function to be called when an audio device is removed. If multiple audio // devices are removed, then this function will be called multiple times. The // user is not responsible for freeing removed_device. void (*OnAudioDeviceRemoved)(const BAudioDeviceInfo* removed_device, void* user_data); // Function to be called when the volume button is pressed. void (*OnVolumeChanged)(BAudioUsage usage, int old_volume_index, int new_volume_index, void* user_data); }; typedef struct BAudioCallback BAudioCallback; // Registers a callback object that lets clients know when audio devices have // been added/removed from the system. // // Arg: // brillo_audio_manager: A pointer to a BAudioManager. // callback: An object of type BAudioCallback. The BAudioManager // maintains ownership of this object. // user_data : A pointer to user data. This is not used by BAudioManager and // is passed as an arg to callbacks. // callback_id: A pointer to an int. The int represents a token that can be // used to de-register this callback. Contains 0 on failure. // // Returns 0 on success and errno on failure. int BAudioManager_registerAudioCallback( const BAudioManager* brillo_audio_manager, const BAudioCallback* callback, void* user_data, int* callback_id); // Unregisters a callback object. // // Arg: // brillo_audio_manager: A pointer to a BAudioManager. // callback_id: A token correspoding to the callback object. // // Returns 0 on success and errno on failure. int BAudioManager_unregisterAudioCallback( const BAudioManager* brillo_audio_manager, int callback_id); // Free a Brillo audio manager object. // // Arg: // brillo_audio_manager: A pointer to a BAudioManager to be freed. // // Returns 0 on success and errno on failure. int BAudioManager_delete(BAudioManager* brillo_audio_manager); __END_DECLS #endif // BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_MANAGER_H_