1 // Copyright 2016 The Android Open Source Project
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //      http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 //
15 
16 #ifndef BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_SERVICE_H_
17 #define BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_SERVICE_H_
18 
19 #include "android/brillo/brilloaudioservice/BnBrilloAudioService.h"
20 
21 #include <memory>
22 #include <set>
23 #include <vector>
24 
25 #include <binder/Status.h>
26 
27 #include "android/brillo/brilloaudioservice/IAudioServiceCallback.h"
28 #include "audio_device_handler.h"
29 #include "audio_volume_handler.h"
30 
31 using android::binder::Status;
32 using android::brillo::brilloaudioservice::BnBrilloAudioService;
33 using android::brillo::brilloaudioservice::IAudioServiceCallback;
34 
35 namespace brillo {
36 
37 class BrilloAudioService : public BnBrilloAudioService {
38  public:
~BrilloAudioService()39   virtual ~BrilloAudioService() {}
40 
41   // From AIDL.
42   virtual Status GetDevices(int flag, std::vector<int>* _aidl_return) = 0;
43   virtual Status SetDevice(int usage, int config) = 0;
44   virtual Status GetMaxVolumeSteps(int stream, int* _aidl_return) = 0;
45   virtual Status SetMaxVolumeSteps(int stream, int max_steps) = 0;
46   virtual Status SetVolumeIndex(int stream, int device, int index) = 0;
47   virtual Status GetVolumeIndex(int stream, int device, int* _aidl_return) = 0;
48   virtual Status GetVolumeControlStream(int* _aidl_return) = 0;
49   virtual Status SetVolumeControlStream(int stream) = 0;
50   virtual Status IncrementVolume() = 0;
51   virtual Status DecrementVolume() = 0;
52   virtual Status RegisterServiceCallback(
53       const android::sp<IAudioServiceCallback>& callback) = 0;
54   virtual Status UnregisterServiceCallback(
55       const android::sp<IAudioServiceCallback>& callback) = 0;
56 
57   // Register daemon handlers.
58   //
59   // |audio_device_handler| is a weak pointer to an audio device handler object.
60   // |audio_volume_handler| is a weak pointer to an audio volume handler object.
61   virtual void RegisterHandlers(
62       std::weak_ptr<AudioDeviceHandler> audio_device_handler,
63       std::weak_ptr<AudioVolumeHandler> audio_volume_handler) = 0;
64 
65   // Callback to be called when a device is connected.
66   //
67   // |devices| is a vector of ints representing the audio_devices_t.
68   virtual void OnDevicesConnected(const std::vector<int>& device) = 0;
69 
70   // Callback to be called when a device is disconnected.
71   //
72   // |devices| is a vector of ints representing the audio_devices_t.
73   virtual void OnDevicesDisconnected(const std::vector<int>& device) = 0;
74 
75   // Callback to be called when the volume is changed.
76   //
77   // |stream| is an audio_stream_type_t representing the stream.
78   // |previous_index| is the volume index before the key press.
79   // |current_index| is the volume index after the key press.
80   virtual void OnVolumeChanged(audio_stream_type_t stream,
81                                int previous_index,
82                                int current_index) = 0;
83 };
84 
85 }  // namespace brillo
86 
87 #endif  // BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_SERVICE_H_
88