Merge "Add interfaces for BT AVC feature (AVRCP Target)" into tizen
[platform/core/connectivity/bluetooth-frwk.git] / bt-service-adaptation / services / audio / bt-service-absolute-volume.c
1 /*
2  * Bluetooth-frwk
3  *
4  * Copyright (c) 2020 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact:  Dohyun Pyun <dh79.pyun@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *              http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #include <vconf.h>
23
24 #include <oal-event.h>
25 #include <oal-hardware.h>
26 #include <oal-audio-src.h>
27
28 #include "bt-service-common.h"
29 #include "bt-service-audio-common.h"
30
31 static unsigned int absolute_volume = 0;
32 static unsigned int bt_volume = 0;
33 static int avc_mode = BT_AVC_OFF;
34
35 int _bt_audio_set_absolute_volume(unsigned int volume)
36 {
37         int result = BLUETOOTH_ERROR_NONE;
38
39         /* 1. Translate the absolute volume to bt volume */
40
41         /* Convert system gain to BT
42                 BT volume range : 0 ~ 127
43                 system volume range : 0 ~ 150 */
44
45         bt_volume = 127 * volume / 150;
46
47         /* volume table
48                 system volume : 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150
49                 avrcp_ volume : 0  9 17 26 34 43 51 60 68 77  85  94 102 111 119 127 */
50
51         if (bt_volume > 0 && bt_volume < 127)
52                 bt_volume++;
53
54         /* 2. Notify the bt_volume to transport (BT Headset) */
55
56         /* 3. Notify the avc mode to the pulseaudio if it is needed */
57
58         return result;
59 }
60
61 /* Just return the absolute_volume value */
62 int _bt_audio_get_absolute_volume(unsigned int *volume)
63 {
64         int result = BLUETOOTH_ERROR_NONE;
65
66         *volume = absolute_volume;
67
68         return result;
69 }
70
71 int _bt_audio_is_avc_activated(bool *activated)
72 {
73         *activated = (avc_mode == BT_AVC_OFF) ? false : true;
74
75         return BLUETOOTH_ERROR_NONE;
76 }
77
78 /* 1. When a2dp headset is connected, we should set 'AVC' mode into pulseaudio */
79 /* 2. If the avc mode is changed, we should inform 'AVC' mode to pulseaudio */
80 /* 3. If BT is off, we should send 'AVC' off mode event for application */
81 /* 4. If BT A2DP is disconnected, we should send 'AVC' off mode event for application */
82