18cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin/*
28cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin * Copyright (C) 2011 The Android Open Source Project
38cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin *
48cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin * Licensed under the Apache License, Version 2.0 (the "License");
58cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin * you may not use this file except in compliance with the License.
68cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin * You may obtain a copy of the License at
78cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin *
88cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin *      http://www.apache.org/licenses/LICENSE-2.0
98cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin *
108cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin * Unless required by applicable law or agreed to in writing, software
118cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin * distributed under the License is distributed on an "AS IS" BASIS,
128cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin * See the License for the specific language governing permissions and
148cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin * limitations under the License.
158cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin */
168cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
178cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin#define LOG_TAG "audio_policy_default"
188cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin//#define LOG_NDEBUG 0
198cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
208cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin#include <errno.h>
218cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin#include <stdint.h>
228cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin#include <stdlib.h>
238cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin#include <string.h>
248cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
258cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin#include <hardware/hardware.h>
26aa21172bcd4c332eec78d34ffdafd8cc0178ea95Dima Zavin#include <system/audio.h>
271199865d0cb68750e2b959cb3ed04e1bc0f1c9d1Dima Zavin#include <system/audio_policy.h>
283bc15860a9d8eea076dc19128373631bf1e162caDima Zavin#include <hardware/audio_policy.h>
298cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
308cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstruct default_ap_module {
318cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    struct audio_policy_module module;
328cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin};
338cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
348cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstruct default_ap_device {
358cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    struct audio_policy_device device;
368cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin};
378cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
388cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstruct default_audio_policy {
398cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    struct audio_policy policy;
408cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
418cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    struct audio_policy_service_ops *aps_ops;
428cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    void *service;
438cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin};
448cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
458cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_set_device_connection_state(struct audio_policy *pol,
468cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                          audio_devices_t device,
478cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                          audio_policy_dev_state_t state,
488cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                          const char *device_address)
498cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
508cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return -ENOSYS;
518cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
528cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
538cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic audio_policy_dev_state_t ap_get_device_connection_state(
548cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                            const struct audio_policy *pol,
558cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                            audio_devices_t device,
568cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                            const char *device_address)
578cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
588cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE;
598cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
608cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
616df641e269639dbb81bb1c19f47d3b9e5e3ff7d7Glenn Kastenstatic void ap_set_phone_state(struct audio_policy *pol, audio_mode_t state)
628cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
638cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
648cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
65080a80212b6ec954fe8a424d9fb286c5cf1d5021Glenn Kasten// deprecated, never called
668cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_set_ringer_mode(struct audio_policy *pol, uint32_t mode,
678cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                               uint32_t mask)
688cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
698cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
708cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
718cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_set_force_use(struct audio_policy *pol,
728cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                          audio_policy_force_use_t usage,
738cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                          audio_policy_forced_cfg_t config)
748cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
758cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
768cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
778cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    /* retreive current device category forced for a given usage */
788cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic audio_policy_forced_cfg_t ap_get_force_use(
798cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                               const struct audio_policy *pol,
808cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                               audio_policy_force_use_t usage)
818cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
828cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return AUDIO_POLICY_FORCE_NONE;
838cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
848cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
858cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin/* if can_mute is true, then audio streams that are marked ENFORCED_AUDIBLE
868cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin * can still be muted. */
878cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_set_can_mute_enforced_audible(struct audio_policy *pol,
888cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                             bool can_mute)
898cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
908cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
918cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
928cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_init_check(const struct audio_policy *pol)
938cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
948cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return 0;
958cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
968cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
978cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic audio_io_handle_t ap_get_output(struct audio_policy *pol,
988cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                       audio_stream_type_t stream,
998cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                       uint32_t sampling_rate,
100fe79eb3f06967f863a637e546eb4421d0da2283bGlenn Kasten                                       audio_format_t format,
101a635449697a2df5de98e72cfc24e926b641d5544Glenn Kasten                                       audio_channel_mask_t channelMask,
102072a79d3e4d732dbdeee3b24c68bb36fef92aca5Richard Fitzgerald                                       audio_output_flags_t flags,
103072a79d3e4d732dbdeee3b24c68bb36fef92aca5Richard Fitzgerald                                       const audio_offload_info_t *info)
1048cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
1058cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return 0;
1068cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
1078cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
1088cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_start_output(struct audio_policy *pol, audio_io_handle_t output,
1098cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                           audio_stream_type_t stream, int session)
1108cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
1118cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return -ENOSYS;
1128cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
1138cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
1148cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_stop_output(struct audio_policy *pol, audio_io_handle_t output,
1158cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                          audio_stream_type_t stream, int session)
1168cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
1178cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return -ENOSYS;
1188cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
1198cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
1208cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_release_output(struct audio_policy *pol,
1218cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                              audio_io_handle_t output)
1228cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
1238cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
1248cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
125ae2e42b2447d011bd6cf9d5b4413dd3557de0035Glenn Kastenstatic audio_io_handle_t ap_get_input(struct audio_policy *pol, audio_source_t inputSource,
1268cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                      uint32_t sampling_rate,
127fe79eb3f06967f863a637e546eb4421d0da2283bGlenn Kasten                                      audio_format_t format,
128a635449697a2df5de98e72cfc24e926b641d5544Glenn Kasten                                      audio_channel_mask_t channelMask,
1298cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                      audio_in_acoustics_t acoustics)
1308cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
1318cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return 0;
1328cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
1338cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
1348cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_start_input(struct audio_policy *pol, audio_io_handle_t input)
1358cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
1368cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return -ENOSYS;
1378cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
1388cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
1398cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_stop_input(struct audio_policy *pol, audio_io_handle_t input)
1408cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
1418cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return -ENOSYS;
1428cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
1438cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
1448cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_release_input(struct audio_policy *pol, audio_io_handle_t input)
1458cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
1468cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
1478cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
1488cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_init_stream_volume(struct audio_policy *pol,
1498cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                  audio_stream_type_t stream, int index_min,
1508cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                  int index_max)
1518cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
1528cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
1538cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
1548cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_set_stream_volume_index(struct audio_policy *pol,
1558cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                      audio_stream_type_t stream,
1568cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                      int index)
1578cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
1588cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return -ENOSYS;
1598cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
1608cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
1618cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_get_stream_volume_index(const struct audio_policy *pol,
1628cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                      audio_stream_type_t stream,
1638cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                      int *index)
1648cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
1658cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return -ENOSYS;
1668cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
1678cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
168ca20b17b419eec2b196877be38f9c4290449aeacEric Laurentstatic int ap_set_stream_volume_index_for_device(struct audio_policy *pol,
169ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent                                      audio_stream_type_t stream,
170ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent                                      int index,
171ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent                                      audio_devices_t device)
172ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent{
173ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent    return -ENOSYS;
174ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent}
175ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent
176ca20b17b419eec2b196877be38f9c4290449aeacEric Laurentstatic int ap_get_stream_volume_index_for_device(const struct audio_policy *pol,
177ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent                                      audio_stream_type_t stream,
178ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent                                      int *index,
179ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent                                      audio_devices_t device)
180ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent{
181ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent    return -ENOSYS;
182ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent}
183ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent
1848cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic uint32_t ap_get_strategy_for_stream(const struct audio_policy *pol,
1858cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                           audio_stream_type_t stream)
1868cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
1878cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return 0;
1888cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
1898cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
19083c62ce4e319a11d14a27c6368811f9efc1e8c5aEric Laurentstatic audio_devices_t ap_get_devices_for_stream(const struct audio_policy *pol,
1918cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                          audio_stream_type_t stream)
1928cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
1938cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return 0;
1948cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
1958cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
1968cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic audio_io_handle_t ap_get_output_for_effect(struct audio_policy *pol,
19748915acb392773c1fcb86e2711eab468410a0baaGlenn Kasten                                            const struct effect_descriptor_s *desc)
1988cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
1998cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return 0;
2008cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
2018cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
2028cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_register_effect(struct audio_policy *pol,
20348915acb392773c1fcb86e2711eab468410a0baaGlenn Kasten                              const struct effect_descriptor_s *desc,
2048cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                              audio_io_handle_t output,
2058cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                              uint32_t strategy,
2068cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                              int session,
2078cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                              int id)
2088cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
2098cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return -ENOSYS;
2108cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
2118cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
2128cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_unregister_effect(struct audio_policy *pol, int id)
2138cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
2148cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return -ENOSYS;
2158cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
2168cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
21778d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurentstatic int ap_set_effect_enabled(struct audio_policy *pol, int id, bool enabled)
21878d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent{
21978d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent    return -ENOSYS;
22078d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent}
22178d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent
2225161a847dd2108bec49f1ce3fa1d1c3e3cd0c851Glenn Kastenstatic bool ap_is_stream_active(const struct audio_policy *pol, audio_stream_type_t stream,
2238cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                                uint32_t in_past_ms)
2248cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
2258cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return false;
2268cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
2278cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
2288cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_dump(const struct audio_policy *pol, int fd)
2298cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
2308cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return -ENOSYS;
2318cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
2328cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
233072a79d3e4d732dbdeee3b24c68bb36fef92aca5Richard Fitzgeraldstatic bool ap_is_offload_supported(const struct audio_policy *pol,
234072a79d3e4d732dbdeee3b24c68bb36fef92aca5Richard Fitzgerald                                   const audio_offload_info_t *info)
235072a79d3e4d732dbdeee3b24c68bb36fef92aca5Richard Fitzgerald{
236072a79d3e4d732dbdeee3b24c68bb36fef92aca5Richard Fitzgerald    return false;
237072a79d3e4d732dbdeee3b24c68bb36fef92aca5Richard Fitzgerald}
238072a79d3e4d732dbdeee3b24c68bb36fef92aca5Richard Fitzgerald
2398cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int create_default_ap(const struct audio_policy_device *device,
2408cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                             struct audio_policy_service_ops *aps_ops,
2418cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                             void *service,
2428cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                             struct audio_policy **ap)
2438cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
2448cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    struct default_ap_device *dev;
2458cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    struct default_audio_policy *dap;
2468cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    int ret;
2478cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
2488cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    *ap = NULL;
2498cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
2508cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    if (!service || !aps_ops)
2518cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin        return -EINVAL;
2528cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
2538cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap = (struct default_audio_policy *)calloc(1, sizeof(*dap));
2548cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    if (!dap)
2558cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin        return -ENOMEM;
2568cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
2578cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.set_device_connection_state = ap_set_device_connection_state;
2588cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.get_device_connection_state = ap_get_device_connection_state;
2598cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.set_phone_state = ap_set_phone_state;
2608cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.set_ringer_mode = ap_set_ringer_mode;
2618cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.set_force_use = ap_set_force_use;
2628cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.get_force_use = ap_get_force_use;
2638cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.set_can_mute_enforced_audible =
2648cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin        ap_set_can_mute_enforced_audible;
2658cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.init_check = ap_init_check;
2668cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.get_output = ap_get_output;
2678cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.start_output = ap_start_output;
2688cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.stop_output = ap_stop_output;
2698cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.release_output = ap_release_output;
2708cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.get_input = ap_get_input;
2718cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.start_input = ap_start_input;
2728cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.stop_input = ap_stop_input;
2738cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.release_input = ap_release_input;
2748cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.init_stream_volume = ap_init_stream_volume;
2758cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.set_stream_volume_index = ap_set_stream_volume_index;
2768cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.get_stream_volume_index = ap_get_stream_volume_index;
277ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent    dap->policy.set_stream_volume_index_for_device = ap_set_stream_volume_index_for_device;
278ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent    dap->policy.get_stream_volume_index_for_device = ap_get_stream_volume_index_for_device;
2798cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.get_strategy_for_stream = ap_get_strategy_for_stream;
2808cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.get_devices_for_stream = ap_get_devices_for_stream;
2818cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.get_output_for_effect = ap_get_output_for_effect;
2828cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.register_effect = ap_register_effect;
2838cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.unregister_effect = ap_unregister_effect;
28478d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent    dap->policy.set_effect_enabled = ap_set_effect_enabled;
2858cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.is_stream_active = ap_is_stream_active;
2868cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->policy.dump = ap_dump;
2878cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
288072a79d3e4d732dbdeee3b24c68bb36fef92aca5Richard Fitzgerald    dap->policy.is_offload_supported = ap_is_offload_supported;
289072a79d3e4d732dbdeee3b24c68bb36fef92aca5Richard Fitzgerald
2908cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->service = service;
2918cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dap->aps_ops = aps_ops;
2928cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
2938cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    *ap = &dap->policy;
2948cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return 0;
2958cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
2968cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
2978cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int destroy_default_ap(const struct audio_policy_device *ap_dev,
2988cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                              struct audio_policy *ap)
2998cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
3008cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    free(ap);
3018cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return 0;
3028cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
3038cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
3048cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int default_ap_dev_close(hw_device_t* device)
3058cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
3068cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    free(device);
3078cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return 0;
3088cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
3098cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
3108cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int default_ap_dev_open(const hw_module_t* module, const char* name,
3118cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin                               hw_device_t** device)
3128cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{
3138cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    struct default_ap_device *dev;
3148cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
3158cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    *device = NULL;
3168cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
3178cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    if (strcmp(name, AUDIO_POLICY_INTERFACE) != 0)
3188cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin        return -EINVAL;
3198cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
3208cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dev = (struct default_ap_device *)calloc(1, sizeof(*dev));
3218cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    if (!dev)
3228cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin        return -ENOMEM;
3238cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
3248cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dev->device.common.tag = HARDWARE_DEVICE_TAG;
3258cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dev->device.common.version = 0;
3268cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dev->device.common.module = (hw_module_t *)module;
3278cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dev->device.common.close = default_ap_dev_close;
3288cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dev->device.create_audio_policy = create_default_ap;
3298cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    dev->device.destroy_audio_policy = destroy_default_ap;
3308cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
3318cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    *device = &dev->device.common;
3328cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
3338cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    return 0;
3348cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}
3358cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
3368cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic struct hw_module_methods_t default_ap_module_methods = {
3378cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    .open = default_ap_dev_open,
3388cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin};
3398cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin
3408cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstruct default_ap_module HAL_MODULE_INFO_SYM = {
3418cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    .module = {
3428cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin        .common = {
3438cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin            .tag            = HARDWARE_MODULE_TAG,
3448cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin            .version_major  = 1,
3458cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin            .version_minor  = 0,
3468cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin            .id             = AUDIO_POLICY_HARDWARE_MODULE_ID,
3478cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin            .name           = "Default audio policy HAL",
3488cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin            .author         = "The Android Open Source Project",
3498cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin            .methods        = &default_ap_module_methods,
3508cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin        },
3518cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin    },
3528cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin};
353