• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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