1005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// Copyright 2016 The Android Open Source Project 2005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// 3005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// Licensed under the Apache License, Version 2.0 (the "License"); 4005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// you may not use this file except in compliance with the License. 5005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// You may obtain a copy of the License at 6005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// 7005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// http://www.apache.org/licenses/LICENSE-2.0 8005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// 9005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// Unless required by applicable law or agreed to in writing, software 10005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// distributed under the License is distributed on an "AS IS" BASIS, 11005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// See the License for the specific language governing permissions and 13005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// limitations under the License. 14005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// 15005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 16005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan#ifndef BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_SERVICE_IMPL_H_ 17005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan#define BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_SERVICE_IMPL_H_ 18005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 19005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// Server side implementation of brillo audio service. 20005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 21005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan#include "brillo_audio_service.h" 22005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 23005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathannamespace brillo { 24005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 25005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathanclass BrilloAudioServiceImpl : public BrilloAudioService { 26005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan public: 27005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan ~BrilloAudioServiceImpl() = default; 28005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 29005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan // From AIDL. 30005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan Status GetDevices(int flag, std::vector<int>* _aidl_return) override; 31005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan Status SetDevice(int usage, int config) override; 32c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan Status GetMaxVolumeSteps(int stream, int* _aidl_return) override; 33c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan Status SetMaxVolumeSteps(int stream, int max_steps) override; 34c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan Status SetVolumeIndex(int stream, int device, int index) override; 35c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan Status GetVolumeIndex(int stream, int device, int* _aidl_return) override; 36c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan Status GetVolumeControlStream(int* _aidl_return) override; 37c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan Status SetVolumeControlStream(int stream) override; 38c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan Status IncrementVolume() override; 39c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan Status DecrementVolume() override; 40005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan Status RegisterServiceCallback( 41005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan const android::sp<IAudioServiceCallback>& callback) override; 42005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan Status UnregisterServiceCallback( 43005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan const android::sp<IAudioServiceCallback>& callback) override; 44005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 45c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan // Register daemon handlers. 46005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan // 47005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan // |audio_device_handler| is a weak pointer to an audio device handler object. 48c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan // |audio_volume_handler| is a weak pointer to an audio volume handler object. 49c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan void RegisterHandlers( 50c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan std::weak_ptr<AudioDeviceHandler> audio_device_handler, 51c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan std::weak_ptr<AudioVolumeHandler> audio_volume_handler) override; 52005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 53005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan // Callback to be called when a device is connected. 54005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan // 55005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan // |devices| is a vector of ints representing the audio_devices_t. 56005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan void OnDevicesConnected(const std::vector<int>& device) override; 57005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 58005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan // Callback to be called when a device is disconnected. 59005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan // 60005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan // |devices| is a vector of ints representing the audio_devices_t. 61005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan void OnDevicesDisconnected(const std::vector<int>& device) override; 62005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 63c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan // Callback to be called when volume is changed. 64c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan // 65c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan // |stream| is an int representing the stream. 66c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan // |previous_index| is the volume index before the key press. 67c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan // |current_index| is the volume index after the key press. 68c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan void OnVolumeChanged(audio_stream_type_t stream, 69c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan int previous_index, 70c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan int current_index) override; 71c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan 72005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan private: 73005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan // A weak pointer to the audio device handler. 74005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan std::weak_ptr<AudioDeviceHandler> audio_device_handler_; 75c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan // A weak pointer to the audio volume handler. 76c777981a7673bb43b594a39ab9beba7ec5827be4Ralph Nathan std::weak_ptr<AudioVolumeHandler> audio_volume_handler_; 77005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan // List of all callbacks objects registered with the service. 78005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan std::set<android::sp<IAudioServiceCallback> > callbacks_set_; 79005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan}; 80005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 81005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} // namespace brillo 82005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 83005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan#endif // BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_SERVICE_IMPL_H_ 84