1 /*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
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 #include "audio_proxy_common_fun_test.h"
17 #include <climits>
18 #include <unistd.h>
19 #include <gmock/gmock.h>
20 #include <gtest/gtest.h>
21 #include "hdf_remote_service.h"
22
23 namespace comfun {
GetDynamicLibHandle(const std::string path)24 void *GetDynamicLibHandle(const std::string path)
25 {
26 char absPath[PATH_MAX] = {0};
27 if (realpath(path.c_str(), absPath) == nullptr) {
28 return nullptr;
29 }
30 void *handleSo = dlopen(absPath, RTLD_LAZY);
31 if (handleSo == nullptr) {
32 return nullptr;
33 }
34 return handleSo;
35 }
36
InitPort(struct AudioPort & portIndex)37 int32_t InitPort(struct AudioPort &portIndex)
38 {
39 portIndex.dir = PORT_OUT;
40 portIndex.portId = 1;
41 portIndex.portName = "usb";
42 return HDF_SUCCESS;
43 }
44
InitHwRender(struct AudioHwRender & hwRender,const struct AudioDeviceDescriptor & desc,const struct AudioSampleAttributes & attrs)45 int32_t InitHwRender(struct AudioHwRender &hwRender, const struct AudioDeviceDescriptor &desc,
46 const struct AudioSampleAttributes &attrs)
47 {
48 hwRender.renderParam.renderMode.hwInfo.deviceDescript = desc;
49 hwRender.renderParam.frameRenderMode.attrs = attrs;
50 hwRender.renderParam.renderMode.ctlParam.audioGain.gainMax = 15; // gainMax 15
51 hwRender.renderParam.renderMode.ctlParam.audioGain.gainMin = 0;
52 hwRender.renderParam.frameRenderMode.frames = 0;
53 hwRender.renderParam.frameRenderMode.time.tvNSec = 0;
54 hwRender.renderParam.frameRenderMode.time.tvSec = 0;
55 hwRender.renderParam.frameRenderMode.byteRate = DEFAULT_RENDER_SAMPLING_RATE;
56 hwRender.renderParam.frameRenderMode.periodSize = DEEP_BUFFER_RENDER_PERIOD_SIZE;
57 hwRender.renderParam.frameRenderMode.periodCount = DEEP_BUFFER_RENDER_PERIOD_COUNT;
58 hwRender.renderParam.frameRenderMode.attrs.period = attrs.period;
59 hwRender.renderParam.frameRenderMode.attrs.frameSize = attrs.frameSize;
60 hwRender.renderParam.frameRenderMode.attrs.startThreshold = attrs.startThreshold;
61 hwRender.renderParam.frameRenderMode.attrs.stopThreshold = attrs.stopThreshold;
62 hwRender.renderParam.frameRenderMode.attrs.silenceThreshold = attrs.silenceThreshold;
63 hwRender.renderParam.frameRenderMode.attrs.isBigEndian = attrs.isBigEndian;
64 hwRender.renderParam.frameRenderMode.attrs.isSignedData = attrs.isSignedData;
65 return HDF_SUCCESS;
66 }
67
InitHwCapture(struct AudioHwCapture & hwCapture,const struct AudioDeviceDescriptor & desc,const struct AudioSampleAttributes & attrs)68 int32_t InitHwCapture(struct AudioHwCapture &hwCapture, const struct AudioDeviceDescriptor &desc,
69 const struct AudioSampleAttributes &attrs)
70 {
71 hwCapture.captureParam.captureMode.hwInfo.deviceDescript = desc;
72 hwCapture.captureParam.frameCaptureMode.attrs = attrs;
73 hwCapture.captureParam.captureMode.ctlParam.audioGain.gainMax = 15; // gainMax 15
74 hwCapture.captureParam.captureMode.ctlParam.audioGain.gainMin = 0;
75 hwCapture.captureParam.frameCaptureMode.frames = 0;
76 hwCapture.captureParam.frameCaptureMode.time.tvNSec = 0;
77 hwCapture.captureParam.frameCaptureMode.time.tvSec = 0;
78 hwCapture.captureParam.frameCaptureMode.byteRate = DEFAULT_RENDER_SAMPLING_RATE;
79 hwCapture.captureParam.frameCaptureMode.periodSize = DEEP_BUFFER_RENDER_PERIOD_SIZE;
80 hwCapture.captureParam.frameCaptureMode.periodCount = DEEP_BUFFER_RENDER_PERIOD_COUNT;
81 hwCapture.captureParam.frameCaptureMode.attrs.period = attrs.period;
82 hwCapture.captureParam.frameCaptureMode.attrs.frameSize = attrs.frameSize;
83 hwCapture.captureParam.frameCaptureMode.attrs.startThreshold = attrs.startThreshold;
84 hwCapture.captureParam.frameCaptureMode.attrs.stopThreshold = attrs.stopThreshold;
85 hwCapture.captureParam.frameCaptureMode.attrs.silenceThreshold = attrs.silenceThreshold;
86 hwCapture.captureParam.frameCaptureMode.attrs.isBigEndian = attrs.isBigEndian;
87 hwCapture.captureParam.frameCaptureMode.attrs.isSignedData = attrs.isSignedData;
88 return HDF_SUCCESS;
89 }
90
InitAttrsCommon(struct AudioSampleAttributes & attrs)91 void InitAttrsCommon(struct AudioSampleAttributes &attrs)
92 {
93 /* Initialization of audio parameters for playback */
94 attrs.sampleRate = AUDIO_SAMPLE_RATE_48K;
95 }
96
InitAttrs(struct AudioSampleAttributes & attrs)97 int32_t InitAttrs(struct AudioSampleAttributes &attrs)
98 {
99 InitAttrsCommon(attrs);
100 attrs.format = AUDIO_FORMAT_PCM_32_BIT;
101 attrs.channelCount = AUDIO_CHANNELCOUNT;
102 attrs.interleaved = 1;
103 attrs.type = AUDIO_IN_MEDIA;
104 attrs.silenceThreshold = 0;
105 return HDF_SUCCESS;
106 }
107
InitDevDesc(struct AudioDeviceDescriptor & devDesc)108 int32_t InitDevDesc(struct AudioDeviceDescriptor &devDesc)
109 {
110 /* Initialization of audio parameters for playback */
111 devDesc.portId = 0;
112 devDesc.pins = PIN_OUT_SPEAKER;
113 devDesc.desc = NULL;
114 return HDF_SUCCESS;
115 }
116
InitDevDesc(struct AudioDeviceDescriptor & devDesc,const uint32_t portId,int pins)117 int32_t InitDevDesc(struct AudioDeviceDescriptor &devDesc, const uint32_t portId, int pins)
118 {
119 devDesc.portId = portId;
120 devDesc.pins = (enum AudioPortPin)pins;
121 devDesc.desc = nullptr;
122 return HDF_SUCCESS;
123 }
124
InitAttrsCapture(struct AudioSampleAttributes & attrs)125 int32_t InitAttrsCapture(struct AudioSampleAttributes &attrs)
126 {
127 InitAttrsCommon(attrs);
128 attrs.format = AUDIO_FORMAT_PCM_16_BIT;
129 attrs.channelCount = AUDIO_CAPTURE_CHANNELCOUNT;
130 attrs.silenceThreshold = SILENCE_THRESHOLD;
131 return HDF_SUCCESS;
132 }
133
InitDevDescCapture(struct AudioDeviceDescriptor & devDesc)134 int32_t InitDevDescCapture(struct AudioDeviceDescriptor &devDesc)
135 {
136 /* Initialization of audio parameters for playback */
137 devDesc.portId = 0;
138 devDesc.pins = PIN_IN_MIC;
139 devDesc.desc = NULL;
140 return HDF_SUCCESS;
141 }
142
AudioRenderCallbackUtTest(enum AudioCallbackType type,void * reserved,void * cookie)143 int32_t AudioRenderCallbackUtTest(enum AudioCallbackType type, void *reserved, void *cookie)
144 {
145 (void)reserved;
146 (void)cookie;
147 switch (type) {
148 case AUDIO_NONBLOCK_WRITE_COMPELETED:
149 return HDF_SUCCESS;
150 case AUDIO_RENDER_FULL:
151 return HDF_SUCCESS;
152 case AUDIO_FLUSH_COMPLETED:
153 return HDF_SUCCESS;
154 case AUDIO_ERROR_OCCUR:
155 return HDF_FAILURE;
156 case AUDIO_DRAIN_COMPELETED:
157 return HDF_FAILURE;
158 default:
159 return HDF_FAILURE;
160 }
161 return HDF_FAILURE;
162 }
163
SwitchAdapter(struct AudioAdapterDescriptor * descs,const std::string & adapterNameCase,int portFlag,struct AudioPort * & audioPort,int size)164 int32_t SwitchAdapter(struct AudioAdapterDescriptor *descs, const std::string &adapterNameCase,
165 int portFlag, struct AudioPort *&audioPort, int size)
166 {
167 if (descs == nullptr || size > ADAPTER_COUNT) {
168 return HDF_FAILURE;
169 }
170
171 for (int index = 0; index < size; index++) {
172 struct AudioAdapterDescriptor *desc = &descs[index];
173 if (desc == nullptr || desc->adapterName == nullptr) {
174 continue;
175 }
176 if (strcmp(desc->adapterName, adapterNameCase.c_str())) {
177 continue;
178 }
179 for (uint32_t port = 0; port < desc->portNum; port++) {
180 if (desc->ports[port].dir == portFlag) {
181 audioPort = &desc->ports[port];
182 return index;
183 }
184 }
185 }
186 return HDF_FAILURE;
187 }
188
GetAdapters(TestAudioManager * manager,struct AudioAdapterDescriptor ** descs,int & size)189 int32_t GetAdapters(TestAudioManager *manager, struct AudioAdapterDescriptor **descs, int &size)
190 {
191 int32_t ret = -1;
192 if (descs == nullptr) {
193 return AUDIO_HAL_ERR_INVALID_PARAM;
194 }
195 ret = manager->GetAllAdapters(manager, descs, &size);
196 if (ret < 0) {
197 return ret;
198 }
199 if (*descs == nullptr) {
200 return AUDIO_HAL_ERR_INTERNAL;
201 }
202 return AUDIO_HAL_SUCCESS;
203 }
204
GetLoadAdapter(TestAudioManager * manager,int portType,const std::string & adapterName,struct AudioAdapter ** adapter,struct AudioPort * & audioPort)205 int32_t GetLoadAdapter(TestAudioManager *manager, int portType,
206 const std::string &adapterName, struct AudioAdapter **adapter, struct AudioPort *&audioPort)
207 {
208 int32_t ret = -1;
209 int size = 0;
210 struct AudioAdapterDescriptor *desc = nullptr;
211 struct AudioAdapterDescriptor *descs = nullptr;
212 if (adapter == nullptr) {
213 return AUDIO_HAL_ERR_INVALID_PARAM;
214 }
215 ret = GetAdapters(manager, &descs, size);
216 if (ret < 0) {
217 return ret;
218 }
219 if (descs == nullptr) {
220 return AUDIO_HAL_ERR_INTERNAL;
221 }
222
223 int index = SwitchAdapter(descs, adapterName, portType, audioPort, size);
224 if (index < 0) {
225 return AUDIO_HAL_ERR_INTERNAL;
226 }
227 desc = &descs[index];
228 if (desc == nullptr) {
229 return AUDIO_HAL_ERR_INVALID_PARAM;
230 }
231 ret = manager->LoadAdapter(manager, desc, adapter);
232 if (ret < 0) {
233 return ret;
234 }
235 if (*adapter == nullptr) {
236 return AUDIO_HAL_ERR_INTERNAL;
237 }
238 return AUDIO_HAL_SUCCESS;
239 }
240 }
241