1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ANDROID_EFFECT_UUID_H_
18 #define ANDROID_EFFECT_UUID_H_
19 
20 #include <aidl/android/hardware/audio/effect/Descriptor.h>
21 #include <aidl/android/media/audio/common/AudioUuid.h>
22 #include <android-base/no_destructor.h>
23 
24 namespace aidl::android::hardware::audio::effect {
25 
26 using ::aidl::android::media::audio::common::AudioUuid;
27 
stringToUuid(const char * str)28 inline AudioUuid stringToUuid(const char* str) {
29     AudioUuid uuid{};
30     uint32_t tmp[10];
31     if (!str || sscanf(str, "%08x-%04x-%04x-%04x-%02x%02x%02x%02x%02x%02x", tmp,
32                        tmp + 1, tmp + 2, tmp + 3, tmp + 4, tmp + 5, tmp + 6,
33                        tmp + 7, tmp + 8, tmp + 9) < 10) {
34       return uuid;
35     }
36 
37     uuid.timeLow = (uint32_t)tmp[0];
38     uuid.timeMid = (uint16_t)tmp[1];
39     uuid.timeHiAndVersion = (uint16_t)tmp[2];
40     uuid.clockSeq = (uint16_t)tmp[3];
41     uuid.node.insert(uuid.node.end(), {(uint8_t)tmp[4], (uint8_t)tmp[5], (uint8_t)tmp[6],
42                                        (uint8_t)tmp[7], (uint8_t)tmp[8], (uint8_t)tmp[9]});
43     return uuid;
44 }
45 
46 inline const char* const& kEffectTypeUuidAcousticEchoCanceler =
47     Descriptor::EFFECT_TYPE_UUID_AEC;
48 inline const char* const& kEffectTypeUuidAutomaticGainControlV1 =
49     Descriptor::EFFECT_TYPE_UUID_AGC1;
50 inline const char* const& kEffectTypeUuidAutomaticGainControlV2 =
51     Descriptor::EFFECT_TYPE_UUID_AGC2;
52 inline const char* const& kEffectTypeUuidBassBoost =
53     Descriptor::EFFECT_TYPE_UUID_BASS_BOOST;
54 inline const char* const& kEffectTypeUuidDownmix =
55     Descriptor::EFFECT_TYPE_UUID_DOWNMIX;
56 inline const char* const& kEffectTypeUuidDynamicsProcessing =
57     Descriptor::EFFECT_TYPE_UUID_DYNAMICS_PROCESSING;
58 inline const char* const& kEffectTypeUuidEnvReverb =
59     Descriptor::EFFECT_TYPE_UUID_ENV_REVERB;
60 inline const char* const& kEffectTypeUuidEqualizer =
61     Descriptor::EFFECT_TYPE_UUID_EQUALIZER;
62 inline const char* const& kEffectTypeUuidHapticGenerator =
63     Descriptor::EFFECT_TYPE_UUID_HAPTIC_GENERATOR;
64 inline const char* const& kEffectTypeUuidLoudnessEnhancer =
65     Descriptor::EFFECT_TYPE_UUID_LOUDNESS_ENHANCER;
66 inline const char* const& kEffectTypeUuidNoiseSuppression =
67     Descriptor::EFFECT_TYPE_UUID_NS;
68 inline const char* const& kEffectTypeUuidPresetReverb =
69     Descriptor::EFFECT_TYPE_UUID_PRESET_REVERB;
70 inline const char* const& kEffectTypeUuidSpatializer =
71     Descriptor::EFFECT_TYPE_UUID_SPATIALIZER;
72 inline const char* const& kEffectTypeUuidVirtualizer =
73     Descriptor::EFFECT_TYPE_UUID_VIRTUALIZER;
74 inline const char* const& kEffectTypeUuidVisualizer =
75     Descriptor::EFFECT_TYPE_UUID_VISUALIZER;
76 inline const char* const& kEffectTypeUuidVolume =
77     Descriptor::EFFECT_TYPE_UUID_VOLUME;
78 
79 constexpr char kEffectImplUuidAcousticEchoCancelerSw[] = "bb392ec0-8d4d-11e0-a896-0002a5d5c51b";
80 constexpr char kEffectImplUuidAutomaticGainControlV1Sw[] = "aa8130e0-66fc-11e0-bad0-0002a5d5c51b";
81 constexpr char kEffectImplUuidAutomaticGainControlV2Sw[] = "89f38e65-d4d2-4d64-ad0e-2b3e799ea886";
82 constexpr char kEffectImplUuidBassBoostSw[] = "fa8181f2-588b-11ed-9b6a-0242ac120002";
83 constexpr char kEffectImplUuidBassBoostBundle[] = "8631f300-72e2-11df-b57e-0002a5d5c51b";
84 constexpr char kEffectImplUuidBassBoostProxy[] = "14804144-a5ee-4d24-aa88-0002a5d5c51b";
85 constexpr char kEffectImplUuidDownmixSw[] = "fa8187ba-588b-11ed-9b6a-0242ac120002";
86 constexpr char kEffectImplUuidDownmix[] = "93f04452-e4fe-41cc-91f9-e475b6d1d69f";
87 constexpr char kEffectImplUuidDynamicsProcessingSw[] = "fa818d78-588b-11ed-9b6a-0242ac120002";
88 constexpr char kEffectImplUuidDynamicsProcessing[] = "e0e6539b-1781-7261-676f-6d7573696340";
89 constexpr char kEffectImplUuidEqualizerSw[] = "0bed4300-847d-11df-bb17-0002a5d5c51b";
90 constexpr char kEffectImplUuidEqualizerBundle[] = "ce772f20-847d-11df-bb17-0002a5d5c51b";
91 constexpr char kEffectImplUuidEqualizerProxy[] = "c8e70ecd-48ca-456e-8a4f-0002a5d5c51b";
92 constexpr char kEffectImplUuidHapticGeneratorSw[] = "fa819110-588b-11ed-9b6a-0242ac120002";
93 constexpr char kEffectImplUuidHapticGenerator[] = "97c4acd1-8b82-4f2f-832e-c2fe5d7a9931";
94 constexpr char kEffectImplUuidLoudnessEnhancerSw[] = "fa819610-588b-11ed-9b6a-0242ac120002";
95 constexpr char kEffectImplUuidLoudnessEnhancer[] = "fa415329-2034-4bea-b5dc-5b381c8d1e2c";
96 constexpr char kEffectImplUuidEnvReverbSw[] = "fa819886-588b-11ed-9b6a-0242ac120002";
97 constexpr char kEffectImplUuidAuxEnvReverb[] = "4a387fc0-8ab3-11df-8bad-0002a5d5c51b";
98 constexpr char kEffectImplUuidInsertEnvReverb[] = "c7a511a0-a3bb-11df-860e-0002a5d5c51b";
99 constexpr char kEffectImplUuidNoiseSuppressionSw[] = "c06c8400-8e06-11e0-9cb6-0002a5d5c51b";
100 constexpr char kEffectImplUuidPresetReverbSw[] = "fa8199c6-588b-11ed-9b6a-0242ac120002";
101 constexpr char kEffectImplUuidAuxPresetReverb[] = "f29a1400-a3bb-11df-8ddc-0002a5d5c51b";
102 constexpr char kEffectImplUuidInsertPresetReverb[] = "172cdf00-a3bc-11df-a72f-0002a5d5c51b";
103 constexpr char kEffectImplUuidVirtualizerSw[] = "fa819d86-588b-11ed-9b6a-0242ac120002";
104 constexpr char kEffectImplUuidVirtualizerBundle[] = "1d4033c0-8557-11df-9f2d-0002a5d5c51b";
105 constexpr char kEffectImplUuidVirtualizerProxy[] = "d3467faa-acc7-4d34-acaf-0002a5d5c51b";
106 constexpr char kEffectImplUuidVisualizerSw[] = "fa81a0f6-588b-11ed-9b6a-0242ac120002";
107 constexpr char kEffectImplUuidVisualizer[] = "d069d9e0-8329-11df-9168-0002a5d5c51b";
108 constexpr char kEffectImplUuidVisualizerProxy[] = "1d0a1a53-7d5d-48f2-8e71-27fbd10d842c";
109 constexpr char kEffectImplUuidVolumeSw[] = "fa81a718-588b-11ed-9b6a-0242ac120002";
110 constexpr char kEffectImplUuidVolumeBundle[] = "119341a0-8469-11df-81f9-0002a5d5c51b";
111 constexpr char kEffectImplUuidSpatializerSw[] = "fa81a880-588b-11ed-9b6a-0242ac120002";
112 
113 
114 constexpr char kEffectUuidNull[] = "ec7178ec-e5e1-4432-a3f4-4657e6795210";
115 constexpr char kEffectUuidZero[] = "00000000-0000-0000-0000-000000000000";
116 constexpr char kEffectTypeUuidExtension[] = "fa81dbde-588b-11ed-9b6a-0242ac120002";
117 constexpr char kEffectImplUuidExtension[] = "fa81dd00-588b-11ed-9b6a-0242ac120002";
118 
119 #define EFFECT_TYPE_UUID_LIST_DEF(V)  \
120     V(TypeUuidAcousticEchoCanceler)   \
121     V(TypeUuidAutomaticGainControlV1) \
122     V(TypeUuidAutomaticGainControlV2) \
123     V(TypeUuidBassBoost)              \
124     V(TypeUuidDownmix)                \
125     V(TypeUuidDynamicsProcessing)     \
126     V(TypeUuidEqualizer)              \
127     V(TypeUuidExtension)              \
128     V(TypeUuidHapticGenerator)        \
129     V(TypeUuidLoudnessEnhancer)       \
130     V(TypeUuidEnvReverb)              \
131     V(TypeUuidPresetReverb)           \
132     V(TypeUuidNoiseSuppression)       \
133     V(TypeUuidSpatializer)            \
134     V(TypeUuidVirtualizer)            \
135     V(TypeUuidVisualizer)             \
136     V(TypeUuidVolume)
137 
138 #define EFFECT_IMPL_UUID_LIST_DEF(V)    \
139     V(ImplUuidAcousticEchoCancelerSw)   \
140     V(ImplUuidAutomaticGainControlV1Sw) \
141     V(ImplUuidAutomaticGainControlV2Sw) \
142     V(ImplUuidBassBoostSw)              \
143     V(ImplUuidBassBoostBundle)          \
144     V(ImplUuidBassBoostProxy)           \
145     V(ImplUuidDownmixSw)                \
146     V(ImplUuidDownmix)                  \
147     V(ImplUuidDynamicsProcessingSw)     \
148     V(ImplUuidDynamicsProcessing)       \
149     V(ImplUuidEqualizerSw)              \
150     V(ImplUuidEqualizerBundle)          \
151     V(ImplUuidEqualizerProxy)           \
152     V(ImplUuidExtension)                \
153     V(ImplUuidHapticGeneratorSw)        \
154     V(ImplUuidHapticGenerator)          \
155     V(ImplUuidLoudnessEnhancerSw)       \
156     V(ImplUuidLoudnessEnhancer)         \
157     V(ImplUuidEnvReverbSw)              \
158     V(ImplUuidAuxEnvReverb)             \
159     V(ImplUuidInsertEnvReverb)          \
160     V(ImplUuidNoiseSuppressionSw)       \
161     V(ImplUuidPresetReverbSw)           \
162     V(ImplUuidAuxPresetReverb)          \
163     V(ImplUuidInsertPresetReverb)       \
164     V(ImplUuidVirtualizerSw)            \
165     V(ImplUuidVirtualizerBundle)        \
166     V(ImplUuidVirtualizerProxy)         \
167     V(ImplUuidVisualizerSw)             \
168     V(ImplUuidVisualizer)               \
169     V(ImplUuidVisualizerProxy)          \
170     V(ImplUuidVolumeSw)                 \
171     V(ImplUuidVolumeBundle)             \
172     V(ImplUuidSpatializerSw)
173 
174 #define EFFECT_OTHER_UUID_LIST_DEF(V) \
175     V(UuidNull)                           \
176     V(UuidZero)                           \
177 
178 #define GENERATE_UUID_GETTER_V(symbol)                            \
179     inline const AudioUuid& getEffect##symbol() {                 \
180       static const ::android::base::NoDestructor<AudioUuid> uuid( \
181           stringToUuid(kEffect##symbol));                         \
182       return *uuid;                                               \
183     }
184 
185 // Generate all the UUID getter functions:
186 EFFECT_TYPE_UUID_LIST_DEF(GENERATE_UUID_GETTER_V)
187 
188 EFFECT_IMPL_UUID_LIST_DEF(GENERATE_UUID_GETTER_V)
189 
190 EFFECT_OTHER_UUID_LIST_DEF(GENERATE_UUID_GETTER_V)
191 
192 }  // namespace aidl::android::hardware::audio::effect
193 
194 #endif  // ANDROID_EFFECT_UUID_H_