summaryrefslogtreecommitdiffstats
path: root/services/audiopolicy/engineconfigurable/parameter-framework
diff options
context:
space:
mode:
authorFrançois Gaffie <francois.gaffie@intel.com>2015-03-24 09:01:14 +0100
committerEric Laurent <elaurent@google.com>2015-04-24 14:57:55 -0700
commit65c3781db3443531deacecfbda5c7e7e82868a34 (patch)
tree5560072d1f61a9d76e437ef311ef282976fc253d /services/audiopolicy/engineconfigurable/parameter-framework
parent21db57282da8b3daba1549f3a8e41c4fbaf80059 (diff)
downloadframeworks_av-65c3781db3443531deacecfbda5c7e7e82868a34.zip
frameworks_av-65c3781db3443531deacecfbda5c7e7e82868a34.tar.gz
frameworks_av-65c3781db3443531deacecfbda5c7e7e82868a34.tar.bz2
Add a configurable version of the policy engine based on PFW
This patch adds a configurable version of the policy engine based on the parameter framework. This configurable engine shall be activated with a flag USE_CONFIGURABLE_AUDIO_POLICY within BoardConfig.mk This patch provides the generic configuration as an example. This configuration provides the same user experience as the default policy engine. Change-Id: Ic8217333ae370b89bfdd2ad11320c5f14ea4da34 Signed-off-by: François Gaffie <francois.gaffie@intel.com>
Diffstat (limited to 'services/audiopolicy/engineconfigurable/parameter-framework')
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/Android.mk7
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/example/Android.mk104
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/example/ParameterFrameworkConfigurationPolicy.xml15
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/example/README.md11
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_input_source.pfw515
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_accessibility.pfw302
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_dtmf.pfw637
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_enforced_audible.pfw358
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_media.pfw331
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_phone.pfw485
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_rerouting.pfw297
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_sonification.pfw485
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_sonification_respectful.pfw545
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_transmitted_through_speaker.pfw40
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/example/Settings/strategy_for_stream.pfw20
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/strategy_for_usage.pfw39
-rw-r--r--services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/volumes.pfw545
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicyClass.xml5
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicySubsystem-CommonTypes.xml170
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicySubsystem-Volume.xml26
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicySubsystem.xml137
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/example/policy_criteria.txt14
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/Android.mk40
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/InputSource.cpp53
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/InputSource.h49
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicyMappingKeys.h32
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.cpp105
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.h60
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystemBuilder.cpp29
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/Strategy.cpp54
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/Strategy.h49
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/Stream.cpp56
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/Stream.h49
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/Usage.cpp56
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/Usage.h49
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/VolumeProfile.cpp75
-rwxr-xr-xservices/audiopolicy/engineconfigurable/parameter-framework/plugin/VolumeProfile.h64
37 files changed, 5908 insertions, 0 deletions
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/Android.mk b/services/audiopolicy/engineconfigurable/parameter-framework/Android.mk
new file mode 100644
index 0000000..c402fd5
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/Android.mk
@@ -0,0 +1,7 @@
+LOCAL_PATH := $(call my-dir)
+
+#######################################################################
+# Recursive call sub-folder Android.mk
+#######################################################################
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Android.mk b/services/audiopolicy/engineconfigurable/parameter-framework/example/Android.mk
new file mode 100644
index 0000000..98b7152
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Android.mk
@@ -0,0 +1,104 @@
+################################################################################################
+#
+# @NOTE:
+# Audio Policy Engine configurable example for generic device build
+#
+# Any vendor shall have its own configuration within the corresponding device folder
+#
+################################################################################################
+
+
+LOCAL_PATH := $(call my-dir)
+
+##################################################################
+# CONFIGURATION FILES
+##################################################################
+######### Policy PFW top level file #########
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := ParameterFrameworkConfigurationPolicy.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/parameter-framework
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
+include $(BUILD_PREBUILT)
+
+
+########## Policy PFW Structures #########
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := PolicyClass.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/parameter-framework/Structure/Policy
+LOCAL_SRC_FILES := Structure/$(LOCAL_MODULE)
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := PolicySubsystem.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_REQUIRED_MODULES := \
+ PolicySubsystem-CommonTypes.xml \
+ PolicySubsystem-Volume.xml \
+ libpolicy-subsystem \
+
+LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/parameter-framework/Structure/Policy
+LOCAL_SRC_FILES := Structure/$(LOCAL_MODULE)
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := PolicySubsystem-CommonTypes.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/parameter-framework/Structure/Policy
+LOCAL_SRC_FILES := Structure/$(LOCAL_MODULE)
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := PolicySubsystem-Volume.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/parameter-framework/Structure/Policy
+LOCAL_SRC_FILES := Structure/$(LOCAL_MODULE)
+include $(BUILD_PREBUILT)
+
+######### Policy PFW Settings #########
+
+######## Generate routing domains file ########
+include $(CLEAR_VARS)
+LOCAL_MODULE := parameter-framework.policy
+LOCAL_MODULE_STEM := PolicyConfigurableDomains.xml
+LOCAL_MODULE_TAGS := optional
+LOCAL_REQUIRED_MODULES := \
+ PolicyClass.xml \
+ PolicySubsystem.xml \
+ ParameterFrameworkConfigurationPolicy.xml
+
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/parameter-framework/Settings/Policy
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): MY_TOOL := $(HOST_OUT_EXECUTABLES)/hostDomainGenerator.sh
+$(LOCAL_BUILT_MODULE): $(HOST_OUT_EXECUTABLES)/hostDomainGenerator.sh
+$(LOCAL_BUILT_MODULE): MY_SRC_FILES := \
+ $(TARGET_OUT_ETC)/parameter-framework/ParameterFrameworkConfigurationPolicy.xml \
+ $(LOCAL_PATH)/policy_criteria.txt \
+ /dev/null \
+ $(LOCAL_PATH)/Settings/device_for_strategy_media.pfw \
+ $(LOCAL_PATH)/Settings/device_for_strategy_phone.pfw \
+ $(LOCAL_PATH)/Settings/device_for_strategy_sonification.pfw \
+ $(LOCAL_PATH)/Settings/device_for_strategy_sonification_respectful.pfw \
+ $(LOCAL_PATH)/Settings/device_for_strategy_dtmf.pfw \
+ $(LOCAL_PATH)/Settings/device_for_strategy_enforced_audible.pfw \
+ $(LOCAL_PATH)/Settings/device_for_strategy_transmitted_through_speaker.pfw \
+ $(LOCAL_PATH)/Settings/device_for_strategy_accessibility.pfw \
+ $(LOCAL_PATH)/Settings/device_for_strategy_rerouting.pfw \
+ $(LOCAL_PATH)/Settings/strategy_for_stream.pfw \
+ $(LOCAL_PATH)/Settings/strategy_for_usage.pfw \
+ $(LOCAL_PATH)/Settings/device_for_input_source.pfw \
+ $(LOCAL_PATH)/Settings/volumes.pfw \
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_REQUIRED_MODULES)
+ $(hide) mkdir -p $(dir $@)
+ bash --debug $(MY_TOOL) --nonverbose --validate $(MY_SRC_FILES) > $@
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/ParameterFrameworkConfigurationPolicy.xml b/services/audiopolicy/engineconfigurable/parameter-framework/example/ParameterFrameworkConfigurationPolicy.xml
new file mode 100755
index 0000000..6905201
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/ParameterFrameworkConfigurationPolicy.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ParameterFrameworkConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="Schemas/ParameterFrameworkConfiguration.xsd"
+ SystemClassName="Policy" ServerPort="5019" TuningAllowed="true">
+
+ <SubsystemPlugins>
+ <Location Folder="">
+ <Plugin Name="libpolicy-subsystem.so"/>
+ </Location>
+ </SubsystemPlugins>
+ <StructureDescriptionFileLocation Path="Structure/Policy/PolicyClass.xml"/>
+ <SettingsConfiguration>
+ <ConfigurableDomainsFileLocation Path="Settings/Policy/PolicyConfigurableDomains.xml"/>
+ </SettingsConfiguration>
+</ParameterFrameworkConfiguration>
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/README.md b/services/audiopolicy/engineconfigurable/parameter-framework/example/README.md
new file mode 100644
index 0000000..92668e1
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/README.md
@@ -0,0 +1,11 @@
+Configurable Policy Engine Example
+================================
+
+This folder exposes a generic functional configurable policy engine configuration files
+to provide to have a product following the nexus experience.
+
+A vendor wishing to customize the behavior shall provides its own set of configuration files
+within the device folder for the product to customize.
+
+For any question about the parameter framework and configuration files,
+See [the wiki on github](https://github.com/01org/parameter-framework/wiki).
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_input_source.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_input_source.pfw
new file mode 100644
index 0000000..d4bc370
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_input_source.pfw
@@ -0,0 +1,515 @@
+supDomain: DeviceForInputSource
+ domain: Calibration
+ conf: Calibration
+ #
+ # Note that ALL input devices must have the sign bit set to 1.
+ # As the devices is a mask, use the "in" bit as a direction indicator.
+ #
+ component: /Policy/policy/input_sources/default/applicable_input_device/mask
+ in = 1
+ communication = 0
+ ambient = 0
+ hdmi = 0
+ telephony_rx = 0
+ back_mic = 0
+ remote_submix = 0
+ anlg_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ fm_tuner = 0
+ tv_tuner = 0
+ line = 0
+ spdif = 0
+ loopback = 0
+ component: /Policy/policy/input_sources/mic/applicable_input_device/mask
+ in = 1
+ communication = 0
+ ambient = 0
+ hdmi = 0
+ telephony_rx = 0
+ back_mic = 0
+ remote_submix = 0
+ anlg_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ fm_tuner = 0
+ tv_tuner = 0
+ line = 0
+ spdif = 0
+ loopback = 0
+ component: /Policy/policy/input_sources/voice_downlink/applicable_input_device/mask
+ in = 1
+ communication = 0
+ ambient = 0
+ builtin_mic = 0
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ hdmi = 0
+ back_mic = 0
+ remote_submix = 0
+ anlg_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ fm_tuner = 0
+ tv_tuner = 0
+ line = 0
+ spdif = 0
+ bluetooth_a2dp = 0
+ loopback = 0
+ component: /Policy/policy/input_sources/voice_call/applicable_input_device/mask
+ in = 1
+ communication = 0
+ ambient = 0
+ builtin_mic = 0
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ hdmi = 0
+ back_mic = 0
+ remote_submix = 0
+ anlg_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ fm_tuner = 0
+ tv_tuner = 0
+ line = 0
+ spdif = 0
+ bluetooth_a2dp = 0
+ loopback = 0
+ component: /Policy/policy/input_sources/voice_uplink/applicable_input_device/mask
+ in = 1
+ communication = 0
+ ambient = 0
+ builtin_mic = 0
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ hdmi = 0
+ back_mic = 0
+ remote_submix = 0
+ anlg_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ fm_tuner = 0
+ tv_tuner = 0
+ line = 0
+ spdif = 0
+ bluetooth_a2dp = 0
+ loopback = 0
+ component: /Policy/policy/input_sources/camcorder/applicable_input_device/mask
+ in = 1
+ communication = 0
+ ambient = 0
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ hdmi = 0
+ telephony_rx = 0
+ remote_submix = 0
+ anlg_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ fm_tuner = 0
+ tv_tuner = 0
+ line = 0
+ spdif = 0
+ bluetooth_a2dp = 0
+ loopback = 0
+ component: /Policy/policy/input_sources/voice_recognition/applicable_input_device/mask
+ in = 1
+ communication = 0
+ ambient = 0
+ hdmi = 0
+ telephony_rx = 0
+ back_mic = 0
+ remote_submix = 0
+ anlg_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ fm_tuner = 0
+ tv_tuner = 0
+ line = 0
+ spdif = 0
+ bluetooth_a2dp = 0
+ loopback = 0
+ component: /Policy/policy/input_sources/voice_communication/applicable_input_device/mask
+ in = 1
+ communication = 0
+ ambient = 0
+ hdmi = 0
+ telephony_rx = 0
+ remote_submix = 0
+ anlg_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ fm_tuner = 0
+ tv_tuner = 0
+ line = 0
+ spdif = 0
+ bluetooth_a2dp = 0
+ loopback = 0
+ component: /Policy/policy/input_sources/remote_submix/applicable_input_device/mask
+ in = 1
+ communication = 0
+ ambient = 0
+ builtin_mic = 0
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ hdmi = 0
+ telephony_rx = 0
+ back_mic = 0
+ anlg_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ fm_tuner = 0
+ tv_tuner = 0
+ line = 0
+ spdif = 0
+ bluetooth_a2dp = 0
+ loopback = 0
+ component: /Policy/policy/input_sources/hotword/applicable_input_device/mask
+ in = 1
+ communication = 0
+ ambient = 0
+ hdmi = 0
+ telephony_rx = 0
+ back_mic = 0
+ remote_submix = 0
+ anlg_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ fm_tuner = 0
+ tv_tuner = 0
+ line = 0
+ spdif = 0
+ bluetooth_a2dp = 0
+ loopback = 0
+ component: /Policy/policy/input_sources/fm_tuner/applicable_input_device/mask
+ in = 1
+ communication = 0
+ ambient = 0
+ bluetooth_sco_headset = 0
+ hdmi = 0
+ telephony_rx = 0
+ builtin_mic = 0
+ wired_headset = 0
+ back_mic = 0
+ remote_submix = 0
+ anlg_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ fm_tuner = 0
+ tv_tuner = 0
+ line = 0
+ spdif = 0
+ bluetooth_a2dp = 0
+ loopback = 0
+
+ domain: DefaultAndMic
+ conf: A2dp
+ AvailableInputDevices Includes BluetoothA2dp
+
+ component: /Policy/policy/input_sources
+ component: default/applicable_input_device/mask/
+ bluetooth_a2dp = 1
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 0
+ bluetooth_sco_headset = 0
+ component: mic/applicable_input_device/mask/
+ bluetooth_a2dp = 1
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 0
+ bluetooth_sco_headset = 0
+
+ conf: Sco
+ AvailableInputDevices Includes BluetoothScoHeadset
+ ForceUseForRecord Is ForceBtSco
+
+ component: /Policy/policy/input_sources
+ component: default/applicable_input_device/mask/
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 0
+ bluetooth_sco_headset = 1
+ component: mic/applicable_input_device/mask/
+ bluetooth_a2dp = 0
+ wired_headset = 1
+ usb_device = 0
+ builtin_mic = 0
+ bluetooth_sco_headset = 1
+
+ conf: WiredHeadset
+ AvailableInputDevices Includes WiredHeadset
+
+ component: /Policy/policy/input_sources
+ component: default/applicable_input_device/mask/
+ bluetooth_a2dp = 0
+ wired_headset = 1
+ usb_device = 0
+ builtin_mic = 0
+ bluetooth_sco_headset = 0
+ component: mic/applicable_input_device/mask/
+ bluetooth_a2dp = 0
+ wired_headset = 1
+ usb_device = 0
+ builtin_mic = 0
+ bluetooth_sco_headset = 0
+
+ conf: UsbDevice
+ AvailableInputDevices Includes UsbDevice
+
+ component: /Policy/policy/input_sources
+ component: default/applicable_input_device/mask/
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ usb_device = 1
+ builtin_mic = 0
+ bluetooth_sco_headset = 0
+ component: mic/applicable_input_device/mask/
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ usb_device = 1
+ builtin_mic = 0
+ bluetooth_sco_headset = 0
+
+ conf: BuiltinMic
+ AvailableInputDevices Includes BuiltinMic
+
+ component: /Policy/policy/input_sources
+ component: default/applicable_input_device/mask/
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 1
+ bluetooth_sco_headset = 0
+ component: mic/applicable_input_device/mask/
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 1
+ bluetooth_sco_headset = 0
+
+ conf: Default
+ component: /Policy/policy/input_sources
+ component: default/applicable_input_device/mask/
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 0
+ bluetooth_sco_headset = 0
+ component: mic/applicable_input_device/mask/
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 0
+ bluetooth_sco_headset = 0
+
+ domain: VoiceUplinkAndVoiceDownlinkAndVoiceCall
+ conf: VoiceCall
+ AvailableInputDevices Includes TelephonyRx
+
+ component: /Policy/policy/input_sources
+ voice_downlink/applicable_input_device/mask/telephony_rx = 1
+ voice_call/applicable_input_device/mask/telephony_rx = 1
+ voice_uplink/applicable_input_device/mask/telephony_rx = 1
+
+ conf: Default
+ component: /Policy/policy/input_sources
+ voice_downlink/applicable_input_device/mask/telephony_rx = 0
+ voice_call/applicable_input_device/mask/telephony_rx = 0
+ voice_uplink/applicable_input_device/mask/telephony_rx = 0
+
+ domain: Camcorder
+ conf: BackMic
+ AvailableInputDevices Includes BackMic
+
+ component: /Policy/policy/input_sources/camcorder/applicable_input_device/mask
+ back_mic = 1
+ builtin_mic = 0
+
+ conf: BuiltinMic
+ AvailableInputDevices Includes BuiltinMic
+
+ component: /Policy/policy/input_sources/camcorder/applicable_input_device/mask
+ back_mic = 0
+ builtin_mic = 1
+
+ conf: Default
+ component: /Policy/policy/input_sources/camcorder/applicable_input_device/mask
+ back_mic = 0
+ builtin_mic = 0
+
+ domain: VoiceRecognitionAndHotword
+ conf: ScoHeadset
+ ForceUseForRecord Is ForceBtSco
+ AvailableInputDevices Includes BluetoothScoHeadset
+
+ component: /Policy/policy/input_sources
+ component: voice_recognition/applicable_input_device/mask
+ bluetooth_sco_headset = 1
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 0
+ component: hotword/applicable_input_device/mask
+ bluetooth_sco_headset = 1
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 0
+
+ conf: WiredHeadset
+ AvailableInputDevices Includes WiredHeadset
+
+ component: /Policy/policy/input_sources
+ component: voice_recognition/applicable_input_device/mask
+ bluetooth_sco_headset = 0
+ wired_headset = 1
+ usb_device = 0
+ builtin_mic = 0
+ component: hotword/applicable_input_device/mask
+ bluetooth_sco_headset = 0
+ wired_headset = 1
+ usb_device = 0
+ builtin_mic = 0
+
+ conf: UsbDevice
+ AvailableInputDevices Includes UsbDevice
+
+ component: /Policy/policy/input_sources
+ component: voice_recognition/applicable_input_device/mask
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ usb_device = 1
+ builtin_mic = 0
+ component: hotword/applicable_input_device/mask
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ usb_device = 1
+ builtin_mic = 0
+
+ conf: BuiltinMic
+ AvailableInputDevices Includes BuiltinMic
+
+ component: /Policy/policy/input_sources
+ component: voice_recognition/applicable_input_device/mask
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 1
+ component: hotword/applicable_input_device/mask
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 1
+
+ conf: Default
+ component: /Policy/policy/input_sources
+ component: voice_recognition/applicable_input_device/mask
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 0
+ component: hotword/applicable_input_device/mask
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 0
+
+ domain: VoiceCommunication
+ conf: ScoHeadset
+ #
+ # SCO device may be requested but no SCO device is available
+ #
+ ForceUseForCommunication Is ForceBtSco
+ AvailableInputDevices Includes BluetoothScoHeadset
+
+ component: /Policy/policy/input_sources/voice_communication/applicable_input_device/mask
+ bluetooth_sco_headset = 1
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 0
+ back_mic = 0
+
+ conf: WiredHeadset
+ ForceUseForCommunication Is ForceNone
+ AvailableInputDevices Includes WiredHeadset
+
+ component: /Policy/policy/input_sources/voice_communication/applicable_input_device/mask
+ bluetooth_sco_headset = 0
+ wired_headset = 1
+ usb_device = 0
+ builtin_mic = 0
+ back_mic = 0
+
+ conf: UsbDevice
+ ForceUseForCommunication Is ForceNone
+ AvailableInputDevices Includes UsbDevice
+
+ component: /Policy/policy/input_sources/voice_communication/applicable_input_device/mask
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ usb_device = 1
+ builtin_mic = 0
+ back_mic = 0
+
+ conf: BuiltinMic
+ AvailableInputDevices Includes BuiltinMic
+ ANY
+ ForceUseForCommunication Is ForceNone
+ ALL
+ ForceUseForCommunication Is ForceSpeaker
+ AvailableInputDevices Excludes BackMic
+
+ component: /Policy/policy/input_sources/voice_communication/applicable_input_device/mask
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 1
+ back_mic = 0
+
+ conf: BackMic
+ ForceUseForCommunication Is ForceSpeaker
+ AvailableInputDevices Includes BackMic
+
+ component: /Policy/policy/input_sources/voice_communication/applicable_input_device/mask
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 0
+ back_mic = 1
+
+ conf: Default
+ component: /Policy/policy/input_sources/voice_communication/applicable_input_device/mask
+ bluetooth_sco_headset = 0
+ wired_headset = 0
+ usb_device = 0
+ builtin_mic = 0
+ back_mic = 0
+
+ domain: RemoteSubmix
+ conf: RemoteSubmix
+ AvailableInputDevices Includes RemoteSubmix
+
+ component: /Policy/policy/input_sources/remote_submix/applicable_input_device/mask
+ remote_submix = 1
+
+ conf: Default
+ component: /Policy/policy/input_sources/remote_submix/applicable_input_device/mask
+ remote_submix = 0
+
+ domain: FmTuner
+ conf: FmTuner
+ AvailableInputDevices Includes FmTuner
+
+ component: /Policy/policy/input_sources/fm_tuner/applicable_input_device/mask
+ fm_tuner = 1
+
+ conf: Default
+ component: /Policy/policy/input_sources/fm_tuner/applicable_input_device/mask
+ fm_tuner = 0
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_accessibility.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_accessibility.pfw
new file mode 100644
index 0000000..e8ab33b
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_accessibility.pfw
@@ -0,0 +1,302 @@
+supDomain: DeviceForStrategy
+
+ supDomain: Accessibility
+ #
+ # @FIXME: STRATEGY_ACCESSIBILITY follows STRATEGY_MEDIA for now
+ #
+ # @FIXME: How to disable HDMI if !audio_is_linear_pcm other than programmatically???
+ #
+ domain: UnreachableDevices
+ conf: Calibration
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ hdmi_arc = 0
+ spdif = 0
+ aux_line = 0
+ fm = 0
+ speaker_safe = 0
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ telephony_tx = 0
+
+ domain: Device2
+ conf: RemoteSubmix
+ AvailableOutputDevices Includes RemoteSubmix
+
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 1
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothA2dp
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dp
+
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothA2dpHeadphone
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothA2dpSpeaker
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 1
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: ForceSpeaker
+ ForceUseForMedia Is ForceSpeaker
+ AvailableOutputDevices Includes Speaker
+
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 1
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: WiredHeadphone
+ AvailableOutputDevices Includes WiredHeadphone
+
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 1
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: Line
+ AvailableOutputDevices Includes Line
+
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 1
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: WiredHeadset
+ AvailableOutputDevices Includes WiredHeadset
+
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 1
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: UsbAccessory
+ AvailableOutputDevices Includes UsbAccessory
+
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 1
+ usb_device = 0
+ hdmi = 0
+
+ conf: UsbDevice
+ AvailableOutputDevices Includes UsbDevice
+
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ hdmi = 0
+
+ conf: DgtlDockHeadset
+ AvailableOutputDevices Includes DgtlDockHeadset
+
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 1
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: AuxDigital
+ #
+ # Do not route accessibility prompts to a digital output currently configured with a
+ # compressed format as they would likely not be mixed and dropped.
+ #
+ # @TODO How to translate the following condition(???)
+ # desc->isActive() && !audio_is_linear_pcm(desc->mFormat) && devices != AUDIO_DEVICE_NONE
+ #
+ AvailableOutputDevices Includes Hdmi
+
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 1
+
+ conf: AnlgDockHeadset
+ AvailableOutputDevices Includes AnlgDockHeadset
+ ForceUseForDock Is ForceAnalogDock
+
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 1
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 1
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: Default
+ component: /Policy/policy/strategies/accessibility/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_dtmf.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_dtmf.pfw
new file mode 100644
index 0000000..85273b2
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_dtmf.pfw
@@ -0,0 +1,637 @@
+supDomain: DeviceForStrategy
+
+ supDomain: Dtmf
+
+ domain: UnreachableDevices
+ conf: Calibration
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ fm = 0
+ speaker_safe = 0
+ bluetooth_sco_carkit = 0
+
+ domain: Device2
+ conf: RemoteSubmix
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes RemoteSubmix
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 1
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothA2dp
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dp
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothA2dpHeadphones
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothA2dpSpeaker
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 1
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: ForceSpeakerWhenNotInCall
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia Is ForceSpeaker
+ ForceUseForHdmiSystemAudio IsNot ForceHdmiSystemEnforced
+ AvailableOutputDevices Includes Speaker
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 1
+
+ conf: BluetoothScoHeadset
+ #
+ # DTMF falls through Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Includes BluetoothScoHeadset
+ ForceUseForCommunication Is ForceBtSco
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 1
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothSco
+ #
+ # DTMF falls through Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Includes BluetoothSco
+ ForceUseForCommunication Is ForceBtSco
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 1
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: WiredHeadphone
+ ANY
+ #
+ # DTMF falls through Phone strategy if in call
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes WiredHeadphone
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 1
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: LineWhenFollowingMedia
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes Line
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 1
+ speaker = 0
+
+ conf: WiredHeadset
+ ANY
+ #
+ # DTMF falls through Phone strategy if in call
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes WiredHeadset
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 1
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: UsbDevice
+ ANY
+ #
+ # DTMF falls through Phone strategy if in call (widely speaking)
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ #
+ # DTMF follows Media strategy if not in call
+ # Media strategy inverts the priority of USB device vs accessory
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Excludes UsbAccessory
+ ForceUseForCommunication Is ForceSpeaker
+ AvailableOutputDevices Includes UsbDevice
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: UsbAccessory
+ #
+ # DTMF falls through Phone strategy if in call (widely speaking)
+ # but USB accessory not reachable in call
+ #
+ # DTMF follows Media strategy if not in call
+ # Media strategy inverts the priority of USB device vs accessory
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes UsbAccessory
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 1
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: DgtlDockHeadset
+ #
+ # DTMF falls through Phone strategy if in call (widely speaking)
+ # but DgtlDockHeadset not reachable in call
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes DgtlDockHeadset
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 1
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: Hdmi
+ #
+ # DTMF falls through Phone strategy if in call (widely speaking)
+ # but Hdmi not reachable in call
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes Hdmi
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 1
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: AnlgDockHeadset
+ #
+ # DTMF falls through Phone strategy if in call (widely speaking)
+ # but AnlgDockHeadset not reachable in call
+ #
+ # DTMF follows Media strategy if not in call
+ # Media strategy inverts the priority of USB device vs accessory
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForDock Is ForceAnalogDock
+ AvailableOutputDevices Includes AnlgDockHeadset
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 1
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: Earpiece
+ #
+ # DTMF falls through Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Includes Earpiece
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 1
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: LineWhenFallThroughPhone
+ #
+ # DTMF falls through Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Includes Line
+ ForceUseForCommunication Is ForceSpeaker
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 1
+ speaker = 0
+
+ conf: Speaker
+ ANY
+ #
+ # DTMF falls through Phone strategy if in call
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceSpeaker
+ #
+ # DTMF follows Media strategy if not in call
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForHdmiSystemAudio IsNot ForceHdmiSystemEnforced
+ AvailableOutputDevices Includes Speaker
+
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 1
+
+ conf: Default
+ component: /Policy/policy/strategies/dtmf/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ domain: Arc
+ #
+ # DTMF strategy follows media strategy if not in call
+ # these following domains consists in device(s) that can co-exist with others
+ # e.g. ARC, SPDIF, AUX_LINE
+ #
+ conf: Selected
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes HdmiArc
+
+ /Policy/policy/strategies/media/selected_output_devices/mask/hdmi_arc = 1
+
+ conf: NotSelected
+ /Policy/policy/strategies/media/selected_output_devices/mask/hdmi_arc = 0
+
+ domain: Spdif
+ #
+ # DTMF strategy follows media strategy if not in call
+ # these following domains consists in device(s) that can co-exist with others
+ # e.g. ARC, SPDIF, AUX_LINE
+ #
+ conf: Selected
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes Spdif
+
+ /Policy/policy/strategies/media/selected_output_devices/mask/spdif = 1
+
+ conf: NotSelected
+ /Policy/policy/strategies/media/selected_output_devices/mask/spdif = 0
+
+ domain: AuxLine
+ #
+ # DTMF strategy follows media strategy if not in call
+ # these following domains consists in device(s) that can co-exist with others
+ # e.g. ARC, SPDIF, AUX_LINE
+ #
+ conf: Selected
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes AuxLine
+
+ /Policy/policy/strategies/media/selected_output_devices/mask/aux_line = 1
+
+ conf: NotSelected
+ /Policy/policy/strategies/media/selected_output_devices/mask/aux_line = 0
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_enforced_audible.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_enforced_audible.pfw
new file mode 100644
index 0000000..d714743
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_enforced_audible.pfw
@@ -0,0 +1,358 @@
+supDomain: DeviceForStrategy
+
+ supDomain: EnforcedAudible
+
+ domain: UnreachableDevices
+ conf: Calibration
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ # no enforced_audible on remote submix (e.g. WFD)
+ remote_submix = 0
+ hdmi_arc = 0
+ spdif = 0
+ aux_line = 0
+ speaker_safe = 0
+
+ domain: Speaker
+ conf: Selected
+ #
+ # strategy STRATEGY_ENFORCED_AUDIBLE uses same routing policy as STRATEGY_SONIFICATION
+ # except:
+ # - when in call where it doesn't default to STRATEGY_PHONE behavior
+ # - in countries where not enforced in which case it follows STRATEGY_MEDIA
+ #
+ AvailableOutputDevices Includes Speaker
+ ANY
+ ForceUseForSystem Is ForceSystemEnforced
+ ALL
+ ForceUseForMedia Is ForceSpeaker
+ AvailableOutputDevices Excludes RemoteSubmix
+ ANY
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Excludes BluetoothA2dp
+ AvailableOutputDevices Excludes BluetoothA2dpHeadphones
+ AvailableOutputDevices Excludes BluetoothA2dpSpeaker
+ #
+ # Speaker is also the fallback device if any of the device from Device2 domain
+ # is selected.
+ #
+ ALL
+ AvailableOutputDevices Excludes RemoteSubmix
+ AvailableOutputDevices Excludes WiredHeadphone
+ AvailableOutputDevices Excludes Line
+ AvailableOutputDevices Excludes WiredHeadset
+ AvailableOutputDevices Excludes UsbAccessory
+ AvailableOutputDevices Excludes UsbDevice
+ AvailableOutputDevices Excludes DgtlDockHeadset
+ AvailableOutputDevices Excludes Hdmi
+ ANY
+ AvailableOutputDevices Excludes AnlgDockHeadset
+ ForceUseForDock IsNot ForceAnalogDock
+
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ speaker = 1
+
+ conf: NotSelected
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ speaker = 0
+
+ domain: Device2
+ conf: RemoteSubmix
+ AvailableOutputDevices Includes RemoteSubmix
+
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 1
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ fm = 0
+ speaker_safe = 0
+
+ conf: BluetoothA2dp
+ AvailableOutputDevices Includes BluetoothA2dp
+ ForceUseForMedia IsNot ForceNoBtA2dp
+
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ fm = 0
+ speaker_safe = 0
+
+ conf: BluetoothA2dpHeadphones
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+ ForceUseForMedia IsNot ForceNoBtA2dp
+
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ fm = 0
+ speaker_safe = 0
+
+ conf: BluetoothA2dpSpeaker
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+ ForceUseForMedia IsNot ForceNoBtA2dp
+
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 1
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ fm = 0
+ speaker_safe = 0
+
+ conf: WiredHeadphone
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes WiredHeadphone
+
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 1
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ fm = 0
+ speaker_safe = 0
+
+ conf: Line
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes Line
+
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 1
+ fm = 0
+ speaker_safe = 0
+
+ conf: WiredHeadset
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes WiredHeadset
+
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 1
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ fm = 0
+ speaker_safe = 0
+
+ conf: UsbAccessory
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes UsbAccessory
+
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 1
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ fm = 0
+ speaker_safe = 0
+
+ conf: UsbDevice
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes UsbDevice
+
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ telephony_tx = 0
+ line = 0
+ fm = 0
+ speaker_safe = 0
+
+ conf: DgtlDockHeadset
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes DgtlDockHeadset
+
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 1
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ fm = 0
+ speaker_safe = 0
+
+ conf: Hdmi
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes Hdmi
+
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 1
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ fm = 0
+ speaker_safe = 0
+
+ conf: AnlgDockHeadset
+ ForceUseForMedia IsNot ForceSpeaker
+ ForceUseForDock Is ForceAnalogDock
+ AvailableOutputDevices Includes AnlgDockHeadset
+
+ component: /Policy/policy/strategies/enforced_audible/selected_output_devices/mask
+ remote_submix = 0
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 1
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ fm = 0
+ speaker_safe = 0
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_media.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_media.pfw
new file mode 100644
index 0000000..38bede5
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_media.pfw
@@ -0,0 +1,331 @@
+domainGroup: DeviceForStrategy
+
+ domainGroup: Media
+
+ domain: UnreachableDevices
+ conf: Calibration
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ fm = 0
+ speaker_safe = 0
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ telephony_tx = 0
+
+ domain: Device2
+ conf: RemoteSubmix
+ AvailableOutputDevices Includes RemoteSubmix
+
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 1
+ line = 0
+
+ conf: BluetoothA2dp
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dp
+
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 1
+ remote_submix = 0
+ line = 0
+
+ conf: BluetoothA2dpHeadphone
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: BluetoothA2dpSpeaker
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: ForceSpeaker
+ ForceUseForMedia Is ForceSpeaker
+ AvailableOutputDevices Includes Speaker
+ #
+ # If hdmi system audio mode is on, remove speaker out of output list.
+ #
+ ForceUseForHdmiSystemAudio IsNot ForceHdmiSystemEnforced
+
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 1
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: WiredHeadphone
+ AvailableOutputDevices Includes WiredHeadphone
+
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 1
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: Line
+ AvailableOutputDevices Includes Line
+
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 1
+
+ conf: WiredHeadset
+ AvailableOutputDevices Includes WiredHeadset
+
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 1
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: UsbAccessory
+ AvailableOutputDevices Includes UsbAccessory
+
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 1
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: UsbDevice
+ AvailableOutputDevices Includes UsbDevice
+
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 1
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: DgtlDockHeadset
+ AvailableOutputDevices Includes DgtlDockHeadset
+
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 1
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: AuxDigital
+ AvailableOutputDevices Includes Hdmi
+
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 1
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: AnlgDockHeadset
+ AvailableOutputDevices Includes AnlgDockHeadset
+ ForceUseForDock Is ForceAnalogDock
+
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 1
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+ #
+ # If hdmi system audio mode is on, remove speaker out of output list.
+ #
+ ForceUseForHdmiSystemAudio IsNot ForceHdmiSystemEnforced
+
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 1
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ conf: Default
+ component: /Policy/policy/strategies/media/selected_output_devices/mask
+ speaker = 0
+ hdmi = 0
+ dgtl_dock_headset = 0
+ angl_dock_headset = 0
+ usb_device = 0
+ usb_accessory = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp = 0
+ remote_submix = 0
+ line = 0
+
+ domain: Arc
+ #
+ # these following domains consists in device(s) that can co-exist with others
+ # e.g. ARC, SPDIF, AUX_LINE
+ #
+ conf: Selected
+ AvailableOutputDevices Includes HdmiArc
+
+ /Policy/policy/strategies/media/selected_output_devices/mask/hdmi_arc = 1
+
+ conf: NotSelected
+ /Policy/policy/strategies/media/selected_output_devices/mask/hdmi_arc = 0
+
+ domain: Spdif
+ #
+ # these following domains consists in device(s) that can co-exist with others
+ # e.g. ARC, SPDIF, AUX_LINE
+ #
+ conf: Selected
+ AvailableOutputDevices Includes Spdif
+
+ /Policy/policy/strategies/media/selected_output_devices/mask/spdif = 1
+
+ conf: NotSelected
+ /Policy/policy/strategies/media/selected_output_devices/mask/spdif = 0
+
+ domain: AuxLine
+ conf: Selected
+ AvailableOutputDevices Includes AuxLine
+
+ /Policy/policy/strategies/media/selected_output_devices/mask/aux_line = 1
+
+ conf: NotSelected
+ /Policy/policy/strategies/media/selected_output_devices/mask/aux_line = 0
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_phone.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_phone.pfw
new file mode 100644
index 0000000..7b01491
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_phone.pfw
@@ -0,0 +1,485 @@
+supDomain: DeviceForStrategy
+
+ supDomain: Phone
+
+ domain: UnreachableDevices
+ conf: Calibration
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ # no sonification on remote submix (e.g. WFD)
+ remote_submix = 0
+ hdmi_arc = 0
+ aux_line = 0
+ spdif = 0
+ fm = 0
+ speaker_safe = 0
+
+ domain: Device
+ conf: ScoCarkit
+ AvailableOutputDevices Includes BluetoothScoCarkit
+ ForceUseForCommunication Is ForceBtSco
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 1
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothScoHeadset
+ AvailableOutputDevices Includes BluetoothScoHeadset
+ ForceUseForCommunication Is ForceBtSco
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 1
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothSco
+ AvailableOutputDevices Includes BluetoothSco
+ ForceUseForCommunication Is ForceBtSco
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 1
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothA2dp
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes BluetoothA2dp
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ ANY
+ ForceUseForCommunication Is ForceBtSco
+ ForceUseForCommunication Is ForceNone
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothA2dpHeadphones
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ ANY
+ ForceUseForCommunication Is ForceBtSco
+ ForceUseForCommunication Is ForceNone
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: BluetoothA2dpSpeaker
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ ForceUseForCommunication Is ForceSpeaker
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: WiredHeadphone
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes WiredHeadphone
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 1
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: WiredHeadset
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes WiredHeadset
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 1
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: UsbDevice
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes UsbDevice
+ ANY
+ ForceUseForCommunication Is ForceBtSco
+ ForceUseForCommunication Is ForceNone
+ ALL
+ ForceUseForCommunication Is ForceSpeaker
+ #
+ # In case of Force Speaker, priority between device and accessory are
+ # inverted compared to Force None or Bt Sco
+ #
+ AvailableOutputDevices Excludes UsbAccessory
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: UsbAccessory
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes UsbAccessory
+ TelephonyMode IsNot InCommunication
+ TelephonyMode IsNot InCall
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: DgtlDockHeadset
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes DgtlDockHeadset
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 1
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: Hdmi
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes Hdmi
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 1
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: AnlgDockHeadset
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes AnlgDockHeadset
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 1
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: Earpiece
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes Earpiece
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 1
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+ conf: Line
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes Line
+ ForceUseForCommunication Is ForceSpeaker
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 1
+ speaker = 0
+
+ conf: Speaker
+ #
+ # Fallback BT Sco devices in case of FORCE_BT_SCO
+ # or FORCE_NONE
+ #
+ AvailableOutputDevices Includes Speaker
+ ForceUseForCommunication Is ForceSpeaker
+
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 1
+
+ conf: Default
+ component: /Policy/policy/strategies/phone/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+ speaker = 0
+
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_rerouting.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_rerouting.pfw
new file mode 100644
index 0000000..d390a33
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_rerouting.pfw
@@ -0,0 +1,297 @@
+domainGroup: DeviceForStrategy
+
+ domainGroup: Rerouting
+ #
+ # Falls through media strategy
+ #
+ domain: UnreachableDevices
+ conf: Calibration
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ hdmi_arc = 0
+ spdif = 0
+ aux_line = 0
+ fm = 0
+ speaker_safe = 0
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ telephony_tx = 0
+
+ domain: Device2
+ conf: RemoteSubmix
+ AvailableOutputDevices Includes RemoteSubmix
+
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 1
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothA2dp
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dp
+
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothA2dpHeadphone
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothA2dpSpeaker
+ ForceUseForMedia IsNot ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 1
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: ForceSpeaker
+ ForceUseForMedia Is ForceSpeaker
+ AvailableOutputDevices Includes Speaker
+
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 1
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: WiredHeadphone
+ AvailableOutputDevices Includes WiredHeadphone
+
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 1
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: Line
+ AvailableOutputDevices Includes Line
+
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 1
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: WiredHeadset
+ AvailableOutputDevices Includes WiredHeadset
+
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 1
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: UsbAccessory
+ AvailableOutputDevices Includes UsbAccessory
+
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 1
+ usb_device = 0
+ hdmi = 0
+
+ conf: UsbDevice
+ AvailableOutputDevices Includes UsbDevice
+
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ hdmi = 0
+
+ conf: DgtlDockHeadset
+ AvailableOutputDevices Includes DgtlDockHeadset
+
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 1
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: AuxDigital
+ #
+ # Rerouting is similar to media and sonification (exept here: sonification is not allowed on HDMI)
+ #
+ AvailableOutputDevices Includes Hdmi
+
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 1
+
+ conf: AnlgDockHeadset
+ AvailableOutputDevices Includes AnlgDockHeadset
+ ForceUseForDock Is ForceAnalogDock
+
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 1
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 1
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: Default
+ component: /Policy/policy/strategies/rerouting/selected_output_devices/mask
+ remote_submix = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ speaker = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_sonification.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_sonification.pfw
new file mode 100644
index 0000000..71101f8
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_sonification.pfw
@@ -0,0 +1,485 @@
+supDomain: DeviceForStrategy
+
+ supDomain: Sonification
+
+ domain: UnreachableDevices
+ conf: Calibration
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ # no sonification on remote submix (e.g. WFD)
+ remote_submix = 0
+ hdmi_arc = 0
+ spdif = 0
+ fm = 0
+ speaker_safe = 0
+ aux_line = 0
+ #
+ # Sonification follows phone strategy if in call but HDMI is not reachable
+ #
+ hdmi = 0
+
+ domain: Speaker
+
+ conf: Selected
+ AvailableOutputDevices Includes Speaker
+ ANY
+ #
+ # Sonification falls through ENFORCED_AUDIBLE if not in call (widely speaking)
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ALL
+ #
+ # Sonification follows phone strategy if in call (widely speaking)
+ #
+ ForceUseForCommunication Is ForceSpeaker
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Excludes Line
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ speaker = 1
+
+ conf: NotSelected
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ speaker = 0
+
+ domain: Device2
+
+ conf: BluetoothA2dp
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ AvailableOutputDevices Includes BluetoothA2dp
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: BluetoothA2dpHeadphones
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: BluetoothA2dpSpeaker
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceNoBtA2dp
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 1
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: ScoCarkit
+ #
+ # Sonification follows phone strategy if in call (widely speaking)
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceBtSco
+ AvailableOutputDevices Includes BluetoothScoCarkit
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 1
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: ScoHeadset
+ #
+ # Sonification follows phone strategy if in call (widely speaking)
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceBtSco
+ AvailableOutputDevices Includes BluetoothScoHeadset
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 1
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: Sco
+ #
+ # Sonification follows phone strategy if in call (widely speaking)
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceBtSco
+ AvailableOutputDevices Includes BluetoothSco
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 1
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: WiredHeadphone
+ AvailableOutputDevices Includes WiredHeadphone
+ ANY
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ #
+ # Sonification follows Phone strategy if in call (widely speaking)
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 1
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: Line
+ AvailableOutputDevices Includes Line
+ ANY
+ #
+ # Sonification follows Phone strategy if in call (widely speaking)
+ #
+ ALL
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceSpeaker
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 1
+
+ conf: WiredHeadset
+ AvailableOutputDevices Includes WiredHeadset
+ ANY
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ ALL
+ #
+ # Sonification Follows Phone Strategy if in call (widely speaking)
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 1
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: UsbDevice
+ AvailableOutputDevices Includes UsbDevice
+ ANY
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ ALL
+ AvailableOutputDevices Excludes UsbAccessory
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ ALL
+ #
+ # Sonification Follows Phone Strategy if in call (widely speaking)
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ telephony_tx = 0
+ line = 0
+
+ conf: UsbAccessory
+ AvailableOutputDevices Includes UsbAccessory
+ #
+ # Sonification falls through media strategy if not in call (widely speaking)
+ #
+ # Sonification Follows Phone Strategy if in call (widely speaking)
+ # but USB Accessory not reachable in call.
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 1
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: DgtlDockHeadset
+ AvailableOutputDevices Includes DgtlDockHeadset
+ #
+ # Sonification falls through media strategy if not in call
+ #
+ # Sonification Follows Phone Strategy if in call (widely speaking)
+ # but DgtlDockHeadset not reachable in call.
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 1
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: AnlgDockHeadset
+ AvailableOutputDevices Includes AnlgDockHeadset
+ #
+ # Sonification falls through media strategy if not in call
+ #
+ # Sonification Follows Phone Strategy if in call (widely speaking)
+ # but AnlgDockHeadset not reachable in call.
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ ForceUseForDock Is ForceAnalogDock
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 1
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: Earpiece
+ #
+ # Sonification Follows Phone Strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ AvailableOutputDevices Includes Earpiece
+
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 1
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ conf: None
+ component: /Policy/policy/strategies/sonification/selected_output_devices/mask
+ earpiece = 0
+ wired_headset = 0
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_sonification_respectful.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_sonification_respectful.pfw
new file mode 100644
index 0000000..f66674c
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_sonification_respectful.pfw
@@ -0,0 +1,545 @@
+domainGroup: DeviceForStrategy
+
+ domainGroup: SonificationRespectful
+ #
+ # Sonificiation Respectful follows:
+ # - If in call: Strategy sonification (that follows phone strategy in call also...)
+ # - If not in call AND a music stream is active remotely: Strategy sonification (that
+ # follows enforced audible, which follows media)
+ # - if not in call and no music stream active remotely and music stream active): strategy
+ # media
+ # - Otherwise follows sonification by replacing speaker with speaker safe if speaker is
+ # selected.
+ #
+ # Case of stream active handled programmatically
+
+ domain: UnreachableDevices
+ conf: Calibration
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ remote_submix = 0
+ hdmi_arc = 0
+ aux_line = 0
+ spdif = 0
+ fm = 0
+ telephony_tx = 0
+
+ domain: Speakers
+
+ conf: SpeakerSafe
+ AvailableOutputDevices Includes Speaker
+ AvailableOutputDevices Includes SpeakerSafe
+ #
+ # Follows sonification strategy if not in call and replace speaker by speaker safe
+ # if and only if speaker only selected
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ speaker_safe = 1
+ speaker = 0
+
+ conf: Speaker
+ AvailableOutputDevices Includes Speaker
+ ANY
+ #
+ # Follows sonification strategy if not in call
+ #
+ ALL
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ALL
+ #
+ # Follows Phone Strategy if call
+ #
+ ForceUseForCommunication Is ForceSpeaker
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ AvailableOutputDevices Excludes Line
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ speaker_safe = 0
+ speaker = 1
+
+ conf: None
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ speaker_safe = 0
+ speaker = 0
+
+ domain: Device2
+ conf: BluetoothA2dp
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia Is ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dp
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 1
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothA2dpHeadphones
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia Is ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpHeadphones
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 1
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothA2dpSpeaker
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia Is ForceNoBtA2dp
+ AvailableOutputDevices Includes BluetoothA2dpSpeaker
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 1
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothScoCarkit
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceBtSco
+ AvailableOutputDevices Includes BluetoothScoCarkit
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 1
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothScoHeadset
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceBtSco
+ AvailableOutputDevices Includes BluetoothScoHeadset
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 1
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: BluetoothSco
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceBtSco
+ AvailableOutputDevices Includes BluetoothSco
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 1
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: WiredHeadphone
+ ANY
+ ALL
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ ALL
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes WiredHeadphone
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 1
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: LineWhenFollowMediaStrategy
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ AvailableOutputDevices Includes WiredHeadphone
+ ForceUseForMedia IsNot ForceSpeaker
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 1
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: WiredHeadset
+ ANY
+ ALL
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ ALL
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes WiredHeadset
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 1
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: UsbDevice
+ ANY
+ ALL
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ ALL
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Excludes UsbAccessory
+ AvailableOutputDevices Includes UsbDevice
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 1
+ hdmi = 0
+
+ conf: UsbAccessory
+ #
+ # SonificationRespectful Follows Phone strategy if in call (widely speaking)
+ # but UsbAccessory not reachable in call.
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes UsbAccessory
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 1
+ usb_device = 0
+ hdmi = 0
+
+ conf: DgtlDockHeadset
+ #
+ # SonificationRespectful Follows Phone strategy if in call (widely speaking)
+ # but DgtlDockHeadset not reachable in call.
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes DgtlDockHeadset
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 1
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: AuxDigital
+ #
+ # SonificationRespectful Follows Phone strategy if in call (widely speaking)
+ # but HDMI not reachable in call.
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ AvailableOutputDevices Includes Hdmi
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 1
+
+ conf: AnlgDockHeadset
+ #
+ # SonificationRespectful Follows Phone strategy if in call (widely speaking)
+ # but AnlgDockHeadset not reachable in call.
+ #
+ # SonificationRespectful Follows Sonification that falls through Media strategy if not in call
+ # SonificationRespectful follows media if music stream is active
+ #
+ TelephonyMode IsNot InCall
+ TelephonyMode IsNot InCommunication
+ ForceUseForMedia IsNot ForceSpeaker
+ ForceUseForDock Is ForceAnalogDock
+ AvailableOutputDevices Includes AnlgDockHeadset
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 1
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: Earpiece
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication IsNot ForceSpeaker
+ AvailableOutputDevices Includes Earpiece
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 1
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
+
+ conf: Line
+ #
+ # SonificationRespectful Follows Phone strategy if in call
+ #
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+ ForceUseForCommunication Is ForceSpeaker
+ AvailableOutputDevices Includes Line
+
+ component: /Policy/policy/strategies/sonification_respectful/selected_output_devices/mask
+ earpiece = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ bluetooth_a2dp = 0
+ wired_headset = 0
+ wired_headphone = 0
+ line = 1
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ hdmi = 0
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_transmitted_through_speaker.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_transmitted_through_speaker.pfw
new file mode 100644
index 0000000..e5ae9d9
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/device_for_strategy_transmitted_through_speaker.pfw
@@ -0,0 +1,40 @@
+supDomain: DeviceForStrategy
+
+ supDomain: TransmittedThroughSpeaker
+ domain: UnreacheableDevices
+ conf: Calibration
+ component: /Policy/policy/strategies/transmitted_through_speaker/selected_output_devices/mask
+ remote_submix = 0
+ hdmi_arc = 0
+ spdif = 0
+ aux_line = 0
+ fm = 0
+ speaker_safe = 0
+ earpiece = 0
+ wired_headset = 1
+ wired_headphone = 0
+ bluetooth_sco = 0
+ bluetooth_sco_headset = 0
+ bluetooth_sco_carkit = 0
+ bluetooth_a2dp = 0
+ bluetooth_a2dp_headphones = 0
+ bluetooth_a2dp_speaker = 0
+ hdmi = 0
+ angl_dock_headset = 0
+ dgtl_dock_headset = 0
+ usb_accessory = 0
+ usb_device = 0
+ telephony_tx = 0
+ line = 0
+
+ domain: Speaker
+ conf: Selected
+ AvailableOutputDevices Includes Speaker
+
+ component: /Policy/policy/strategies/transmitted_through_speaker/selected_output_devices/mask
+ speaker = 1
+
+ conf: NotSelected
+ component: /Policy/policy/strategies/transmitted_through_speaker/selected_output_devices/mask
+ speaker = 0
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/strategy_for_stream.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/strategy_for_stream.pfw
new file mode 100755
index 0000000..3940b9d
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/strategy_for_stream.pfw
@@ -0,0 +1,20 @@
+domain: StrategyForStream
+
+ conf: Calibration
+ /Policy/policy/streams/voice_call/applicable_strategy/strategy = phone
+ #
+ # NOTE: SYSTEM stream uses MEDIA strategy because muting music and switching outputs
+ # while key clicks are played produces a poor result
+ #
+ /Policy/policy/streams/system/applicable_strategy/strategy = media
+ /Policy/policy/streams/ring/applicable_strategy/strategy = sonification
+ /Policy/policy/streams/music/applicable_strategy/strategy = media
+ /Policy/policy/streams/alarm/applicable_strategy/strategy = sonification
+ /Policy/policy/streams/notification/applicable_strategy/strategy = sonification_respectful
+ /Policy/policy/streams/bluetooth_sco/applicable_strategy/strategy = phone
+ /Policy/policy/streams/enforced_audible/applicable_strategy/strategy = enforced_audible
+ /Policy/policy/streams/dtmf/applicable_strategy/strategy = dtmf
+ /Policy/policy/streams/tts/applicable_strategy/strategy = transmitted_through_speaker
+ /Policy/policy/streams/accessibility/applicable_strategy/strategy = accessibility
+ /Policy/policy/streams/rerouting/applicable_strategy/strategy = rerouting
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/strategy_for_usage.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/strategy_for_usage.pfw
new file mode 100644
index 0000000..3f5da13
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/strategy_for_usage.pfw
@@ -0,0 +1,39 @@
+supDomain: SelectedStrategyForUsages
+
+ domain: Calibration
+ conf: Calibration
+ /Policy/policy/usages/unknown/applicable_strategy/strategy = media
+ /Policy/policy/usages/media/applicable_strategy/strategy = media
+ /Policy/policy/usages/voice_communication/applicable_strategy/strategy = phone
+ /Policy/policy/usages/voice_communication_signalling/applicable_strategy/strategy = dtmf
+ /Policy/policy/usages/alarm/applicable_strategy/strategy = sonification
+ /Policy/policy/usages/notification/applicable_strategy/strategy = sonification_respectful
+ /Policy/policy/usages/notification_telephony_ringtone/applicable_strategy/strategy = sonification
+ /Policy/policy/usages/notification_communication_request/applicable_strategy/strategy = sonification_respectful
+ /Policy/policy/usages/notification_communication_instant/applicable_strategy/strategy = sonification_respectful
+ /Policy/policy/usages/notification_communication_delayed/applicable_strategy/strategy = sonification_respectful
+ /Policy/policy/usages/notification_event/applicable_strategy/strategy = sonification_respectful
+ /Policy/policy/usages/assistance_navigation_guidance/applicable_strategy/strategy = media
+ /Policy/policy/usages/assistance_sonification/applicable_strategy/strategy = media
+ /Policy/policy/usages/game/applicable_strategy/strategy = media
+
+ domain: AssistanceAccessibility
+ conf: Sonification
+ #
+ # In case of Ring or Alarm stream type active, switching to sonification
+ # @todo: handle this dynamic case. As a WA, using Ringtone mode...
+ #
+ TelephonyMode Is RingTone
+
+ /Policy/policy/usages/assistance_accessibility/applicable_strategy/strategy = sonification
+
+ conf: Phone
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+
+ /Policy/policy/usages/assistance_accessibility/applicable_strategy/strategy = phone
+
+ conf: Accessibility
+ /Policy/policy/usages/assistance_accessibility/applicable_strategy/strategy = accessibility
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/volumes.pfw b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/volumes.pfw
new file mode 100644
index 0000000..1049564
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/volumes.pfw
@@ -0,0 +1,545 @@
+supDomain: VolumeProfilesForStream
+ domain: Calibration
+ conf: Calibration
+ component: /Policy/policy/streams
+ component: voice_call/volume_profiles
+ component: headset_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -18.0
+ 2/index = 66
+ 2/db_attenuation = -12.0
+ 3/index = 100
+ 3/db_attenuation = -6.0
+ component: speaker_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -16.0
+ 2/index = 66
+ 2/db_attenuation = -8.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: earpiece_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -18.0
+ 2/index = 66
+ 2/db_attenuation = -12.0
+ 3/index = 100
+ 3/db_attenuation = -6.0
+ component: extmedia_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+
+ component: system/volume_profiles
+ component: headset_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -30.0
+ 1/index = 33
+ 1/db_attenuation = -26.0
+ 2/index = 66
+ 2/db_attenuation = -22.0
+ 3/index = 100
+ 3/db_attenuation = -18.0
+ component: speaker_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -18.0
+ 2/index = 66
+ 2/db_attenuation = -12.0
+ 3/index = 100
+ 3/db_attenuation = -6.0
+ component: earpiece_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -18.0
+ 2/index = 66
+ 2/db_attenuation = -12.0
+ 3/index = 100
+ 3/db_attenuation = -6.0
+ component: extmedia_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -21.0
+ 3/index = 100
+ 3/db_attenuation = -10.0
+
+ component: ring/volume_profiles
+ component: headset_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -49.5
+ 1/index = 33
+ 1/db_attenuation = -33.5
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: speaker_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -35.7
+ 1/index = 33
+ 1/db_attenuation = -26.1
+ 2/index = 66
+ 2/db_attenuation = -13.2
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: earpiece_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -49.5
+ 1/index = 33
+ 1/db_attenuation = -33.5
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: extmedia_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -27.0
+ 3/index = 100
+ 3/db_attenuation = -10.0
+
+ component: music/volume_profiles
+ component: headset_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: speaker_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -56.0
+ 1/index = 33
+ 1/db_attenuation = -34.0
+ 2/index = 66
+ 2/db_attenuation = -11.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: earpiece_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: extmedia_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+
+ component: alarm/volume_profiles
+ component: headset_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -49.5
+ 1/index = 33
+ 1/db_attenuation = -33.5
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: speaker_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -35.7
+ 1/index = 33
+ 1/db_attenuation = -26.1
+ 2/index = 66
+ 2/db_attenuation = -13.2
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: earpiece_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -49.5
+ 1/index = 33
+ 1/db_attenuation = -33.5
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: extmedia_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -27.0
+ 3/index = 100
+ 3/db_attenuation = -10.0
+
+ component: notification/volume_profiles
+ component: headset_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -49.5
+ 1/index = 33
+ 1/db_attenuation = -33.5
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: speaker_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -35.7
+ 1/index = 33
+ 1/db_attenuation = -26.1
+ 2/index = 66
+ 2/db_attenuation = -13.2
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: earpiece_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -49.5
+ 1/index = 33
+ 1/db_attenuation = -33.5
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: extmedia_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -27.0
+ 3/index = 100
+ 3/db_attenuation = -10.0
+
+ component: bluetooth_sco/volume_profiles
+ component: headset_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -18.0
+ 2/index = 66
+ 2/db_attenuation = -12.0
+ 3/index = 100
+ 3/db_attenuation = -6.0
+ component: speaker_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -16.0
+ 2/index = 66
+ 2/db_attenuation = -8.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: earpiece_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -18.0
+ 2/index = 66
+ 2/db_attenuation = -12.0
+ 3/index = 100
+ 3/db_attenuation = -6.0
+ component: extmedia_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+
+ component: enforced_audible/volume_profiles
+ component: headset_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -30.0
+ 1/index = 33
+ 1/db_attenuation = -26.0
+ 2/index = 66
+ 2/db_attenuation = -22.0
+ 3/index = 100
+ 3/db_attenuation = -18.0
+ component: speaker_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -18.0
+ 2/index = 66
+ 2/db_attenuation = -12.0
+ 3/index = 100
+ 3/db_attenuation = -6.0
+ component: earpiece_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -18.0
+ 2/index = 66
+ 2/db_attenuation = -12.0
+ 3/index = 100
+ 3/db_attenuation = -6.0
+ component: extmedia_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -27.0
+ 3/index = 100
+ 3/db_attenuation = -10.0
+
+ component: tts/volume_profiles
+ component: headset_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = -96.0
+ 1/index = 1
+ 1/db_attenuation = -96.0
+ 2/index = 2
+ 2/db_attenuation = -96.0
+ 3/index = 100
+ 3/db_attenuation = -96.0
+ component: speaker_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = -96.0
+ 1/index = 33
+ 1/db_attenuation = -68.0
+ 2/index = 66
+ 2/db_attenuation = -34.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: earpiece_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = -96.0
+ 1/index = 1
+ 1/db_attenuation = -96.0
+ 2/index = 2
+ 2/db_attenuation = -96.0
+ 3/index = 100
+ 3/db_attenuation = -96.0
+ component: extmedia_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = -96.0
+ 1/index = 1
+ 1/db_attenuation = -96.0
+ 2/index = 2
+ 2/db_attenuation = -96.0
+ 3/index = 100
+ 3/db_attenuation = -96.0
+
+ component: accessibility/volume_profiles
+ component: headset_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: speaker_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -56.0
+ 1/index = 33
+ 1/db_attenuation = -34.0
+ 2/index = 66
+ 2/db_attenuation = -11.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: earpiece_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: extmedia_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+
+ component: rerouting/volume_profiles
+ component: headset_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = 0.0
+ 1/index = 1
+ 1/db_attenuation = 0.0
+ 2/index = 2
+ 2/db_attenuation = 0.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: speaker_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = 0.0
+ 1/index = 1
+ 1/db_attenuation = 0.0
+ 2/index = 2
+ 2/db_attenuation = 0.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: earpiece_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = 0.0
+ 1/index = 1
+ 1/db_attenuation = 0.0
+ 2/index = 2
+ 2/db_attenuation = 0.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: extmedia_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = 0.0
+ 1/index = 1
+ 1/db_attenuation = 0.0
+ 2/index = 2
+ 2/db_attenuation = 0.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+
+ component: patch/volume_profiles
+ component: headset_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = 0.0
+ 1/index = 1
+ 1/db_attenuation = 0.0
+ 2/index = 2
+ 2/db_attenuation = 0.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: speaker_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = 0.0
+ 1/index = 1
+ 1/db_attenuation = 0.0
+ 2/index = 2
+ 2/db_attenuation = 0.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: earpiece_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = 0.0
+ 1/index = 1
+ 1/db_attenuation = 0.0
+ 2/index = 2
+ 2/db_attenuation = 0.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: extmedia_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = 0.0
+ 1/index = 1
+ 1/db_attenuation = 0.0
+ 2/index = 2
+ 2/db_attenuation = 0.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+
+ domain: Dtmf
+ conf: InCall
+ ANY
+ TelephonyMode Is InCall
+ TelephonyMode Is InCommunication
+
+ component: /Policy/policy/streams
+ component: dtmf/volume_profiles
+ component: headset_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -30.0
+ 1/index = 33
+ 1/db_attenuation = -26.0
+ 2/index = 66
+ 2/db_attenuation = -22.0
+ 3/index = 100
+ 3/db_attenuation = -18.0
+ component: speaker_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -18.0
+ 2/index = 66
+ 2/db_attenuation = -12.0
+ 3/index = 100
+ 3/db_attenuation = -6.0
+ component: earpiece_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -18.0
+ 2/index = 66
+ 2/db_attenuation = -12.0
+ 3/index = 100
+ 3/db_attenuation = -6.0
+ component: extmedia_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -27.0
+ 3/index = 100
+ 3/db_attenuation = -10.0
+
+ conf: OutOfCall
+ component: /Policy/policy/streams
+ component: dtmf/volume_profiles
+ component: headset_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -18.0
+ 2/index = 66
+ 2/db_attenuation = -12.0
+ 3/index = 100
+ 3/db_attenuation = -6.0
+ component: speaker_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -16.0
+ 2/index = 66
+ 2/db_attenuation = -8.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+ component: earpiece_device_category/curve_points
+ 0/index = 0
+ 0/db_attenuation = -24.0
+ 1/index = 33
+ 1/db_attenuation = -18.0
+ 2/index = 66
+ 2/db_attenuation = -12.0
+ 3/index = 100
+ 3/db_attenuation = -6.0
+ component: extmedia_device_category/curve_points
+ 0/index = 1
+ 0/db_attenuation = -58.0
+ 1/index = 33
+ 1/db_attenuation = -40.0
+ 2/index = 66
+ 2/db_attenuation = -17.0
+ 3/index = 100
+ 3/db_attenuation = 0.0
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicyClass.xml b/services/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicyClass.xml
new file mode 100755
index 0000000..296879f
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicyClass.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<SystemClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="../../Schemas/SystemClass.xsd" Name="Policy">
+ <SubsystemInclude Path="PolicySubsystem.xml"/>
+</SystemClass>
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicySubsystem-CommonTypes.xml b/services/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicySubsystem-CommonTypes.xml
new file mode 100755
index 0000000..821d6ad
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicySubsystem-CommonTypes.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ComponentTypeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ xsi:noNamespaceSchemaLocation="Schemas/ComponentTypeSet.xsd">
+ <!-- Output devices definition as a bitfield for the supported devices per output
+ profile. It must match with the output device enum parameter.
+ -->
+ <!--#################### GLOBAL COMPONENTS BEGIN ####################-->
+ <!-- Common Types defintion -->
+ <xi:include href="PolicySubsystem-Volume.xml"/>
+
+ <!--#################### GLOBAL COMPONENTS END ####################-->
+
+ <ComponentType Name="OutputDevicesMask" Description="32th bit is not allowed as dedicated
+ for input devices detection">
+ <BitParameterBlock Name="mask" Size="32">
+ <BitParameter Name="earpiece" Size="1" Pos="0"/>
+ <BitParameter Name="speaker" Size="1" Pos="1"/>
+ <BitParameter Name="wired_headset" Size="1" Pos="2"/>
+ <BitParameter Name="wired_headphone" Size="1" Pos="3"/>
+ <BitParameter Name="bluetooth_sco" Size="1" Pos="4"/>
+ <BitParameter Name="bluetooth_sco_headset" Size="1" Pos="5"/>
+ <BitParameter Name="bluetooth_sco_carkit" Size="1" Pos="6"/>
+ <BitParameter Name="bluetooth_a2dp" Size="1" Pos="7"/>
+ <BitParameter Name="bluetooth_a2dp_headphones" Size="1" Pos="8"/>
+ <BitParameter Name="bluetooth_a2dp_speaker" Size="1" Pos="9"/>
+ <BitParameter Name="hdmi" Size="1" Pos="10"/>
+ <BitParameter Name="angl_dock_headset" Size="1" Pos="11"/>
+ <BitParameter Name="dgtl_dock_headset" Size="1" Pos="12"/>
+ <BitParameter Name="usb_accessory" Size="1" Pos="13"/>
+ <BitParameter Name="usb_device" Size="1" Pos="14"/>
+ <BitParameter Name="remote_submix" Size="1" Pos="15"/>
+ <BitParameter Name="telephony_tx" Size="1" Pos="26"/>
+ <BitParameter Name="line" Size="1" Pos="17"/>
+ <BitParameter Name="hdmi_arc" Size="1" Pos="18"/>
+ <BitParameter Name="spdif" Size="1" Pos="19"/>
+ <BitParameter Name="fm" Size="1" Pos="20"/>
+ <BitParameter Name="aux_line" Size="1" Pos="21"/>
+ <BitParameter Name="speaker_safe" Size="1" Pos="22"/>
+ </BitParameterBlock>
+ </ComponentType>
+
+ <!-- Input devices definition as a bitfield for the supported devices per Input
+ profile. It must match with the Input device enum parameter.
+ -->
+ <ComponentType Name="InputDevicesMask">
+ <BitParameterBlock Name="mask" Size="32">
+ <BitParameter Name="communication" Size="1" Pos="0"/>
+ <BitParameter Name="ambient" Size="1" Pos="1"/>
+ <BitParameter Name="builtin_mic" Size="1" Pos="2"/>
+ <BitParameter Name="bluetooth_sco_headset" Size="1" Pos="3"/>
+ <BitParameter Name="wired_headset" Size="1" Pos="4"/>
+ <BitParameter Name="hdmi" Size="1" Pos="5"/>
+ <BitParameter Name="telephony_rx" Size="1" Pos="6"/>
+ <BitParameter Name="back_mic" Size="1" Pos="7"/>
+ <BitParameter Name="remote_submix" Size="1" Pos="8"/>
+ <BitParameter Name="anlg_dock_headset" Size="1" Pos="9"/>
+ <BitParameter Name="dgtl_dock_headset" Size="1" Pos="10"/>
+ <BitParameter Name="usb_accessory" Size="1" Pos="11"/>
+ <BitParameter Name="usb_device" Size="1" Pos="12"/>
+ <BitParameter Name="fm_tuner" Size="1" Pos="13"/>
+ <BitParameter Name="tv_tuner" Size="1" Pos="14"/>
+ <BitParameter Name="line" Size="1" Pos="15"/>
+ <BitParameter Name="spdif" Size="1" Pos="16"/>
+ <BitParameter Name="bluetooth_a2dp" Size="1" Pos="17"/>
+ <BitParameter Name="loopback" Size="1" Pos="18"/>
+ <BitParameter Name="in" Size="1" Pos="31"/>
+ </BitParameterBlock>
+ </ComponentType>
+
+ <ComponentType Name="OutputFlags"
+ Description="the audio output flags serve two purposes:
+ - when an AudioTrack is created they indicate a wish to be connected to an
+ output stream with attributes corresponding to the specified flags.
+ - when present in an output profile descriptor listed for a particular audio
+ hardware module, they indicate that an output stream can be opened that
+ supports the attributes indicated by the flags.
+ The audio policy manager will try to match the flags in the request
+ (when getOuput() is called) to an available output stream.">
+ <BitParameterBlock Name="mask" Size="32">
+ <BitParameter Name="direct" Size="1" Pos="0"/>
+ <BitParameter Name="primary" Size="1" Pos="1"/>
+ <BitParameter Name="fast" Size="1" Pos="2"/>
+ <BitParameter Name="deep_buffer" Size="1" Pos="3"/>
+ <BitParameter Name="compress_offload" Size="1" Pos="4"/>
+ <BitParameter Name="non_blocking" Size="1" Pos="5"/>
+ <BitParameter Name="hw_av_sync" Size="1" Pos="6"/>
+ </BitParameterBlock>
+ </ComponentType>
+
+ <ComponentType Name="InputFlags"
+ Description="The audio input flags are analogous to audio output flags.
+ Currently they are used only when an AudioRecord is created,
+ to indicate a preference to be connected to an input stream with
+ attributes corresponding to the specified flags.">
+ <BitParameterBlock Name="mask" Size="32">
+ <BitParameter Name="fast" Size="1" Pos="0"/>
+ <BitParameter Name="hw_hotword" Size="1" Pos="2"/>
+ </BitParameterBlock>
+ </ComponentType>
+
+ <ComponentType Name="InputSourcesMask" Description="The audio input source is also known
+ as the use case.">
+ <BitParameterBlock Name="mask" Size="32">
+ <BitParameter Name="default" Size="1" Pos="0"/>
+ <BitParameter Name="mic" Size="1" Pos="1"/>
+ <BitParameter Name="voice_uplink" Size="1" Pos="2"/>
+ <BitParameter Name="voice_downlink" Size="1" Pos="3"/>
+ <BitParameter Name="voice_call" Size="1" Pos="4"/>
+ <BitParameter Name="camcorder" Size="1" Pos="5"/>
+ <BitParameter Name="voice_recognition" Size="1" Pos="6"/>
+ <BitParameter Name="voice_communication" Size="1" Pos="7"/>
+ <BitParameter Name="remote_submix" Size="1" Pos="8"/>
+ <BitParameter Name="fm_tuner" Size="1" Pos="9"/>
+ <BitParameter Name="hotword" Size="1" Pos="10"/>
+ </BitParameterBlock>
+ </ComponentType>
+
+ <!-- Routing Strategy definition as an enumeration. Numerical value must match the value
+ of the routing strategy in policy header file. -->
+ <ComponentType Name="Strategy">
+ <EnumParameter Name="strategy" Size="32">
+ <ValuePair Literal="media" Numerical="0"/>
+ <ValuePair Literal="phone" Numerical="1"/>
+ <ValuePair Literal="sonification" Numerical="2"/>
+ <ValuePair Literal="sonification_respectful" Numerical="3"/>
+ <ValuePair Literal="dtmf" Numerical="4"/>
+ <ValuePair Literal="enforced_audible" Numerical="5"/>
+ <ValuePair Literal="transmitted_through_speaker" Numerical="6"/>
+ <ValuePair Literal="accessibility" Numerical="7"/>
+ <ValuePair Literal="rerouting" Numerical="8"/>
+ </EnumParameter>
+ </ComponentType>
+
+ <!--#################### STRATEGY COMMON TYPES BEGIN ####################-->
+
+ <ComponentType Name="StrategyConfig" Mapping="Strategy:'%1'">
+ <Component Name="selected_output_devices" Type="OutputDevicesMask"/>
+ </ComponentType>
+
+ <!--#################### STRATEGY COMMON TYPES END ####################-->
+
+ <!--#################### STREAM COMMON TYPES BEGIN ####################-->
+
+ <ComponentType Name="Stream">
+ <Component Name="applicable_strategy" Type="Strategy" Mapping="Stream:'%1'"/>
+ <Component Name="volume_profiles" Type="VolumeCurvesCategories"
+ Description="A volume profile is refered by the stream type."/>
+ </ComponentType>
+
+ <!--#################### STREAM COMMON TYPES END ####################-->
+
+ <!--#################### USAGE COMMON TYPES BEGIN ####################-->
+
+ <ComponentType Name="Usage">
+ <Component Name="applicable_strategy" Type="Strategy" Mapping="Usage:'%1'"/>
+ </ComponentType>
+
+ <!--#################### USAGE COMMON TYPES END ####################-->
+
+ <!--#################### INPUT SOURCE COMMON TYPES BEGIN ####################-->
+
+ <ComponentType Name="InputSource">
+ <Component Name="applicable_input_device" Type="InputDevicesMask"
+ Mapping="InputSource:'%1'" Description="Selected Input device"/>
+ </ComponentType>
+
+ <!--#################### INPUT SOURCE COMMON TYPES END ####################-->
+
+</ComponentTypeSet>
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicySubsystem-Volume.xml b/services/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicySubsystem-Volume.xml
new file mode 100755
index 0000000..cf39cc2
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicySubsystem-Volume.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ComponentTypeSet xmlns:xi="http://www.w3.org/2001/XInclude"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="Schemas/ComponentTypeSet.xsd">
+ <ComponentType Name="VolumeCurvePoints">
+ <ParameterBlock Name="curve_points" ArrayLength="4" Mapping="VolumeProfile:'%1'"
+ Description="4 points to define the volume attenuation curve, each
+ characterized by the volume index (from 0 to 100) at which
+ they apply, and the attenuation in dB at that index.
+ We use 100 steps to avoid rounding errors when computing
+ the volume">
+ <IntegerParameter Name="index" Size="32"/>
+ <FixedPointParameter Name="db_attenuation" Size="16" Integral="7" Fractional="8"/>
+ </ParameterBlock>
+ </ComponentType>
+
+ <ComponentType Name="VolumeCurvesCategories">
+ <Component Name="headset_device_category" Type="VolumeCurvePoints" Mapping="Category:0"/>
+ <Component Name="speaker_device_category" Type="VolumeCurvePoints" Mapping="Category:1"/>
+ <Component Name="earpiece_device_category" Type="VolumeCurvePoints" Mapping="Category:2"/>
+ <Component Name="extmedia_device_category" Type="VolumeCurvePoints" Mapping="Category:3"/>
+ </ComponentType>
+
+</ComponentTypeSet>
+
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicySubsystem.xml b/services/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicySubsystem.xml
new file mode 100755
index 0000000..b21f6ae
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/Structure/PolicySubsystem.xml
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Subsystem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ xsi:noNamespaceSchemaLocation="Schemas/Subsystem.xsd"
+ Name="policy" Type="Policy" Endianness="Little">
+
+ <ComponentLibrary>
+ <!--#################### GLOBAL COMPONENTS BEGIN ####################-->
+ <!-- Common Types defintion -->
+ <xi:include href="PolicySubsystem-CommonTypes.xml"/>
+
+ <!--#################### GLOBAL COMPONENTS END ####################-->
+
+ <!--#################### STRATEGY BEGIN ####################-->
+
+ <ComponentType Name="Strategies" Description="Identifier must match the enum value to make
+ the link between the PolicyManager and PFW">
+ <Component Name="media" Type="StrategyConfig" Mapping="Amend1:Media,Identifier:0"/>
+ <Component Name="phone" Type="StrategyConfig" Mapping="Amend1:Phone,Identifier:1"/>
+ <Component Name="sonification" Type="StrategyConfig"
+ Mapping="Amend1:Sonification,Identifier:2"/>
+ <Component Name="sonification_respectful" Type="StrategyConfig"
+ Mapping="Amend1:SonificationRespectful,Identifier:3"/>
+ <Component Name="dtmf" Type="StrategyConfig" Mapping="Amend1:Dtmf,Identifier:4"/>
+ <Component Name="enforced_audible" Type="StrategyConfig"
+ Mapping="Amend1:EnforcedAudible,Identifier:5"/>
+ <Component Name="transmitted_through_speaker" Type="StrategyConfig"
+ Mapping="Amend1:TransmittedThroughSpeaker,Identifier:6"/>
+ <Component Name="accessibility" Type="StrategyConfig"
+ Mapping="Amend1:Accessibility,Identifier:7"/>
+ <Component Name="rerouting" Type="StrategyConfig"
+ Mapping="Amend1:Rerouting,Identifier:8"/>
+ </ComponentType>
+
+ <!--#################### STRATEGY END ####################-->
+
+ <!--#################### STREAM BEGIN ####################-->
+
+ <ComponentType Name="Streams" Description="associated to audio_stream_type_t definition,
+ identifier mapping must match the value of the enum">
+ <Component Name="voice_call" Type="Stream" Mapping="Amend1:VoiceCall,Identifier:0"/>
+ <Component Name="system" Type="Stream" Mapping="Amend1:System,Identifier:1"/>
+ <Component Name="ring" Type="Stream" Mapping="Amend1:Ring,Identifier:2"/>
+ <Component Name="music" Type="Stream" Mapping="Amend1:Music,Identifier:3"/>
+ <Component Name="alarm" Type="Stream" Mapping="Amend1:Alarm,Identifier:4"/>
+ <Component Name="notification" Type="Stream"
+ Mapping="Amend1:Notification,Identifier:5"/>
+ <Component Name="bluetooth_sco" Type="Stream"
+ Mapping="Amend1:BluetoothSco,Identifier:6"/>
+ <Component Name="enforced_audible" Type="Stream"
+ Mapping="Amend1:EnforceAudible,Identifier:7"
+ Description="Sounds that cannot be muted by user and must
+ be routed to speaker"/>
+ <Component Name="dtmf" Type="Stream" Mapping="Amend1:Dtmf,Identifier:8"/>
+ <Component Name="tts" Type="Stream" Mapping="Amend1:Tts,Identifier:9"
+ Description="Transmitted Through Speaker.
+ Plays over speaker only, silent on other devices"/>
+ <Component Name="accessibility" Type="Stream"
+ Mapping="Amend1:Accessibility,Identifier:10"
+ Description="For accessibility talk back prompts"/>
+ <Component Name="rerouting" Type="Stream" Mapping="Amend1:Rerouting,Identifier:11"
+ Description="For dynamic policy output mixes"/>
+ <Component Name="patch" Type="Stream" Mapping="Amend1:Patch,Identifier:12"
+ Description="For internal audio flinger tracks. Fixed volume"/>
+ </ComponentType>
+
+ <!--#################### STREAM END ####################-->
+
+ <!--#################### USAGE BEGIN ####################-->
+
+ <ComponentType Name="Usages" Description="associated to audio_stream_type_t definition,
+ identifier mapping must match the value of the enum">
+ <Component Name="unknown" Type="Usage" Mapping="Amend1:Unknown,Identifier:0"/>
+ <Component Name="media" Type="Usage" Mapping="Amend1:Media,Identifier:1"/>
+ <Component Name="voice_communication" Type="Usage"
+ Mapping="Amend1:VoiceCommunication,Identifier:2"/>
+ <Component Name="voice_communication_signalling" Type="Usage"
+ Mapping="Amend1:VoiceCommunicationSignalling,Identifier:3"/>
+ <Component Name="alarm" Type="Usage" Mapping="Amend1:Alarm,Identifier:4"/>
+ <Component Name="notification" Type="Usage" Mapping="Amend1:Notification,Identifier:5"/>
+ <Component Name="notification_telephony_ringtone" Type="Usage"
+ Mapping="Amend1:NotificationTelephonyRingtone,Identifier:6"/>
+ <Component Name="notification_communication_request" Type="Usage"
+ Mapping="Amend1:NotificationCommunicationRequest,Identifier:7"/>
+ <Component Name="notification_communication_instant" Type="Usage"
+ Mapping="Amend1:NotificationCommunicationInstant,Identifier:8"/>
+ <Component Name="notification_communication_delayed" Type="Usage"
+ Mapping="Amend1:NotificationCommunicationDelated,Identifier:9"/>
+ <Component Name="notification_event" Type="Usage"
+ Mapping="Amend1:NotificationEvent,Identifier:10"/>
+ <Component Name="assistance_accessibility" Type="Usage"
+ Mapping="Amend1:AssistanceAccessibility,Identifier:11"/>
+ <Component Name="assistance_navigation_guidance" Type="Usage"
+ Mapping="Amend1:AssistanceNavigationGuidance,Identifier:12"/>
+ <Component Name="assistance_sonification" Type="Usage"
+ Mapping="Amend1:AssistanceSonification,Identifier:13"/>
+ <Component Name="game" Type="Usage" Mapping="Amend1:BluetoothSco,Identifier:14"/>
+ <Component Name="virtual_source" Type="Usage"
+ Mapping="Amend1:VirtualSource,Identifier:15"/>
+ </ComponentType>
+
+ <!--#################### USAGE END ####################-->
+
+ <!--#################### INPUT SOURCE BEGIN ####################-->
+
+ <ComponentType Name="InputSources" Description="associated to audio_source_t definition,
+ identifier mapping must match the value of the enum">
+ <Component Name="default" Type="InputSource" Mapping="Amend1:Default,Identifier:0"/>
+ <Component Name="mic" Type="InputSource" Mapping="Amend1:Mic,Identifier:1"/>
+ <Component Name="voice_uplink" Type="InputSource"
+ Mapping="Amend1:VoiceUplink,Identifier:2"/>
+ <Component Name="voice_downlink" Type="InputSource"
+ Mapping="Amend1:VoiceDownlink,Identifier:3"/>
+ <Component Name="voice_call" Type="InputSource"
+ Mapping="Amend1:VoiceCall,Identifier:4"/>
+ <Component Name="camcorder" Type="InputSource" Mapping="Amend1:Camcorder,Identifier:5"/>
+ <Component Name="voice_recognition" Type="InputSource"
+ Mapping="Amend1:VoiceRecognition,Identifier:6"/>
+ <Component Name="voice_communication" Type="InputSource"
+ Mapping="Amend1:VoiceCommunication,Identifier:7"/>
+ <Component Name="remote_submix" Type="InputSource"
+ Mapping="Amend1:RemoteSubmix,Identifier:8"/>
+ <Component Name="fm_tuner" Type="InputSource" Mapping="Amend1:FmTuner,Identifier:1998"/>
+ <Component Name="hotword" Type="InputSource" Mapping="Amend1:Hotword,Identifier:1999"/>
+ </ComponentType>
+
+ <!--#################### INPUT SOURCE END ####################-->
+
+ </ComponentLibrary>
+
+ <InstanceDefinition>
+ <Component Name="streams" Type="Streams"/>
+ <Component Name="strategies" Type="Strategies"/>
+ <Component Name="input_sources" Type="InputSources"/>
+ <Component Name="usages" Type="Usages"/>
+ </InstanceDefinition>
+</Subsystem>
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/example/policy_criteria.txt b/services/audiopolicy/engineconfigurable/parameter-framework/example/policy_criteria.txt
new file mode 100755
index 0000000..3b3151c
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/example/policy_criteria.txt
@@ -0,0 +1,14 @@
+ExclusiveCriterion TelephonyMode : Normal RingTone InCall InCommunication
+
+InclusiveCriterion AvailableInputDevices : Communication Ambient BuiltinMic BluetoothScoHeadset WiredHeadset Hdmi TelephonyRx BackMic RemoteSubmix AnlgDockHeadset DgtlDockHeadset UsbAccessory UsbDevice FmTuner TvTuner Line Spdif BluetoothA2dp Loopback
+
+InclusiveCriterion AvailableOutputDevices : Earpiece Speaker WiredSpeaker WiredHeadset WiredHeadphone BluetoothSco BluetoothScoHeadset BluetoothScoCarkit BluetoothA2dp BluetoothA2dpHeadphones BluetoothA2dpSpeaker Hdmi AnlgDockHeadset DgtlDockHeadset UsbAccessory UsbDevice RemoteSubmix TelephonyTx Line HdmiArc Spdif Fm AuxLine SpeakerSafe
+
+ExclusiveCriterion ForceUseForCommunication : ForceNone ForceSpeaker ForceBtSco
+ExclusiveCriterion ForceUseForMedia : ForceNone ForceSpeaker ForceHeadphones ForceBtA2dp ForceWiredAccessory ForceAnalogDock ForceDigitalDock ForceNoBtA2dp ForceSystemEnforced
+ExclusiveCriterion ForceUseForRecord : ForceNone ForceBtSco ForceWiredAccessory
+ExclusiveCriterion ForceUseForDock : ForceNone ForceWiredAccessory ForceBtCarDock ForceBtDeskDock ForceAnalogDock ForceDigitalDock
+ExclusiveCriterion ForceUseForSystem : ForceNone ForceSystemEnforced
+ExclusiveCriterion ForceUseForHdmiSystemAudio : ForceNone ForceHdmiSystemEnforced
+
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Android.mk b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Android.mk
new file mode 100755
index 0000000..a41e6b5
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Android.mk
@@ -0,0 +1,40 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+LOCAL_SRC_FILES := \
+ PolicySubsystemBuilder.cpp \
+ PolicySubsystem.cpp \
+ Strategy.cpp \
+ InputSource.cpp \
+ VolumeProfile.cpp \
+ Stream.cpp \
+ Usage.cpp
+
+LOCAL_CFLAGS += \
+ -Wall \
+ -Werror \
+ -Wextra \
+
+LOCAL_C_INCLUDES := \
+ $(TOPDIR)frameworks/av/services/audiopolicy/common/include \
+ $(TOPDIR)frameworks/av/services/audiopolicy/engineconfigurable/include \
+ $(TOPDIR)frameworks/av/services/audiopolicy/engineconfigurable/interface \
+
+LOCAL_SHARED_LIBRARIES := \
+ libaudiopolicyengineconfigurable \
+ libparameter \
+ liblog \
+
+LOCAL_STATIC_LIBRARIES := \
+ libparameter_includes \
+ libxmlserializer_includes \
+ libpfw_utility \
+
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE := libpolicy-subsystem
+
+include external/stlport/libstlport.mk
+include $(BUILD_SHARED_LIBRARY)
+
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/InputSource.cpp b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/InputSource.cpp
new file mode 100755
index 0000000..497d555
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/InputSource.cpp
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "InputSource.h"
+#include "PolicyMappingKeys.h"
+#include "PolicySubsystem.h"
+
+using std::string;
+
+InputSource::InputSource(const string &mappingValue,
+ CInstanceConfigurableElement *instanceConfigurableElement,
+ const CMappingContext &context)
+ : CFormattedSubsystemObject(instanceConfigurableElement,
+ mappingValue,
+ MappingKeyAmend1,
+ (MappingKeyAmendEnd - MappingKeyAmend1 + 1),
+ context),
+ mPolicySubsystem(static_cast<const PolicySubsystem *>(
+ instanceConfigurableElement->getBelongingSubsystem())),
+ mPolicyPluginInterface(mPolicySubsystem->getPolicyPluginInterface()),
+ mApplicableInputDevice(mDefaultApplicableInputDevice)
+{
+ mId = static_cast<audio_source_t>(context.getItemAsInteger(MappingKeyIdentifier));
+ // Declares the strategy to audio policy engine
+ mPolicyPluginInterface->addInputSource(getFormattedMappingValue(), mId);
+}
+
+bool InputSource::receiveFromHW(string & /*error*/)
+{
+ blackboardWrite(&mApplicableInputDevice, sizeof(mApplicableInputDevice));
+ return true;
+}
+
+bool InputSource::sendToHW(string & /*error*/)
+{
+ uint32_t applicableInputDevice;
+ blackboardRead(&applicableInputDevice, sizeof(applicableInputDevice));
+ mApplicableInputDevice = applicableInputDevice;
+ return mPolicyPluginInterface->setDeviceForInputSource(mId, mApplicableInputDevice);
+}
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/InputSource.h b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/InputSource.h
new file mode 100755
index 0000000..67c5b50
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/InputSource.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include "FormattedSubsystemObject.h"
+#include "InstanceConfigurableElement.h"
+#include "MappingContext.h"
+#include <AudioPolicyPluginInterface.h>
+#include <string>
+
+class PolicySubsystem;
+
+class InputSource : public CFormattedSubsystemObject
+{
+public:
+ InputSource(const std::string &mappingValue,
+ CInstanceConfigurableElement *instanceConfigurableElement,
+ const CMappingContext &context);
+
+protected:
+ virtual bool receiveFromHW(std::string &error);
+ virtual bool sendToHW(std::string &error);
+
+private:
+ const PolicySubsystem *mPolicySubsystem; /**< Route subsytem plugin. */
+
+ /**
+ * Interface to communicate with Audio Policy Engine.
+ */
+ android::AudioPolicyPluginInterface *mPolicyPluginInterface;
+
+ audio_source_t mId; /**< input source identifier to link with audio.h. */
+ uint32_t mApplicableInputDevice; /**< applicable input device for this strategy. */
+ static const uint32_t mDefaultApplicableInputDevice = 0; /**< default input device. */
+};
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicyMappingKeys.h b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicyMappingKeys.h
new file mode 100755
index 0000000..53944e9
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicyMappingKeys.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+/**
+ * Mapping item types
+ */
+enum PolicyItemType
+{
+ MappingKeyName,
+ MappingKeyCategory,
+ MappingKeyIdentifier,
+ MappingKeyAmend1,
+ MappingKeyAmend2,
+ MappingKeyAmend3
+};
+
+static const uint8_t MappingKeyAmendEnd = MappingKeyAmend3;
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.cpp b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.cpp
new file mode 100755
index 0000000..a5dab36
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.cpp
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "PolicySubsystem.h"
+#include "SubsystemObjectFactory.h"
+#include "PolicyMappingKeys.h"
+#include "Strategy.h"
+#include "Stream.h"
+#include "InputSource.h"
+#include "VolumeProfile.h"
+#include "Usage.h"
+#include <AudioPolicyPluginInterface.h>
+#include <AudioPolicyEngineInstance.h>
+#include <utils/Log.h>
+
+using android::audio_policy::EngineInstance;
+
+const char *const PolicySubsystem::mKeyName = "Name";
+const char *const PolicySubsystem::mKeyIdentifier = "Identifier";
+const char *const PolicySubsystem::mKeyCategory = "Category";
+const char *const PolicySubsystem::mKeyAmend1 = "Amend1";
+const char *const PolicySubsystem::mKeyAmend2 = "Amend2";
+const char *const PolicySubsystem::mKeyAmend3 = "Amend3";
+
+
+const char *const PolicySubsystem::mStreamComponentName = "Stream";
+const char *const PolicySubsystem::mStrategyComponentName = "Strategy";
+const char *const PolicySubsystem::mInputSourceComponentName = "InputSource";
+const char *const PolicySubsystem::mUsageComponentName = "Usage";
+const char *const PolicySubsystem::mVolumeProfileComponentName = "VolumeProfile";
+
+PolicySubsystem::PolicySubsystem(const std::string &name)
+ : CSubsystem(name),
+ mPluginInterface(NULL)
+{
+ // Try to connect a Plugin Interface from Audio Policy Engine
+ EngineInstance *engineInstance = EngineInstance::getInstance();
+
+ if (engineInstance == NULL) {
+ ALOG_ASSERT(engineInstance != NULL, "NULL Plugin Interface");
+ return;
+ }
+ // Retrieve the Route Interface
+ mPluginInterface = engineInstance->queryInterface<android::AudioPolicyPluginInterface>();
+ if (mPluginInterface == NULL) {
+ // bailing out
+ ALOG_ASSERT(mPluginInterface != NULL, "NULL Plugin Interface");
+ return;
+ }
+
+ // Provide mapping keys to the core, necessary when parsing the XML Structure files.
+ addContextMappingKey(mKeyName);
+ addContextMappingKey(mKeyCategory);
+ addContextMappingKey(mKeyIdentifier);
+ addContextMappingKey(mKeyAmend1);
+ addContextMappingKey(mKeyAmend2);
+ addContextMappingKey(mKeyAmend3);
+
+ // Provide creators to upper layer
+ addSubsystemObjectFactory(
+ new TSubsystemObjectFactory<Stream>(
+ mStreamComponentName,
+ (1 << MappingKeyAmend1) | (1 << MappingKeyIdentifier))
+ );
+ addSubsystemObjectFactory(
+ new TSubsystemObjectFactory<Strategy>(
+ mStrategyComponentName,
+ (1 << MappingKeyAmend1) | (1 << MappingKeyIdentifier))
+ );
+ addSubsystemObjectFactory(
+ new TSubsystemObjectFactory<Usage>(
+ mUsageComponentName,
+ (1 << MappingKeyAmend1) | (1 << MappingKeyIdentifier))
+ );
+ addSubsystemObjectFactory(
+ new TSubsystemObjectFactory<InputSource>(
+ mInputSourceComponentName,
+ (1 << MappingKeyAmend1) | (1 << MappingKeyIdentifier))
+ );
+ addSubsystemObjectFactory(
+ new TSubsystemObjectFactory<VolumeProfile>(
+ mVolumeProfileComponentName,
+ (1 << MappingKeyAmend1) | (1 << MappingKeyIdentifier) | (1 << MappingKeyIdentifier))
+ );
+}
+
+// Retrieve Route interface
+android::AudioPolicyPluginInterface *PolicySubsystem::getPolicyPluginInterface() const
+{
+ ALOG_ASSERT(mPluginInterface != NULL, "NULL Plugin Interface");
+ return mPluginInterface;
+}
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.h b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.h
new file mode 100755
index 0000000..3c26fe1
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include "Subsystem.h"
+#include <string>
+
+namespace android {
+
+class AudioPolicyPluginInterface;
+
+}
+
+class PolicySubsystem : public CSubsystem
+{
+public:
+ PolicySubsystem(const std::string &strName);
+
+ /**
+ * Retrieve Route Manager interface.
+ *
+ * @return RouteManager interface for the route plugin.
+ */
+ android::AudioPolicyPluginInterface *getPolicyPluginInterface() const;
+
+private:
+ /* Copy facilities are put private to disable copy. */
+ PolicySubsystem(const PolicySubsystem &object);
+ PolicySubsystem &operator=(const PolicySubsystem &object);
+
+ android::AudioPolicyPluginInterface *mPluginInterface; /**< Audio Policy Plugin Interface. */
+
+ static const char *const mKeyName; /**< name key mapping string. */
+ static const char *const mKeyIdentifier;
+ static const char *const mKeyCategory;
+
+ static const char *const mKeyAmend1; /**< amend1 key mapping string. */
+ static const char *const mKeyAmend2; /**< amend2 key mapping string. */
+ static const char *const mKeyAmend3; /**< amend3 key mapping string. */
+
+ static const char *const mStreamComponentName;
+ static const char *const mStrategyComponentName;
+ static const char *const mInputSourceComponentName;
+ static const char *const mUsageComponentName;
+ static const char *const mVolumeProfileComponentName;
+};
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystemBuilder.cpp b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystemBuilder.cpp
new file mode 100755
index 0000000..b14d446
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystemBuilder.cpp
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "SubsystemLibrary.h"
+#include "NamedElementBuilderTemplate.h"
+#include "PolicySubsystem.h"
+
+static const char *const POLICY_SUBSYSTEM_NAME = "Policy";
+extern "C"
+{
+void getPOLICYSubsystemBuilder(CSubsystemLibrary *subsystemLibrary)
+{
+ subsystemLibrary->addElementBuilder(POLICY_SUBSYSTEM_NAME,
+ new TNamedElementBuilderTemplate<PolicySubsystem>());
+}
+}
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Strategy.cpp b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Strategy.cpp
new file mode 100755
index 0000000..1848813
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Strategy.cpp
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Strategy.h"
+#include "PolicyMappingKeys.h"
+#include "PolicySubsystem.h"
+
+using std::string;
+using android::routing_strategy;
+
+Strategy::Strategy(const string &mappingValue,
+ CInstanceConfigurableElement *instanceConfigurableElement,
+ const CMappingContext &context)
+ : CFormattedSubsystemObject(instanceConfigurableElement,
+ mappingValue,
+ MappingKeyAmend1,
+ (MappingKeyAmendEnd - MappingKeyAmend1 + 1),
+ context),
+ mPolicySubsystem(static_cast<const PolicySubsystem *>(
+ instanceConfigurableElement->getBelongingSubsystem())),
+ mPolicyPluginInterface(mPolicySubsystem->getPolicyPluginInterface()),
+ mApplicableOutputDevice(mDefaultApplicableOutputDevice)
+{
+ mId = static_cast<routing_strategy>(context.getItemAsInteger(MappingKeyIdentifier));
+
+ // Declares the strategy to audio policy engine
+ mPolicyPluginInterface->addStrategy(getFormattedMappingValue(), mId);
+}
+
+bool Strategy::receiveFromHW(string & /*error*/)
+{
+ blackboardWrite(&mApplicableOutputDevice, sizeof(mApplicableOutputDevice));
+ return true;
+}
+
+bool Strategy::sendToHW(string & /*error*/)
+{
+ uint32_t applicableOutputDevice;
+ blackboardRead(&applicableOutputDevice, sizeof(applicableOutputDevice));
+ return mPolicyPluginInterface->setDeviceForStrategy(mId, applicableOutputDevice);
+}
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Strategy.h b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Strategy.h
new file mode 100755
index 0000000..9a9b3e4
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Strategy.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include "FormattedSubsystemObject.h"
+#include "InstanceConfigurableElement.h"
+#include "MappingContext.h"
+#include <AudioPolicyPluginInterface.h>
+#include <string>
+
+class PolicySubsystem;
+
+class Strategy : public CFormattedSubsystemObject
+{
+public:
+ Strategy(const std::string &mappingValue,
+ CInstanceConfigurableElement *instanceConfigurableElement,
+ const CMappingContext &context);
+
+protected:
+ virtual bool receiveFromHW(std::string &error);
+ virtual bool sendToHW(std::string &error);
+
+private:
+ const PolicySubsystem *mPolicySubsystem; /**< Route subsytem plugin. */
+
+ /**
+ * Interface to communicate with Audio Policy Engine.
+ */
+ android::AudioPolicyPluginInterface *mPolicyPluginInterface;
+
+ android::routing_strategy mId; /**< strategy identifier to link with audio.h.*/
+ uint32_t mApplicableOutputDevice; /**< applicable output device for this strategy. */
+ static const uint32_t mDefaultApplicableOutputDevice = 0; /**< default output device. */
+};
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Stream.cpp b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Stream.cpp
new file mode 100755
index 0000000..575b0bb
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Stream.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Stream.h"
+#include "PolicyMappingKeys.h"
+#include "PolicySubsystem.h"
+
+using std::string;
+using android::routing_strategy;
+
+Stream::Stream(const string &mappingValue,
+ CInstanceConfigurableElement *instanceConfigurableElement,
+ const CMappingContext &context)
+ : CFormattedSubsystemObject(instanceConfigurableElement,
+ mappingValue,
+ MappingKeyAmend1,
+ (MappingKeyAmendEnd - MappingKeyAmend1 + 1),
+ context),
+ mPolicySubsystem(static_cast<const PolicySubsystem *>(
+ instanceConfigurableElement->getBelongingSubsystem())),
+ mPolicyPluginInterface(mPolicySubsystem->getPolicyPluginInterface()),
+ mApplicableStrategy(mDefaultApplicableStrategy)
+{
+ mId = static_cast<audio_stream_type_t>(context.getItemAsInteger(MappingKeyIdentifier));
+
+ // Declares the strategy to audio policy engine
+ mPolicyPluginInterface->addStream(getFormattedMappingValue(), mId);
+}
+
+bool Stream::receiveFromHW(string & /*error*/)
+{
+ blackboardWrite(&mApplicableStrategy, sizeof(mApplicableStrategy));
+ return true;
+}
+
+bool Stream::sendToHW(string & /*error*/)
+{
+ uint32_t applicableStrategy;
+ blackboardRead(&applicableStrategy, sizeof(applicableStrategy));
+ mApplicableStrategy = applicableStrategy;
+ return mPolicyPluginInterface->setStrategyForStream(mId,
+ static_cast<routing_strategy>(mApplicableStrategy));
+}
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Stream.h b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Stream.h
new file mode 100755
index 0000000..7d90c36
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Stream.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include "FormattedSubsystemObject.h"
+#include "InstanceConfigurableElement.h"
+#include "MappingContext.h"
+#include <AudioPolicyPluginInterface.h>
+#include <string>
+
+class PolicySubsystem;
+
+class Stream : public CFormattedSubsystemObject
+{
+public:
+ Stream(const std::string &mappingValue,
+ CInstanceConfigurableElement *instanceConfigurableElement,
+ const CMappingContext &context);
+
+protected:
+ virtual bool receiveFromHW(std::string &error);
+ virtual bool sendToHW(std::string &error);
+
+private:
+ const PolicySubsystem *mPolicySubsystem; /**< Route subsytem plugin. */
+
+ /**
+ * Interface to communicate with Audio Policy Engine.
+ */
+ android::AudioPolicyPluginInterface *mPolicyPluginInterface;
+
+ audio_stream_type_t mId; /**< stream type identifier to link with audio.h. */
+ uint32_t mApplicableStrategy; /**< applicable strategy for this stream. */
+ static const uint32_t mDefaultApplicableStrategy = 0; /**< default strategy. */
+};
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Usage.cpp b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Usage.cpp
new file mode 100755
index 0000000..1916b9b
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Usage.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Usage.h"
+#include "PolicyMappingKeys.h"
+#include "PolicySubsystem.h"
+
+using std::string;
+using android::routing_strategy;
+
+Usage::Usage(const string &mappingValue,
+ CInstanceConfigurableElement *instanceConfigurableElement,
+ const CMappingContext &context)
+ : CFormattedSubsystemObject(instanceConfigurableElement,
+ mappingValue,
+ MappingKeyAmend1,
+ (MappingKeyAmendEnd - MappingKeyAmend1 + 1),
+ context),
+ mPolicySubsystem(static_cast<const PolicySubsystem *>(
+ instanceConfigurableElement->getBelongingSubsystem())),
+ mPolicyPluginInterface(mPolicySubsystem->getPolicyPluginInterface()),
+ mApplicableStrategy(mDefaultApplicableStrategy)
+{
+ mId = static_cast<audio_usage_t>(context.getItemAsInteger(MappingKeyIdentifier));
+
+ // Declares the strategy to audio policy engine
+ mPolicyPluginInterface->addUsage(getFormattedMappingValue(), mId);
+}
+
+bool Usage::receiveFromHW(string & /*error*/)
+{
+ blackboardWrite(&mApplicableStrategy, sizeof(mApplicableStrategy));
+ return true;
+}
+
+bool Usage::sendToHW(string & /*error*/)
+{
+ uint32_t applicableStrategy;
+ blackboardRead(&applicableStrategy, sizeof(applicableStrategy));
+ mApplicableStrategy = applicableStrategy;
+ return mPolicyPluginInterface->setStrategyForUsage(mId,
+ static_cast<routing_strategy>(mApplicableStrategy));
+}
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Usage.h b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Usage.h
new file mode 100755
index 0000000..8e9b638
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/Usage.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include "FormattedSubsystemObject.h"
+#include "InstanceConfigurableElement.h"
+#include "MappingContext.h"
+#include <AudioPolicyPluginInterface.h>
+#include <string>
+
+class PolicySubsystem;
+
+class Usage : public CFormattedSubsystemObject
+{
+public:
+ Usage(const std::string &mappingValue,
+ CInstanceConfigurableElement *instanceConfigurableElement,
+ const CMappingContext &context);
+
+protected:
+ virtual bool receiveFromHW(std::string &error);
+ virtual bool sendToHW(std::string &error);
+
+private:
+ const PolicySubsystem *mPolicySubsystem; /**< Route subsytem plugin. */
+
+ /**
+ * Interface to communicate with Audio Policy Engine.
+ */
+ android::AudioPolicyPluginInterface *mPolicyPluginInterface;
+
+ audio_usage_t mId; /**< usage identifier to link with audio.h. */
+ uint32_t mApplicableStrategy; /**< applicable strategy for this usage. */
+ static const uint32_t mDefaultApplicableStrategy = 0; /**< default strategy. */
+};
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/VolumeProfile.cpp b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/VolumeProfile.cpp
new file mode 100755
index 0000000..5c155c8
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/VolumeProfile.cpp
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "VolumeProfile.h"
+#include "PolicyMappingKeys.h"
+#include "PolicySubsystem.h"
+#include "ParameterBlockType.h"
+#include <Volume.h>
+#include <math.h>
+
+using std::string;
+
+VolumeProfile::VolumeProfile(const string &mappingValue,
+ CInstanceConfigurableElement *instanceConfigurableElement,
+ const CMappingContext &context)
+ : CFormattedSubsystemObject(instanceConfigurableElement,
+ mappingValue,
+ MappingKeyAmend1,
+ (MappingKeyAmendEnd - MappingKeyAmend1 + 1),
+ context),
+ mPolicySubsystem(static_cast<const PolicySubsystem *>(
+ instanceConfigurableElement->getBelongingSubsystem())),
+ mPolicyPluginInterface(mPolicySubsystem->getPolicyPluginInterface())
+{
+ uint32_t categoryKey = context.getItemAsInteger(MappingKeyCategory);
+ if (categoryKey >= Volume::DEVICE_CATEGORY_CNT) {
+ mCategory = Volume::DEVICE_CATEGORY_SPEAKER;
+ } else {
+ mCategory = static_cast<Volume::device_category>(categoryKey);
+ }
+ mId = static_cast<audio_stream_type_t>(context.getItemAsInteger(MappingKeyIdentifier));
+
+ // (no exception support, defer the error)
+ if (instanceConfigurableElement->getType() != CInstanceConfigurableElement::EParameterBlock) {
+ return;
+ }
+ // Get actual element type
+ const CParameterBlockType *parameterType = static_cast<const CParameterBlockType *>(
+ instanceConfigurableElement->getTypeElement());
+ mPoints = parameterType->getArrayLength();
+}
+
+bool VolumeProfile::receiveFromHW(string & /*error*/)
+{
+ return true;
+}
+
+bool VolumeProfile::sendToHW(string & /*error*/)
+{
+ Point points[mPoints];
+ blackboardRead(&points, sizeof(Point) * mPoints);
+
+ VolumeCurvePoints pointsVector;
+ for (size_t i = 0; i < mPoints; i++) {
+ VolumeCurvePoint curvePoint;
+ curvePoint.mIndex = points[i].index;
+ curvePoint.mDBAttenuation = static_cast<float>(points[i].dbAttenuation) /
+ (1UL << gFractional);
+ pointsVector.push_back(curvePoint);
+ }
+ return mPolicyPluginInterface->setVolumeProfileForStream(mId, mCategory, pointsVector);
+}
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/VolumeProfile.h b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/VolumeProfile.h
new file mode 100755
index 0000000..a00ae84
--- /dev/null
+++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/VolumeProfile.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include "FormattedSubsystemObject.h"
+#include "InstanceConfigurableElement.h"
+#include "MappingContext.h"
+#include <Volume.h>
+#include <AudioPolicyPluginInterface.h>
+#include <string>
+
+class PolicySubsystem;
+
+class VolumeProfile : public CFormattedSubsystemObject
+{
+private:
+ struct Point
+ {
+ int index;
+ /** Volume is using FixedPointParameter until float parameters are available. */
+ int16_t dbAttenuation;
+ } __attribute__((packed));
+
+public:
+ VolumeProfile(const std::string &mappingValue,
+ CInstanceConfigurableElement *instanceConfigurableElement,
+ const CMappingContext &context);
+
+protected:
+ virtual bool receiveFromHW(std::string &error);
+ virtual bool sendToHW(std::string &error);
+
+private:
+ const PolicySubsystem *mPolicySubsystem; /**< Route subsytem plugin. */
+
+ /**
+ * Interface to communicate with Audio Policy Engine.
+ */
+ android::AudioPolicyPluginInterface *mPolicyPluginInterface;
+
+ /**
+ * volume profile identifier, which is in fact a stream type to link with audio.h.
+ */
+ audio_stream_type_t mId;
+
+ size_t mPoints;
+ Volume::device_category mCategory;
+
+ static const uint32_t gFractional = 8; /**< Beware to align with the structure. */
+};