ModulOSC is the name I've given to the software which will act as the service which receives OSC data over the network and turns it into commands for the DAC hardware (which in turn means voltages for the synth). In other words, this is the main software service running on the RPi which fulfils the primary main objective of the project.
The source code is hosted here on bitbucket.
It's written in C++ using the Qt framework. I am also making use of the following libraries:
- oscpack for decoding OSC packets.
- Some preliminary code has been borrowed from gnublin-api for the GPIO and I2C (peripheral device) access on the RPi but it is likely that I may end up re-writing this.
- The LCDDriver code has been ported and updated from the adafruit python code; their provided C++ code is for the Arduino only.
The main components of this service (and the source files) are:
- DBus interface for inter-process communication on the RPi (perhaps from a web interface?) (DBus.[cpp|h])
- UCP socket server for the OSC receiver; coupled to an OSC packet decoder (oscpack) (OSCServer.[cpp|h])
- Set up for GPIO and I2C interfaces (GPIO.[cpp|h] and I2C.[cpp|h])
- Interface for the LCD (LCDDriver.[cpp|h])
- Interface for the DAC devices (MCP4728.[cpp|h])
- Menu system for on-board configuration (MenuSystem.[cpp|h])
- Application controller to glue it all together (ModulOSC.[cpp|h])
This collection of parts should enable the RPi to be connectible in several different ways to provide the flexibility in getting data in and out of the system. As hinted, it is likely I may include an embedded web interface on the RPi, as well having direct control via the LCD board buttons.
So far, I've written enough that I can route the OSC data to somewhere, though the DAC driver is not yet complete because I don't yet have the hardware device to test it with. I'm fairly happy that the LCDDriver is complete and it is awaiting some fleshing out of the MenuSystem in order to be useful.
Somehow I will need to complete the service configuration side of things so that a plugin, or other user interface can tell ModulOSC which OSC messages to route to the DAC outputs. This should become clearer when I have completed the DAC driver.