1 /*
2  * Copyright (C) 2015-2017 Alibaba Group Holding Limited
3  */
4 
5 #ifndef SOUND_CONTROL_H
6 #define SOUND_CONTROL_H
7 
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <fcntl.h>
11 #include <stdarg.h>
12 #include <string.h>
13 #include <errno.h>
14 #include <unistd.h>
15 #include <aos/list.h>
16 #include <aos/kernel.h>
17 #ifndef HAAS_AUDIO_DEMO
18 #include <sys/ioctl.h>
19 #endif
20 #include "audio_drv.h"
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 /** @defgroup a2sa_api a2sa
27  *  @ingroup aos_components
28  * @{
29  */
30 
31 /**
32  * @}
33  */
34 
35 /** @defgroup a2sa_mixer_api mixer
36  *  @ingroup a2sa_api
37  * @{
38  */
39 
40 /* 音频mixer设备节点描述信息 */
41 typedef struct {
42     int fd;                                  /**< 声卡mixer设备节点fd值,通过open()函数获取 */
43     int card;                                /**< 声卡ID */
44     char *name;                              /**< 声卡mixer设备节点名字,例如"/dev/controlC0" */
45     struct audio_ctl_card_info card_info;    /**< 声卡基础信息,例如声卡驱动名字 */
46     struct audio_ctl_elem_info *elem_info;   /**< 声卡配置信息元素地址 */
47     unsigned int count;                      /**< 声卡配置信息元素个数 */
48 } aos_mixer_t;
49 
50 /**
51  * 打开ID为card的声卡的mixer设备节点
52  *
53  * @param[out]  mixer  保存mixer设备节点信息的二级指针
54  * @param[in]  card   期望打开的声卡ID
55  *
56  * @return  0 on success, negative error on failure.
57  */
58 int aos_mixer_open(aos_mixer_t **mixer, int card);
59 
60 /**
61  * 打印当前声卡mixer设备节点的所有属性信息
62  *
63  * @param[in]  mixer  保存mixer设备节点信息的指针
64  *
65  * @return  0 on success, negative error on failure.
66  */
67 int aos_mixer_print_info(aos_mixer_t *mixer);
68 
69 /**
70  * 设置mixer设备节点中名为name的属性值为int value
71  *
72  * @param[in]  mixer  保存mixer设备节点信息的指针
73  * @param[in]  name   期望设置的目标属性名字
74  * @param[in]  value  期望设置到名字为name的目标属性的int值
75  *
76  * @return  0 on success, negative error on failure.
77  */
78 int aos_mixer_set_int_value(aos_mixer_t *mixer, char *name, int value);
79 
80 /**
81  * 获取mixer设备节点中名为name的属性值,并保存在value指针中
82  *
83  * @param[in]  mixer  保存mixer设备节点信息的指针
84  * @param[in]  name   期望获取的目标属性名字
85  * @param[out]  *value 获取到的目标属性值保存在int *value中
86  *
87  * @return  0 on success, negative error on failure.
88  */
89 int aos_mixer_get_int_value(aos_mixer_t *mixer, char *name, int *value);
90 
91 /**
92  * 关闭mixer设备节点
93  *
94  * @param[in]  mixer  期望关闭的mixer设备节点信息的指针
95  *
96  * @return  0 on success, negative error on failure.
97  */
98 int aos_mixer_close(aos_mixer_t *mixer);
99 
100 /**
101  * 设置所有声卡中名为“Master Volume TX”的属性的值为volume
102  *
103  * @param[in]  volume  期望往声卡中配置的音量值
104  *
105  * @return  0 on success, negative error on failure.
106  */
107 int aos_set_master_volume(int volume);
108 
109 /**
110  * 获取声卡中名为“Master Volume TX”的属性的值,并保存在volume指针中
111  *
112  * @param[out]  *volume  获取到声卡音量值后保存到volume指针中
113  *
114  * @return  0 on success, negative error on failure.
115  */
116 int aos_get_master_volume(int *volume);
117 
118 /**
119  * 设置所有声卡为mute状态,对应的属性名为“Master Mute State”
120  *
121  * @param[in]  mute  1为mute状态,0为unmute状态
122  *
123  * @return  0 on success, negative error on failure.
124  */
125 int aos_set_mute_state(int mute);
126 
127 /**
128  * 获取声卡的mute状态,并保存在*mute指针中
129  *
130  * @param[out]  *mute  返回1为mute状态,0为unmute状态
131  *
132  * @return  0 on success, negative error on failure.
133  */
134 int aos_get_mute_state(int *mute);
135 
136 /**
137  * @}
138  */
139 
140 #ifdef __cplusplus
141 }
142 #endif
143 #endif /* SOUND_CONTROL_H */