4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Jonghyuk Choi <jhchoi.choi@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
24 #include <sys/types.h>
27 #include "avsys-common.h"
28 #include "avsys-audio-shm.h"
29 #include "avsys-audio-sync.h"
30 #include "avsys-debug.h"
31 #include "avsys-audio-handle.h"
32 #include "avsys-audio-shm.h"
33 #include "avsys-audio-path.h"
34 #include "avsys-audio-logical-volume.h"
35 #include "avsys-audio-pactrl.h"
37 #define DEFAULT_VOLUME_SYSTEM 2
38 #define DEFAULT_VOLUME_RINGTONE 6
39 #define DEFAULT_VOLUME_MEDIA 11
40 #define DEFAULT_VOLUME_NOTIFICATION 6
41 #define DEFAULT_VOLUME_ALARM 6
42 #define DEFAULT_VOLUME_CALL 6
43 #define DEFAULT_VOLUME_FIXED 0
44 #define DEFAULT_VOLUME_JAVA 11
46 #define AVSYS_GET_SHM(SHM,ERROR) do { \
47 if (AVSYS_FAIL(avsys_audio_get_shm(AVSYS_AUDIO_SHM_IDEN_HANDLE, (void **)SHM))) { \
48 avsys_error(AVAUDIO,"avsys_audio_get_shm() failed in %s\n", __func__); \
53 #define AVSYS_LOCK_SYNC() do { \
54 if (AVSYS_FAIL(avsys_audio_lock_sync(AVSYS_AUDIO_SYNC_IDEN_HANDLE))) { \
55 avsys_error(AVAUDIO,"avsys_audio_lock_sync() failed in %s\n", __func__); \
56 return AVSYS_STATE_ERR_INTERNAL; \
60 #define AVSYS_UNLOCK_SYNC() do { \
61 if (AVSYS_FAIL(avsys_audio_unlock_sync(AVSYS_AUDIO_SYNC_IDEN_HANDLE))) { \
62 avsys_error(AVAUDIO,"avsys_audio_unlock_sync() failed in %s\n", __func__); \
63 return AVSYS_STATE_ERR_INTERNAL; \
68 int avsys_audio_handle_init(void)
71 avsys_audio_handle_info_t *control = NULL;
72 avsys_audio_handle_info_t **temp = NULL;
75 err = avsys_check_root_privilege();
76 if (AVSYS_FAIL(err)) {
80 if (AVSYS_FAIL(avsys_audio_create_sync(AVSYS_AUDIO_SYNC_IDEN_HANDLE))) {
81 avsys_error(AVAUDIO, "avsys_audio_create_sync() failed in %s\n", __func__);
82 return AVSYS_STATE_ERR_INTERNAL;
84 if (AVSYS_FAIL(avsys_audio_create_shm(AVSYS_AUDIO_SHM_IDEN_HANDLE))) {
85 avsys_error(AVAUDIO, "avsys_audio_create_shm() failed in %s\n", __func__);
86 return AVSYS_STATE_ERR_INTERNAL;
90 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
91 if (control == NULL) {
92 avsys_error(AVAUDIO, "control is null in %s\n", __func__);
93 return AVSYS_STATE_ERR_NULL_POINTER;
96 /* init allocted bits */
97 control->allocated = 0;
98 control->handle_amp = 0;
99 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_0] = DEFAULT_VOLUME_SYSTEM;
100 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_1] = DEFAULT_VOLUME_NOTIFICATION;
101 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_2] = DEFAULT_VOLUME_ALARM;
102 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_3] = DEFAULT_VOLUME_RINGTONE;
103 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_4] = DEFAULT_VOLUME_MEDIA;
104 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_5] = DEFAULT_VOLUME_CALL;
105 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_6] = DEFAULT_VOLUME_FIXED;
106 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_7] = DEFAULT_VOLUME_JAVA;
107 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_8] = DEFAULT_VOLUME_MEDIA;
108 control->ext_device_amp = AVSYS_AUDIO_HANDLE_EXT_DEV_NONE;
109 control->primary_volume_pid = 0;
110 control->primary_volume_type = -1;
111 for (i = 0; i < AVSYS_AUDIO_HANDLE_MAX; i++) {
112 control->handle_priority[i] = AVSYS_AUDIO_HANDLE_PRIORITY_TYPE_0;
115 for (i = 0; i < AVSYS_AUDIO_LOCK_SLOT_MAX; i++) {
116 control->handlelock_pid[i] = -1;
118 return AVSYS_STATE_SUCCESS;
122 int avsys_audio_handle_fini(void)
127 if (AVSYS_FAIL(avsys_audio_remove_shm(AVSYS_AUDIO_SHM_IDEN_HANDLE))) {
128 avsys_error(AVAUDIO, "avsys_audio_remove_shm() failed in %s\n", __func__);
129 return AVSYS_STATE_ERR_INTERNAL;
134 if (AVSYS_FAIL(avsys_audio_remove_sync(AVSYS_AUDIO_SYNC_IDEN_HANDLE))) {
135 avsys_error(AVAUDIO, "avsys_audio_remove_sync() failed in %s\n", __func__);
136 return AVSYS_STATE_ERR_INTERNAL;
139 return AVSYS_STATE_SUCCESS;
143 int avsys_audio_handle_reset(int *volume_value)
146 long long int flag = 0x01;
147 avsys_audio_handle_info_t *control = NULL;
148 avsys_audio_handle_info_t **temp = NULL;
150 int default_volume[] = { DEFAULT_VOLUME_SYSTEM, DEFAULT_VOLUME_NOTIFICATION,
151 DEFAULT_VOLUME_ALARM, DEFAULT_VOLUME_RINGTONE,
152 DEFAULT_VOLUME_MEDIA, DEFAULT_VOLUME_CALL,
153 DEFAULT_VOLUME_FIXED, DEFAULT_VOLUME_JAVA};
156 /* Check root user */
157 err = avsys_check_root_privilege();
158 if (AVSYS_FAIL(err)) {
162 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
163 if (control == NULL) {
164 avsys_error(AVAUDIO, "control is null in %s\n", __func__);
165 return AVSYS_STATE_ERR_NULL_POINTER;
168 if (volume_value == NULL) {
169 lvolume = default_volume;
171 lvolume = volume_value;
174 for (i = 0; i < AVSYS_AUDIO_HANDLE_MAX; i++) {
175 if (control->allocated & (flag << i)) { /* allocated condition */
176 if (AVSYS_FAIL(avsys_check_process(control->handles[i].pid))) {
178 if (AVSYS_FAIL(avsys_audio_handle_free(i))) {
179 avsys_error(AVAUDIO, "Cleanup handle %d failed\n", i);
185 while (control->allocated) {
188 avsys_warning(AVAUDIO, "(%d)Waiting...0.5 sec for resume from hibernation\n", i);
189 printf("(%d)Waiting...0.5 sec for resume from hibernation\n", i);
194 if (volume_value == NULL) {
195 control->allocated = 0;
196 control->handle_amp = 0;
198 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_0] = lvolume[0]; /* DEFAULT_VOLUME_SYSTEM */
199 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_1] = lvolume[1]; /* DEFAULT_VOLUME_NOTIFICATION */
200 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_2] = lvolume[2]; /* DEFAULT_VOLUME_ALARM */
201 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_3] = lvolume[3]; /* DEFAULT_VOLUME_RINGTONE */
202 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_4] = lvolume[4]; /* DEFAULT_VOLUME_MEDIA */
203 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_5] = lvolume[5]; /* DEFAULT_VOLUME_CALL */
204 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_6] = lvolume[6]; /* DEFAULT_VOLUME_FIXED */
205 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_7] = lvolume[7]; /* DEFAULT_VOLUME_JAVA */
206 control->volume_value[AVSYS_AUDIO_LVOL_GAIN_TYPE_8] = lvolume[4]; /* DEFAULT_VOLUME_MEDIA */
207 control->ext_device_amp = AVSYS_AUDIO_HANDLE_EXT_DEV_NONE;
208 control->primary_volume_pid = 0;
209 control->primary_volume_type = -1;
210 for (i = 0; i < AVSYS_AUDIO_HANDLE_MAX; i++) {
211 control->handle_priority[i] = AVSYS_AUDIO_HANDLE_PRIORITY_TYPE_0;
213 /* Clear semaphore condition */
214 for (i = 0; i < AVSYS_AUDIO_LOCK_SLOT_MAX; i++) {
215 control->handlelock_pid[i] = -1;
220 return AVSYS_STATE_SUCCESS;
224 int avsys_audio_handle_rejuvenation(void)
227 long long int flag = 0x01;
228 int dead_handle = 0x00;
230 avsys_audio_handle_info_t *control = NULL;
231 avsys_audio_handle_info_t **temp = NULL;
232 int dead_pids[AVSYS_AUDIO_HANDLE_MAX];
236 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
237 if (control == NULL) {
238 avsys_error(AVAUDIO, "control is null in %s\n", __func__);
239 return AVSYS_STATE_ERR_NULL_POINTER;
244 /* Clear semaphore condition */
246 for (i = 0; i < AVSYS_AUDIO_HANDLE_MAX; i++) {
248 if (control->allocated & (flag << i)) { /* allocated condition */
249 /* check pid of handle... still alive? */
250 if (AVSYS_FAIL(avsys_check_process(control->handles[i].pid))) {
251 avsys_error(AVAUDIO, "handle %d is dead\n", i);
252 dead_handle |= (flag << i);
253 dead_pids[i] = control->handles[i].pid;
260 avsys_warning(AVAUDIO, "dead_handle : 0x%0X\n", dead_handle);
261 /* Cleanup dead handle... */
262 for (i = 0; i < AVSYS_AUDIO_HANDLE_MAX; i++) {
263 if (dead_handle & (flag << i)) {
264 /* set priority of dead handle as lowest */
265 control->handle_priority[i] = AVSYS_AUDIO_HANDLE_PRIORITY_TYPE_0;
266 /* free this handle */
267 avsys_error(AVAUDIO, "Cleanup handle %d...\n", i);
268 if (AVSYS_FAIL(avsys_audio_handle_free(i)))
269 avsys_error(AVAUDIO, "Cleanup handle %d failed\n", i);
273 char high_priority_exist = 0;
275 for (i = 0; i < AVSYS_AUDIO_HANDLE_MAX; i++) {
276 if (control->handle_priority[i] > AVSYS_AUDIO_HANDLE_PRIORITY_TYPE_0) {
277 high_priority_exist = 1;
282 for (i = 0; i < AVSYS_AUDIO_HANDLE_MAX; i++) {
283 if (control->handle_priority[i] == AVSYS_AUDIO_HANDLE_PRIORITY_TYPE_0) {
284 if (high_priority_exist) {
285 /* sink input mute immediately */
286 if (control->handles[i].mute == AVSYS_AUDIO_UNMUTE) {
287 if (AVSYS_FAIL(avsys_audio_pa_ctrl_mute_by_index(control->handles[i].stream_index, AVSYS_AUDIO_MUTE))) {
288 avsys_error(AVAUDIO, "set sink input mute for %d failed\n", control->handles[i].stream_index);
290 avsys_warning(AVAUDIO, "set sink input mute for %d success\n", control->handles[i].stream_index);
292 control->handles[i].mute = AVSYS_AUDIO_MUTE;
295 /* sink input unmute immediately */
296 if (control->handles[i].mute == AVSYS_AUDIO_MUTE) {
297 if (AVSYS_FAIL(avsys_audio_pa_ctrl_mute_by_index(control->handles[i].stream_index, AVSYS_AUDIO_UNMUTE))) {
298 avsys_error(AVAUDIO, "set sink input unmute for %d failed\n", control->handles[i].stream_index);
300 avsys_warning(AVAUDIO, "set sink input unmute for %d success\n", control->handles[i].stream_index);
302 control->handles[i].mute = AVSYS_AUDIO_UNMUTE;
306 } else { /* this is high priority case */
307 /* sink input unmute immediately */
308 if (control->handles[i].mute == AVSYS_AUDIO_MUTE) {
309 if (AVSYS_FAIL(avsys_audio_pa_ctrl_mute_by_index(control->handles[i].stream_index, AVSYS_AUDIO_UNMUTE))) {
310 avsys_error(AVAUDIO, "set sink input unmute for %d failed\n", control->handles[i].stream_index);
312 avsys_warning(AVAUDIO, "set sink input unmute for %d success\n", control->handles[i].stream_index);
314 control->handles[i].mute = AVSYS_AUDIO_UNMUTE;
322 return AVSYS_STATE_SUCCESS;
326 int avsys_audio_handle_dump(void)
328 avsys_audio_handle_info_t *control = NULL;
329 avsys_audio_handle_info_t **temp = NULL;
330 char *vol_str[] = { "System", "Notification", "Alarm", "Ringtone", "Media", "Call", "Fixed", "Java", "Media-HL" };
331 char *dev_str[] = { "Speaker", "Headset", "BTHeadset" };
333 long long int flag = 0x01;
336 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
337 if (control == NULL) {
338 avsys_error(AVAUDIO, "control is null in %s\n", __func__);
339 return AVSYS_STATE_ERR_NULL_POINTER;
342 fprintf(stdout, "======================================================================\n");
343 fprintf(stdout, " Opened Handles Information \n");
344 fprintf(stdout, "======================================================================\n");
345 fprintf(stdout, " Avsystem Handle alloc : %016x\n", control->allocated);
346 for (i = 0; i < AVSYS_AUDIO_LOCK_SLOT_MAX; i++) {
347 if (control->handlelock_pid[i] > 0) {
348 fprintf(stdout, " Handle Lock PIDs : %d\n", control->handlelock_pid[i]);
351 fprintf(stdout, "----------------------------------------------------------------------\n");
352 for (i = 0; i < AVSYS_AUDIO_HANDLE_MAX; i++) {
353 if (control->allocated & (flag << i)) { /* allocated condition */
354 fprintf(stdout, " Avsystem Handle ID : %2d\n", i);
355 fprintf(stdout, " Run Process ID : 0x%08X (%d)\n", control->handles[i].pid, control->handles[i].pid);
356 fprintf(stdout, " Run Thread ID : 0x%08X (%d)\n", control->handles[i].tid, control->handles[i].tid);
357 fprintf(stdout, " Open Mode : %2d\n", control->handles[i].mode);
358 fprintf(stdout, " Format : %2d\n", control->handles[i].format);
359 fprintf(stdout, " Channels : %2d\n", control->handles[i].channels);
360 fprintf(stdout, " Samplerate : %2d\n", control->handles[i].samplerate);
361 fprintf(stdout, " Priority : %2d\n", control->handle_priority[i]);
362 if(control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT || control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT_CLOCK ||
363 control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT_VIDEO || control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT_LOW_LATENCY
364 || control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT_AP_CALL) {
365 if (control->handles[i].dirty_volume) {
366 fprintf(stdout, " Dirty volume : %s\n", vol_str[control->handles[i].gain_setting.vol_type]);
368 fprintf(stdout, " Volume Type : %s\n", vol_str[control->handles[i].gain_setting.vol_type]);
370 fprintf(stdout, " Target device : %s\n", dev_str[control->handles[i].gain_setting.dev_type]);
371 fprintf(stdout, " Maximum Len : %2d\n", control->handles[i].gain_setting.max_len);
372 fprintf(stdout, " UI setted volume : L:%3d R:%3d\n", control->handles[i].setting_vol.level[0], control->handles[i].setting_vol.level[1]);
373 fprintf(stdout, " Real working volume : L:%3d R:%3d\n", control->handles[i].working_vol.level[0], control->handles[i].working_vol.level[1]);
375 fprintf(stdout, " ----------------------------------------------------------------------\n");
379 fprintf(stdout, " ----------------------------------------------------------------------\n");
380 fprintf(stdout, " External dev amp : 0x%08X\n", control->ext_device_amp);
381 fprintf(stdout, " External dev status : 0x%08X\n", control->ext_device_status);
382 if (control->primary_volume_type >= 0) {
383 fprintf(stdout, " Primary Volume type : %s\n", vol_str[control->primary_volume_type]);
385 fprintf(stdout, " Volume [System] : %2d ", control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_SYSTEM]);
386 for (i = 0; i < control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_SYSTEM]; i++)
387 fprintf(stdout, "+");
388 fprintf(stdout, "\n");
389 fprintf(stdout, " Volume [Notification] : %2d ", control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_NOTIFICATION]);
390 for (i = 0; i < control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_NOTIFICATION]; i++)
391 fprintf(stdout, "+");
392 fprintf(stdout, "\n");
393 fprintf(stdout, " Volume [Alarm] : %2d ", control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_ALARM]);
394 for (i = 0; i < control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_ALARM]; i++)
395 fprintf(stdout, "+");
396 fprintf(stdout, "\n");
397 fprintf(stdout, " Volume [Ringtone] : %2d ", control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_RINGTONE]);
398 for (i = 0; i < control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_RINGTONE]; i++)
399 fprintf(stdout, "+");
400 fprintf(stdout, "\n");
401 fprintf(stdout, " Volume [Media] : %2d ", control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_MEDIA]);
402 for (i = 0; i < control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_MEDIA]; i++)
403 fprintf(stdout, "+");
404 fprintf(stdout, "\n");
405 fprintf(stdout, " Volume [MediaHL] : %2d ", control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_MEDIA_HL]);
406 for (i = 0; i < control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_MEDIA_HL]; i++)
407 fprintf(stdout, "+");
408 fprintf(stdout, "\n");
409 fprintf(stdout, " Volume [Call] : %2d ", control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_CALL]);
410 for (i = 0; i < control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_CALL]; i++)
411 fprintf(stdout, "+");
412 fprintf(stdout, "\n");
413 fprintf(stdout, " Volume [Android] : %2d ", control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_EXT_SYSTEM_ANDROID]);
414 for (i = 0; i < control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_EXT_SYSTEM_ANDROID]; i++)
415 fprintf(stdout, "+");
416 fprintf(stdout, "\n");
417 fprintf(stdout, " Volume [Java] : %2d ", control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_EXT_SYSTEM_JAVA]);
418 for (i = 0; i < control->volume_value[AVSYS_AUDIO_VOLUME_TYPE_EXT_SYSTEM_JAVA]; i++)
419 fprintf(stdout, "+");
420 fprintf(stdout, "\n");
421 fprintf(stdout, "======================================================================\n");
423 return AVSYS_STATE_SUCCESS;
426 int avsys_audio_handle_alloc(int *handle)
428 long long int flag = 0x01;
430 avsys_audio_handle_info_t *control = NULL;
431 avsys_audio_handle_info_t **temp = NULL;
434 avsys_info(AVAUDIO, "%s\n", __func__);
435 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
438 for (i = 0; i < AVSYS_AUDIO_HANDLE_MAX; i++) {
439 if ((control->allocated & flag) == 0) { /* alloc condition */
440 control->allocated |= flag;
449 if (i == AVSYS_AUDIO_HANDLE_MAX) {
451 return AVSYS_STATE_ERR_RANGE_OVER;
453 avsys_info(AVAUDIO, "handle allocated %d\n", i);
454 memset(&control->handles[i], 0, sizeof(avsys_audio_handle_t));
455 control->handles[i].pid = getpid();
456 control->handles[i].tid = avsys_gettid();
458 return AVSYS_STATE_SUCCESS;
462 int avsys_audio_handle_free(int handle)
464 long long int flag = 0x01;
465 avsys_audio_handle_info_t *control = NULL;
466 avsys_audio_handle_info_t **temp = NULL;
469 avsys_info(AVAUDIO, "%s, handle=[%d]\n", __func__, handle);
471 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
476 if (control->allocated & flag) { /* find condition */
477 control->allocated &= ~flag;
478 /* clear handle mute field */
479 if (control->handle_amp & flag) {
480 control->handle_amp &= ~flag;
483 return AVSYS_STATE_SUCCESS;
486 return AVSYS_STATE_ERR_INVALID_VALUE;
490 int avsys_audio_handle_get_ptr(int handle, avsys_audio_handle_t **ptr, const int mode)
492 long long int flag = 0x01;
493 avsys_audio_handle_info_t *control = NULL;
494 avsys_audio_handle_info_t **temp = NULL;
495 int ret = AVSYS_STATE_SUCCESS;
497 //avsys_info(AVAUDIO, "%s handle %d\n", __func__, handle);
499 if (handle < 0 || handle >= AVSYS_AUDIO_HANDLE_MAX) {
501 return AVSYS_STATE_ERR_INVALID_HANDLE;
504 if (mode < 0 || mode >= HANDLE_PTR_MODE_NUM) {
506 return AVSYS_STATE_ERR_INVALID_PARAMETER;
510 if (AVSYS_FAIL(avsys_audio_get_shm(AVSYS_AUDIO_SHM_IDEN_HANDLE, (void **)temp))) {
511 avsys_error(AVAUDIO, "avsys_audio_get_shm() failed in %s\n", __func__);
513 return AVSYS_STATE_ERR_INTERNAL;
518 if (mode == HANDLE_PTR_MODE_NORMAL) {
519 if (AVSYS_FAIL(avsys_audio_lock_sync(AVSYS_AUDIO_SYNC_IDEN_HANDLE))) {
520 avsys_error(AVAUDIO, "avsys_audio_lock_sync() failed in %s\n", __func__);
522 return AVSYS_STATE_ERR_INTERNAL;
526 if (control->allocated & flag) {
527 //avsys_info(AVAUDIO, "input handle %d flag %x allocated %x\n", handle, flag, control->allocated);
528 *ptr = &(control->handles[handle]);
529 ret = AVSYS_STATE_SUCCESS;
532 ret = AVSYS_STATE_ERR_INVALID_VALUE;
535 if (mode == HANDLE_PTR_MODE_NORMAL) {
536 if (AVSYS_FAIL(avsys_audio_unlock_sync(AVSYS_AUDIO_SYNC_IDEN_HANDLE))) {
537 avsys_error(AVAUDIO, "avsys_audio_unlock_sync() failed in %s\n", __func__);
539 return AVSYS_STATE_ERR_INTERNAL;
546 int avsys_audio_handle_release_ptr(int handle, const int mode)
548 long long int flag = 0x01;
549 avsys_audio_handle_info_t *control = NULL;
550 avsys_audio_handle_info_t **temp = NULL;
551 int ret = AVSYS_STATE_SUCCESS;
553 //avsys_info(AVAUDIO, "%s handle %d\n", __func__, handle);
555 if (handle < 0 || handle >= AVSYS_AUDIO_HANDLE_MAX) {
556 return AVSYS_STATE_ERR_INVALID_HANDLE;
559 if (mode < 0 || mode >= HANDLE_PTR_MODE_NUM) {
560 return AVSYS_STATE_ERR_INVALID_PARAMETER;
564 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
568 //avsys_info(AVAUDIO, "input handle %d flag %x allocated %x\n", handle, flag, control->allocated);
569 if (mode == HANDLE_PTR_MODE_NORMAL) {
573 if (control->allocated & flag) {
574 ret = AVSYS_STATE_SUCCESS;
576 ret = AVSYS_STATE_ERR_INVALID_VALUE;
579 if (mode == HANDLE_PTR_MODE_NORMAL) {
586 int avsys_audio_handle_set_mute(int handle, int mute)
588 long long int flag = 0x01;
589 int result = AVSYS_STATE_SUCCESS;
591 avsys_audio_handle_info_t *control = NULL;
592 avsys_audio_handle_info_t **temp = NULL;
593 avsys_audio_handle_t *ptr = NULL;
596 avsys_info(AVAUDIO, "%s_%d_%d\n", __func__, handle, mute);
597 if (mute > AVSYS_AUDIO_MUTE || mute < AVSYS_AUDIO_UNMUTE) {
598 avsys_error_r(AVAUDIO, "input parameter range error : mute %d\n", mute);
599 return AVSYS_STATE_ERR_INVALID_PARAMETER;
602 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
608 if (control->allocated & flag) { /* find condition */
609 /* update mute information for input handle parameter */
610 ptr = &(control->handles[handle]);
612 avsys_audio_pa_ctrl_mute_by_index(ptr->stream_index, mute);
614 /* update handle amp information */
615 if (mute == AVSYS_AUDIO_UNMUTE) {
617 if (control->handle_amp & flag)
618 avsys_warning(AVAUDIO, "handle 0x%x already powered\n");
620 control->handle_amp |= flag;
622 if (!(control->handle_amp & flag))
623 control->handle_amp |= flag;
625 /* reset fadedown mute */
628 } else if (mute == AVSYS_AUDIO_MUTE) {
629 /* clear handle amp field */
630 if (control->handle_amp & flag)
631 control->handle_amp &= ~flag;
634 avsys_warning(AVAUDIO, "handle 0x%x already off\n");
638 result = AVSYS_STATE_SUCCESS;
640 avsys_warning(AVAUDIO, "[%s] handle %d does not allocated\n", __func__, handle);
641 if (AVSYS_FAIL(avsys_audio_unlock_sync(AVSYS_AUDIO_SYNC_IDEN_HANDLE))) {
642 avsys_error(AVAUDIO, "avsys_audio_unlock_sync() failed in %s\n", __func__);
643 return AVSYS_STATE_ERR_INTERNAL;
645 return AVSYS_STATE_ERR_INVALID_VALUE;
648 if (control->handle_amp | control->ext_device_amp)
649 path_mute = AVSYS_AUDIO_UNMUTE;
651 path_mute = AVSYS_AUDIO_MUTE;
655 if (AVSYS_FAIL(avsys_audio_path_ex_set_mute(path_mute))) {
656 avsys_error_r(AVAUDIO, "Path mute control failed. %s_%d\n", __func__, path_mute);
657 result = AVSYS_STATE_ERR_IO_CONTROL;
662 int avsys_audio_handle_ext_dev_set_mute(avsysaudio_ext_device_t device_type, int mute)
665 int result = AVSYS_STATE_SUCCESS;
667 avsys_audio_handle_info_t *control = NULL;
668 avsys_audio_handle_info_t **temp = NULL;
671 avsys_info(AVAUDIO, "%s_%d_%d\n", __func__, (int)device_type, mute);
672 if (mute > AVSYS_AUDIO_MUTE || mute < AVSYS_AUDIO_UNMUTE) {
673 avsys_error_r(AVAUDIO, "input parameter range error : mute %d\n", mute);
674 return AVSYS_STATE_ERR_INVALID_PARAMETER;
677 switch (device_type) {
678 case AVSYS_AUDIO_EXT_DEVICE_FMRADIO:
679 bit = AVSYS_AUDIO_HANDLE_EXT_DEV_FMRADIO;
682 avsys_error(AVAUDIO, "Unknown device type %d\n", (int)device_type);
683 return AVSYS_STATE_ERR_INVALID_PARAMETER;
686 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
690 if (mute == AVSYS_AUDIO_MUTE) {
691 control->ext_device_amp |= bit;
693 control->ext_device_amp &= ~bit;
696 if (control->handle_amp | control->ext_device_amp)
697 path_mute = AVSYS_AUDIO_UNMUTE;
699 path_mute = AVSYS_AUDIO_MUTE;
703 if (AVSYS_FAIL(avsys_audio_path_ex_set_mute(path_mute))) {
704 avsys_error_r(AVAUDIO, "Path mute control failed. %s_%d\n", __func__, path_mute);
705 result = AVSYS_STATE_ERR_IO_CONTROL;
710 int avsys_audio_handle_ext_dev_status(avsysaudio_ext_device_t device_type, int *onoff)
712 int result = AVSYS_STATE_SUCCESS;
713 int ext_dev_state = 0;
715 avsys_audio_handle_info_t *control = NULL;
716 avsys_audio_handle_info_t **temp = NULL;
719 avsys_info(AVAUDIO, "%s\n", __func__);
722 avsys_error(AVAUDIO, "Null pointer input parameter\n");
723 return AVSYS_STATE_ERR_NULL_POINTER;
726 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
730 switch (device_type) {
731 case AVSYS_AUDIO_EXT_DEVICE_FMRADIO:
732 if (control->ext_device_status & AVSYS_AUDIO_HANDLE_EXT_DEV_FMRADIO) {
737 *onoff = ext_dev_state;
740 avsys_error(AVAUDIO, "Invalid device type %d\n", device_type);
741 result = AVSYS_STATE_ERR_INTERNAL;
749 int avsys_audio_handle_ext_dev_status_update(avsysaudio_ext_device_t device_type, int onoff)
752 int result = AVSYS_STATE_SUCCESS;
753 avsys_audio_handle_info_t *control = NULL;
754 avsys_audio_handle_info_t **temp = NULL;
757 avsys_info(AVAUDIO, "%s_%d_%d\n", __func__, (int)device_type, onoff);
759 switch (device_type) {
760 case AVSYS_AUDIO_EXT_DEVICE_FMRADIO:
761 bit = AVSYS_AUDIO_HANDLE_EXT_DEV_FMRADIO;
764 avsys_error(AVAUDIO, "Unknown device type %d\n", (int)device_type);
765 return AVSYS_STATE_ERR_INVALID_PARAMETER;
768 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
773 control->ext_device_status |= bit;
774 } else if (onoff == 0) {
775 control->ext_device_status &= ~bit;
777 avsys_error(AVAUDIO, "[%s] Unknown parameter %d. To nothing\n", __func__, onoff);
784 int avsys_audio_handle_current_playing_volume_type(int *type)
786 int result = AVSYS_STATE_SUCCESS;
788 char used_table[AVSYS_AUDIO_VOLUME_TYPE_MAX] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
789 char capture_used = 0;
790 avsys_audio_handle_info_t *control = NULL;
791 avsys_audio_handle_info_t **temp = NULL;
794 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
798 for (i = 0; i < AVSYS_AUDIO_HANDLE_MAX; i++) {
799 long long int flag = 0x01;
801 if (control->allocated & flag) {
802 if(control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT ||
803 control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT_CLOCK ||
804 control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT_VIDEO ||
805 control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT_LOW_LATENCY ) {
806 used_table[control->handles[i].gain_setting.vol_type] = 1;
808 else if(control->handles[i].mode == AVSYS_AUDIO_MODE_INPUT ||
809 control->handles[i].mode == AVSYS_AUDIO_MODE_INPUT_HIGH_LATENCY ||
810 control->handles[i].mode == AVSYS_AUDIO_MODE_INPUT_LOW_LATENCY) {
815 if (control->ext_device_status & AVSYS_AUDIO_HANDLE_EXT_DEV_FMRADIO) {
816 used_table[AVSYS_AUDIO_VOLUME_TYPE_MEDIA] = 1;
819 avsys_warning(AVAUDIO,"Call[%d] Ringtone[%d] Media[%d] MediaHL[%d] Alarm[%d] Notification[%d] System[%d] Android[%d] Java[%d] Capture[%d]\n",
820 used_table[AVSYS_AUDIO_VOLUME_TYPE_CALL],
821 used_table[AVSYS_AUDIO_VOLUME_TYPE_RINGTONE],
822 used_table[AVSYS_AUDIO_VOLUME_TYPE_MEDIA],
823 used_table[AVSYS_AUDIO_VOLUME_TYPE_MEDIA_HL],
824 used_table[AVSYS_AUDIO_VOLUME_TYPE_ALARM],
825 used_table[AVSYS_AUDIO_VOLUME_TYPE_NOTIFICATION],
826 used_table[AVSYS_AUDIO_VOLUME_TYPE_SYSTEM],
827 used_table[AVSYS_AUDIO_VOLUME_TYPE_EXT_SYSTEM_ANDROID],
828 used_table[AVSYS_AUDIO_VOLUME_TYPE_EXT_SYSTEM_JAVA],
831 if (control->primary_volume_pid > 2 && AVSYS_FAIL(avsys_check_process(control->primary_volume_pid))) {
832 avsys_warning(AVAUDIO, "Primary volume set pid does not exist anymore. clean primary volume\n");
833 control->primary_volume_type = 1;
834 control->primary_volume_pid = 0;
837 if (control->primary_volume_type != -1) {
838 *type = control->primary_volume_type;
839 avsys_warning(AVAUDIO, "Primary volume is %d\n", control->primary_volume_type);
840 } else if (used_table[AVSYS_AUDIO_VOLUME_TYPE_CALL]) {
841 *type = AVSYS_AUDIO_VOLUME_TYPE_CALL;
842 } else if (used_table[AVSYS_AUDIO_VOLUME_TYPE_RINGTONE]) {
843 *type = AVSYS_AUDIO_VOLUME_TYPE_RINGTONE;
844 } else if (used_table[AVSYS_AUDIO_VOLUME_TYPE_MEDIA]) {
845 *type = AVSYS_AUDIO_VOLUME_TYPE_MEDIA;
846 } else if (used_table[AVSYS_AUDIO_VOLUME_TYPE_MEDIA_HL]) {
847 *type = AVSYS_AUDIO_VOLUME_TYPE_MEDIA;
848 } else if (used_table[AVSYS_AUDIO_VOLUME_TYPE_ALARM]) {
849 *type = AVSYS_AUDIO_VOLUME_TYPE_ALARM;
850 } else if (used_table[AVSYS_AUDIO_VOLUME_TYPE_NOTIFICATION]) {
851 *type = AVSYS_AUDIO_VOLUME_TYPE_NOTIFICATION;
852 } else if (used_table[AVSYS_AUDIO_VOLUME_TYPE_SYSTEM]) {
853 *type = AVSYS_AUDIO_VOLUME_TYPE_SYSTEM;
854 } else if (used_table[AVSYS_AUDIO_VOLUME_TYPE_EXT_SYSTEM_JAVA]) {
855 *type = AVSYS_AUDIO_VOLUME_TYPE_EXT_SYSTEM_JAVA;
856 } else if (capture_used) {
857 /* No Playing instance just capture only. */
858 result = AVSYS_STATE_ERR_INVALID_MODE;
859 avsys_error(AVAUDIO, "Capture handle only...\n");
862 result = AVSYS_STATE_ERR_ALLOCATION;
863 avsys_error(AVAUDIO, "There is no running handles...\n");
872 int avsys_audio_handle_update_volume(avsys_audio_handle_t *p, const int vol_type)
874 int result = AVSYS_STATE_SUCCESS;
875 avsys_audio_handle_info_t *control = NULL;
876 avsys_audio_handle_info_t **temp = NULL;
879 avsys_audio_volume_t *set_volume = NULL;
880 int volume_type = vol_type;
882 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
886 set_volume = &(p->setting_vol);
887 set_volume->level[AVSYS_AUDIO_CHANNEL_LEFT] = control->volume_value[volume_type];
888 set_volume->level[AVSYS_AUDIO_CHANNEL_RIGHT] = control->volume_value[volume_type];
889 result = avsys_audio_logical_volume_convert(set_volume, &(p->working_vol), &(p->gain_setting));
896 int avsys_audio_handle_update_volume_by_type(const int volume_type, const int volume_value)
899 int result = AVSYS_STATE_SUCCESS;
900 avsys_audio_handle_info_t *control = NULL;
901 avsys_audio_handle_info_t **temp = NULL;
904 avsys_info(AVAUDIO, "%s\n", __func__);
905 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
909 control->volume_value[volume_type] = volume_value;
911 for (i = 0; i < AVSYS_AUDIO_HANDLE_MAX; i++) {
913 avsys_audio_volume_t *set_volume = NULL;
914 long long int flag = 0x01;
917 if ((control->allocated & flag) == 0) {
920 mode = control->handles[i].mode;
921 if (mode != AVSYS_AUDIO_MODE_OUTPUT && mode != AVSYS_AUDIO_MODE_OUTPUT_CLOCK
922 && mode != AVSYS_AUDIO_MODE_OUTPUT_VIDEO && mode != AVSYS_AUDIO_MODE_OUTPUT_LOW_LATENCY
923 && mode != AVSYS_AUDIO_MODE_OUTPUT_AP_CALL) {
927 if (control->handles[i].gain_setting.vol_type != volume_type) {
931 if (control->handles[i].dirty_volume) {
932 /* This is volatile volume per handle */
936 set_volume = &(control->handles[i].setting_vol);
937 set_volume->level[AVSYS_AUDIO_CHANNEL_LEFT] = control->volume_value[volume_type];
938 set_volume->level[AVSYS_AUDIO_CHANNEL_RIGHT] = control->volume_value[volume_type];
939 result = avsys_audio_logical_volume_convert(set_volume, &(control->handles[i].working_vol), &(control->handles[i].gain_setting));
940 if (AVSYS_FAIL(result)) {
941 avsys_error(AVAUDIO, "Can not set volume for handle %d. Error 0x%x\n", i, result);
944 avsys_warning(AVAUDIO, "stream index %d\n", control->handles[i].stream_index);
945 if (AVSYS_FAIL(avsys_audio_pa_ctrl_volume_by_index(control->handles[i].stream_index, control->handles[i].working_vol.level[AVSYS_AUDIO_CHANNEL_LEFT], control->handles[i].channels))) {
946 avsys_error(AVAUDIO, "avsys_audio_pa_ctrl_volume_by_index() failed\n");
955 int avsys_audio_handle_set_primary_volume_type(const int pid, const int type, const int command)
957 int result = AVSYS_STATE_SUCCESS;
958 avsys_audio_handle_info_t *control = NULL;
959 avsys_audio_handle_info_t **temp = NULL;
962 avsys_info(AVAUDIO, "%s\n", __func__);
963 if (type < AVSYS_AUDIO_VOLUME_TYPE_SYSTEM || type >= AVSYS_AUDIO_VOLUME_TYPE_MAX || type == AVSYS_AUDIO_VOLUME_TYPE_FIXED) {
964 avsys_error(AVAUDIO, "Invalid primary type primary type\n");
965 return AVSYS_STATE_ERR_INTERNAL;
968 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
972 if (command == AVSYS_AUDIO_PRIMARY_VOLUME_SET) {
973 if (control->primary_volume_type != -1) {
974 avsys_warning(AVAUDIO,"Previous primary volume set by %d to %d\n",
975 control->primary_volume_pid,
976 control->primary_volume_type
979 avsys_warning(AVAUDIO, "Primary Volume Type Set to %d [%d]\n", type, pid);
980 control->primary_volume_pid = pid;
981 control->primary_volume_type = type;
982 } else if (command == AVSYS_AUDIO_PRIMARY_VOLUME_CLEAR) {
983 if (pid != control->primary_volume_pid) {
984 avsys_error(AVAUDIO, "Primary volume set api pair is not matched [%d] [%d]\n", control->primary_volume_pid, pid);
986 avsys_warning(AVAUDIO, "Primary Volume Type Clear [%d]\n", pid);
987 control->primary_volume_pid = 0;
988 control->primary_volume_type = -1;
991 avsys_error(AVAUDIO, "Unknown Parameter : %d\n", command);
992 result = AVSYS_STATE_ERR_INVALID_PARAMETER;
1000 int avsys_audio_handle_update_priority(int handle, int priority, int handle_route, int cmd)
1002 long long int flag = 0x01;
1003 int path_mute = 0, i = 0;
1004 char high_priority_exist = 0;
1005 char transition_effect = 0;
1006 int lpriority = AVSYS_AUDIO_HANDLE_PRIORITY_TYPE_0;
1007 avsys_audio_handle_info_t *control = NULL;
1008 avsys_audio_handle_info_t **temp = NULL;
1013 if (cmd < AVSYS_AUDIO_SET_PRIORITY || cmd > AVSYS_AUDIO_UNSET_PRIORITY) {
1014 avsys_error_r(AVAUDIO, "Invalid command %s\n", __func__);
1015 return AVSYS_STATE_ERR_INTERNAL;
1018 if (priority >= AVSYS_AUDIO_HANDLE_PRIORITY_TYPE_MAX || priority < AVSYS_AUDIO_HANDLE_PRIORITY_TYPE_0) {
1019 avsys_error(AVAUDIO, "input parameter range error : priority %d. set lowest\n", priority);
1020 lpriority = AVSYS_AUDIO_HANDLE_PRIORITY_TYPE_0;
1022 lpriority = priority;
1025 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
1031 if (control->allocated & flag) { /* find condition */
1032 /* update for allocated handle */
1033 if (cmd == AVSYS_AUDIO_SET_PRIORITY) {
1034 control->handle_priority[handle] = lpriority;
1035 } else if (cmd == AVSYS_AUDIO_UNSET_PRIORITY) {
1036 control->handle_priority[handle] = AVSYS_AUDIO_HANDLE_PRIORITY_TYPE_0;
1037 if (lpriority == AVSYS_AUDIO_HANDLE_PRIORITY_TYPE_2) { /* unset with priority 2 */
1038 transition_effect = 1;
1042 avsys_warning(AVAUDIO, "[%s] handle %d does not allocated\n", __func__, handle);
1043 AVSYS_UNLOCK_SYNC();
1044 return AVSYS_STATE_ERR_INVALID_VALUE;
1047 for (i = 0; i < AVSYS_AUDIO_HANDLE_MAX; i++) {
1048 if (control->handle_priority[i] == AVSYS_AUDIO_HANDLE_PRIORITY_TYPE_1) {
1049 high_priority_exist = 1;
1050 } else if (control->handle_priority[i] == AVSYS_AUDIO_HANDLE_PRIORITY_TYPE_2) {
1051 high_priority_exist = 1;
1052 transition_effect = 1;
1056 for (i = 0; i < AVSYS_AUDIO_HANDLE_MAX; i++) {
1059 if (!(control->allocated & flag))
1062 if (control->handles[i].stream_index == 0) {
1063 avsys_warning(AVAUDIO, "handle[%d] has stream index 0, skip....(only mono sink-input use 0)\n", i);
1067 if (control->handle_priority[i] == AVSYS_AUDIO_HANDLE_PRIORITY_TYPE_0) {
1069 if (high_priority_exist) { /* mute */
1070 if (transition_effect) {
1072 if (control->handles[i].setting_vol.level[AVSYS_AUDIO_CHANNEL_LEFT] >= control->handles[i].setting_vol.level[AVSYS_AUDIO_CHANNEL_RIGHT]) {
1073 control->handles[i].fadeup_vol = (-1) * control->handles[i].setting_vol.level[AVSYS_AUDIO_CHANNEL_LEFT];
1075 control->handles[i].fadeup_vol = (-1) * control->handles[i].setting_vol.level[AVSYS_AUDIO_CHANNEL_RIGHT];
1077 control->handles[i].fadeup_multiplier = 0;
1079 /* mute immediately */
1080 if (AVSYS_FAIL(avsys_audio_pa_ctrl_mute_by_index(control->handles[i].stream_index, AVSYS_AUDIO_MUTE))) {
1081 avsys_error(AVAUDIO, "set sink input mute for %d failed\n", control->handles[i].stream_index);
1083 avsys_warning(AVAUDIO, "set sink input mute for %d success\n", control->handles[i].stream_index);
1085 control->handles[i].mute = AVSYS_AUDIO_MUTE;
1087 } else { /* unmute */
1088 if (transition_effect) {
1090 if (control->handles[i].setting_vol.level[AVSYS_AUDIO_CHANNEL_LEFT] >= control->handles[i].setting_vol.level[AVSYS_AUDIO_CHANNEL_RIGHT]) {
1091 control->handles[i].fadeup_vol = control->handles[i].setting_vol.level[AVSYS_AUDIO_CHANNEL_LEFT];
1093 control->handles[i].fadeup_vol = control->handles[i].setting_vol.level[AVSYS_AUDIO_CHANNEL_RIGHT];
1095 control->handles[i].fadeup_multiplier = 0;
1097 /* unmute immediately */
1098 if (control->handles[i].mute != AVSYS_AUDIO_UNMUTE) {
1099 if (AVSYS_FAIL(avsys_audio_pa_ctrl_mute_by_index(control->handles[i].stream_index, AVSYS_AUDIO_UNMUTE))) {
1100 avsys_error(AVAUDIO, "set sink input unmute for %d failed\n", control->handles[i].stream_index);
1102 avsys_warning(AVAUDIO, "set sink input unmute for %d success\n", control->handles[i].stream_index);
1104 control->handles[i].mute = AVSYS_AUDIO_UNMUTE;
1111 AVSYS_UNLOCK_SYNC();
1113 if (transition_effect)
1115 else if (!transition_effect && high_priority_exist)
1118 return AVSYS_STATE_SUCCESS;
1121 int avsys_audio_handle_current_capture_status(int *on_capture)
1124 char capture_used = 0;
1125 avsys_audio_handle_info_t *control = NULL;
1126 avsys_audio_handle_info_t **temp = NULL;
1129 return AVSYS_STATE_ERR_INVALID_PARAMETER;
1133 AVSYS_GET_SHM(temp,AVSYS_STATE_ERR_INTERNAL);
1137 for (i = 0; i < AVSYS_AUDIO_HANDLE_MAX; i++) {
1138 long long int flag = 0x01;
1140 if (control->allocated & flag) {
1141 if(control->handles[i].mode == AVSYS_AUDIO_MODE_INPUT ||
1142 control->handles[i].mode == AVSYS_AUDIO_MODE_INPUT_HIGH_LATENCY ||
1143 control->handles[i].mode == AVSYS_AUDIO_MODE_INPUT_LOW_LATENCY ||
1144 control->handles[i].mode == AVSYS_AUDIO_MODE_INPUT_AP_CALL) {
1151 avsys_info(AVAUDIO, "Audio capture is running\n");
1157 AVSYS_UNLOCK_SYNC();
1159 return AVSYS_STATE_SUCCESS;