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, 102da4b0b26d170971448fdb04817b308900b5a6dd8Eric Laurent audio_output_flags_t flags) 1038cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1048cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 1058cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1068cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1078cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_start_output(struct audio_policy *pol, audio_io_handle_t output, 1088cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream, int session) 1098cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1108cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 1118cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1128cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1138cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_stop_output(struct audio_policy *pol, audio_io_handle_t output, 1148cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream, int session) 1158cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1168cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 1178cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1188cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1198cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_release_output(struct audio_policy *pol, 1208cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_io_handle_t output) 1218cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1228cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1238cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 124ae2e42b2447d011bd6cf9d5b4413dd3557de0035Glenn Kastenstatic audio_io_handle_t ap_get_input(struct audio_policy *pol, audio_source_t inputSource, 1258cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin uint32_t sampling_rate, 126fe79eb3f06967f863a637e546eb4421d0da2283bGlenn Kasten audio_format_t format, 127a635449697a2df5de98e72cfc24e926b641d5544Glenn Kasten audio_channel_mask_t channelMask, 1288cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_in_acoustics_t acoustics) 1298cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1308cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 1318cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1328cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1338cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_start_input(struct audio_policy *pol, audio_io_handle_t input) 1348cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1358cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 1368cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1378cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1388cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_stop_input(struct audio_policy *pol, audio_io_handle_t input) 1398cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1408cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 1418cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1428cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1438cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_release_input(struct audio_policy *pol, audio_io_handle_t input) 1448cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1458cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1468cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1478cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_init_stream_volume(struct audio_policy *pol, 1488cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream, int index_min, 1498cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin int index_max) 1508cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1518cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1528cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1538cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_set_stream_volume_index(struct audio_policy *pol, 1548cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream, 1558cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin int index) 1568cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1578cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 1588cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1598cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1608cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_get_stream_volume_index(const struct audio_policy *pol, 1618cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream, 1628cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin int *index) 1638cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1648cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 1658cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1668cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 167ca20b17b419eec2b196877be38f9c4290449aeacEric Laurentstatic int ap_set_stream_volume_index_for_device(struct audio_policy *pol, 168ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent audio_stream_type_t stream, 169ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent int index, 170ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent audio_devices_t device) 171ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent{ 172ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent return -ENOSYS; 173ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent} 174ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent 175ca20b17b419eec2b196877be38f9c4290449aeacEric Laurentstatic int ap_get_stream_volume_index_for_device(const struct audio_policy *pol, 176ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent audio_stream_type_t stream, 177ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent int *index, 178ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent audio_devices_t device) 179ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent{ 180ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent return -ENOSYS; 181ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent} 182ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent 1838cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic uint32_t ap_get_strategy_for_stream(const struct audio_policy *pol, 1848cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream) 1858cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1868cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 1878cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1888cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 18983c62ce4e319a11d14a27c6368811f9efc1e8c5aEric Laurentstatic audio_devices_t ap_get_devices_for_stream(const struct audio_policy *pol, 1908cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream) 1918cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1928cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 1938cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1948cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1958cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic audio_io_handle_t ap_get_output_for_effect(struct audio_policy *pol, 19648915acb392773c1fcb86e2711eab468410a0baaGlenn Kasten const struct effect_descriptor_s *desc) 1978cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1988cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 1998cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 2008cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2018cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_register_effect(struct audio_policy *pol, 20248915acb392773c1fcb86e2711eab468410a0baaGlenn Kasten const struct effect_descriptor_s *desc, 2038cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_io_handle_t output, 2048cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin uint32_t strategy, 2058cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin int session, 2068cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin int id) 2078cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 2088cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 2098cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 2108cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2118cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_unregister_effect(struct audio_policy *pol, int id) 2128cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 2138cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 2148cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 2158cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 21678d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurentstatic int ap_set_effect_enabled(struct audio_policy *pol, int id, bool enabled) 21778d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent{ 21878d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent return -ENOSYS; 21978d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent} 22078d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent 2215161a847dd2108bec49f1ce3fa1d1c3e3cd0c851Glenn Kastenstatic bool ap_is_stream_active(const struct audio_policy *pol, audio_stream_type_t stream, 2228cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin uint32_t in_past_ms) 2238cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 2248cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return false; 2258cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 2268cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2278cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_dump(const struct audio_policy *pol, int fd) 2288cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 2298cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 2308cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 2318cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2328cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int create_default_ap(const struct audio_policy_device *device, 2338cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin struct audio_policy_service_ops *aps_ops, 2348cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin void *service, 2358cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin struct audio_policy **ap) 2368cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 2378cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin struct default_ap_device *dev; 2388cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin struct default_audio_policy *dap; 2398cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin int ret; 2408cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2418cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin *ap = NULL; 2428cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2438cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin if (!service || !aps_ops) 2448cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -EINVAL; 2458cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2468cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap = (struct default_audio_policy *)calloc(1, sizeof(*dap)); 2478cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin if (!dap) 2488cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOMEM; 2498cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2508cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.set_device_connection_state = ap_set_device_connection_state; 2518cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_device_connection_state = ap_get_device_connection_state; 2528cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.set_phone_state = ap_set_phone_state; 2538cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.set_ringer_mode = ap_set_ringer_mode; 2548cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.set_force_use = ap_set_force_use; 2558cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_force_use = ap_get_force_use; 2568cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.set_can_mute_enforced_audible = 2578cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin ap_set_can_mute_enforced_audible; 2588cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.init_check = ap_init_check; 2598cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_output = ap_get_output; 2608cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.start_output = ap_start_output; 2618cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.stop_output = ap_stop_output; 2628cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.release_output = ap_release_output; 2638cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_input = ap_get_input; 2648cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.start_input = ap_start_input; 2658cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.stop_input = ap_stop_input; 2668cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.release_input = ap_release_input; 2678cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.init_stream_volume = ap_init_stream_volume; 2688cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.set_stream_volume_index = ap_set_stream_volume_index; 2698cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_stream_volume_index = ap_get_stream_volume_index; 270ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent dap->policy.set_stream_volume_index_for_device = ap_set_stream_volume_index_for_device; 271ca20b17b419eec2b196877be38f9c4290449aeacEric Laurent dap->policy.get_stream_volume_index_for_device = ap_get_stream_volume_index_for_device; 2728cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_strategy_for_stream = ap_get_strategy_for_stream; 2738cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_devices_for_stream = ap_get_devices_for_stream; 2748cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_output_for_effect = ap_get_output_for_effect; 2758cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.register_effect = ap_register_effect; 2768cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.unregister_effect = ap_unregister_effect; 27778d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent dap->policy.set_effect_enabled = ap_set_effect_enabled; 2788cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.is_stream_active = ap_is_stream_active; 2798cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.dump = ap_dump; 2808cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2818cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->service = service; 2828cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->aps_ops = aps_ops; 2838cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2848cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin *ap = &dap->policy; 2858cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 2868cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 2878cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2888cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int destroy_default_ap(const struct audio_policy_device *ap_dev, 2898cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin struct audio_policy *ap) 2908cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 2918cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin free(ap); 2928cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 2938cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 2948cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2958cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int default_ap_dev_close(hw_device_t* device) 2968cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 2978cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin free(device); 2988cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 2998cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 3008cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 3018cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int default_ap_dev_open(const hw_module_t* module, const char* name, 3028cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin hw_device_t** device) 3038cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 3048cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin struct default_ap_device *dev; 3058cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 3068cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin *device = NULL; 3078cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 3088cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin if (strcmp(name, AUDIO_POLICY_INTERFACE) != 0) 3098cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -EINVAL; 3108cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 3118cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dev = (struct default_ap_device *)calloc(1, sizeof(*dev)); 3128cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin if (!dev) 3138cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOMEM; 3148cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 3158cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dev->device.common.tag = HARDWARE_DEVICE_TAG; 3168cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dev->device.common.version = 0; 3178cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dev->device.common.module = (hw_module_t *)module; 3188cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dev->device.common.close = default_ap_dev_close; 3198cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dev->device.create_audio_policy = create_default_ap; 3208cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dev->device.destroy_audio_policy = destroy_default_ap; 3218cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 3228cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin *device = &dev->device.common; 3238cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 3248cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 3258cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 3268cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 3278cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic struct hw_module_methods_t default_ap_module_methods = { 3288cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .open = default_ap_dev_open, 3298cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}; 3308cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 3318cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstruct default_ap_module HAL_MODULE_INFO_SYM = { 3328cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .module = { 3338cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .common = { 3348cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .tag = HARDWARE_MODULE_TAG, 3358cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .version_major = 1, 3368cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .version_minor = 0, 3378cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .id = AUDIO_POLICY_HARDWARE_MODULE_ID, 3388cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .name = "Default audio policy HAL", 3398cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .author = "The Android Open Source Project", 3408cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .methods = &default_ap_module_methods, 3418cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin }, 3428cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin }, 3438cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}; 344