Overview of plugins shipped with AFB-Daemon

Version: 1
Date:    30 mai 2016
Author:  Manuel Bachmann

List of plugins

Here are the plugins shipped in the source tree: * Hello World * Authentication * Tic Tac Toe * Audio (2 backends: ALSA/PulseAudio) * Radio (1 backend: RTLSDR RTL2832U) * Media (1 backend: Rygel UPnP)

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

Detail of plugins

Hello World

A sample Hello World plugin for demonstration and learning purposes.

This plugin provides a few unauthenticated requests, all beginning with “ping”, to demonstrate basic binder capabilities.

Verbs: * ping: returns a success response * pingfail: returns a failure response * pingnull: returns a success response, with an empty JSON response field * pingbug: does a memory violation (intercepted by the binder) * pingJson: returns a success response, with a complex JSON response field * pingevent: broadcasts a global event


Authentication

An sample Authentication plugin for demonstration purposes.

This plugin provides a few requests to demonstrate the binder’s token-based security mechanism.

Calling “connect” with a security token will initiate a session, calling “refresh” will issue a new token and invalidate the previous one, calling “logout” will invalidate all tokens and close the session.

Verbs: * ping: returns a success response * connect: creates a session and returns a new token * refresh: returns a new token * check: verifies the passed token is valid * logout: closes the session


Tic Tac Toe

A sample Tic Tac Toe game plugin.

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

Verbs: * new: starts a new game * play: asks the server to play * move: gives a client move * board: gets the current board state, as a JSON structure * level: sets the server level * join: joins an existing board * undo: undo the last move * wait: wait for a move


Audio

A sample Audio plugin with 2 backends: * ALSA (mandatory) * PulseAudio (optional)

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

Verbs: * ping: returns a success response * init: initializes backend, on the “default” sound card * volume: gets or sets volume, in % (0-100) * channels: gets or sets channels count (1-8) * mute: gets or sets the mute status (on-off) * play: gets or sets the playing status (on-off)

(if PulseAudio development libraries are not found at build time, only ALSA will be available)

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

(a specifc backend can be forced by using this syntax before running afb-daemon : $ export AFB_AUDIO_OUTPUT=Alsa)


Radio

A sample AM/FM Radio plugin with 1 backend: * RTLSDR - Realtek RTL2832U dongles (mandatory)

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 audio plugin).

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

(if rtlsdr development libraries are not found at build time, this plugin will not be built)


Media

A sample Media Server plugin with 1 backend: * Rygel

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.

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

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




Sample command-line applications: afb-client-demo (built by default)

Sample HTML5 applications: test/*.html, afb-client, afb-radio

Sample Qt/QML applications: test/token-websock.qml