// 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. // // Client for the brilloaudioservice. #ifndef BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_CLIENT_H_ #define BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_CLIENT_H_ #include #include #include #include #include #include #include #include "android/brillo/brilloaudioservice/IBrilloAudioService.h" #include "audio_service_callback.h" using android::brillo::brilloaudioservice::IBrilloAudioService; namespace brillo { class BrilloAudioClient { public: virtual ~BrilloAudioClient(); // Get or create a pointer to the client instance. // // Returns a weak_ptr to a BrilloAudioClient object. static std::weak_ptr GetClientInstance(); // Query brillo audio service to get list of connected audio devices. // // |flag| is an int which is either GET_DEVICES_INPUTS or GET_DEVICES_OUTPUTS. // |devices| is a reference to a vector of audio_devices_t. // // Returns 0 on success and errno on failure. int GetDevices(int flag, std::vector& devices); // Register a callback object with the service. // // |callback| is a ref pointer to a callback object to be register with the // brillo audio service. // |callback_id| is a pointer to an int that represents a callback id token on // success and 0 on failure. // // Returns 0 on success and errno on failure. int RegisterAudioCallback(android::sp callback, int* callback_id); // Unregister a callback object with the service. // // |callback_id| is an int referring to the callback object. // // Returns 0 on success and errno on failure. int UnregisterAudioCallback(int callback_id); // Set a device to be the default. This does not communicate with the brillo // audio service but instead communicates directly with the audio policy // service. // // Please see system/audio_policy.h for details on these arguments. // // Returns 0 on success and errno on failure. int SetDevice(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config); // Get the maximum number of steps for a given BAudioUsage. // // |usage| is an enum of type BAudioUsage. // |max_steps| is a pointer to the maximum number of steps. // // Returns 0 on success and errno on failure. int GetMaxVolumeSteps(BAudioUsage usage, int* max_steps); // Set the maximum number of steps to use for a given BAudioUsage. // // |usage| is an enum of type BAudioUsage. // |max_steps| is an int between 0 and 100. // // Returns 0 on success and errno on failure. int SetMaxVolumeSteps(BAudioUsage usage, int max_steps); // Set the volume index for a given BAudioUsage and device. // // |usage| is an enum of type BAudioUsage. // |device| is of type audio_devices_t. // |index| is an int representing the current index. // // Returns 0 on success and errno on failure. int SetVolumeIndex(BAudioUsage usage, audio_devices_t device, int index); // Get the volume index for a given BAudioUsage and device. // // |usage| is an enum of type BAudioUsage. // |device| is of type audio_devices_t. // |index| is a pointer to an int representing the current index. // // Returns 0 on success and errno on failure. int GetVolumeIndex(BAudioUsage usage, audio_devices_t device, int* index); // Get default stream to use for volume buttons. // // |usage| is a pointer to a BAudioUsage. // // Returns 0 on success and errno on failure. int GetVolumeControlStream(BAudioUsage* usage); // Set default stream to use for volume buttons. // // |usage| is an enum of type BAudioUsage. // // Returns 0 on success and errno on failure. int SetVolumeControlStream(BAudioUsage usage); // Increment the volume. // // Returns 0 on success and errno on failure. int IncrementVolume(); // Decrement the volume. // // Returns 0 on success and errno on failure. int DecrementVolume(); protected: BrilloAudioClient() = default; private: friend class BrilloAudioClientTest; FRIEND_TEST(BrilloAudioClientTest, InitializeNoService); FRIEND_TEST(BrilloAudioClientTest, CheckInitializeRegistersForDeathNotifications); // Initialize the BrilloAudioClient object and connects to the brillo audio // service and the audio policy service. It also registers for death // notifications. bool Initialize(); // Callback to be triggered when the brillo audio service dies. It attempts to // reconnect to the service. virtual void OnBASDisconnect(); // Helper method to connect to a service and register a callback to receive // death notifications. // // |service_name| is a string representing the name of the service. // |callback| is a base::Closure which will be called if the service dies. android::sp ConnectToService(const std::string& service_name, const base::Closure& callback); // Pointer to the BrilloAudioClient object. static std::shared_ptr instance_; // Used to generate weak_ptr to BrilloAudioClient for use in base::Bind. base::WeakPtrFactory weak_ptr_factory_{this}; // Pointer to the brillo audio service. android::sp brillo_audio_service_; // Counter for callback IDs. static int callback_id_counter_; // Map of callback ids to callback objects. std::map > callback_map_; DISALLOW_COPY_AND_ASSIGN(BrilloAudioClient); }; } // namespace brillo #endif // BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_CLIENT_H_