Monolith is tightly integrated around particular bits of hardware. (Sometimes, it's a bit too tight!)
Primary interfaces include the
Grid and the
Monome, and the
USB multimedia knob controller.
Secondary interfaces include things like the
Tablet. These are way more optional then the primary
interfaces, and often require more manual configuration from
within Monolith. More information can be found in
21. The G430 Interface.
Monolith hardware is controlled using
OSC and serialosc completly. More information on how this
works can be found in 13. Monome Hardware (Arc, Grid) and Libmonome.
Griffin HID events are controlled using a very handy
hidapi, which is a small layer on top of
libusb. A local copy of hidapi is found locally in the
source code for Linux. On OSX, it can be installed via
homebrew. More information on parsing can be found in
14. Griffin Hardware.
All event polling for all hardware happens in a single
thread known internally the
Hardware Listener. Keeping all
the polling in one thread (as opposed using one thread for
each polling interface) keeps things simple, and makes
debugging easier. So far, it has yet to be a problem. More
information on this can be found in 12. Hardware Listener.
For primary hardware interfaces, a thin abstraction layer
is placed between the actual hardware and Monolith. This
is done in the hopes that someday Monolith can be controlled
by virtual hardware devices for individuals who do not own
the real things. More information on this
virtual interface layer can be found in
8. Virtual Interface Layer.
When compiled for the
norns, Monolith also polls the
onboard knobs and buttons inside the main hardware listener.
More information on this can be found in 17.3. Monolith Norns Event Polling.