# # 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 # Define target effective sound card (cannot be a plugin) slave { pcm "hw:v1340" } #Jabra Solmate # DMIX can only map two channels bindings { 0 0 1 1 } } # 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-Policy-Hook/policy_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 { verbose true # print few log messages (default false); # Every Call should return OK in order PCM to open (default timeout 100ms) uri "ws://localhost:1234/api?token=audio-agent-token&uuid=audio-agent-session" request { # Request autorisation to write on navigation RequestNavigation { api "control" verb "dispatch" query "{'target':'navigation', 'args':{'device':'Jabra SOLEMATE v1.34.0'}}" } } # map event reception to self generated signal event { pause 30 resume 31 stop 3 } } } } # 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 "Navigation SolftVol PCM" } } # 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 "Navigation SolftVol PCM" } } # 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 "Navigation SolftVol PCM" } }