xref: /aosp_15_r20/hardware/interfaces/automotive/audiocontrol/1.0/default/AudioControl.cpp (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker #include "AudioControl.h"
2*4d7e907cSAndroid Build Coastguard Worker 
3*4d7e907cSAndroid Build Coastguard Worker #include <hidl/HidlTransportSupport.h>
4*4d7e907cSAndroid Build Coastguard Worker #include <log/log.h>
5*4d7e907cSAndroid Build Coastguard Worker 
6*4d7e907cSAndroid Build Coastguard Worker 
7*4d7e907cSAndroid Build Coastguard Worker namespace android {
8*4d7e907cSAndroid Build Coastguard Worker namespace hardware {
9*4d7e907cSAndroid Build Coastguard Worker namespace automotive {
10*4d7e907cSAndroid Build Coastguard Worker namespace audiocontrol {
11*4d7e907cSAndroid Build Coastguard Worker namespace V1_0 {
12*4d7e907cSAndroid Build Coastguard Worker namespace implementation {
13*4d7e907cSAndroid Build Coastguard Worker 
14*4d7e907cSAndroid Build Coastguard Worker 
15*4d7e907cSAndroid Build Coastguard Worker // This is the static map we're using to associate a ContextNumber with a
16*4d7e907cSAndroid Build Coastguard Worker // bus number from the audio_policy_configuration.xml setup.  Every valid context needs
17*4d7e907cSAndroid Build Coastguard Worker // to be mapped to a bus address that actually exists in the platforms configuration.
18*4d7e907cSAndroid Build Coastguard Worker #define ARRAY_SIZE(a) (sizeof(a) / sizeof(*a))  // Would be nice if this were common...
19*4d7e907cSAndroid Build Coastguard Worker static int sContextToBusMap[] = {
20*4d7e907cSAndroid Build Coastguard Worker     -1,     // INVALID
21*4d7e907cSAndroid Build Coastguard Worker      0,     // MUSIC_CONTEXT
22*4d7e907cSAndroid Build Coastguard Worker      1,     // NAVIGATION_CONTEXT
23*4d7e907cSAndroid Build Coastguard Worker      2,     // VOICE_COMMAND_CONTEXT
24*4d7e907cSAndroid Build Coastguard Worker      3,     // CALL_RING_CONTEXT
25*4d7e907cSAndroid Build Coastguard Worker      4,     // CALL_CONTEXT
26*4d7e907cSAndroid Build Coastguard Worker      5,     // ALARM_CONTEXT
27*4d7e907cSAndroid Build Coastguard Worker      6,     // NOTIFICATION_CONTEXT
28*4d7e907cSAndroid Build Coastguard Worker      7,     // SYSTEM_SOUND_CONTEXT
29*4d7e907cSAndroid Build Coastguard Worker };
30*4d7e907cSAndroid Build Coastguard Worker static const unsigned sContextMapSize = ARRAY_SIZE(sContextToBusMap);
31*4d7e907cSAndroid Build Coastguard Worker static const unsigned sContextCount = sContextMapSize - 1;  // Less one for the INVALID entry
32*4d7e907cSAndroid Build Coastguard Worker static const unsigned sContextNumberMax = sContextCount;    // contextNumber is counted from 1
33*4d7e907cSAndroid Build Coastguard Worker 
34*4d7e907cSAndroid Build Coastguard Worker 
AudioControl()35*4d7e907cSAndroid Build Coastguard Worker AudioControl::AudioControl() {
36*4d7e907cSAndroid Build Coastguard Worker };
37*4d7e907cSAndroid Build Coastguard Worker 
38*4d7e907cSAndroid Build Coastguard Worker 
getBusForContext(ContextNumber ctxt)39*4d7e907cSAndroid Build Coastguard Worker Return<int32_t> AudioControl::getBusForContext(ContextNumber ctxt) {
40*4d7e907cSAndroid Build Coastguard Worker     unsigned contextNumber = static_cast<unsigned>(ctxt);
41*4d7e907cSAndroid Build Coastguard Worker     if (contextNumber > sContextNumberMax) {
42*4d7e907cSAndroid Build Coastguard Worker         ALOGE("Unexpected context number %d (max expected is %d)", contextNumber, sContextCount);
43*4d7e907cSAndroid Build Coastguard Worker         return -1;
44*4d7e907cSAndroid Build Coastguard Worker     } else {
45*4d7e907cSAndroid Build Coastguard Worker         return sContextToBusMap[contextNumber];
46*4d7e907cSAndroid Build Coastguard Worker     }
47*4d7e907cSAndroid Build Coastguard Worker }
48*4d7e907cSAndroid Build Coastguard Worker 
49*4d7e907cSAndroid Build Coastguard Worker 
setBalanceTowardRight(float value)50*4d7e907cSAndroid Build Coastguard Worker Return<void> AudioControl::setBalanceTowardRight(float value) {
51*4d7e907cSAndroid Build Coastguard Worker     // For completeness, lets bounds check the input...
52*4d7e907cSAndroid Build Coastguard Worker     if ((value > 1.0f) || (value < -1.0f)) {
53*4d7e907cSAndroid Build Coastguard Worker         ALOGE("Balance value out of range -1 to 1 at %0.2f", value);
54*4d7e907cSAndroid Build Coastguard Worker     } else {
55*4d7e907cSAndroid Build Coastguard Worker         // Just log in this default mock implementation
56*4d7e907cSAndroid Build Coastguard Worker         ALOGI("Balance set to %0.2f", value);
57*4d7e907cSAndroid Build Coastguard Worker     }
58*4d7e907cSAndroid Build Coastguard Worker     return Void();
59*4d7e907cSAndroid Build Coastguard Worker }
60*4d7e907cSAndroid Build Coastguard Worker 
61*4d7e907cSAndroid Build Coastguard Worker 
setFadeTowardFront(float value)62*4d7e907cSAndroid Build Coastguard Worker Return<void> AudioControl::setFadeTowardFront(float value) {
63*4d7e907cSAndroid Build Coastguard Worker     // For completeness, lets bounds check the input...
64*4d7e907cSAndroid Build Coastguard Worker     if ((value > 1.0f) || (value < -1.0f)) {
65*4d7e907cSAndroid Build Coastguard Worker         ALOGE("Fader value out of range -1 to 1 at %0.2f", value);
66*4d7e907cSAndroid Build Coastguard Worker     } else {
67*4d7e907cSAndroid Build Coastguard Worker         // Just log in this default mock implementation
68*4d7e907cSAndroid Build Coastguard Worker         ALOGI("Fader set to %0.2f", value);
69*4d7e907cSAndroid Build Coastguard Worker     }
70*4d7e907cSAndroid Build Coastguard Worker     return Void();
71*4d7e907cSAndroid Build Coastguard Worker }
72*4d7e907cSAndroid Build Coastguard Worker 
73*4d7e907cSAndroid Build Coastguard Worker }  // namespace implementation
74*4d7e907cSAndroid Build Coastguard Worker }  // namespace V1_0
75*4d7e907cSAndroid Build Coastguard Worker }  // namespace audiocontrol
76*4d7e907cSAndroid Build Coastguard Worker }  // namespace automotive
77*4d7e907cSAndroid Build Coastguard Worker }  // namespace hardware
78*4d7e907cSAndroid Build Coastguard Worker }  // namespace android
79