blob: 748f66fbf4813eaccf871d38be1f53120861c5a1 (
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
|
Alsa-Hook-Plugin
Object: Provide a Hook on Alsa PCM to check permission again AGL Advance Audio Agent
Status: Release Candidate
Author: Fulup Ar Foll fulup@iot.bzh
Date : August-2017
Functionalities:
- Execute a set of unix/ws RPC request again AGL binders to allow/deny access
- Keep websocket open in an idependant thread in order to monitor event received from AGL audio agent
Installation
- Alsaplugins are typically search in /usr/share/alsa-lib. Nevertheless a full path might be given
- This plugin implement a hook on a slave PCM. Typically this slave PCM is a dedicated virtual channel (eg: navigation, emergency,...)
- Config should be place in ~/.asoundrc (see config sample in PROJECT_ROOT/conf.d/alsa)
Test
- Install a full .asoundrc from conf.d/project/alsa.d
- speaker-test -DMyNavigationHook -c2 -twav
Config
```
# Define sharelib location and entry point
# -----------------------------------------
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"
}
# Create PCM HOOK with corresponding request calls to AGL Audio Agent
# --------------------------------------------------------------------
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'"
ws-client="unix:/var/tmp/pol4a"
request {
# Request authorisation to write on navigation
navigation-ctl {
request "navigation-role"
release "release-role"
args "{'uid':'alsa-hook-navigation'}"
}
# subscribe to Audio Agent Event map them to signal
subscribe-evt {
api "pol4a"
verb "subscribe"
}
}
# map event reception to self generated signal
event {
pause 30
resume 31
stop 3
}
}
}
}
```
NOTE:
* Hook plugin is loaded by Alsa libasound within client context. It inherits client process attributes, as UID/GID and
SMACK label when running on AGL. The smack label is control by AGL security framework.
As a result a control request succeeds only when client application permission match requested audio role inside Cynara security database.
* Hook plugin keep a connection with the Audio-Agent until PCM is closed by the application. This connection allow the
Audio-Agent to send events. eg: pause, quit, mute, ...
|