1 /*
2 * Copyright (c) 2021 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_interface_lib_capture.h"
17 #include "osal_mem.h"
18 #include "audio_common.h"
19 #include "audio_uhdf_log.h"
20
21 #define HDF_LOG_TAG HDF_AUDIO_HAL_LIB
22
23 /* virtual mixer device */
24 #define AUDIO_REPLY_EXTEND 64
25 #define AUDIO_SIZE_FRAME_16K (16 * 1024)
26 #define AUDIO_TRYNUM 2
27 #define AUDIO_TRYNUM_TIME 3000
28 #define AUDIO_US_TO_MS 1000
29
30 /* Out Put Capture */
31 static struct AudioPcmHwParams g_hwParams;
32
SetHwParamsCapture(const struct AudioHwCaptureParam * const handleData)33 int32_t SetHwParamsCapture(const struct AudioHwCaptureParam * const handleData)
34 {
35 if (handleData == NULL) {
36 AUDIO_FUNC_LOGE("handleData is NULL!");
37 return HDF_FAILURE;
38 }
39 (void)memset_s(&g_hwParams, sizeof(struct AudioPcmHwParams), 0, sizeof(struct AudioPcmHwParams));
40 g_hwParams.streamType = AUDIO_CAPTURE_STREAM;
41 g_hwParams.channels = handleData->frameCaptureMode.attrs.channelCount;
42 g_hwParams.rate = handleData->frameCaptureMode.attrs.sampleRate;
43 g_hwParams.periodSize = handleData->frameCaptureMode.periodSize;
44 g_hwParams.periodCount = handleData->frameCaptureMode.periodCount;
45 g_hwParams.cardServiceName = (char*)handleData->captureMode.hwInfo.cardServiceName;
46 g_hwParams.format = handleData->frameCaptureMode.attrs.format;
47 g_hwParams.period = handleData->frameCaptureMode.attrs.period;
48 g_hwParams.frameSize = handleData->frameCaptureMode.attrs.frameSize;
49 g_hwParams.isBigEndian = handleData->frameCaptureMode.attrs.isBigEndian;
50 g_hwParams.isSignedData = handleData->frameCaptureMode.attrs.isSignedData;
51 g_hwParams.startThreshold = handleData->frameCaptureMode.attrs.startThreshold;
52 g_hwParams.stopThreshold = handleData->frameCaptureMode.attrs.stopThreshold;
53 g_hwParams.silenceThreshold = handleData->frameCaptureMode.attrs.silenceThreshold;
54 return HDF_SUCCESS;
55 }
56
ParamsSbufWriteBuffer(struct HdfSBuf * sBuf)57 int32_t ParamsSbufWriteBuffer(struct HdfSBuf *sBuf)
58 {
59 if (sBuf == NULL) {
60 return HDF_FAILURE;
61 }
62 if (!HdfSbufWriteUint32(sBuf, (uint32_t)g_hwParams.streamType)) {
63 return HDF_FAILURE;
64 }
65 if (!HdfSbufWriteUint32(sBuf, g_hwParams.channels)) {
66 return HDF_FAILURE;
67 }
68 if (!HdfSbufWriteUint32(sBuf, g_hwParams.rate)) {
69 return HDF_FAILURE;
70 }
71 if (!HdfSbufWriteUint32(sBuf, g_hwParams.periodSize)) {
72 return HDF_FAILURE;
73 }
74 if (!HdfSbufWriteUint32(sBuf, g_hwParams.periodCount)) {
75 return HDF_FAILURE;
76 }
77 if (!HdfSbufWriteUint32(sBuf, (uint32_t)(g_hwParams.format))) {
78 return HDF_FAILURE;
79 }
80 if (!HdfSbufWriteString(sBuf, g_hwParams.cardServiceName)) {
81 return HDF_FAILURE;
82 }
83 if (!HdfSbufWriteUint32(sBuf, g_hwParams.period)) {
84 return HDF_FAILURE;
85 }
86 if (!HdfSbufWriteUint32(sBuf, g_hwParams.frameSize)) {
87 return HDF_FAILURE;
88 }
89 if (!HdfSbufWriteUint32(sBuf, (uint32_t)(g_hwParams.isBigEndian))) {
90 return HDF_FAILURE;
91 }
92 if (!HdfSbufWriteUint32(sBuf, (uint32_t)(g_hwParams.isSignedData))) {
93 return HDF_FAILURE;
94 }
95 if (!HdfSbufWriteUint32(sBuf, g_hwParams.startThreshold)) {
96 return HDF_FAILURE;
97 }
98 if (!HdfSbufWriteUint32(sBuf, g_hwParams.stopThreshold)) {
99 return HDF_FAILURE;
100 }
101 if (!HdfSbufWriteUint32(sBuf, g_hwParams.silenceThreshold)) {
102 return HDF_FAILURE;
103 }
104 return HDF_SUCCESS;
105 }
106
AudioCtlCaptureSetPauseBuf(struct HdfSBuf * sBuf,const struct AudioHwCaptureParam * handleData)107 int32_t AudioCtlCaptureSetPauseBuf(struct HdfSBuf *sBuf, const struct AudioHwCaptureParam *handleData)
108 {
109 if (handleData == NULL || sBuf == NULL) {
110 AUDIO_FUNC_LOGE("handleData or sBuf is NULL!");
111 return HDF_FAILURE;
112 }
113 struct AudioCtlElemValue elemCaptureValue;
114 elemCaptureValue.id.cardServiceName = handleData->captureMode.hwInfo.cardServiceName;
115 elemCaptureValue.id.iface = AUDIODRV_CTL_ELEM_IFACE_MIXER;
116 elemCaptureValue.id.itemName = "Main Playback Pause";
117 elemCaptureValue.value[0] = (int32_t)handleData->captureMode.ctlParam.pause;
118 if (!HdfSbufWriteInt32(sBuf, elemCaptureValue.value[0])) {
119 AUDIO_FUNC_LOGE("CaptureSetPauseBuf pause Write Fail!");
120 return HDF_FAILURE;
121 }
122 if (!HdfSbufWriteInt32(sBuf, elemCaptureValue.id.iface)) {
123 AUDIO_FUNC_LOGE("CaptureSetPauseBuf iface Write Fail!");
124 return HDF_FAILURE;
125 }
126 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.cardServiceName)) {
127 AUDIO_FUNC_LOGE("CaptureSetPauseBuf cardServiceName Write Fail!");
128 return HDF_FAILURE;
129 }
130 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.itemName)) {
131 AUDIO_FUNC_LOGE("CaptureSetPauseBuf itemName Write Fail!");
132 return HDF_FAILURE;
133 }
134 return HDF_SUCCESS;
135 }
136
AudioCtlCaptureSetPauseStu(const struct DevHandleCapture * handle,int cmdId,const struct AudioHwCaptureParam * handleData)137 int32_t AudioCtlCaptureSetPauseStu(const struct DevHandleCapture *handle,
138 int cmdId, const struct AudioHwCaptureParam *handleData)
139 {
140 int32_t ret;
141
142 if (handle == NULL || handle->object == NULL || handleData == NULL) {
143 AUDIO_FUNC_LOGE("CaptureSetPauseStu paras is NULL!");
144 return HDF_FAILURE;
145 }
146 struct HdfIoService *service = NULL;
147 struct HdfSBuf *sBuf = AudioObtainHdfSBuf();
148 if (sBuf == NULL) {
149 AUDIO_FUNC_LOGE("CaptureSetPauseStu Failed to obtain sBuf");
150 return HDF_FAILURE;
151 }
152 ret = AudioCtlCaptureSetPauseBuf(sBuf, handleData);
153 if (ret < 0) {
154 AUDIO_FUNC_LOGE("Failed to Set Pause sBuf!");
155 AudioSbufRecycle(sBuf);
156 return ret;
157 }
158 service = (struct HdfIoService *)handle->object;
159 if (service == NULL || service->dispatcher == NULL || service->dispatcher->Dispatch == NULL) {
160 AUDIO_FUNC_LOGE("SetPauseStu Service is NULL!");
161 AudioSbufRecycle(sBuf);
162 return HDF_FAILURE;
163 }
164 cmdId = handleData->captureMode.ctlParam.pause ?
165 AUDIO_DRV_PCM_IOCTRL_PAUSE_CAPTURE : AUDIO_DRV_PCM_IOCTRL_RESUME_CAPTURE;
166 ret = service->dispatcher->Dispatch(&service->object, cmdId, sBuf, NULL);
167 AudioSbufRecycle(sBuf);
168 if (ret != HDF_SUCCESS) {
169 AUDIO_FUNC_LOGE("SetPauseStu Failed to send service call!");
170 }
171 return ret;
172 }
173
AudioCtlCaptureGetVolumeSBuf(struct HdfSBuf * sBuf,const struct AudioHwCaptureParam * handleData)174 int32_t AudioCtlCaptureGetVolumeSBuf(struct HdfSBuf *sBuf, const struct AudioHwCaptureParam *handleData)
175 {
176 if (handleData == NULL || sBuf == NULL) {
177 AUDIO_FUNC_LOGE("CaptureGetVolumeSBuf parameter is empty!");
178 return HDF_FAILURE;
179 }
180 struct AudioCtlElemValue elemCaptureValue;
181 elemCaptureValue.id.cardServiceName = handleData->captureMode.hwInfo.cardServiceName;
182 elemCaptureValue.id.iface = AUDIODRV_CTL_ELEM_IFACE_MIXER;
183 elemCaptureValue.id.itemName = "Main Capture Volume";
184 if (!HdfSbufWriteInt32(sBuf, elemCaptureValue.id.iface)) {
185 AUDIO_FUNC_LOGE("CaptureGetVolumeSBuf iface Write Fail!");
186 return HDF_FAILURE;
187 }
188 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.cardServiceName)) {
189 AUDIO_FUNC_LOGE("CaptureGetVolumeSBuf cardServiceName Write Fail!");
190 return HDF_FAILURE;
191 }
192 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.itemName)) {
193 AUDIO_FUNC_LOGE("CaptureGetVolumeSBuf itemName Write Fail!");
194 return HDF_FAILURE;
195 }
196 return HDF_SUCCESS;
197 }
198
AudioCtlCaptureGetVolume(const struct DevHandleCapture * handle,int cmdId,struct AudioHwCaptureParam * handleData)199 int32_t AudioCtlCaptureGetVolume(const struct DevHandleCapture *handle,
200 int cmdId, struct AudioHwCaptureParam *handleData)
201 {
202 int32_t ret;
203 if (handle == NULL || handle->object == NULL || handleData == NULL) {
204 AUDIO_FUNC_LOGE("CaptureGetVolume paras is NULL!");
205 return HDF_FAILURE;
206 }
207 struct HdfIoService *service = NULL;
208 struct HdfSBuf *reply = NULL;
209 struct HdfSBuf *sBuf = AudioObtainHdfSBuf();
210 if (sBuf == NULL) {
211 AUDIO_FUNC_LOGE("CaptureGetVolume Failed to obtain sBuf");
212 return HDF_FAILURE;
213 }
214 reply = AudioObtainHdfSBuf();
215 if (reply == NULL) {
216 AUDIO_FUNC_LOGE("Failed to obtain reply");
217 AudioSbufRecycle(sBuf);
218 return HDF_FAILURE;
219 }
220 ret = AudioCtlCaptureGetVolumeSBuf(sBuf, handleData);
221 if (ret < 0) {
222 AUDIO_FUNC_LOGE("Failed to Get Volume sBuf!");
223 AudioBufReplyRecycle(sBuf, reply);
224 return ret;
225 }
226 service = (struct HdfIoService *)handle->object;
227 cmdId = AUDIODRV_CTL_IOCTL_ELEM_READ_CAPTURE - CTRL_NUM;
228 ret = AudioServiceDispatch(service, cmdId, sBuf, reply);
229 if (ret != HDF_SUCCESS) {
230 AUDIO_FUNC_LOGE("GetVolume Dispatch Fail!");
231 AudioBufReplyRecycle(sBuf, reply);
232 return HDF_FAILURE;
233 }
234 int32_t elemValue = 0;
235 if (!HdfSbufReadInt32(reply, &elemValue)) {
236 AUDIO_FUNC_LOGE("Failed to Get Volume sBuf!");
237 AudioBufReplyRecycle(sBuf, reply);
238 return HDF_FAILURE;
239 }
240 AudioBufReplyRecycle(sBuf, reply);
241 handleData->captureMode.ctlParam.volume = (float)elemValue;
242 return ret;
243 }
244
AudioCtlCaptureSetVolumeSBuf(struct HdfSBuf * sBuf,const struct AudioHwCaptureParam * handleData)245 int32_t AudioCtlCaptureSetVolumeSBuf(struct HdfSBuf *sBuf, const struct AudioHwCaptureParam *handleData)
246 {
247 if (handleData == NULL || sBuf == NULL) {
248 AUDIO_FUNC_LOGE("CaptureSetVolumeSBuf parameter is empty!");
249 return HDF_FAILURE;
250 }
251 struct AudioCtlElemValue elemCaptureValue;
252 elemCaptureValue.id.cardServiceName = handleData->captureMode.hwInfo.cardServiceName;
253 elemCaptureValue.id.iface = AUDIODRV_CTL_ELEM_IFACE_MIXER;
254 elemCaptureValue.id.itemName = "Main Capture Volume";
255 elemCaptureValue.value[0] = (int32_t)handleData->captureMode.ctlParam.volume;
256 if (!HdfSbufWriteInt32(sBuf, elemCaptureValue.value[0])) {
257 AUDIO_FUNC_LOGE("CaptureSetVolumeSBuf value[0] Write Fail!");
258 return HDF_FAILURE;
259 }
260 if (!HdfSbufWriteInt32(sBuf, elemCaptureValue.id.iface)) {
261 AUDIO_FUNC_LOGE("CaptureSetVolumeSBuf iface Write Fail!");
262 return HDF_FAILURE;
263 }
264 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.cardServiceName)) {
265 AUDIO_FUNC_LOGE("CaptureSetVolumeSBuf cardServiceName Write Fail!");
266 return HDF_FAILURE;
267 }
268 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.itemName)) {
269 AUDIO_FUNC_LOGE("CaptureSetVolumeSBuf itemName Write Fail!");
270 return HDF_FAILURE;
271 }
272 return HDF_SUCCESS;
273 }
274
AudioCtlCaptureSetVolume(const struct DevHandleCapture * handle,int cmdId,const struct AudioHwCaptureParam * handleData)275 int32_t AudioCtlCaptureSetVolume(const struct DevHandleCapture *handle,
276 int cmdId, const struct AudioHwCaptureParam *handleData)
277 {
278 int32_t ret;
279 AUDIO_FUNC_LOGI();
280 if (handle == NULL || handle->object == NULL || handleData == NULL) {
281 AUDIO_FUNC_LOGE("CaptureSetVolume paras is NULL!");
282 return HDF_FAILURE;
283 }
284 struct HdfIoService *service = NULL;
285 struct HdfSBuf *reply = NULL;
286 struct HdfSBuf *sBuf = AudioObtainHdfSBuf();
287 if (sBuf == NULL) {
288 AUDIO_FUNC_LOGE("CaptureSetVolume Failed to obtain sBuf");
289 return HDF_FAILURE;
290 }
291 ret = AudioCtlCaptureSetVolumeSBuf(sBuf, handleData);
292 if (ret < 0) {
293 AUDIO_FUNC_LOGE("CaptureSetVolume Failed to Set Volume sBuf!");
294 AudioSbufRecycle(sBuf);
295 return ret;
296 }
297 service = (struct HdfIoService *)handle->object;
298 if (service == NULL || service->dispatcher == NULL || service->dispatcher->Dispatch == NULL) {
299 AUDIO_FUNC_LOGE("CaptureSetVolume Service is NULL!");
300 AudioSbufRecycle(sBuf);
301 return HDF_FAILURE;
302 }
303 cmdId = AUDIODRV_CTL_IOCTL_ELEM_WRITE_CAPTURE - CTRL_NUM;
304 ret = service->dispatcher->Dispatch(&service->object, cmdId, sBuf, reply);
305 AudioSbufRecycle(sBuf);
306 if (ret != HDF_SUCCESS) {
307 AUDIO_FUNC_LOGE("CaptureSetVolume Failed to send service call!");
308 }
309 return ret;
310 }
311
AudioCtlCaptureSetMuteSBuf(struct HdfSBuf * sBuf,const struct AudioHwCaptureParam * handleData)312 int32_t AudioCtlCaptureSetMuteSBuf(struct HdfSBuf *sBuf, const struct AudioHwCaptureParam *handleData)
313 {
314 if (handleData == NULL || sBuf == NULL) {
315 AUDIO_FUNC_LOGE("handleData or sBuf is NULL!");
316 return HDF_FAILURE;
317 }
318 struct AudioCtlElemValue elemCaptureValue;
319 elemCaptureValue.id.cardServiceName = handleData->captureMode.hwInfo.cardServiceName;
320 elemCaptureValue.id.iface = AUDIODRV_CTL_ELEM_IFACE_MIXER;
321 elemCaptureValue.id.itemName = "Capture Mute";
322 elemCaptureValue.value[0] = (int32_t)handleData->captureMode.ctlParam.mute;
323 if (!HdfSbufWriteInt32(sBuf, elemCaptureValue.value[0])) {
324 AUDIO_FUNC_LOGE("CaptureSetMuteSBuf mute Write Fail!");
325 return HDF_FAILURE;
326 }
327 if (!HdfSbufWriteInt32(sBuf, elemCaptureValue.id.iface)) {
328 AUDIO_FUNC_LOGE("CaptureSetMuteSBuf iface Write Fail!");
329 return HDF_FAILURE;
330 }
331 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.cardServiceName)) {
332 AUDIO_FUNC_LOGE("CaptureSetMuteSBuf cardServiceName Write Fail!");
333 return HDF_FAILURE;
334 }
335 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.itemName)) {
336 AUDIO_FUNC_LOGE("CaptureSetMuteSBuf itemName Write Fail!");
337 return HDF_FAILURE;
338 }
339 return HDF_SUCCESS;
340 }
341
AudioCtlCaptureSetMuteStu(const struct DevHandleCapture * handle,int cmdId,const struct AudioHwCaptureParam * handleData)342 int32_t AudioCtlCaptureSetMuteStu(const struct DevHandleCapture *handle,
343 int cmdId, const struct AudioHwCaptureParam *handleData)
344 {
345 int32_t ret;
346
347 if (handle == NULL || handle->object == NULL || handleData == NULL) {
348 AUDIO_FUNC_LOGE("CaptureSetMuteStu paras is NULL!");
349 return HDF_FAILURE;
350 }
351 struct HdfIoService *service = NULL;
352 struct HdfSBuf *sBuf = AudioObtainHdfSBuf();
353 if (sBuf == NULL) {
354 AUDIO_FUNC_LOGE("CaptureSetMuteStu Failed to obtain sBuf");
355 return HDF_FAILURE;
356 }
357 ret = AudioCtlCaptureSetMuteSBuf(sBuf, handleData);
358 if (ret < 0) {
359 AUDIO_FUNC_LOGE("CaptureSetMuteStu Failed to Get Mute sBuf!");
360 AudioSbufRecycle(sBuf);
361 return ret;
362 }
363 service = (struct HdfIoService *)handle->object;
364 if (service == NULL || service->dispatcher == NULL || service->dispatcher->Dispatch == NULL) {
365 AUDIO_FUNC_LOGE("CaptureSetMuteStu Service is NULL!");
366 AudioSbufRecycle(sBuf);
367 return HDF_FAILURE;
368 }
369 cmdId = AUDIODRV_CTL_IOCTL_ELEM_WRITE_CAPTURE - CTRL_NUM;
370 ret = service->dispatcher->Dispatch(&service->object, cmdId, sBuf, NULL);
371 AudioSbufRecycle(sBuf);
372 if (ret != HDF_SUCCESS) {
373 AUDIO_FUNC_LOGE("CaptureSetMuteStu Failed to send service call!");
374 }
375 return ret;
376 }
377
AudioCtlCaptureGetMuteSBuf(struct HdfSBuf * sBuf,const struct AudioHwCaptureParam * handleData)378 int32_t AudioCtlCaptureGetMuteSBuf(struct HdfSBuf *sBuf, const struct AudioHwCaptureParam *handleData)
379 {
380 if (handleData == NULL || sBuf == NULL) {
381 AUDIO_FUNC_LOGE("The parameter is empty!");
382 return HDF_FAILURE;
383 }
384 struct AudioCtlElemValue elemCaptureValue;
385 elemCaptureValue.id.cardServiceName = handleData->captureMode.hwInfo.cardServiceName;
386 elemCaptureValue.id.iface = AUDIODRV_CTL_ELEM_IFACE_MIXER;
387 elemCaptureValue.id.itemName = "Capture Mute";
388 if (!HdfSbufWriteInt32(sBuf, elemCaptureValue.id.iface)) {
389 AUDIO_FUNC_LOGE("CaptureGetMuteSBuf iface Write Fail!");
390 return HDF_FAILURE;
391 }
392 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.cardServiceName)) {
393 AUDIO_FUNC_LOGE("CaptureGetMuteSBuf cardServiceName Write Fail!");
394 return HDF_FAILURE;
395 }
396 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.itemName)) {
397 AUDIO_FUNC_LOGE("CaptureGetMuteSBuf itemName Write Fail!");
398 return HDF_FAILURE;
399 }
400 return HDF_SUCCESS;
401 }
402
AudioCtlCaptureGetMuteStu(const struct DevHandleCapture * handle,int cmdId,struct AudioHwCaptureParam * handleData)403 int32_t AudioCtlCaptureGetMuteStu(const struct DevHandleCapture *handle,
404 int cmdId, struct AudioHwCaptureParam *handleData)
405 {
406 int32_t ret;
407
408 if (handle == NULL || handle->object == NULL || handleData == NULL) {
409 AUDIO_FUNC_LOGE("CaptureGetMuteStu paras is NULL!");
410 return HDF_FAILURE;
411 }
412 struct HdfIoService *service = NULL;
413 struct HdfSBuf *reply = NULL;
414 struct HdfSBuf *sBuf = AudioObtainHdfSBuf();
415 if (sBuf == NULL) {
416 AUDIO_FUNC_LOGE("CaptureGetMuteStu Failed to obtain sBuf");
417 return HDF_FAILURE;
418 }
419 reply = AudioObtainHdfSBuf();
420 if (reply == NULL) {
421 AUDIO_FUNC_LOGE("Failed to obtain reply");
422 AudioSbufRecycle(sBuf);
423 return HDF_FAILURE;
424 }
425 ret = AudioCtlCaptureGetMuteSBuf(sBuf, handleData);
426 if (ret < 0) {
427 AUDIO_FUNC_LOGE("Failed to Get Mute sBuf!");
428 AudioBufReplyRecycle(sBuf, reply);
429 return ret;
430 }
431 service = (struct HdfIoService *)handle->object;
432 cmdId = AUDIODRV_CTL_IOCTL_ELEM_READ_CAPTURE - CTRL_NUM;
433 ret = AudioServiceDispatch(service, cmdId, sBuf, reply);
434 if (ret != HDF_SUCCESS) {
435 AUDIO_FUNC_LOGE("CaptureGetMuteStu Dispatch Fail!");
436 AudioBufReplyRecycle(sBuf, reply);
437 return HDF_FAILURE;
438 }
439 int32_t muteValueStu = 0;
440 if (!HdfSbufReadInt32(reply, &muteValueStu)) {
441 AUDIO_FUNC_LOGE("CaptureGetMuteStu Failed to Get Volume sBuf!");
442 AudioBufReplyRecycle(sBuf, reply);
443 return HDF_FAILURE;
444 }
445 AudioBufReplyRecycle(sBuf, reply);
446 handleData->captureMode.ctlParam.mute = (bool)muteValueStu;
447 return ret;
448 }
449
AudioCtlCaptureSetGainSBuf(struct HdfSBuf * sBuf,const struct AudioHwCaptureParam * handleData)450 int32_t AudioCtlCaptureSetGainSBuf(struct HdfSBuf *sBuf, const struct AudioHwCaptureParam *handleData)
451 {
452 if (handleData == NULL || sBuf == NULL) {
453 AUDIO_FUNC_LOGE("CaptureSetGainSBuf( handleData or sBuf is NULL!");
454 return HDF_FAILURE;
455 }
456 struct AudioCtlElemValue elemCaptureValue;
457 elemCaptureValue.id.cardServiceName = handleData->captureMode.hwInfo.cardServiceName;
458 elemCaptureValue.id.iface = AUDIODRV_CTL_ELEM_IFACE_MIXER;
459 elemCaptureValue.id.itemName = "Mic Left Gain";
460 elemCaptureValue.value[0] = handleData->captureMode.ctlParam.audioGain.gain;
461 if (!HdfSbufWriteInt32(sBuf, elemCaptureValue.value[0])) {
462 AUDIO_FUNC_LOGE("CaptureSetGainSBuf mute Write Fail!");
463 return HDF_FAILURE;
464 }
465 if (!HdfSbufWriteInt32(sBuf, elemCaptureValue.id.iface)) {
466 AUDIO_FUNC_LOGE("CaptureSetGainSBuf iface Write Fail!");
467 return HDF_FAILURE;
468 }
469 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.cardServiceName)) {
470 AUDIO_FUNC_LOGE("CaptureSetGainSBuf cardServiceName Write Fail!");
471 return HDF_FAILURE;
472 }
473 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.itemName)) {
474 AUDIO_FUNC_LOGE("CaptureSetGainSBuf itemName Write Fail!");
475 return HDF_FAILURE;
476 }
477 return HDF_SUCCESS;
478 }
479
AudioCtlCaptureSetGainStu(const struct DevHandleCapture * handle,int cmdId,const struct AudioHwCaptureParam * handleData)480 int32_t AudioCtlCaptureSetGainStu(const struct DevHandleCapture *handle,
481 int cmdId, const struct AudioHwCaptureParam *handleData)
482 {
483 int32_t ret;
484
485 if (handle == NULL || handle->object == NULL || handleData == NULL) {
486 AUDIO_FUNC_LOGE("CaptureSetGainStu paras is NULL!");
487 return HDF_FAILURE;
488 }
489 struct HdfIoService *service = NULL;
490 struct HdfSBuf *sBuf = AudioObtainHdfSBuf();
491 if (sBuf == NULL) {
492 AUDIO_FUNC_LOGE("CaptureSetGainStu Failed to obtain sBuf");
493 return HDF_FAILURE;
494 }
495 ret = AudioCtlCaptureSetGainSBuf(sBuf, handleData);
496 if (ret < 0) {
497 AUDIO_FUNC_LOGE("CaptureSetGainStu Failed to Get Gain sBuf!");
498 AudioSbufRecycle(sBuf);
499 return ret;
500 }
501 service = (struct HdfIoService *)handle->object;
502 if (service == NULL || service->dispatcher == NULL || service->dispatcher->Dispatch == NULL) {
503 AUDIO_FUNC_LOGE("CaptureSetGainStu Service is NULL!");
504 AudioSbufRecycle(sBuf);
505 return HDF_FAILURE;
506 }
507 cmdId = AUDIODRV_CTL_IOCTL_ELEM_WRITE_CAPTURE - CTRL_NUM;
508 ret = service->dispatcher->Dispatch(&service->object, cmdId, sBuf, NULL);
509 AudioSbufRecycle(sBuf);
510 if (ret != HDF_SUCCESS) {
511 AUDIO_FUNC_LOGE("CaptureSetGainStu Failed to send service call!");
512 }
513 return ret;
514 }
515
AudioCtlCaptureGetGainSBuf(struct HdfSBuf * sBuf,const struct AudioHwCaptureParam * handleData)516 int32_t AudioCtlCaptureGetGainSBuf(struct HdfSBuf *sBuf, const struct AudioHwCaptureParam *handleData)
517 {
518 if (handleData == NULL || sBuf == NULL) {
519 AUDIO_FUNC_LOGE("CaptureGetGainSBuf paras is NULL!");
520 return HDF_FAILURE;
521 }
522 struct AudioCtlElemValue elemCaptureValue;
523 elemCaptureValue.id.cardServiceName = handleData->captureMode.hwInfo.cardServiceName;
524 elemCaptureValue.id.iface = AUDIODRV_CTL_ELEM_IFACE_MIXER;
525 elemCaptureValue.id.itemName = "Mic Left Gain";
526 if (!HdfSbufWriteInt32(sBuf, elemCaptureValue.id.iface)) {
527 AUDIO_FUNC_LOGE("CaptureGetGainSBuf iface Write Fail!");
528 return HDF_FAILURE;
529 }
530 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.cardServiceName)) {
531 AUDIO_FUNC_LOGE("CaptureGetGainSBuf cardServiceName Write Fail!");
532 return HDF_FAILURE;
533 }
534 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.itemName)) {
535 AUDIO_FUNC_LOGE("CaptureGetGainSBuf itemName Write Fail!");
536 return HDF_FAILURE;
537 }
538 return HDF_SUCCESS;
539 }
540
AudioCtlCaptureGetGainStu(const struct DevHandleCapture * handle,int cmdId,struct AudioHwCaptureParam * handleData)541 int32_t AudioCtlCaptureGetGainStu(const struct DevHandleCapture *handle,
542 int cmdId, struct AudioHwCaptureParam *handleData)
543 {
544 int32_t ret;
545
546 if (handle == NULL || handle->object == NULL || handleData == NULL) {
547 AUDIO_FUNC_LOGE("CaptureGetGainStu paras is NULL!");
548 return HDF_FAILURE;
549 }
550 struct HdfIoService *service = NULL;
551 struct HdfSBuf *reply = NULL;
552 struct HdfSBuf *sBuf = AudioObtainHdfSBuf();
553 if (sBuf == NULL) {
554 AUDIO_FUNC_LOGE("CaptureGetGainStu Failed to obtain sBuf");
555 return HDF_FAILURE;
556 }
557 reply = AudioObtainHdfSBuf();
558 if (reply == NULL) {
559 AUDIO_FUNC_LOGE("Failed to obtain reply");
560 AudioSbufRecycle(sBuf);
561 return HDF_FAILURE;
562 }
563 ret = AudioCtlCaptureGetGainSBuf(sBuf, handleData);
564 if (ret < 0) {
565 AUDIO_FUNC_LOGE("Failed to Get Gain sBuf!");
566 AudioBufReplyRecycle(sBuf, reply);
567 return ret;
568 }
569 service = (struct HdfIoService *)handle->object;
570 cmdId = AUDIODRV_CTL_IOCTL_ELEM_READ_CAPTURE - CTRL_NUM;
571 ret = AudioServiceDispatch(service, cmdId, sBuf, reply);
572 if (ret != HDF_SUCCESS) {
573 AUDIO_FUNC_LOGE("GetGainStu Dispatch Fail!");
574 AudioBufReplyRecycle(sBuf, reply);
575 return HDF_FAILURE;
576 }
577 int32_t muteValueStu = 0;
578 if (!HdfSbufReadInt32(reply, &muteValueStu)) {
579 AUDIO_FUNC_LOGE("Failed to GetGain sBuf!");
580 AudioBufReplyRecycle(sBuf, reply);
581 return HDF_FAILURE;
582 }
583 AudioBufReplyRecycle(sBuf, reply);
584 handleData->captureMode.ctlParam.audioGain.gain = (float)muteValueStu;
585 return ret;
586 }
587
AudioCtlCaptureSceneSelectSBuf(struct HdfSBuf * sBuf,const struct AudioHwCaptureParam * handleData,int32_t deviceIndex)588 int32_t AudioCtlCaptureSceneSelectSBuf(struct HdfSBuf *sBuf,
589 const struct AudioHwCaptureParam *handleData, int32_t deviceIndex)
590 {
591 if (handleData == NULL || sBuf == NULL) {
592 AUDIO_FUNC_LOGE("CaptureSceneSelectSBuf handleData or sBufs is NULL!");
593 return HDF_FAILURE;
594 }
595 if (deviceIndex < 0 || deviceIndex > PATHPLAN_COUNT - 1) {
596 AUDIO_FUNC_LOGE("deviceIndex is Invalid!");
597 return HDF_FAILURE;
598 }
599 struct AudioCtlElemValue elemCaptureValue;
600 elemCaptureValue.id.cardServiceName = handleData->captureMode.hwInfo.cardServiceName;
601 elemCaptureValue.id.iface = AUDIODRV_CTL_ELEM_IFACE_MIXER;
602 elemCaptureValue.id.itemName =
603 handleData->captureMode.hwInfo.pathSelect.deviceInfo.deviceSwitchs[deviceIndex].deviceSwitch;
604 elemCaptureValue.value[0] = handleData->captureMode.hwInfo.pathSelect.deviceInfo.deviceSwitchs[deviceIndex].value;
605 if (!HdfSbufWriteInt32(sBuf, elemCaptureValue.value[0])) {
606 AUDIO_FUNC_LOGE("CaptureSceneSelectSBuf Write Fail!");
607 return HDF_FAILURE;
608 }
609 if (!HdfSbufWriteInt32(sBuf, elemCaptureValue.id.iface)) {
610 AUDIO_FUNC_LOGE("CaptureSceneSelectSBuf iface Write Fail!");
611 return HDF_FAILURE;
612 }
613 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.cardServiceName)) {
614 AUDIO_FUNC_LOGE("CaptureSceneSelectSBuf cardServiceName Write Fail!");
615 return HDF_FAILURE;
616 }
617 if (!HdfSbufWriteString(sBuf, elemCaptureValue.id.itemName)) {
618 AUDIO_FUNC_LOGE("CaptureSceneSelectSBuf itemName Write Fail!");
619 return HDF_FAILURE;
620 }
621 return HDF_SUCCESS;
622 }
623
AudioCtlCaptureSceneSelect(const struct DevHandleCapture * handle,int cmdId,const struct AudioHwCaptureParam * handleData)624 int32_t AudioCtlCaptureSceneSelect(const struct DevHandleCapture *handle,
625 int cmdId, const struct AudioHwCaptureParam *handleData)
626 {
627 int32_t index;
628
629 if (handle == NULL || handle->object == NULL || handleData == NULL) {
630 AUDIO_FUNC_LOGE("CaptureSceneSelect parameter is empty!");
631 return HDF_FAILURE;
632 }
633 struct HdfIoService *service = NULL;
634 struct HdfSBuf *sBuf = AudioObtainHdfSBuf();
635 if (sBuf == NULL) {
636 AUDIO_FUNC_LOGE("Failed to obtain sBuf");
637 return HDF_FAILURE;
638 }
639 service = (struct HdfIoService *)handle->object;
640 int32_t deviceNum = handleData->captureMode.hwInfo.pathSelect.deviceInfo.deviceNum;
641 if (deviceNum < AUDIO_MIN_DEVICENUM) {
642 AUDIO_FUNC_LOGE("AUDIO_MIN_ADAPTERNUM Failed!");
643 AudioSbufRecycle(sBuf);
644 return HDF_FAILURE;
645 }
646 if (service == NULL || service->dispatcher == NULL || service->dispatcher->Dispatch == NULL) {
647 AUDIO_FUNC_LOGE("CaptureSceneSelect Service is NULL!");
648 AudioSbufRecycle(sBuf);
649 return HDF_FAILURE;
650 }
651 cmdId = AUDIODRV_CTL_IOCTL_ELEM_WRITE_CAPTURE - CTRL_NUM;
652 for (index = 0; index < deviceNum; index++) {
653 HdfSbufFlush(sBuf);
654 if (AudioCtlCaptureSceneSelectSBuf(sBuf, handleData, index) < 0) {
655 AUDIO_FUNC_LOGE("AudioCtlCaptureSceneSelectSBuf Failed!");
656 AudioSbufRecycle(sBuf);
657 return HDF_FAILURE;
658 }
659 if (service->dispatcher->Dispatch(&service->object, cmdId, sBuf, NULL) < 0) {
660 AUDIO_FUNC_LOGE("CaptureSceneSelect Failed to send service call!");
661 AudioSbufRecycle(sBuf);
662 return HDF_FAILURE;
663 }
664 }
665 AudioSbufRecycle(sBuf);
666 return HDF_SUCCESS;
667 }
668
AudioCtlCaptureGetGainThresholdSBuf(struct HdfSBuf * sBuf,const struct AudioHwCaptureParam * handleData)669 int32_t AudioCtlCaptureGetGainThresholdSBuf(struct HdfSBuf *sBuf, const struct AudioHwCaptureParam *handleData)
670 {
671 if (handleData == NULL || sBuf == NULL) {
672 AUDIO_FUNC_LOGE("CaptureGetGainThresholdSBuf paras is empty!");
673 return HDF_FAILURE;
674 }
675 struct AudioCtrlElemInfo elemCaptureInfo;
676 elemCaptureInfo.id.cardServiceName = handleData->captureMode.hwInfo.cardServiceName;
677 elemCaptureInfo.id.iface = AUDIODRV_CTL_ELEM_IFACE_MIXER;
678 elemCaptureInfo.id.itemName = "Mic Left Gain";
679 if (!HdfSbufWriteInt32(sBuf, elemCaptureInfo.id.iface)) {
680 AUDIO_FUNC_LOGE("CaptureGetGainThresholdSBuf iface Write Fail!");
681 return HDF_FAILURE;
682 }
683 if (!HdfSbufWriteString(sBuf, elemCaptureInfo.id.cardServiceName)) {
684 AUDIO_FUNC_LOGE("CaptureGetGainThresholdSBuf cardServiceName Write Fail!");
685 return HDF_FAILURE;
686 }
687 if (!HdfSbufWriteString(sBuf, elemCaptureInfo.id.itemName)) {
688 AUDIO_FUNC_LOGE("CaptureGetGainThresholdSBuf itemName Write Fail!");
689 return HDF_FAILURE;
690 }
691 return HDF_SUCCESS;
692 }
693
AudioCtlCaptureGetGainThreshold(const struct DevHandleCapture * handle,int cmdId,struct AudioHwCaptureParam * handleData)694 int32_t AudioCtlCaptureGetGainThreshold(const struct DevHandleCapture *handle,
695 int cmdId, struct AudioHwCaptureParam *handleData)
696 {
697 int32_t ret;
698
699 if (handle == NULL || handle->object == NULL || handleData == NULL) {
700 AUDIO_FUNC_LOGE("CaptureGetGainThreshold paras is NULL!");
701 return HDF_FAILURE;
702 }
703 struct HdfIoService *service = NULL;
704 struct HdfSBuf *reply = NULL;
705 struct HdfSBuf *sBuf = AudioObtainHdfSBuf();
706 if (sBuf == NULL) {
707 AUDIO_FUNC_LOGE("CaptureGetGainThreshold Failed to obtain sBuf");
708 return HDF_FAILURE;
709 }
710 reply = AudioObtainHdfSBuf();
711 if (reply == NULL) {
712 AUDIO_FUNC_LOGE("CaptureGetGainThreshold Failed to obtain reply");
713 AudioSbufRecycle(sBuf);
714 return HDF_FAILURE;
715 }
716 ret = AudioCtlCaptureGetGainThresholdSBuf(sBuf, handleData);
717 if (ret != HDF_SUCCESS) {
718 AUDIO_FUNC_LOGE("CaptureGetGainThreshold Failed to Get Threshold sBuf!");
719 AudioBufReplyRecycle(sBuf, reply);
720 return ret;
721 }
722 service = (struct HdfIoService *)handle->object;
723 cmdId = AUDIODRV_CTL_IOCTL_ELEM_INFO_CAPTURE - CTRL_NUM;
724 ret = AudioServiceDispatch(service, cmdId, sBuf, reply);
725 if (ret != HDF_SUCCESS) {
726 AudioBufReplyRecycle(sBuf, reply);
727 return HDF_FAILURE;
728 }
729 struct AudioCtrlElemInfo gainThreshold;
730 (void)memset_s(&gainThreshold, sizeof(struct AudioCtrlElemInfo), 0, sizeof(struct AudioCtrlElemInfo));
731 if (!HdfSbufReadInt32(reply, &gainThreshold.type)) {
732 AUDIO_FUNC_LOGE("CaptureGetGainThreshold Failed to HdfSbufReadBuffer!");
733 AudioBufReplyRecycle(sBuf, reply);
734 return HDF_FAILURE;
735 }
736 if (!HdfSbufReadInt32(reply, &gainThreshold.max)) {
737 AUDIO_FUNC_LOGE("CaptureGetGainThreshold Failed to HdfSbufReadBuffer!");
738 AudioBufReplyRecycle(sBuf, reply);
739 return HDF_FAILURE;
740 }
741 AudioBufReplyRecycle(sBuf, reply);
742 handleData->captureMode.ctlParam.audioGain.gainMax = gainThreshold.max;
743 handleData->captureMode.ctlParam.audioGain.gainMin = 0;
744 return ret;
745 }
746
AudioCtlCaptureGetVolThresholdSBuf(struct HdfSBuf * sBuf,const struct AudioHwCaptureParam * handleData)747 int32_t AudioCtlCaptureGetVolThresholdSBuf(struct HdfSBuf *sBuf, const struct AudioHwCaptureParam *handleData)
748 {
749 if (handleData == NULL || sBuf == NULL) {
750 AUDIO_FUNC_LOGE("CaptureGetVolThresholdSBuf paras is empty!");
751 return HDF_FAILURE;
752 }
753 struct AudioCtrlElemInfo elemCaptureInfo;
754 elemCaptureInfo.id.cardServiceName = handleData->captureMode.hwInfo.cardServiceName;
755 elemCaptureInfo.id.iface = AUDIODRV_CTL_ELEM_IFACE_MIXER;
756 elemCaptureInfo.id.itemName = "Main Capture Volume";
757 if (!HdfSbufWriteInt32(sBuf, elemCaptureInfo.id.iface)) {
758 AUDIO_FUNC_LOGE("elemCaptureInfo.id.iface iface Write Fail!");
759 return HDF_FAILURE;
760 }
761 if (!HdfSbufWriteString(sBuf, elemCaptureInfo.id.cardServiceName)) {
762 AUDIO_FUNC_LOGE("CaptureGetVolThresholdSBuf cardServiceName Write Fail!");
763 return HDF_FAILURE;
764 }
765 if (!HdfSbufWriteString(sBuf, elemCaptureInfo.id.itemName)) {
766 AUDIO_FUNC_LOGE("CaptureGetVolThresholdSBuf itemName Write Fail!");
767 return HDF_FAILURE;
768 }
769 return HDF_SUCCESS;
770 }
771
AudioCtlCaptureGetVolThreshold(const struct DevHandleCapture * handle,int cmdId,struct AudioHwCaptureParam * handleData)772 int32_t AudioCtlCaptureGetVolThreshold(const struct DevHandleCapture *handle,
773 int cmdId, struct AudioHwCaptureParam *handleData)
774 {
775 if (handle == NULL || handle->object == NULL || handleData == NULL) {
776 AUDIO_FUNC_LOGE("paras is NULL!");
777 return HDF_FAILURE;
778 }
779 struct HdfSBuf *sBuf = AudioObtainHdfSBuf();
780 if (sBuf == NULL) {
781 AUDIO_FUNC_LOGE("Failed to Get sBuf");
782 return HDF_FAILURE;
783 }
784 struct HdfSBuf *reply = AudioObtainHdfSBuf();
785 if (reply == NULL) {
786 AUDIO_FUNC_LOGE("Failed to obtain reply");
787 AudioSbufRecycle(sBuf);
788 return HDF_FAILURE;
789 }
790 int32_t ret = AudioCtlCaptureGetVolThresholdSBuf(sBuf, handleData);
791 if (ret < 0) {
792 AUDIO_FUNC_LOGE("Failed to Get Threshold sBuf!");
793 AudioBufReplyRecycle(sBuf, reply);
794 return ret;
795 }
796 struct HdfIoService *service = (struct HdfIoService *)handle->object;
797 cmdId = AUDIODRV_CTL_IOCTL_ELEM_INFO_CAPTURE - CTRL_NUM;
798 ret = AudioServiceDispatch(service, cmdId, sBuf, reply);
799 if (ret != HDF_SUCCESS) {
800 AudioBufReplyRecycle(sBuf, reply);
801 return HDF_FAILURE;
802 }
803 struct AudioCtrlElemInfo volThreshold;
804 ret = AudioCtlGetVolThresholdRead(reply, &volThreshold);
805 AudioBufReplyRecycle(sBuf, reply);
806 if (ret != HDF_SUCCESS) {
807 AUDIO_FUNC_LOGE("[AudioCtlGetVolThresholdRead] failed!");
808 return HDF_FAILURE;
809 }
810 handleData->captureMode.ctlParam.volThreshold.volMax = volThreshold.max;
811 handleData->captureMode.ctlParam.volThreshold.volMin = volThreshold.min;
812 return ret;
813 }
814
AudioInterfaceLibCtlCapture(const struct DevHandleCapture * handle,int cmdId,struct AudioHwCaptureParam * handleData)815 int32_t AudioInterfaceLibCtlCapture(const struct DevHandleCapture *handle,
816 int cmdId, struct AudioHwCaptureParam *handleData)
817 {
818 int32_t ret;
819
820 if (handle == NULL || handle->object == NULL || handleData == NULL) {
821 AUDIO_FUNC_LOGE("paras is NULL!");
822 return HDF_FAILURE;
823 }
824 switch (cmdId) {
825 /* setPara: */
826 case AUDIODRV_CTL_IOCTL_ELEM_WRITE_CAPTURE:
827 ret = AudioCtlCaptureSetVolume(handle, cmdId, handleData);
828 break;
829 case AUDIODRV_CTL_IOCTL_MUTE_WRITE_CAPTURE:
830 ret = AudioCtlCaptureSetMuteStu(handle, cmdId, handleData);
831 break;
832 case AUDIODRV_CTL_IOCTL_MUTE_READ_CAPTURE:
833 ret = AudioCtlCaptureGetMuteStu(handle, cmdId, handleData);
834 break;
835 /* getPara: */
836 case AUDIODRV_CTL_IOCTL_ELEM_READ_CAPTURE:
837 ret = AudioCtlCaptureGetVolume(handle, cmdId, handleData);
838 break;
839 case AUDIODRV_CTL_IOCTL_GAIN_WRITE_CAPTURE:
840 ret = AudioCtlCaptureSetGainStu(handle, cmdId, handleData);
841 break;
842 case AUDIODRV_CTL_IOCTL_GAIN_READ_CAPTURE:
843 ret = AudioCtlCaptureGetGainStu(handle, cmdId, handleData);
844 break;
845 case AUDIODRV_CTL_IOCTL_SCENESELECT_CAPTURE:
846 ret = AudioCtlCaptureSceneSelect(handle, cmdId, handleData);
847 break;
848 case AUDIODRV_CTL_IOCTL_GAINTHRESHOLD_CAPTURE:
849 ret = AudioCtlCaptureGetGainThreshold(handle, cmdId, handleData);
850 break;
851 case AUDIODRV_CTL_IOCTL_VOL_THRESHOLD_CAPTURE:
852 ret = AudioCtlCaptureGetVolThreshold(handle, cmdId, handleData);
853 break;
854 default:
855 AUDIO_FUNC_LOGE("Ctl Mode not support!");
856 ret = HDF_FAILURE;
857 break;
858 }
859 return ret;
860 }
861
AudioOutputCaptureHwParams(const struct DevHandleCapture * handle,int cmdId,const struct AudioHwCaptureParam * handleData)862 int32_t AudioOutputCaptureHwParams(const struct DevHandleCapture *handle,
863 int cmdId, const struct AudioHwCaptureParam *handleData)
864 {
865 if (handle == NULL || handle->object == NULL || handleData == NULL) {
866 AUDIO_FUNC_LOGE("Function parameter is NULL!");
867 return HDF_FAILURE;
868 }
869 int32_t ret;
870 struct HdfIoService *service = NULL;
871 struct HdfSBuf *sBuf = AudioObtainHdfSBuf();
872 if (sBuf == NULL) {
873 AUDIO_FUNC_LOGE("Failed to obtain sBuf");
874 return HDF_FAILURE;
875 }
876 if (SetHwParamsCapture(handleData) < 0) {
877 AudioSbufRecycle(sBuf);
878 return HDF_FAILURE;
879 }
880 if (ParamsSbufWriteBuffer(sBuf) < 0) {
881 AudioSbufRecycle(sBuf);
882 return HDF_FAILURE;
883 }
884 service = (struct HdfIoService *)handle->object;
885 if (service == NULL || service->dispatcher == NULL || service->dispatcher->Dispatch == NULL) {
886 AUDIO_FUNC_LOGE("Function parameter is empty!");
887 AudioSbufRecycle(sBuf);
888 return HDF_FAILURE;
889 }
890 ret = service->dispatcher->Dispatch(&service->object, cmdId, sBuf, NULL);
891 if (ret != HDF_SUCCESS) {
892 AUDIO_FUNC_LOGE("Failed to send service call: ret = %{public}d!", ret);
893 }
894 AudioBufReplyRecycle(sBuf, NULL);
895
896 return ret;
897 }
898
AudioOutputCaptureOpen(const struct DevHandleCapture * handle,int cmdId,const struct AudioHwCaptureParam * handleData)899 int32_t AudioOutputCaptureOpen(const struct DevHandleCapture *handle,
900 int cmdId, const struct AudioHwCaptureParam *handleData)
901 {
902 if (handle == NULL || handle->object == NULL || handleData == NULL) {
903 AUDIO_FUNC_LOGE("Function parameter is NULL!");
904 return HDF_FAILURE;
905 }
906 struct HdfSBuf *sBuf = AudioObtainHdfSBuf();
907 if (sBuf == NULL) {
908 AUDIO_FUNC_LOGE("Failed to obtain sBuf");
909 return HDF_FAILURE;
910 }
911 if (!HdfSbufWriteString(sBuf, handleData->captureMode.hwInfo.cardServiceName)) {
912 AudioSbufRecycle(sBuf);
913 return HDF_FAILURE;
914 }
915 struct HdfIoService *service = (struct HdfIoService *)handle->object;
916 if (service == NULL || service->dispatcher == NULL || service->dispatcher->Dispatch == NULL) {
917 AUDIO_FUNC_LOGE("Function parameter is empty!");
918 AudioSbufRecycle(sBuf);
919 return HDF_FAILURE;
920 }
921 int32_t ret = service->dispatcher->Dispatch(&service->object, cmdId, sBuf, NULL);
922 AudioSbufRecycle(sBuf);
923 if (ret != HDF_SUCCESS) {
924 AUDIO_FUNC_LOGE("Failed to send service call!");
925 }
926 return ret;
927 }
928
AudioOutputCaptureReadFrame(struct HdfIoService * service,int cmdId,struct HdfSBuf * reply)929 int32_t AudioOutputCaptureReadFrame(struct HdfIoService *service, int cmdId, struct HdfSBuf *reply)
930 {
931 int32_t ret;
932 int32_t buffStatus = 0;
933 int32_t tryNumReply = 100; // try get reply count
934 if (service == NULL || reply == NULL) {
935 AUDIO_FUNC_LOGE("paras is NULL!");
936 return HDF_FAILURE;
937 }
938 if (service->dispatcher == NULL || service->dispatcher->Dispatch == NULL) {
939 AUDIO_FUNC_LOGE("service->dispatcher is null!");
940 return HDF_FAILURE;
941 }
942 do {
943 ret = service->dispatcher->Dispatch(&service->object, cmdId, NULL, reply);
944 if (ret != HDF_SUCCESS) {
945 AUDIO_FUNC_LOGE("Failed to send service call!");
946 return ret;
947 }
948 if (!HdfSbufReadInt32(reply, &buffStatus)) {
949 AUDIO_FUNC_LOGE("Failed to Get buffStatus!");
950 return HDF_FAILURE;
951 }
952 if (buffStatus == CIR_BUFF_EMPTY) {
953 tryNumReply--;
954 HdfSbufFlush(reply);
955 usleep(AUDIO_CAP_WAIT_DELAY + (tryNumReply % AUDIO_TRYNUM) * AUDIO_TRYNUM_TIME);
956 AUDIO_FUNC_LOGD("Cir buff empty wait");
957 continue;
958 } else if (buffStatus >= 0) {
959 AUDIO_FUNC_LOGD("capture need wait for %{public}d ms!", buffStatus);
960 usleep(buffStatus * AUDIO_US_TO_MS);
961 tryNumReply--;
962 HdfSbufFlush(reply);
963 continue;
964 }
965 break;
966 } while (tryNumReply > 0);
967 if (tryNumReply <= 0) {
968 AUDIO_FUNC_LOGE("Out of tryNumReply!");
969 return HDF_FAILURE;
970 }
971 return HDF_SUCCESS;
972 }
973
974 #ifdef MONO_TO_STEREO
CaptureChannelFixed(void * data,uint32_t len)975 void CaptureChannelFixed(void *data, uint32_t len)
976 {
977 int16_t *pcmLeft = (int16_t*)data;
978 int16_t *pcmRight = pcmLeft + 1; // right channel offset + 1
979
980 for (uint32_t index = 0; index < len; index += 2) { // 16bit, step = 2
981 pcmRight[index] = pcmLeft[index];
982 }
983 return;
984 }
985 #endif
986
AudioInputCaptureReadInfoToHandleData(struct AudioHwCaptureParam * handleData,char * frame,uint32_t frameCount,uint32_t dataSize)987 int32_t AudioInputCaptureReadInfoToHandleData(struct AudioHwCaptureParam *handleData,
988 char *frame, uint32_t frameCount, uint32_t dataSize)
989 {
990 int32_t ret = memcpy_s(handleData->frameCaptureMode.buffer, FRAME_DATA, frame, dataSize);
991 if (ret != 0) {
992 return HDF_FAILURE;
993 }
994 #ifdef MONO_TO_STEREO
995 if (g_hwParams.channels == 2) { // if rk3568 channel = 2, and 16bit
996 CaptureChannelFixed(handleData->frameCaptureMode.buffer, dataSize / 2); // len = dataSize / 2
997 }
998 #endif
999 handleData->frameCaptureMode.bufferSize = dataSize;
1000 handleData->frameCaptureMode.bufferFrameSize = frameCount;
1001 return HDF_SUCCESS;
1002 }
1003
AudioOutputCaptureRead(const struct DevHandleCapture * handle,int cmdId,struct AudioHwCaptureParam * handleData)1004 int32_t AudioOutputCaptureRead(const struct DevHandleCapture *handle,
1005 int cmdId, struct AudioHwCaptureParam *handleData)
1006 {
1007 uint32_t dataSize = 0;
1008 uint32_t frameCount = 0;
1009 size_t replySize = AUDIO_SIZE_FRAME_16K + AUDIO_REPLY_EXTEND;
1010 char *frame = NULL;
1011 struct HdfIoService *service = NULL;
1012 if (handle == NULL || handle->object == NULL || handleData == NULL) {
1013 AUDIO_FUNC_LOGE("paras is NULL!");
1014 return HDF_FAILURE;
1015 }
1016 struct HdfSBuf *reply = HdfSbufTypedObtainCapacity(SBUF_RAW, replySize);
1017 if (reply == NULL) {
1018 AUDIO_FUNC_LOGE("HdfSbufTypedObtainCapacity replySize failed!");
1019 return HDF_FAILURE;
1020 }
1021 service = (struct HdfIoService *)handle->object;
1022 int32_t ret = AudioOutputCaptureReadFrame(service, cmdId, reply);
1023 if (ret != HDF_SUCCESS) {
1024 AudioSbufRecycle(reply);
1025 return HDF_FAILURE;
1026 }
1027 if (!HdfSbufReadBuffer(reply, (const void **)&frame, &dataSize)) {
1028 AUDIO_FUNC_LOGE("[HdfSbufReadBuffer]-[frame] failed!");
1029 AudioSbufRecycle(reply);
1030 return HDF_FAILURE;
1031 }
1032 if (dataSize > FRAME_DATA || handleData->frameCaptureMode.buffer == NULL) {
1033 AUDIO_FUNC_LOGE("Buffer is NULL or DataSize overflow!");
1034 AudioSbufRecycle(reply);
1035 return HDF_FAILURE;
1036 }
1037 if (!HdfSbufReadUint32(reply, &frameCount)) {
1038 AUDIO_FUNC_LOGE("Failed to Get buffStatus!");
1039 AudioSbufRecycle(reply);
1040 return HDF_FAILURE;
1041 }
1042 ret = AudioInputCaptureReadInfoToHandleData(handleData, frame, frameCount, dataSize);
1043 AudioSbufRecycle(reply);
1044 if (ret != HDF_SUCCESS) {
1045 AUDIO_FUNC_LOGE("AudioInputCaptureReadInfoToHandleData Failed!");
1046 }
1047 return ret;
1048 }
1049
AudioOutputCaptureStartPrepare(const struct DevHandleCapture * handle,int cmdId,const struct AudioHwCaptureParam * handleData)1050 int32_t AudioOutputCaptureStartPrepare(const struct DevHandleCapture *handle,
1051 int cmdId, const struct AudioHwCaptureParam *handleData)
1052 {
1053 int32_t ret;
1054 struct HdfIoService *service = NULL;
1055 if (handle == NULL || handle->object == NULL || handleData == NULL) {
1056 AUDIO_FUNC_LOGE("CaptureStartPrepare paras is NULL!");
1057 return HDF_FAILURE;
1058 }
1059 service = (struct HdfIoService *)handle->object;
1060 if (service->dispatcher == NULL || service->dispatcher->Dispatch == NULL) {
1061 AUDIO_FUNC_LOGE("CaptureStartPrepare Service is NULL!");
1062 return HDF_FAILURE;
1063 }
1064 ret = service->dispatcher->Dispatch(&service->object, cmdId, NULL, NULL);
1065 if (ret != HDF_SUCCESS) {
1066 AUDIO_FUNC_LOGE("CaptureStartPrepare Failed to send service call!");
1067 }
1068 return ret;
1069 }
1070
AudioOutputCaptureStop(const struct DevHandleCapture * handle,int cmdId,const struct AudioHwCaptureParam * handleData)1071 int32_t AudioOutputCaptureStop(const struct DevHandleCapture *handle,
1072 int cmdId, const struct AudioHwCaptureParam *handleData)
1073 {
1074 int32_t ret;
1075 struct HdfIoService *service = NULL;
1076 if (handle == NULL || handle->object == NULL || handleData == NULL) {
1077 AUDIO_FUNC_LOGE("CaptureStop paras is NULL!");
1078 return HDF_FAILURE;
1079 }
1080 service = (struct HdfIoService *)handle->object;
1081 if (service->dispatcher == NULL || service->dispatcher->Dispatch == NULL) {
1082 AUDIO_FUNC_LOGE("CaptureStop Service is NULL!");
1083 return HDF_FAILURE;
1084 }
1085 struct HdfSBuf *sBuf = AudioObtainHdfSBuf();
1086 if (sBuf == NULL) {
1087 AUDIO_FUNC_LOGE("AudioObtainHdfSBuf failed!");
1088 return HDF_FAILURE;
1089 }
1090 if (!HdfSbufWriteUint32(sBuf, AUDIO_TURN_STANDBY_LATER)) {
1091 AudioSbufRecycle(sBuf);
1092 return HDF_FAILURE;
1093 }
1094 ret = service->dispatcher->Dispatch(&service->object, cmdId, sBuf, NULL);
1095 AudioSbufRecycle(sBuf);
1096 if (ret != HDF_SUCCESS) {
1097 AUDIO_FUNC_LOGE("CaptureStop Failed to send service call!");
1098 }
1099 return ret;
1100 }
1101
MmapDescWriteBufferCapture(struct HdfSBuf * sBuf,const struct AudioHwCaptureParam * handleData)1102 int32_t MmapDescWriteBufferCapture(struct HdfSBuf *sBuf, const struct AudioHwCaptureParam *handleData)
1103 {
1104 if (sBuf == NULL || handleData == NULL) {
1105 AUDIO_FUNC_LOGE("param sBuf or handleData is null!");
1106 return HDF_FAILURE;
1107 }
1108 uint64_t mmapAddr = (uint64_t)(uintptr_t)(handleData->frameCaptureMode.mmapBufDesc.memoryAddress);
1109 if (!HdfSbufWriteUint64(sBuf, mmapAddr)) {
1110 AUDIO_FUNC_LOGE("HdfSbufWriteUint64 memoryAddress failed!");
1111 return HDF_FAILURE;
1112 }
1113 if (!HdfSbufWriteInt32(sBuf, handleData->frameCaptureMode.mmapBufDesc.memoryFd)) {
1114 return HDF_FAILURE;
1115 }
1116 if (!HdfSbufWriteInt32(sBuf, handleData->frameCaptureMode.mmapBufDesc.totalBufferFrames)) {
1117 return HDF_FAILURE;
1118 }
1119 if (!HdfSbufWriteInt32(sBuf, handleData->frameCaptureMode.mmapBufDesc.transferFrameSize)) {
1120 return HDF_FAILURE;
1121 }
1122 if (!HdfSbufWriteInt32(sBuf, handleData->frameCaptureMode.mmapBufDesc.isShareable)) {
1123 return HDF_FAILURE;
1124 }
1125 if (!HdfSbufWriteUint32(sBuf, handleData->frameCaptureMode.mmapBufDesc.offset)) {
1126 return HDF_FAILURE;
1127 }
1128 return HDF_SUCCESS;
1129 }
1130
AudioOutputCaptureReqMmapBuffer(const struct DevHandleCapture * handle,int cmdId,const struct AudioHwCaptureParam * handleData)1131 int32_t AudioOutputCaptureReqMmapBuffer(const struct DevHandleCapture *handle,
1132 int cmdId, const struct AudioHwCaptureParam *handleData)
1133 {
1134 if (handle == NULL || handle->object == NULL || handleData == NULL) {
1135 AUDIO_FUNC_LOGE("handle or handle->object or handleData is null!");
1136 return HDF_FAILURE;
1137 }
1138 int32_t ret;
1139 struct HdfIoService *service = NULL;
1140 struct HdfSBuf *sBuf = AudioObtainHdfSBuf();
1141 if (sBuf == NULL) {
1142 AUDIO_FUNC_LOGE("AudioObtainHdfSBuf failed!");
1143 return HDF_FAILURE;
1144 }
1145 if (MmapDescWriteBufferCapture(sBuf, handleData)) {
1146 AudioSbufRecycle(sBuf);
1147 AUDIO_FUNC_LOGE("MmapDescWriteBufferCapture failed!");
1148 return HDF_FAILURE;
1149 }
1150 service = (struct HdfIoService *)handle->object;
1151 if (service == NULL || service->dispatcher == NULL || service->dispatcher->Dispatch == NULL) {
1152 AudioSbufRecycle(sBuf);
1153 AUDIO_FUNC_LOGE("The pointer is empty!");
1154 return HDF_FAILURE;
1155 }
1156 ret = service->dispatcher->Dispatch(&service->object, cmdId, sBuf, NULL);
1157 AudioSbufRecycle(sBuf);
1158 if (ret != HDF_SUCCESS) {
1159 AUDIO_FUNC_LOGE("Failed to send service call!");
1160 }
1161 return ret;
1162 }
1163
AudioOutputCaptureGetMmapPosition(const struct DevHandleCapture * handle,int cmdId,struct AudioHwCaptureParam * handleData)1164 int32_t AudioOutputCaptureGetMmapPosition(const struct DevHandleCapture *handle,
1165 int cmdId, struct AudioHwCaptureParam *handleData)
1166 {
1167 if (handle == NULL || handle->object == NULL || handleData == NULL) {
1168 AUDIO_FUNC_LOGE("handle or handle->object or handleData is null!");
1169 return HDF_FAILURE;
1170 }
1171 int32_t ret;
1172 struct HdfIoService *service = NULL;
1173 struct HdfSBuf *reply = NULL;
1174 service = (struct HdfIoService *)handle->object;
1175 if (service->dispatcher == NULL || service->dispatcher->Dispatch == NULL) {
1176 AUDIO_FUNC_LOGE("The pointer is empty!");
1177 return HDF_FAILURE;
1178 }
1179 reply = AudioObtainHdfSBuf();
1180 if (reply == NULL) {
1181 AUDIO_FUNC_LOGE("CaptureGetMmapPosition Failed to obtain reply");
1182 return HDF_FAILURE;
1183 }
1184 ret = service->dispatcher->Dispatch(&service->object, cmdId, NULL, reply);
1185 if (ret != HDF_SUCCESS) {
1186 AUDIO_FUNC_LOGE("Failed to send service call: ret = %{public}d.", ret);
1187 AudioSbufRecycle(reply);
1188 return HDF_FAILURE;
1189 }
1190 uint64_t frames = 0;
1191 if (!HdfSbufReadUint64(reply, &frames)) {
1192 AUDIO_FUNC_LOGE("Failed to Get frames sBuf:ret = %{public}d.", ret);
1193 AudioSbufRecycle(reply);
1194 return HDF_FAILURE;
1195 }
1196 AudioSbufRecycle(reply);
1197 handleData->frameCaptureMode.frames = frames;
1198 return ret;
1199 }
1200
AudioInterfaceLibOutputCapture(const struct DevHandleCapture * handle,int cmdId,struct AudioHwCaptureParam * handleData)1201 int32_t AudioInterfaceLibOutputCapture(const struct DevHandleCapture *handle, int cmdId,
1202 struct AudioHwCaptureParam *handleData)
1203 {
1204 if (handle == NULL) {
1205 AUDIO_FUNC_LOGE("Input Capture handle is NULL!");
1206 return HDF_FAILURE;
1207 }
1208 if (handle->object == NULL || handleData == NULL) {
1209 AUDIO_FUNC_LOGE("handle->object or handleData is null!");
1210 return HDF_FAILURE;
1211 }
1212 int32_t ret;
1213 switch (cmdId) {
1214 case AUDIO_DRV_PCM_IOCTL_HW_PARAMS:
1215 ret = AudioOutputCaptureHwParams(handle, cmdId, handleData);
1216 break;
1217 case AUDIO_DRV_PCM_IOCTL_READ:
1218 ret = AudioOutputCaptureRead(handle, cmdId, handleData);
1219 break;
1220 case AUDIO_DRV_PCM_IOCTRL_START_CAPTURE:
1221 case AUDIO_DRV_PCM_IOCTL_PREPARE_CAPTURE:
1222 case AUDIO_DRV_PCM_IOCTRL_CAPTURE_CLOSE:
1223 ret = AudioOutputCaptureStartPrepare(handle, cmdId, handleData);
1224 break;
1225 case AUDIO_DRV_PCM_IOCTRL_CAPTURE_OPEN:
1226 ret = AudioOutputCaptureOpen(handle, cmdId, handleData);
1227 break;
1228 case AUDIO_DRV_PCM_IOCTRL_STOP_CAPTURE:
1229 ret = AudioOutputCaptureStop(handle, cmdId, handleData);
1230 break;
1231 case AUDIODRV_CTL_IOCTL_PAUSE_WRITE_CAPTURE:
1232 ret = AudioCtlCaptureSetPauseStu(handle, cmdId, handleData);
1233 break;
1234 case AUDIO_DRV_PCM_IOCTL_MMAP_BUFFER_CAPTURE:
1235 ret = AudioOutputCaptureReqMmapBuffer(handle, cmdId, handleData);
1236 break;
1237 case AUDIO_DRV_PCM_IOCTL_MMAP_POSITION_CAPTURE:
1238 ret = AudioOutputCaptureGetMmapPosition(handle, cmdId, handleData);
1239 break;
1240 default:
1241 AUDIO_FUNC_LOGE("Output Mode not support!");
1242 ret = HDF_FAILURE;
1243 break;
1244 }
1245 return ret;
1246 }
1247
AudioBindServiceCaptureObject(struct DevHandleCapture * const handle,const char * name)1248 struct DevHandleCapture *AudioBindServiceCaptureObject(struct DevHandleCapture * const handle,
1249 const char *name)
1250 {
1251 if (handle == NULL || name == NULL) {
1252 AUDIO_FUNC_LOGE("service name or handle is NULL!");
1253 return NULL;
1254 }
1255 char *serviceName = (char *)OsalMemCalloc(NAME_LEN);
1256 if (serviceName == NULL) {
1257 AUDIO_FUNC_LOGE("Failed to alloc serviceName");
1258 AudioMemFree((void **)&handle);
1259 return NULL;
1260 }
1261 int ret = snprintf_s(serviceName, NAME_LEN - 1, SERVIC_NAME_MAX_LEN + 1, "hdf_audio_%s", name);
1262 if (ret < 0) {
1263 AUDIO_FUNC_LOGE("Failed to snprintf_s");
1264 AudioMemFree((void **)&serviceName);
1265 AudioMemFree((void **)&handle);
1266 return NULL;
1267 }
1268 struct HdfIoService *service = HdfIoServiceBindName(serviceName);
1269 if (service == NULL) {
1270 AUDIO_FUNC_LOGE("Failed to get service!");
1271 AudioMemFree((void **)&serviceName);
1272 AudioMemFree((void **)&handle);
1273 return NULL;
1274 }
1275 AudioMemFree((void **)&serviceName);
1276 handle->object = service;
1277 return handle->object;
1278 }
1279
1280 /* CreatCapture for Bind handle */
AudioBindServiceCapture(const char * name)1281 struct DevHandleCapture *AudioBindServiceCapture(const char *name)
1282 {
1283 struct DevHandleCapture *handle = NULL;
1284 struct DevHandleCapture *object = NULL;
1285 if (name == NULL) {
1286 AUDIO_FUNC_LOGE("service name NULL!");
1287 return NULL;
1288 }
1289 handle = (struct DevHandleCapture *)OsalMemCalloc(sizeof(struct DevHandleCapture));
1290 if (handle == NULL) {
1291 AUDIO_FUNC_LOGE("Failed to alloc handle");
1292 return NULL;
1293 }
1294 object = AudioBindServiceCaptureObject(handle, name);
1295 if (object != NULL) {
1296 handle->object = object;
1297 } else {
1298 AUDIO_FUNC_LOGE("handle->object is NULL!");
1299 return NULL;
1300 }
1301 AUDIO_FUNC_LOGI("BIND SERVICE SUCCESS!");
1302 return handle;
1303 }
1304
AudioCloseServiceCapture(const struct DevHandleCapture * handle)1305 void AudioCloseServiceCapture(const struct DevHandleCapture *handle)
1306 {
1307 AUDIO_FUNC_LOGI();
1308 if (handle == NULL || handle->object == NULL) {
1309 AUDIO_FUNC_LOGE("Capture handle or handle->object is NULL");
1310 return;
1311 }
1312 struct HdfIoService *service = (struct HdfIoService *)handle->object;
1313 HdfIoServiceRecycle(service);
1314 AudioMemFree((void **)&handle);
1315 return;
1316 }
1317
AudioInterfaceLibModeCapture(const struct DevHandleCapture * handle,struct AudioHwCaptureParam * handleData,int cmdId)1318 int32_t AudioInterfaceLibModeCapture(const struct DevHandleCapture *handle,
1319 struct AudioHwCaptureParam *handleData, int cmdId)
1320 {
1321 if (handle == NULL || handle->object == NULL || handleData == NULL) {
1322 AUDIO_FUNC_LOGE("paras is NULL!");
1323 return HDF_FAILURE;
1324 }
1325 switch (cmdId) {
1326 case AUDIO_DRV_PCM_IOCTL_HW_PARAMS:
1327 case AUDIO_DRV_PCM_IOCTL_READ:
1328 case AUDIO_DRV_PCM_IOCTRL_START_CAPTURE:
1329 case AUDIO_DRV_PCM_IOCTRL_STOP_CAPTURE:
1330 case AUDIO_DRV_PCM_IOCTL_PREPARE_CAPTURE:
1331 case AUDIODRV_CTL_IOCTL_PAUSE_WRITE_CAPTURE:
1332 case AUDIO_DRV_PCM_IOCTL_MMAP_BUFFER_CAPTURE:
1333 case AUDIO_DRV_PCM_IOCTL_MMAP_POSITION_CAPTURE:
1334 case AUDIO_DRV_PCM_IOCTRL_CAPTURE_OPEN:
1335 case AUDIO_DRV_PCM_IOCTRL_CAPTURE_CLOSE:
1336 return (AudioInterfaceLibOutputCapture(handle, cmdId, handleData));
1337 case AUDIODRV_CTL_IOCTL_ELEM_WRITE_CAPTURE:
1338 case AUDIODRV_CTL_IOCTL_ELEM_READ_CAPTURE:
1339 case AUDIODRV_CTL_IOCTL_MUTE_WRITE_CAPTURE:
1340 case AUDIODRV_CTL_IOCTL_MUTE_READ_CAPTURE:
1341 case AUDIODRV_CTL_IOCTL_GAIN_WRITE_CAPTURE:
1342 case AUDIODRV_CTL_IOCTL_GAIN_READ_CAPTURE:
1343 case AUDIODRV_CTL_IOCTL_SCENESELECT_CAPTURE:
1344 case AUDIODRV_CTL_IOCTL_GAINTHRESHOLD_CAPTURE:
1345 case AUDIODRV_CTL_IOCTL_VOL_THRESHOLD_CAPTURE:
1346 return (AudioInterfaceLibCtlCapture(handle, cmdId, handleData));
1347 default:
1348 AUDIO_FUNC_LOGE("Mode Error!");
1349 break;
1350 }
1351 return HDF_ERR_NOT_SUPPORT;
1352 }
1353