This is a helper utility for the Mode-S Beast.
The Beast provides a single data stream over a (USB) serial port. If you have more than one thing that wants to read that data stream, you need something to redistribute the data. This is what beast-splitter does.
beast-splitter knows how to talk to a Mode-S Beast over a USB serial port. You should specify the path to the Beast's serial port with --serial. The Debian package includes udev rules that should make the Beast's serial port available as /dev/beast.
beast-splitter will try to automatically determine the baud rate that the Beast is running at. This may take a few seconds, longer if there is no traffic. To explicitly set the baud rate, there is a --fixed-baud command line option.
beast-splitter can make an outgoing network connection to receive Beast data if you have already made the Beast available via the network. You should give the host:port to connect to via the --net option. You can use this to chain beast-splitter instances together: specify --listen on the beast-splitter closer to the Beast, and --net on the other beast-splitter.
beast-splitter will, by default, autodetect the capabilities of the Beast and allow clients to request any of the message-filtering options. To force particular options on or off on the actual Beast itself, regardless of what clients asked for, use the --force command-line option (see below for how to specify settings). The "binary format" and "hardware handshake" options are always used, you cannot override them with --force.
The options set by beast-splitter will override whatever DIP switch settings are set on the Beast itself.
beast-splitter provides data to network clients over TCP, by accepting connections on a TCP port or by making outgoing connections to a given address.
To set up a listening port, specify --listen with the port number to listen on. You may optionally provide an interface address to bind to; if no address is given, all addresses are bound.
To set up an outgoing connnection, specify --connect with a host and port. beast-splitter will try to reestablish the connection if it is lost.
Both --listen and --connect accept a settings option (see below) that provides the initial settings for new connections. After connecting, clients can request different settings by the Beast input commands (0x1A '1' 'c', etc - see the Beast wiki).
Each client can have different settings for output format and the types of messages it wants to receive. For example, one client might want Beast binary format, with only DF11/17/18 provided; while a second client might want all messages in AVR format.
beast-splitter allows this. For formats other than Beast binary, and for cases where the requested timestamp format (GPS or 12MHz) does not match that being provided by the Beast itself, beast-splitter will translate as needed.
For cases where clients have requested different filtering options, beast-splitter will ask the real Beast for the most general set of messages needed and then perform per-client filtering of the messages before forwarding them on.
The --listen, --connect, and --force options take a "settings string" which is a list of letters that indicates which settings to turn on or off. These settings mostly correspond to DIP switch settings that can be set on the Beast. Generally, uppercase means "turn on" and lowercase means "turn off". If a setting is omitted, this is a "don't care" setting where beast-splitter will not override that setting either way.
The available settings are:
The h/H setting is understood but ignored; hardware flow control is always used.
The B setting turns on Beast-Classic mode. In this mode, Radarcape status messages are not forwarded, 12MHz timestamps are always used, the DF0/4/5 filtering option is enabled, and a request from a client to set the 'g' or 'G' option is interpreted as setting the DF0/4/5 filtering options. You should set this for connections where the client expects to talk to a Beast-Classic.
The R setting turns on Radarcape mode. In this mode, Radarcape status messages are forwarded, the DF0/4/5 filtering option is not available, and a request from a client to set the 'g' or 'G' option is interpreted as setting the 12MHZ/GPS timestamp options. You should set this for connections where the client expects to talk to a Radarcape.
If the --status-file option is given, beast-splitter will periodically write a json status file to the path given. The status file has information about whether communication with the Beast is OK, and for Radarcape-style receivers, information extracted from the status message that the receiver generates.
$ beast-splitter --serial /dev/beast --listen 30005:R --connect localhost:30104:R
This will:
The main way this is built is as a Debian package:
$ dpkg-buildpackage -b
$ sudo dpkg -i ../beast-splitter_version_architecture.deb
Otherwise, try "make" to build a binary. You will need a C++11 compiler (e.g. recent g++) and the Boost library.
If you installed the Debian package, then it installs a systemd service that can automatically start beast-splitter. It is disabled by default. To configure this, edit /etc/default/beast-splitter and set ENABLED=yes (plus any other configuration you want), then "systemctl restart beast-splitter" to pick up the configuration changes.
The beast-splitter source is maintained in a repository on GitHub.
beast-splitter is licensed under the BSD 2-clause license; see LICENSE.txt.