aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
authorTai Vuong <tvuong@audiokinetic.com>2017-11-14 11:28:55 -0500
committerTai Vuong <tvuong@audiokinetic.com>2017-11-14 11:28:55 -0500
commit24996e4de3c3d935876abb61d33e7d953d8d01c6 (patch)
tree31ee3d742cec91bb45d82b1f952a70c6a6e3b72e /README.md
parenta9a8cf133f5f797806a2e0924ec9089d65cefff9 (diff)
add detail documentation
Signed-off-by: Tai Vuong <tvuong@audiokinetic.com>
Diffstat (limited to 'README.md')
-rw-r--r--README.md159
1 files changed, 103 insertions, 56 deletions
diff --git a/README.md b/README.md
index f9b55ed..a19c38c 100644
--- a/README.md
+++ b/README.md
@@ -2,90 +2,137 @@
AGL Audio High Level Binding
------------------------------------------------------------------------
-# Cloning Audio High Level from Git
+# Audio High Level Binding
+-----------------------------
+The Audio High Level Binding is the upper layer in the Audio 4A architecture.
+The binding provide a simple, unified single entry point for all AGL audio applications.
+
+Here are the features provide by the binding:
+
+- Expose all audio device capabilities in uniform way to applications
+- Provide display name for device to applications (e.g. for user selection)
+- Provide target device URI (e.g. stream to selected endpoint) to applications
+- Automatically retrieve associated volume control for ALSA softvol URI
+- Allow fine grain security permissions control, policy enforcement and application audio stream control isolation
+- Priority-based and audio role specific endpoint selection / stream routings (automatic or explicit)
+- Aggregation of different audio domains (ALSA, Pulse)
+- Audio stream controls (volume, mute, state, properties)
+
+
+# Glossary
+-----------------------------
+The binding define the following term:
+
+- AHL : Audio High Level Binding
+- Audio role : Specific set of audio policy rules applied to a group of audio stream
+- Endpoint : Virtual audio sink or source device.
+- Stream : Audio connection between an application and an endpoint (source or sink).
+- Audio 4A Framework : AGL Audio Framework using a set of low level, HAL and HLB bindings.
+- Policy Engine : Static library define in ahl-policy.c implementing audio policy.
+- URI : Uniform Resource Identifier (e.g. ALSA PCM name)
+
+
+# Policy Engine
+------------------------------
+
+The sample implementation of the policy engine is implemented as a static library.
+The interface between the policy engine and the audio high level binding is a simple JSON interface.
+This allows users to easily replace it with their own policy engine.
+
+
+# Endpoint Selection
+------------------------------
+The AHL JSON configuration file defines a number of possible endpoints per audio role. The endpoints are listed in order of priority, from highest to lowest priority.
+At initialization time, the AHL will validate each endpoint and only keep a list of available endpoints per audio role. Inactive endpoints are discarded and are not accessible to applications.
+
+Applications can request a list of available endpoints for a specific audio role by calling the API/Verb get_endpoints.
+Applications can decide to open a stream on a specific endpoint from the list by specifying an EndpointID or let AHL select automatically an endpoint based on it audio role endpoint priority list.
+In the latter case, the endpoint selected will be the first available endpoint on the audio-role specific list.
+
+# Events
+-------------------------------
+AHL will generate 4 types of events, defined in ahl-interface.h:
+
+- **AHL_STREAM_STATE_EVENT**
+
+ Applications are automatically susbcribed to this event and will only receive events for streams they have opened.
+- **AHL_ENDPOINT_VOLUME_EVENT**
+
+ Applications need to subscribe to this event to receive volume change notifications.
+- **AHL_ENDPOINT_PROPERTY_EVENT**
+
+ Applications need to subscribe to this event to receive property change notifications.
+- **AHL_POST_ACTION_EVENT**
+
+ Applications need to subscribe to this event to receive action notifications. Note: This is for future use cases, involving sound generation for example.
+
+
+# AHL Configuration File and System Configuration
+----------------------------------------------
+Please refer to README.md documentation inside subfolder:
+
+conf.d/project/README.md
+
+
+# Cloning Audio High Level Binding from Git
-------------------------------------------------------
```
# Initial clone with submodules
git clone --recurse-submodules https://github.com/Audiokinetic-Automotive/afb-audiohighlevel.git
cd audio-binding
-
# Do not forget submodules with pulling
git pull --recurse-submodules https://github.com/Audiokinetic-Automotive/afb-audiohighlevel.git
```
-# AFB-daemon dependencies
--------------------------------------------------------
-
- OpenSuse >=42.2, Fedora>=25, Ubuntu>=16.4 Binary packages from https://en.opensuse.org/LinuxAutomotive
+# System libraries Dependencies
+------------------------------------------------------------------
+- libasound (version 1.1.2 or latest)
+- libsystemd (version 222 or latest)
+- libmicrohttpd (version 0.9.55 or latest)
+- afb-daemon (version 2.0 or latest)
+- json-c
+- libafbwsc
+- glib-2.0
- For other distro see # Building AFB-daemon from source on Standard Linux Distribution
+# AGL Binding Dependencies
+-------------------------------------------------------------------
+AGL Audio High Level Binding is part of the AGL Audio 4A framework,
+It requires the following AGL bindings:
-
-# Specific Dependencies
+- **4a-alsa-core**
- * alsa-devel >= 1.1.2 Warning some distro like Fedora-25 still ship version 1.1.1 as default
- * lua >= 5.3 Most distribution only ship version 5.2 but binary package should be easy to find
+ Alsa Low Level Binding
-On Ubuntu 16.4 you should recompile AlsaLib from source ftp://ftp.alsa-project.org/pub/lib/
-as today latest stable is 1.1.4.
+ source: https://gerrit.automotivelinux.org/gerrit/#/admin/projects/src/4a-alsa-core
+- **4a-hal-reference**
+ Hardware Abstraction Layer Binding
-```
- OpenSuse
- - LUA-5.3-devel https://software.opensuse.org//download.html?project=devel%3Alanguages%3Alua&package=lua53
- - Alsa-devel zypper --install alsa-devel # 42.3 is shipped default with 1.1.4
-
- Fedora 26 (out of the box)
- - Lua 5.3
- - Alsa-devel 1.1.4
-
- Ubuntu-16.4
- - LUA-5.3 is avaliable in binary through apt-get
- - Alsa should be recompiled from source
-
- wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.4.1.tar.bz2
- tar -xjf alsa-lib-1.1.4.1.tar.bz2
- cd alsa-lib-1.1.4.1
- ./configure --prefix=/opt
-
- Ubuntu-17.04 (out of the box)
- - Alsa 1.1.4
- - Lua 5.3
-
- #WARNING: do not forget to upgrade your PKG_CONFIG_PATH=/opt/lib/pkgconfig or whatever is the place where
- your installed alsa/lua.
-```
+ source: https://gerrit.automotivelinux.org/gerrit/#/admin/projects/src/4a-hal-reference
# Compile AGL Audio High Level Binding
--------------------------------------
-* Edit your ~/.config/app-templates/cmake.d/00-common-userconf.cmake to reflect your local configuration
-
-```
- message(STATUS "*** User Local Config For Native Linux ***")
- add_compile_options(-DNATIVE_LINUX)
-
- set(CMAKE_INSTALL_PREFIX $ENV{HOME}/opt)
- set(BINDINGS_INSTALL_PREFIX $ENV{HOME}/opt)
+Set INSTALL_PREFIX variable to your local AGL binding install folder.
- set(CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX}/lib64/pkgconfig ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig)
- set(LD_LIBRARY_PATH ${CMAKE_INSTALL_PREFIX}/lib64 ${CMAKE_INSTALL_PREFIX}/lib)
```
-
+export INSTALL_PREFIX=~/opt
+mkdir -p build
+cd build
+cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX ..
+make
+make install
```
- mkdir -p build
- cd build
- cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX ..
- make
- make install
+# Launch command to test and usage (the actual list of HAL to use may be specific to each hardware setup, please adapt name and ldpath parameters to match with your system configuration)
- afb-daemon --workdir=. --ldpaths=.. --port=1234 --roothttp=./htdocs --token="" --verbose
-
+```
+afb-daemon --name=audio4a --workdir=.--ldpaths=./lib:../agl-service-audio-4a/lib/afb-audiohighlevel.so:../4a-hal-reference/lib/afb-hal-intel-hda.so:../4a-alsa-core/lib/afb-alsa-4a.so --port=1234 --roothttp=./htdocs --token="" --verbose
+```