aboutsummaryrefslogtreecommitdiffstats
path: root/doc/api-ref/html/_application_guide_8md_source.html
blob: 122781c760be4c98b35c0190be0ba80241f97aca (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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Sound Manager: R:/SoundManagerBinding/doc/ApplicationGuide.md Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Sound Manager
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('_application_guide_8md.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">R:/SoundManagerBinding/doc/ApplicationGuide.md</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_application_guide_8md.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;**Sound Manager Application Guide**</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;====</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;&lt;div align=&quot;right&quot;&gt;Revision: 0.2Beta&lt;/div&gt;</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;&lt;div align=&quot;right&quot;&gt;TOYOTA MOTOR CORPORATION&lt;/div&gt;</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;&lt;div align=&quot;right&quot;&gt;Advanced Driver Information Technology&lt;/div&gt;</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;&lt;div align=&quot;right&quot;&gt;2nd/Oct/2017&lt;/div&gt;</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;* * *</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;## **&lt;div id=&quot;Table\ of\ content&quot;&gt;Table of content&lt;/div&gt;**</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;- [Target reader of this document](#Target\ reader\ of\ this\ document)</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;- [Overview](#Overview)</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;- [Getting Start](#Getting\ Start)</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;   - [Supported environment](#Supported\ environment)</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;   - [Build](#Build)</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;   - [Configuring](#Configuring)</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;   - [Additional work](#Additional\ work)</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;   - [How to call Sound Manager&#39;s APIs from your Application?](#How\ to\ call\ Sound\ Manager\ APIs\ from\ your\ Application?)</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;- [Supported usecase](#Supported\ usecase)</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;- [Software Architecture](#Software\ Architecture)</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;- [API reference](#API\ reference)</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;   - [APIs](#APIs)</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;   - [Events](#Events)</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;- [Sequence](#Sequence)</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;   - [StartUp](#StartUp)</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;   - [Registration](#Registration)</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;   - [Request Sound Right](#Request\ Sound\ Right)</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;   - [Connect Sound Route](#Connect\ Sound\ Route)</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;   - [Start Sound Streaming](#Start\ Sound\ Streaming)</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;   - [Stop Sound Streaming](#Stop\ Sound\ Streaming)</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;   - [Disconnect Sound Route](#Disconnect\ Sound\ Route)</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;   - [Change Volume](#Change\ Volume)</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;   - [Set Mute State](#Set\ Mute\ State)</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;   - [Release Sound Right](#Release\ Sound\ Right)</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;   - [Audio Domain](#Audio\ Domain)</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;- [Sample code](#Sample\ code)</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;- [Limitation](#Limitation)</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;* * *</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;## **&lt;div id=&quot;Target\ reader\ of\ this\ document&quot;&gt;Target reader of this document&lt;/div&gt;**</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;Application developer whose software uses sound output.</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;* * *</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;## **&lt;div id=&quot;Overview&quot;&gt;Overview&lt;/div&gt;**</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;The sound manager is the service which provides **sound-right management** for multiple sound sources.  </div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;This service based on GENIVI Audio Manager, and this package contains service binder and library for API calling.  </div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;The reason why this service based on GENIVI Audio Manager is because the sound manager supports highly strong and flexible sound-right management function.</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;In order to understand, the below figure shows the one of typical usecases.</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;In this example, there are four sound mode.</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;1. Audio Off</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;2. Media Player</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;3. Tel (Ring and talking)</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;4. TTS (Text To Speech; typically it&#39;s used by Navigation sound)</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;![Figure: Typical usecase](parts/typical-usecase.png)</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;The important points are:</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;- **There is a priority for each sound source.**  </div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;   In this example, &quot;Tel&quot; and &quot;TTS&quot; is stronger than &quot;MediaPlayer&quot;. Therefore when the system got incoming call, all four outputs of MediaPlayer are muted automatically by Sound Manager. And in this timing, Sound Manager will issue the event to Media Player, then Media Player can stop the music. (Because depends on OEM&#39;s requirement, &quot;Stop&quot; is required, not &quot;Mute&quot;.)  </div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    &quot;Tel&quot; and &quot;TTS&quot; have the same priority. So if TTS event happened on talking, each sound will output from independent speaker.  </div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    If on-hook button is touched, Sound Manager will resume previous sound mode. In this example, basically it&#39;s MediaPlayer sound. But if TTS still playing, three speaker will output MediaPlayer sound but one speaker will continue to output TTS sound.</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;- **Sound mode transition should be done by Sound Manager not Applications.**  </div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;   Actually application cannot recognize all sound source and its priority, so some centerized manager is required. Sound Manager provides this function. Sound Manager has a database for usecase and priority and in line with this policy Sound Manager controls proper sound mode.</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;The below links show the example of Sound/Window mode transition.</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;* [Single window application](Display_Audio_Transition1.md)  </div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;   This transition assumes target IVI system support only one window on screen. It&#39;s a similar transition to CES2017 demo.</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;* [Dual window application](Display_Audio_Transition2.md)  </div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;   This transition assumes target IVI system support two window (split screen) on screen.</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;   Of course user can customize shortcut menu, but since it&#39;s too many states so this example limits shortcut menu as &quot;Home&quot;, &quot;MediaPlayer&quot;, &quot;HVAC&quot; and &quot;Navigation&quot;.</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;* * *</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;## **&lt;div id=&quot;Getting\ Start&quot;&gt;Getting Start&lt;/div&gt;**</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;### **&lt;div id=&quot;Supported\ environment&quot;&gt;Supported environment&lt;/div&gt;**</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;| Item        | Description                       |</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;|:------------|:----------------------------------|</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;| AGL version | Daring Dab                        |</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;| Hardware    | Renesas R-Car Starter Kit Pro(M3) |</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;### **&lt;div id=&quot;Build&quot;&gt;Build&lt;/div&gt;**</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;You can make Sound Manager object files by the following two stage operations.</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;**Download recipe**</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;If repo is already done, please start with git clone</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;```</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;$ mkdir WORK</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;$ cd WORK</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;$ repo init -b dab -m dab_4.0.0_xml -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;$ repo sync</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;$ git clone https://gerrit.automotivelinux.org/gerrit/staging/meta-hmi-framework</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;```</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;Then you can get the following recipe.</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;* `meta-hmi-framework/agl-service-soundmanager-2017`</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;**Bitbake**</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;```</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;$ source meta-agl/scripts/aglsetup.sh -m m3ulcb agl-demo agl-devel agl-appfw-smack hmi-framework</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;$ bitbake agl-service-soundmanager-2017</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;```</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;* * *</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;### **&lt;div id=&quot;Configuring&quot;&gt;Configuring&lt;/div&gt;**</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;To use Sound Manager API, an application shall paste the following configuration definition into &quot;config.xml&quot; of application.</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;```</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;&lt;feature name=&quot;urn:AGL:widget:required-api&quot;&gt;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;   &lt;param name=&quot;soundmanager&quot; value=&quot;ws&quot; /&gt;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;&lt;/feature&gt;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;```</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;* * *</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;### **&lt;div id=&quot;Additional\ work&quot;&gt;Additional work&lt;/div&gt;**</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;**Add Policy file**</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;To add Sound Manager Domain into policy, put the following file to /etc/audiomanager/control.</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;` soundmanager/conf/audiomanager-config-sample/configuration.xml`</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;**Remove Module router of Pulse Audio**</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;Because the module rounter access to Audio manager for getting sound right instead of application in CES2017, after you changed your application code for Sound manager, you should remove the module router.  </div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;To do this, you have to comment out line.143 of /etc/pulse/default.pa as below.</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;```</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;.ifexists module-router.so</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;#load-module module-router</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;.endif</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;```</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;* * *</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;### **&lt;div id=&quot;How\ to\ call\ Sound\ Manager\ APIs\ from\ your\ Application?&quot;&gt;How to call Sound Manager APIs from your Application?&lt;/div&gt;**</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;Sound Manager provides a library which is called &quot;libsoundmanager&quot;.  </div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;This library provides function style API calling interface. So you should include libsoundmanager.hpp headerfile, and should link this library.</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;Please also refer sample application and template.</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;See also our [Sample code](#Sample\ code).</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;&lt;br /&gt;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;* * *</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;## **&lt;div id=&quot;Supported\ usecase&quot;&gt;Supported usecase&lt;/div&gt;**</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;1. Active source change</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;   - When user choose different audio source with current one, IVI system stop or pause current source and activate new one.</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;   - When user connect external device e.g. iPhone, USB memory IVI system change active source automatically to connected one.</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;2. Active source locking</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;   - When user is in phone call, IVI restrict to change active source.</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;3. Interrupt source mixing</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;   - When car close to cross road IVI system reduce the volume of current source and mix with interrupt source e.g. Navigation Guidance.</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;4. Volume change</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;   - User can change the volume of active source or sink.</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;   - When user change volume during interruption e.g. Navigation Guidance, IVI system change its volume temporary or permanently.</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;5. Mute/unmute</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;   - User can mute/unmute current active source.</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;6. Volume management</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;   - When user change active source, IVI system mute/unmute to avoid distortion of sound.</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;7. Volume acceleration</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;   - When road noise is increased by speed, IVI system automatically change the volume of active source.</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;8. Routing sound</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;   - System needs to route sound stream to proper zones. (driver zone, passenger zone, rear seat zone)</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;[See also this page](https://wiki.automotivelinux.org/eg-ui-graphics-req-audiorouting)</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;* * *</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;## **&lt;div id=&quot;Software\ Architecture&quot;&gt;Software Architecture&lt;/div&gt;**</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;The architecture of Sound Manager is shown below.  </div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;Sound Manager is the service designed to be used by multiple applications.  </div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;Therefore Sound Manager framework consists on two binder layers. Please refer the following figure.  </div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;The upper binder is for application side security context for applications. The lower binder is for servide side security context.  </div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;Usually application side binder has some business logic for each application, so the number of binders depend on the number of applications which use Sound Manager.  </div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;On the other hand, regarding lower binder there is only one module in the system. This binder receives all messages from multiple applications (in detail, it comes from upper layer binder).</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;The communication protocols between libsoundmanager and upper binder, upper binder and lower binder, lower binder (soundmanager-binding) and AudioManager are WebSocket.</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;![software-stack.png](parts/software-stack.png)</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;* * *</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;## **&lt;div id=&quot;API\ reference&quot;&gt;API reference&lt;/div&gt;**</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;&quot;libsoundmanager&quot; and &quot;soundmanager_binding&quot; provides several kinds of APIs, and these APIs basically correspond to GENIVI Audio Manager API. (Some APIs are Sound Manager original functions.)</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;For understanding, GENIVI Audio Manager stands for one core module and three plug-ins.</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;1. AudioManagerDaemon  </div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;   This is a core module of Audio Manager.</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;2. AudioManagerCommandPlugin  </div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;   This is a command interface for Audio Manager.</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;3. AudioManagerController  </div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;   This plug-in can be used for sound-right management.</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;4. AudioManagerRountingPlugin  </div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;   This plug-in abstracts the hardware and software. And sometimes there may be multiple plug-ins.</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;*) [See also GENIVI AudioManager Components](http://docs.projects.genivi.org/AudioManager/audiomanagercomponentspage.html)</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;![See also GENIVI AudioManager Components](parts/am-component.png)</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;(This figure was copied from GENIVI Web page.)</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;### **&lt;div id=&quot;APIs&quot;&gt;APIs&lt;/div&gt;**</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;- [init(int port, const std::string&amp; token)]()</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;- [registerSource(const std::string&amp; sourceName)](http://docs.projects.genivi.org/AudioManager/a00053.html#acadce23459d94cec496d17700cbde230)</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;- [connect(int sourceID, int sinkID)](http://docs.projects.genivi.org/AudioManager/a00033.html#a62d8f5aee1e601d59f993c5a5561e234)</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;- [connect(int sourceID, const std::string&amp; sinkName = &quot;default&quot;)](http://docs.projects.genivi.org/AudioManager/a00033.html#a62d8f5aee1e601d59f993c5a5561e234)</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;- [disconnect(int connectionID)](http://docs.projects.genivi.org/AudioManager/a00033.html#aa24d0146f4e3c75e02d6c0152e246da1)</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;- [ackSetSourceState(int sourceID, int handle, int errno)](http://docs.projects.genivi.org/AudioManager/a00053.html#a11f6b0378a50296a72107d6a1fa7ec21)</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;- [LibSoundmanager ()](api-ref/html/class_lib_soundmanager.html#a8b51e9891813cb62dd12109c017ad106)</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;- [set_event_handler(enum EventType_AsyncSetSourceState et, handler_asyncSetSourceState f)]()</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;- [register_callback( void (*event_cb)(const std::string&amp; event, struct json_object* event_contents), void (*reply_cb)(struct json_object* reply_contents), void (*hangup_cb)(void) = nullptr)]()</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;- [register_callback( void (*reply_cb)(struct json_object* reply_contents), void (*hangup_cb)(void) = nullptr)]()</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;The below APIs will be available at RC2.</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;- [setVolume (const am_sinkID_t sinkID, const am_mainVolume_t volume)](http://docs.projects.genivi.org/AudioManager/a00033.html#a6d47bc67473d75495260abe8c666fc7e)</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;- [volumeStep (const am_sinkID_t sinkID, const int16_t volumeStep)](http://docs.projects.genivi.org/AudioManager/a00033.html#ad7a4c1fe5a2ecfaae5484a14d8820e58)</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;- [setSinkMuteState (const am_sinkID_t sinkID, const am_MuteState_e muteState)](http://docs.projects.genivi.org/AudioManager/a00033.html#afae22041843c5349be16a6593d3ebb9c)</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;- [getListMainConnections (std::vector&lt; am_MainConnectionType_s &gt; &amp;listConnections)](http://docs.projects.genivi.org/AudioManager/a00033.html#a59d10a7178e3227d0b8f415308c71179)</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;- [confirmRoutingReady (const uint16_t handle, const am_Error_e error)](http://docs.projects.genivi.org/AudioManager/a00053.html#a1dd1b89cccffeaafb1a3c11cebd7e48c)</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;### **&lt;div id=&quot;Events&quot;&gt;Events&lt;/div&gt;**</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;- [EventType_AsyncSetSourceState]()</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;The below Events will be available at RC2.</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;- [EventType_NewMainConnection](http://docs.projects.genivi.org/AudioManager/a00034.html#a69ada9e19c65c1d078d8a5f473d08586)</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;- [EventType_RemovedMainConnection](http://docs.projects.genivi.org/AudioManager/a00034.html#aa3b5906bcf682cff155fb24d402efd89)</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;- [EventType_MainConnectionStateChanged](http://docs.projects.genivi.org/AudioManager/a00034.html#a32aa8ab84632805a876e023a7aead810)</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;- [EventType_VolumeChanged](http://docs.projects.genivi.org/AudioManager/a00034.html#a4494fdd835137e572f2cf4a3aceb6ae5)</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;- [EventType_SinkMuteStateChanged](http://docs.projects.genivi.org/AudioManager/a00034.html#a6068ce59089fbdc63aec81e778aba238)</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;- [EventType_setRoutingReady](http://docs.projects.genivi.org/AudioManager/a00054.html#a7a4d410e30df0e8240d25a57e3c72c6b)</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;- [EventType_asyncConnect](http://docs.projects.genivi.org/AudioManager/a00054.html#a8a81297be9c64511e27d85444c59b0d6)</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;- [EventType_asyncSetSourceState](http://docs.projects.genivi.org/AudioManager/a00054.html#ab02d93d54ee9cd98776a3f2d274ee24d)</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;- [EventType_asyncDisconnect](http://docs.projects.genivi.org/AudioManager/a00054.html#a93ae95515730eb615ab5dfc1316d7862)</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;* * *</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;## **&lt;div id=&quot;Sequence&quot;&gt;Sequence&lt;/div&gt;**</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;### **&lt;div id=&quot;StartUp&quot;&gt;StartUp&lt;/div&gt;**</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;![seq_startup.png](parts/seq_startup.svg)</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;### **&lt;div id=&quot;Registration&quot;&gt;Registration&lt;/div&gt;**</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;![seq_registration.png](parts/seq_registration.svg)</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;### **&lt;div id=&quot;Request\ Sound\ Right&quot;&gt;Request Sound Right&lt;/div&gt;**</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;![seq_requestsoundmode.png](parts/seq_requestsoundmode.svg)</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;### **&lt;div id=&quot;Connect\ Sound\ Route&quot;&gt;Connect Sound Route&lt;/div&gt;**</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;![seq_connectsoundroute.png](parts/seq_connectsoundroute.svg)</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;### **&lt;div id=&quot;Start\ Sound\ Streaming&quot;&gt;Start Sound Streaming&lt;/div&gt;**</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;![seq_startsoundstreaming.png](parts/seq_startsoundstreaming.svg)</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;### **&lt;div id=&quot;Stop\ Sound\ Streaming&quot;&gt;Stop Sound Streaming&lt;/div&gt;**</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;![seq_stopsoundstreaming.png](parts/seq_stopsoundstreaming.svg)</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;### **&lt;div id=&quot;Disconnect\ Sound\ Route&quot;&gt;Disconnect Sound Route&lt;/div&gt;**</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;![seq_disconnectsoundroute.png](parts/seq_disconnectsoundroute.svg)</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;### **&lt;div id=&quot;Change\ Volume&quot;&gt;Change Volume&lt;/div&gt;**</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;![seq_changevolume.png](parts/seq_changevolume.svg)</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;### **&lt;div id=&quot;Set\ Mute\ State&quot;&gt;Set Mute State&lt;/div&gt;**</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;![seq_setmutestate.png](parts/seq_setmutestate.svg)</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;### **&lt;div id=&quot;Release\ Sound\ Right&quot;&gt;Release Sound Right&lt;/div&gt;**</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;![seq_releasesoundmode.png](parts/seq_releasesoundmode.svg)</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;* * *</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;### **&lt;div id=&quot;Audio\ Domain&quot;&gt;Audio Domain&lt;/div&gt;**</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;One of the most important concept of Audio Manager is Audio Domain.</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;To use GENIVI Audio Manager based system, it may be better to understand this concept.</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;The below document should bring good understanding.</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;[GENIVI Audio Manager: Generic Controller Plug-in](http://events.linuxfoundation.org/sites/events/files/slides/AGL_AMM_presentation_A01.pdf)</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;Although strongly recommended to read whole pages, but you can get quick understanding by page.10 to 14.</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;# **&lt;div id=&quot;Sample\ code&quot;&gt;Sample code&lt;/div&gt;**</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;You can find sample implementation of Sound Manager as below.</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;* `apps/agl-service-homescreen-2017/sample/template`  </div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;* `apps/agl-service-homescreen-2017/sample/radio`  </div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;* `apps/agl-service-homescreen-2017/sample/mediaplayer`  </div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;# **&lt;div id=&quot;Limitation&quot;&gt;Limitation&lt;/div&gt;**</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;* Minimum APIs and Events are prepared for RC1, the following APIs will be available for RC2.</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;   * setVolume</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;   * volumeStep</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;   * setSinkMuteState</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;   * getListMainConnections</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;   * confirmRoutingReady</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;   * EventType_NewMainConnection</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;   * EventType_RemovedMainConnection</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;   * EventType_MainConnectionStateChanged</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;   * EventType_VolumeChanged</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;   * EventType_SinkMuteStateChanged</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;   * EventType_setRoutingReady</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;   * EventType_asyncConnect</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;   * EventType_asyncSetSourceState</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;   * EventType_asyncDisconnect</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;</div></div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="_application_guide_8md.html">ApplicationGuide.md</a></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>