From 070ccac33d65c651c972dfab9c6148e43d8d5d8e Mon Sep 17 00:00:00 2001 From: fulup Date: Thu, 3 Aug 2017 12:00:41 +0200 Subject: Initial Working Version on Alsa Policy-Policy-Hook --- conf.d/alsa/asoundrc.sample | 142 +++++++++++++++++++++++++++++++++----------- conf.d/cmake/config.cmake | 1 + 2 files changed, 107 insertions(+), 36 deletions(-) (limited to 'conf.d') diff --git a/conf.d/alsa/asoundrc.sample b/conf.d/alsa/asoundrc.sample index bd5b3b7..2611478 100644 --- a/conf.d/alsa/asoundrc.sample +++ b/conf.d/alsa/asoundrc.sample @@ -1,9 +1,30 @@ -# Dmixer mixe multiple audio channel into one -pcm.SoftMixer { +# +# Author: Fulup Ar Foll +# Object: PCM hook type +# +# Test : Note: Jabra_USB=hw:v1340 +# Check SoundCard speaker-test -Dhw:v1340 -c2 -twav +# Check MixerPCM speaker-test -DMyMixerPCM -c2 -twav +# Check HookPCM speaker-test -DMyNavigationHook -c2 -twav +# Check NavPCM speaker-test -DMyNavPCM -c2 -twav +# MultiMedia aplay -DDMyNavPCM /usr/share/sounds/alsa/test.wav +# +# Bug/Feature: when softvol control is initialised from plugin and not +# from AGL binding. At 1st run ctl has invalid TLV and cannot be +# use. Bypass Solution: +# * start audio-binder before playing sound (binding create control before softvol plugin) +# * run a dummy aplay -DMyNavPCM "" to get a clean control +# +# References: https://www.spinics.net/lists/alsa-devel/msg54235.html +# -------------------------------------------------------------------- + +# Mixer PCM allow to play multiple stream simultaneously +# ------------------------------------------------------ +pcm.MyMixerPCM { type dmix ipc_key 1024 ipc_key_add_uid false - ipc_perm 0666 # mixing for all users + ipc_perm 0666 # mixing for all users # Define target effective sound card (cannot be a plugin) slave { @@ -21,52 +42,101 @@ pcm.SoftMixer { } } -pcm.music { - type softvol - slave.pcm "SoftMixer" - control { - name "MasterMusic" - card 0 +# Define a Hook_type with a private sharelib +# ------------------------------------------- +pcm_hook_type.MyHookPlugin { + install "AlsaInstallHook" + lib "/home/fulup/Workspace/AGL-AppFW/audio-bindings-dev/build/Alsa-Plugin/Alsa-Hook-Callback/alsa_hook_cb.so" +} + +# Define a HookedPCM that point to Hook_type sharelib +# ---------------------------------------------------- +pcm.MyNavigationHook { + type hooks + slave.pcm "MyMixerPCM" + + # Defined used hook sharelib and provide arguments/config to install func + hooks.0 { + type "MyHookPlugin" + hook_args { + + # Every Call should return OK in order PCM to open + uri "ws://localhost:1234/api?token='audio-agent-token'" + request { + CallPing { + api "alsacore" + verb "ping" + } + CallUCM { + api "alsacore" + verb "ping" + query "{'devid':'hw:v1340','verb':'Navigation','dev':'speakers'}" + } + } + } } +} + +# If hardware does not support mixer emulate it with softvol +# ----------------------------------------------------------- +pcm.MyMultimediaPCM { + type softvol + + # Point Slave on HOOK for policies control + slave.pcm "MyNavigationHook" + + # resolution=HAL(valMax+1) (default=256) + resolution 256 + + # name should match with HAL but do not set card=xx + control.name "Playback Navigation" # Make this plugin visible from aplay -L hint { show on - description "Music" + description "Navigation SolftVol PCM" } } -pcm.navi { - type softvol - slave { - pcm "SoftMixer" - } - control { - name "MasterNavi" - card 0 - } +# If hardware does not support mixer emulate it with softvol +# ----------------------------------------------------------- +pcm.MyNavPCM { + type softvol + + # Point Slave on HOOK for policies control + slave.pcm "MyNavigationHook" + + # resolution=HAL(valMax+1) (default=256) + resolution 256 + + # name should match with HAL but do not set card=xx + control.name "Playback Navigation" + + # Make this plugin visible from aplay -L hint { show on - description "Navi" - } + description "Navigation SolftVol PCM" + } } -pcm.notif { - type softvol - slave { - pcm "SoftMixer" - } - control { - name "MasterNotif" - card 0 - } +# If hardware does not support mixer emulate it with softvol +# ----------------------------------------------------------- +pcm.MyAlarmPCM { + type softvol + + # Point Slave on HOOK for policies control + slave.pcm "MyNavigationHook" + + # resolution=HAL(valMax+1) (default=256) + resolution 256 + + # name should match with HAL but do not set card=xx + control.name "Playback Navigation" + + # Make this plugin visible from aplay -L hint { show on - description "Notif" - } + description "Navigation SolftVol PCM" + } } -pcm.!default { - type plug - slave.pcm "SoftMixer" #make use of Softvol -} diff --git a/conf.d/cmake/config.cmake b/conf.d/cmake/config.cmake index 116ed2a..1a53d8a 100644 --- a/conf.d/cmake/config.cmake +++ b/conf.d/cmake/config.cmake @@ -61,6 +61,7 @@ set (PKG_REQUIRED_LIST libmicrohttpd>=0.9.55 afb-daemon json-c + libafbwsc ) # LANG Specific compile flags set for all build types -- cgit 1.2.3-korg