1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef AUDIO_EXTN_H
18 #define AUDIO_EXTN_H
19 
20 #include <cutils/str_parms.h>
21 
22 #define HW_INFO_ARRAY_MAX_SIZE 32
23 
24 struct snd_card_split {
25     char device[HW_INFO_ARRAY_MAX_SIZE];
26     char snd_card[HW_INFO_ARRAY_MAX_SIZE];
27     char form_factor[HW_INFO_ARRAY_MAX_SIZE];
28 };
29 
30 void *audio_extn_extspk_init(struct audio_device *adev);
31 void audio_extn_extspk_deinit(void *extn);
32 void audio_extn_extspk_update(void* extn);
33 void audio_extn_extspk_set_mode(void* extn, audio_mode_t mode);
34 void audio_extn_extspk_set_voice_vol(void* extn, float vol);
35 struct snd_card_split *audio_extn_get_snd_card_split();
36 void audio_extn_set_snd_card_split(const char* in_snd_card_name);
37 
38 #ifndef SPKR_PROT_ENABLED
39 #define audio_extn_spkr_prot_init(adev)       (0)
40 #define audio_extn_spkr_prot_start_processing(snd_device)    (-EINVAL)
41 #define audio_extn_spkr_prot_calib_cancel(adev) (0)
42 #define audio_extn_spkr_prot_stop_processing(snd_device)     (0)
43 #define audio_extn_spkr_prot_is_enabled() (false)
44 #define audio_extn_get_spkr_prot_snd_device(snd_device) (snd_device)
45 #define audio_extn_spkr_prot_deinit(adev)       (0)
46 #else
47 void audio_extn_spkr_prot_init(void *adev);
48 int audio_extn_spkr_prot_start_processing(snd_device_t snd_device);
49 void audio_extn_spkr_prot_stop_processing(snd_device_t snd_device);
50 bool audio_extn_spkr_prot_is_enabled();
51 int audio_extn_get_spkr_prot_snd_device(snd_device_t snd_device);
52 void audio_extn_spkr_prot_calib_cancel(void *adev);
53 void audio_extn_spkr_prot_deinit(void *adev);
54 
55 #endif
56 
57 #ifndef HFP_ENABLED
58 #define audio_extn_hfp_is_active(adev)                  (0)
59 #define audio_extn_hfp_get_usecase()                    (-1)
60 #define audio_extn_hfp_set_parameters(adev, params)     (0)
61 #define audio_extn_hfp_set_mic_mute(adev, state)        (0)
62 
63 #else
64 bool audio_extn_hfp_is_active(struct audio_device *adev);
65 
66 audio_usecase_t audio_extn_hfp_get_usecase();
67 
68 void audio_extn_hfp_set_parameters(struct audio_device *adev,
69                                     struct str_parms *parms);
70 int audio_extn_hfp_set_mic_mute(struct audio_device *adev, bool state);
71 
72 #endif
73 
74 #ifndef USB_TUNNEL_ENABLED
75 #define audio_extn_usb_init(adev)                                      (0)
76 #define audio_extn_usb_deinit()                                        (0)
77 #define audio_extn_usb_add_device(device, card)                        (0)
78 #define audio_extn_usb_remove_device(device, card)                     (0)
79 #define audio_extn_usb_is_config_supported(bit_width, sample_rate, ch, pb) (false)
80 #define audio_extn_usb_enable_sidetone(device, enable)                 (0)
81 #define audio_extn_usb_set_sidetone_gain(parms, value, len)            (0)
82 #define audio_extn_usb_is_capture_supported()                          (false)
83 #define audio_extn_usb_get_max_channels(dir)                           (0)
84 #define audio_extn_usb_get_max_bit_width(dir)                          (0)
85 #define audio_extn_usb_sup_sample_rates(t, s, l)        ((t), (s), (l), 0) /* fix unused warn */
86 #define audio_extn_usb_alive(adev)                                     (false)
87 #define audio_extn_usb_find_service_interval(m, p)      ((m), (p), 0) /* fix unused warn */
88 #define audio_extn_usb_altset_for_service_interval(p, si, bw, sr, ch) (-1)
89 #define audio_extn_usb_usbid()                                         (NULL)
90 #else
91 void audio_extn_usb_init(void *adev);
92 void audio_extn_usb_deinit();
93 void audio_extn_usb_add_device(audio_devices_t device, int card);
94 void audio_extn_usb_remove_device(audio_devices_t device, int card);
95 bool audio_extn_usb_is_config_supported(unsigned int *bit_width,
96                                         unsigned int *sample_rate,
97                                         unsigned int *ch,
98                                         bool is_playback);
99 int audio_extn_usb_enable_sidetone(int device, bool enable);
100 int audio_extn_usb_set_sidetone_gain(struct str_parms *parms,
101                                      char *value, int len);
102 bool audio_extn_usb_is_capture_supported();
103 int audio_extn_usb_get_max_channels(bool is_playback);
104 int audio_extn_usb_get_max_bit_width(bool is_playback);
105 int audio_extn_usb_sup_sample_rates(bool is_playback, uint32_t *sr, uint32_t l);
106 bool audio_extn_usb_alive(int card);
107 unsigned long audio_extn_usb_find_service_interval(bool min, bool playback);
108 int audio_extn_usb_altset_for_service_interval(bool is_playback,
109                                                unsigned long service_interval,
110                                                uint32_t *bit_width,
111                                                uint32_t *sample_rate,
112                                                uint32_t *channel_count);
113 char *audio_extn_usb_usbid(void);
114 #endif
115 
116 
117 #ifndef SOUND_TRIGGER_ENABLED
118 #define audio_extn_sound_trigger_init(adev)                            (0)
119 #define audio_extn_sound_trigger_deinit(adev)                          (0)
120 #define audio_extn_sound_trigger_update_device_status(snd_dev, event)  (0)
121 #define audio_extn_sound_trigger_update_stream_status(uc_info, event)  (0)
122 #define audio_extn_sound_trigger_set_parameters(adev, parms)           (0)
123 #define audio_extn_sound_trigger_check_and_get_session(in)             (0)
124 #define audio_extn_sound_trigger_stop_lab(in)                          (0)
125 #define audio_extn_sound_trigger_read(in, buffer, bytes)               (0)
126 
127 #else
128 
129 enum st_event_type {
130     ST_EVENT_SND_DEVICE_FREE,
131     ST_EVENT_SND_DEVICE_BUSY,
132     ST_EVENT_STREAM_FREE,
133     ST_EVENT_STREAM_BUSY
134 };
135 typedef enum st_event_type st_event_type_t;
136 
137 int audio_extn_sound_trigger_init(struct audio_device *adev);
138 void audio_extn_sound_trigger_deinit(struct audio_device *adev);
139 void audio_extn_sound_trigger_update_device_status(snd_device_t snd_device,
140                                      st_event_type_t event);
141 void audio_extn_sound_trigger_update_stream_status(struct audio_usecase *uc_info,
142                                      st_event_type_t event);
143 void audio_extn_sound_trigger_set_parameters(struct audio_device *adev,
144                                              struct str_parms *parms);
145 void audio_extn_sound_trigger_check_and_get_session(struct stream_in *in);
146 void audio_extn_sound_trigger_stop_lab(struct stream_in *in);
147 int audio_extn_sound_trigger_read(struct stream_in *in, void *buffer,
148                                   size_t bytes);
149 #endif
150 
151 #ifndef A2DP_OFFLOAD_ENABLED
152 #define audio_extn_a2dp_init(adev)                       (0)
153 #define audio_extn_a2dp_start_playback()                 (0)
154 #define audio_extn_a2dp_stop_playback()                  (0)
155 #define audio_extn_a2dp_set_parameters(parms, reconfig)  (0)
156 #define audio_extn_a2dp_get_parameters(query, reply)     (0)
157 #define audio_extn_a2dp_is_force_device_switch()         (0)
158 #define audio_extn_a2dp_set_handoff_mode(is_on)          (0)
159 #define audio_extn_a2dp_get_sample_rate(sample_rate)     (0)
160 #define audio_extn_a2dp_get_encoder_latency()            (0)
161 #define audio_extn_a2dp_is_ready()                       (0)
162 #define audio_extn_a2dp_is_suspended()                   (0)
163 #else
164 void audio_extn_a2dp_init(void *adev);
165 int audio_extn_a2dp_start_playback();
166 int audio_extn_a2dp_stop_playback();
167 int audio_extn_a2dp_set_parameters(struct str_parms *parms, bool *reconfig);
168 int audio_extn_a2dp_get_parameters(struct str_parms *query,
169                                    struct str_parms *reply);
170 bool audio_extn_a2dp_is_force_device_switch();
171 void audio_extn_a2dp_set_handoff_mode(bool is_on);
172 void audio_extn_a2dp_get_sample_rate(int *sample_rate);
173 uint32_t audio_extn_a2dp_get_encoder_latency();
174 bool audio_extn_a2dp_is_ready();
175 bool audio_extn_a2dp_is_suspended();
176 #endif
177 
178 #ifndef DSM_FEEDBACK_ENABLED
179 #define audio_extn_dsm_feedback_enable(adev, snd_device, benable)                (0)
180 #else
181 void audio_extn_dsm_feedback_enable(struct audio_device *adev,
182                          snd_device_t snd_device,
183                          bool benable);
184 #endif
185 
186 void audio_extn_utils_send_default_app_type_cfg(void *platform, struct mixer *mixer);
187 int audio_extn_utils_send_app_type_cfg(struct audio_device *adev,
188                                        struct audio_usecase *usecase);
189 void audio_extn_utils_send_audio_calibration(struct audio_device *adev,
190                                              struct audio_usecase *usecase);
191 int audio_extn_utils_send_app_type_gain(struct audio_device *adev,
192                                         int app_type,
193                                         int *gain);
194 #ifndef HWDEP_CAL_ENABLED
195 #define  audio_extn_hwdep_cal_send(snd_card, acdb_handle) (0)
196 #else
197 void audio_extn_hwdep_cal_send(int snd_card, void *acdb_handle);
198 #endif
199 
200 #ifndef KPI_OPTIMIZE_ENABLED
201 #define audio_extn_perf_lock_init() (0)
202 #define audio_extn_perf_lock_acquire() (0)
203 #define audio_extn_perf_lock_release() (0)
204 #else
205 int audio_extn_perf_lock_init(void);
206 void audio_extn_perf_lock_acquire(void);
207 void audio_extn_perf_lock_release(void);
208 #endif /* KPI_OPTIMIZE_ENABLED */
209 
210 #ifndef HW_VARIANTS_ENABLED
211 #define hw_info_init(snd_card_name)                  (0)
212 #define hw_info_deinit(hw_info)                      (0)
213 #define hw_info_append_hw_type(hw_info,\
214         snd_device, device_name)                     (0)
215 #else
216 void *hw_info_init(const char *snd_card_name);
217 void hw_info_deinit(void *hw_info);
218 void hw_info_append_hw_type(void *hw_info, snd_device_t snd_device,
219                              char *device_name);
220 #endif /* HW_VARIANTS_ENABLED */
221 
222 typedef void (* snd_mon_cb)(void * stream, struct str_parms * parms);
223 #ifndef SND_MONITOR_ENABLED
224 #define audio_extn_snd_mon_init()           (0)
225 #define audio_extn_snd_mon_deinit()         (0)
226 #define audio_extn_snd_mon_register_listener(stream, cb) (0)
227 #define audio_extn_snd_mon_unregister_listener(stream) (0)
228 #else
229 int audio_extn_snd_mon_init();
230 int audio_extn_snd_mon_deinit();
231 int audio_extn_snd_mon_register_listener(void *stream, snd_mon_cb cb);
232 int audio_extn_snd_mon_unregister_listener(void *stream);
233 #endif
234 
235 bool audio_extn_utils_resolve_config_file(char[]);
236 int audio_extn_utils_get_platform_info(const char* snd_card_name,
237                                        char* platform_info_file);
238 int audio_extn_utils_get_snd_card_num();
239 #endif /* AUDIO_EXTN_H */
240