audio_policy.c revision 5161a847dd2108bec49f1ce3fa1d1c3e3cd0c851
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 618cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_set_phone_state(struct audio_policy *pol, int state) 628cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 638cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 648cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 658cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_set_ringer_mode(struct audio_policy *pol, uint32_t mode, 668cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin uint32_t mask) 678cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 688cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 698cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 708cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_set_force_use(struct audio_policy *pol, 718cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_policy_force_use_t usage, 728cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_policy_forced_cfg_t config) 738cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 748cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 758cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 768cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin /* retreive current device category forced for a given usage */ 778cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic audio_policy_forced_cfg_t ap_get_force_use( 788cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin const struct audio_policy *pol, 798cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_policy_force_use_t usage) 808cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 818cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return AUDIO_POLICY_FORCE_NONE; 828cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 838cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 848cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin/* if can_mute is true, then audio streams that are marked ENFORCED_AUDIBLE 858cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin * can still be muted. */ 868cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_set_can_mute_enforced_audible(struct audio_policy *pol, 878cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin bool can_mute) 888cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 898cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 908cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 918cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_init_check(const struct audio_policy *pol) 928cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 938cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 948cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 958cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 968cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic audio_io_handle_t ap_get_output(struct audio_policy *pol, 978cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream, 988cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin uint32_t sampling_rate, 998cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin uint32_t format, 1008cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin uint32_t channels, 1018cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_policy_output_flags_t flags) 1028cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1038cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 1048cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1058cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1068cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_start_output(struct audio_policy *pol, audio_io_handle_t output, 1078cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream, int session) 1088cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1098cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 1108cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1118cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1128cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_stop_output(struct audio_policy *pol, audio_io_handle_t output, 1138cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream, int session) 1148cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1158cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 1168cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1178cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1188cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_release_output(struct audio_policy *pol, 1198cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_io_handle_t output) 1208cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1218cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1228cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1238cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic audio_io_handle_t ap_get_input(struct audio_policy *pol, int inputSource, 1248cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin uint32_t sampling_rate, 1258cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin uint32_t format, 1268cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin uint32_t channels, 1278cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_in_acoustics_t acoustics) 1288cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1298cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 1308cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1318cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1328cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_start_input(struct audio_policy *pol, audio_io_handle_t input) 1338cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1348cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 1358cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1368cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1378cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_stop_input(struct audio_policy *pol, audio_io_handle_t input) 1388cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1398cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 1408cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1418cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1428cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_release_input(struct audio_policy *pol, audio_io_handle_t input) 1438cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1448cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1458cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1468cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic void ap_init_stream_volume(struct audio_policy *pol, 1478cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream, int index_min, 1488cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin int index_max) 1498cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1508cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1518cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1528cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_set_stream_volume_index(struct audio_policy *pol, 1538cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream, 1548cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin int index) 1558cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1568cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 1578cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1588cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1598cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_get_stream_volume_index(const struct audio_policy *pol, 1608cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream, 1618cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin int *index) 1628cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1638cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 1648cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1658cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1668cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic uint32_t ap_get_strategy_for_stream(const struct audio_policy *pol, 1678cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream) 1688cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1698cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 1708cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1718cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1728cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic uint32_t ap_get_devices_for_stream(const struct audio_policy *pol, 1738cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_stream_type_t stream) 1748cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1758cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 1768cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1778cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1788cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic audio_io_handle_t ap_get_output_for_effect(struct audio_policy *pol, 1798cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin struct effect_descriptor_s *desc) 1808cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1818cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 1828cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1838cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1848cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_register_effect(struct audio_policy *pol, 1858cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin struct effect_descriptor_s *desc, 1868cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin audio_io_handle_t output, 1878cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin uint32_t strategy, 1888cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin int session, 1898cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin int id) 1908cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1918cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 1928cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1938cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 1948cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_unregister_effect(struct audio_policy *pol, int id) 1958cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 1968cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 1978cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 1988cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 19978d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurentstatic int ap_set_effect_enabled(struct audio_policy *pol, int id, bool enabled) 20078d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent{ 20178d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent return -ENOSYS; 20278d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent} 20378d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent 2045161a847dd2108bec49f1ce3fa1d1c3e3cd0c851Glenn Kastenstatic bool ap_is_stream_active(const struct audio_policy *pol, audio_stream_type_t stream, 2058cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin uint32_t in_past_ms) 2068cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 2078cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return false; 2088cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 2098cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2108cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int ap_dump(const struct audio_policy *pol, int fd) 2118cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 2128cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOSYS; 2138cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 2148cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2158cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int create_default_ap(const struct audio_policy_device *device, 2168cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin struct audio_policy_service_ops *aps_ops, 2178cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin void *service, 2188cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin struct audio_policy **ap) 2198cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 2208cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin struct default_ap_device *dev; 2218cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin struct default_audio_policy *dap; 2228cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin int ret; 2238cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2248cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin *ap = NULL; 2258cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2268cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin if (!service || !aps_ops) 2278cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -EINVAL; 2288cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2298cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap = (struct default_audio_policy *)calloc(1, sizeof(*dap)); 2308cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin if (!dap) 2318cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOMEM; 2328cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2338cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.set_device_connection_state = ap_set_device_connection_state; 2348cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_device_connection_state = ap_get_device_connection_state; 2358cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.set_phone_state = ap_set_phone_state; 2368cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.set_ringer_mode = ap_set_ringer_mode; 2378cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.set_force_use = ap_set_force_use; 2388cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_force_use = ap_get_force_use; 2398cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.set_can_mute_enforced_audible = 2408cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin ap_set_can_mute_enforced_audible; 2418cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.init_check = ap_init_check; 2428cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_output = ap_get_output; 2438cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.start_output = ap_start_output; 2448cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.stop_output = ap_stop_output; 2458cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.release_output = ap_release_output; 2468cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_input = ap_get_input; 2478cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.start_input = ap_start_input; 2488cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.stop_input = ap_stop_input; 2498cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.release_input = ap_release_input; 2508cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.init_stream_volume = ap_init_stream_volume; 2518cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.set_stream_volume_index = ap_set_stream_volume_index; 2528cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_stream_volume_index = ap_get_stream_volume_index; 2538cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_strategy_for_stream = ap_get_strategy_for_stream; 2548cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_devices_for_stream = ap_get_devices_for_stream; 2558cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.get_output_for_effect = ap_get_output_for_effect; 2568cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.register_effect = ap_register_effect; 2578cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.unregister_effect = ap_unregister_effect; 25878d2c69af4ab35ac6ae8e78fc3a61e7023a60769Eric Laurent dap->policy.set_effect_enabled = ap_set_effect_enabled; 2598cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.is_stream_active = ap_is_stream_active; 2608cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->policy.dump = ap_dump; 2618cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2628cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->service = service; 2638cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dap->aps_ops = aps_ops; 2648cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2658cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin *ap = &dap->policy; 2668cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 2678cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 2688cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2698cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int destroy_default_ap(const struct audio_policy_device *ap_dev, 2708cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin struct audio_policy *ap) 2718cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 2728cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin free(ap); 2738cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 2748cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 2758cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2768cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int default_ap_dev_close(hw_device_t* device) 2778cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 2788cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin free(device); 2798cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 2808cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 2818cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2828cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic int default_ap_dev_open(const hw_module_t* module, const char* name, 2838cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin hw_device_t** device) 2848cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin{ 2858cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin struct default_ap_device *dev; 2868cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2878cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin *device = NULL; 2888cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2898cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin if (strcmp(name, AUDIO_POLICY_INTERFACE) != 0) 2908cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -EINVAL; 2918cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2928cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dev = (struct default_ap_device *)calloc(1, sizeof(*dev)); 2938cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin if (!dev) 2948cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return -ENOMEM; 2958cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 2968cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dev->device.common.tag = HARDWARE_DEVICE_TAG; 2978cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dev->device.common.version = 0; 2988cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dev->device.common.module = (hw_module_t *)module; 2998cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dev->device.common.close = default_ap_dev_close; 3008cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dev->device.create_audio_policy = create_default_ap; 3018cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin dev->device.destroy_audio_policy = destroy_default_ap; 3028cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 3038cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin *device = &dev->device.common; 3048cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 3058cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin return 0; 3068cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin} 3078cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 3088cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstatic struct hw_module_methods_t default_ap_module_methods = { 3098cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .open = default_ap_dev_open, 3108cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}; 3118cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin 3128cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavinstruct default_ap_module HAL_MODULE_INFO_SYM = { 3138cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .module = { 3148cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .common = { 3158cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .tag = HARDWARE_MODULE_TAG, 3168cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .version_major = 1, 3178cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .version_minor = 0, 3188cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .id = AUDIO_POLICY_HARDWARE_MODULE_ID, 3198cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .name = "Default audio policy HAL", 3208cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .author = "The Android Open Source Project", 3218cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin .methods = &default_ap_module_methods, 3228cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin }, 3238cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin }, 3248cc353abc94a557dcff0f2989f7ca6351fcfdb08Dima Zavin}; 325