
The realistic plan is to create a C mapper library, with SWIG bindings
for Python, Scheme, Java, etc.  How would a C application deal with
the mapper.

Controller: Have a collection of output signals, so the application
can broadcast these to a router, and the mapper library will handle
announcing the namespace on the admin bus.

Router: The router is a middle layer residing controller-side,
accepting signals from the controller but transforming them with
mapping definitions before transmitting on the network.

Synthesizers: Have a collection of input signals, so the application
can specify what happens when a new signal value is acquired.

A common API to register "signals", consisting of either a function
interface, or for convenience a pointer-to-value interface.  Provide a
non-blocking update routine that must be called regularly.  A signal
value can be updated by a function call.

Signals can consist of floats, ints, bools, or arrays of these.  Each
signal has a name, an optional unit, and optional value range.

A device must be registered with a name---this will not block, but
setting the name triggers port/name allocation on the admin bus.  A
flag is set when the name and port have been specified, an optional
callback can be provided.
