Hardware Integration

Hardware Integration

Monolith is tightly integrated around particular bits of hardware. (Sometimes, it's a bit too tight!)

Primary interfaces include the Grid and the Arc by Monome, and the Griffin Powermate USB multimedia knob controller.

Secondary interfaces include things like the G430 Graphics 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 libmonome, bypassing OSC and serialosc completly. More information on how this works can be found in 13. Monome Hardware (Arc, Grid) and Libmonome.

The Griffin HID events are controlled using a very handy library called 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.