blob: 1786c46d7c9cc94dd744702665775f5a7e20bad1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
#
# 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
period_time 0
period_size 1024
buffer_size 8192
rate 44100
}
# 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'"
request {
# Request autorisation to write on navigation
RequestNavigation {
api "polctl"
verb "navigation"
}
# subscribe to Audio Agent Event
SubscriveEvents {
api "polctl"
verb "monitor"
}
TestAutoStop {
api "polctl"
verb "event_test"
query "{'label':'stop', 'delay':10000}"
}
TestAutoStart {
api "polctl"
verb "event_test"
query "{'label':'stop', 'delay':20000}"
}
# start a test pause/resume not supported by every hardware
TestPauseResume {
api "polctl"
verb "event_test"
query "{'label':'pause', 'delay':3000, 'count':10}"
}
}
}
}
}
# 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"
}
}
|