# Blinker

Blinker is a server for LED projects and Blinken-houses that are driven by Blinkenlights network streams.

## Overview

Blinker is based on different modules, which can be connected via streams. Several types of modules are available, for example a movie player, a network stream sender, modules to mix and separate streams.

## Getting Started

As Blinker uses BlinkenLib to perform the low-level operations on Blinken movies and Blinken streams, BlinkenLib has to be installed first.

Go to the `src` directory and type `make`. This should compile Blinker and produce a binary `Blinker` in this directory.

Start Blinker using the example configuration directory using `./Blinker ../example_cfg`. You should see a small test movie appearing on standard output (printed there by a printer module). Other movies are sent as MCUF streams over UDPv4, one stream is sent to `127.0.0.1:2323`.

## Streams

Every stream is identified by a name and works like a TV program. A source creates the content and uses the stream to distribute it to its receivers. A single stream can have any number of receivers, they all receive the same content. Usually, there should be only one provider of content for a single stream. If multiple parties send video frames to the stream, the frames are mixed, which is most likely not what you want.

## Operator Connections

Some modules can react to events and/or send events to other modules. Suche events are delivered over so-called operator connections. A module can caonnect to another module listen for incoming operator connections. If this connection is accepted, both modules can exchange events over the connection until one of the modules choses to close the connection.
In the context of controlling Blinkenlights style displays over a phone connections, events can be keys pressed on the phone or requests to play a certain sound.

## Configuration Directory

The configuration of blinker is not stored in a single file, but in a directory structure, reflecting the inner structure of Blinker's modules. This way, every module has got its own configuration directory containing single files each containing one simple setting. It the module has some internel structure, those config setting files are organized in a directory structure underneath the module's configuration directory.

The main config directory contains a directory for each module class, e.g. `players` for movie player modules. Inside, there is an arbitrary number of subdirectories, one for each instantance of the player module. E.g. the `players/stereoscope` directory in the example configuration (`example_cfg` directory in the top level) contains the configuration of the movie player for Blinkenlights stereoscope movies.

Reconfiguration can happen at runtime by just changing the configuration directory. Blinker will detect those changes and adapt its operation to the new configuration without restart.
Sometimes, especially after an invalid configuration has been seen by Blinker, changes are not automatically detected by Blinker. In this case, it is neccessary to `touch` the parent directory containing the setting file to make Blinker aware of the reconfiguration. (Solving this issue is planned.)

## Modules

The following module types are available for instantiation:

- Canvas
- EtherPix
- Filter
- Loveletter
- Operator Connection Printer
- Operator Connection Splitter
- Output
- Player
- Pong
- Printer
- Priority
- Rate Limiter
- Resizer
- Scaler
- SIP Phone Connector
- Synchronization Name Splitter
- Synchronization Printer
- Tetris
- Transformer
- UDP4 Phone Connector
- UDP4 Receiver
- UDP4 Sender
- UDP4 Synchronization Receiver
- UDP6 Phone Connector
- UDP6 Receiver
- UDP6 Sender
- UDP6 Synchronization Receiver

## Copyright / Copyleft

Blinker
Copyright 2011-2019 Stefan Schuermans <stefan@blinkenarea.org>
Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
a blinkenarea.org project

## Links

- Blinker GIT repository
- BlinkenLib GIT repository
- Information about Blinken protocols
- Information about Blinken movie file formats
- BlinkenArea is a group of people building and operating Blinken stuff
- Project BlinkenLights kicked off the whole Blinken story