aboutsummaryrefslogtreecommitdiffstats
path: root/doc/afb-plugins-overview.html
blob: 4fdb72f4f611a34dc1e6bca4ee856d6b1b5be41d (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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
<html>
<head>
  <link rel="stylesheet" type="text/css" href="doc.css">
  <meta charset="UTF-8">
</head>
<body>
<a name="Overview.of.plugins.shipped.with.AFB-Daemon"></a>
<h1>Overview of plugins shipped with AFB-Daemon</h1>

<pre><code>Version: 1
Date:    09 juin 2016
Author:  Manuel Bachmann
</code></pre>

<a name="List.of.plugins"></a>
<h2>List of plugins</h2>

<p>Here are the plugins shipped in the source tree:</p>

<ul>
<li>Hello World</li>
<li>Authentication</li>
<li>Tic Tac Toe</li>
<li>Audio <em>(2 backends: ALSA/PulseAudio)</em></li>
<li>Radio <em>(1 backend: RTLSDR RTL2832U)</em></li>
<li>Media <em>(1 backend: Rygel UPnP)</em></li>
</ul>


<p>All plugins may not be built, depending on the development libraries present on the system at build time.</p>

<a name="Detail.of.plugins"></a>
<h2>Detail of plugins</h2>

<a name="Hello.World"></a>
<h3>Hello World</h3>

<p>A sample Hello World plugin for demonstration and learning purposes.</p>

<p>This plugin provides a few unauthenticated requests, all beginning with &ldquo;ping&rdquo;, to demonstrate basic binder capabilities.</p>

<p><strong>Verbs</strong>:</p>

<ul>
<li><em>ping:</em> returns a success response</li>
<li><em>pingfail:</em> returns a failure response</li>
<li><em>pingnull:</em> returns a success response, with an empty JSON response field</li>
<li><em>pingbug:</em> does a memory violation (intercepted by the binder)</li>
<li><em>pingJson:</em> returns a success response, with a complex JSON response field</li>
<li><em>pingevent:</em> broadcasts a global event</li>
</ul>


<p><br /></p>

<a name="Authentication"></a>
<h3>Authentication</h3>

<p>An sample Authentication plugin for demonstration purposes.</p>

<p>This plugin provides a few requests to demonstrate the binder&rsquo;s token-based security mechanism.</p>

<p>Calling &ldquo;<em>connect</em>&rdquo; with a security token will initiate a session, calling &ldquo;<em>refresh</em>&rdquo; will issue a new token and invalidate the previous one, calling &ldquo;<em>logout</em>&rdquo; will invalidate all tokens and close the session.</p>

<p><strong>Verbs</strong>:</p>

<ul>
<li><em>ping:</em> returns a success response</li>
<li><em>connect:</em> creates a session and returns a new token</li>
<li><em>refresh:</em> returns a new token</li>
<li><em>check:</em> verifies the passed token is valid</li>
<li><em>logout:</em> closes the session</li>
</ul>


<p><br /></p>

<a name="Tic.Tac.Toe"></a>
<h3>Tic Tac Toe</h3>

<p>A sample Tic Tac Toe game plugin.</p>

<p>This plugin provides an interactive Tic Tac Toe game where the binder returns the grid as a JSON response.</p>

<p><strong>Verbs</strong>:</p>

<ul>
<li><em>new:</em> starts a new game</li>
<li><em>play:</em> asks the server to play</li>
<li><em>move:</em> gives a client move</li>
<li><em>board:</em> gets the current board state, as a JSON structure</li>
<li><em>level</em>: sets the server level</li>
<li><em>join</em>: joins an existing board</li>
<li><em>undo</em>: undo the last move</li>
<li><em>wait</em>: wait for a move</li>
</ul>


<p><br /></p>

<a name="Audio"></a>
<h3>Audio</h3>

<p>A sample Audio plugin with 2 backends:</p>

<ul>
<li>ALSA (mandatory)</li>
<li>PulseAudio (optional)</li>
</ul>


<p>This plugin is able to initialize a specific soundcard, define volume levels, channels (mono/stereo&hellip;), mute sound, and play a 22,050 Hz PCM stream.</p>

<p><strong>Verbs</strong>:</p>

<ul>
<li><em>ping:</em> returns a success response</li>
<li><em>init:</em> initializes backend, on the &ldquo;default&rdquo; sound card</li>
<li><em>volume:</em> gets or sets volume, in % (0-100)</li>
<li><em>channels:</em> gets or sets channels count (1-8)</li>
<li><em>mute:</em> gets or sets the mute status (on-off)</li>
<li><em>play</em>: gets or sets the playing status (on-off)</li>
</ul>


<p><em>(if PulseAudio development libraries are not found at build time, only ALSA will be available)</em></p>

<p><em>(if a PulseAudio server is not found at runtime, the plugin will dynamically fall back to ALSA)</em></p>

<p><em>(a specifc backend can be forced by using this syntax before running afb-daemon : <strong>$ export AFB_AUDIO_OUTPUT=Alsa</strong>)</em></p>

<p><br /></p>

<a name="Radio"></a>
<h3>Radio</h3>

<p>A sample AM/FM Radio plugin with 1 backend:</p>

<ul>
<li>RTLSDR - Realtek RTL2832U dongles (mandatory)</li>
</ul>


<p>This plugin is able to initialize specific RTL2832U dongles, switch between AM/FM modes, define frequency, mute sound, and play sound (if combining with the <strong>audio</strong> plugin).</p>

<p><strong>Verbs</strong>:</p>

<ul>
<li><em>ping:</em> returns a success response</li>
<li><em>init:</em> initializes backend, looking for plugged-in devices</li>
<li><em>power:</em> sets device power status (on-off)</li>
<li><em>mode:</em> sets device reception mode (AM-FM)</li>
<li><em>freq:</em> sets device frequency (in Hz)</li>
<li><em>mute</em>: sets device mute status (on-off)</li>
<li><em>play</em>: sets device playing status (on-off)</li>
</ul>


<p><em>(if rtlsdr development libraries are not found at build time, this plugin will not be built)</em></p>

<p><br /></p>

<a name="Media"></a>
<h3>Media</h3>

<p>A sample Media Server plugin with 1 backend:</p>

<ul>
<li>Rygel</li>
</ul>


<p>This plugin is able to detect a local Rygel UPnP media server, list audio files, select an audio file for playback, play/pause/seek in this file, upload an audio file to the server.</p>

<p><strong>Verbs</strong>:</p>

<ul>
<li><em>ping:</em> returns a success response</li>
<li><em>init:</em> initializes backend, looking for an active local UPnP server</li>
<li><em>list:</em> returns list of audio files, as a JSON structure</li>
<li><em>select:</em> select an audio files, by index number (001-&hellip;)</li>
<li><em>play:</em> plays the currently selected audio file</li>
<li><em>stop:</em> stops the currently selected audio file</li>
<li><em>pause:</em> pauses the currently selected audio file</li>
<li><em>seek:</em> seeks in the currently selected audio file, in seconds</li>
<li><em>upload:</em> uploads an audio file, with a POST request</li>
</ul>


<p><em>(if GUPnP/GSSDP development libraries are not fund at build time, this plugin will not be built)</em></p>

<p><br /></p>

<hr />

<p><br /></p>

<p>Sample command-line applications: <em>afb-client-demo</em> (built by default)</p>

<p>Sample HTML5 applications:
<strong>test/*.html</strong>,
<strong><a href="https://gerrit.automotivelinux.org/gerrit/gitweb?p=src/app-framework-demo.git;a=tree">afb-client</a></strong>,
<strong><a href="https://github.com/iotbzh/afb-radio">afb-radio</a></strong></p>

<p>Sample Qt/QML applications: <em>test/token-websock.qml</em></p>
</body>
</html>