| // 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. |
| // |
| |
| // Main loop of the brillo audio service. |
| |
| #ifndef BRILLO_AUDIO_AUDIOSERVICE_AUDIO_DAEMON_H_ |
| #define BRILLO_AUDIO_AUDIOSERVICE_AUDIO_DAEMON_H_ |
| |
| #include <memory> |
| #include <stack> |
| |
| #include <base/files/file.h> |
| #include <base/memory/weak_ptr.h> |
| #include <brillo/binder_watcher.h> |
| #include <brillo/daemons/daemon.h> |
| #include <media/IAudioPolicyService.h> |
| |
| #include "audio_device_handler.h" |
| |
| namespace brillo { |
| |
| class AudioDaemon : public Daemon { |
| public: |
| AudioDaemon() {} |
| |
| protected: |
| // Initialize the audio device handler and start pollig the files in |
| // /dev/input. |
| int OnInit() override; |
| |
| private: |
| // Callback function for input events. Events are handled by the audio device |
| // handler. |
| void Callback(base::File* file); |
| |
| // Callback function for audio policy service death notification. |
| void OnAPSDisconnected(); |
| |
| // Connect to the audio policy service and register a callback to be invoked |
| // if the audio policy service dies. |
| void ConnectToAPS(); |
| |
| // Initialize the audio_device_handler_. |
| // |
| // Note: This can only occur after we have connected to the audio policy |
| // service. |
| void InitializeHandler(); |
| |
| // Store the file objects that are created during initialization for the files |
| // being polled. This is done so these objects can be freed when the |
| // AudioDaemon object is destroyed. |
| std::stack<base::File> files_; |
| // Handler for audio device input events. |
| std::unique_ptr<AudioDeviceHandler> audio_device_handler_; |
| // Used to generate weak_ptr to AudioDaemon for use in base::Bind. |
| base::WeakPtrFactory<AudioDaemon> weak_ptr_factory_{this}; |
| // Pointer to the audio policy service. |
| android::sp<android::IAudioPolicyService> aps_; |
| // Flag to indicate whether the handler has been initialized. |
| bool handler_initialized_ = false; |
| // Binder watcher to watch for binder messages. |
| brillo::BinderWatcher binder_watcher_; |
| }; |
| |
| } // namespace brillo |
| |
| #endif // BRILLO_AUDIO_AUDIOSERVICE_AUDIO_DAEMON_H_ |