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