scanner-darkly / multipass

app development for monome eurorack modules and other platforms
GNU General Public License v2.0
29 stars 9 forks source link

multipass

multipass is a framework that makes it easier to build alternative firmwares for monome eurorack modules: white whale, earthsea, meadowphysics, ansible and teletype (eventually it might be expanded to other platforms).

essentially it's a lightweight layer over libavr32 monome library which takes care of initializing the hardware, provides an event queue and timers and offers helper functions for interacting with various controllers and generating CVs and gates.

in short, it allows you to easily create your own applications without having to learn low level details. not only that, but you'll be able to code an app once and run it on any of the supported modules.

getting started

building firmware

there are 3 main options - for local dev i highly recommend using the docker option as it's the easiest to set up and use.

docker option

if you run into any issues with the above option and can't figure them out, try using this docker image instead: https://github.com/Dewb/monome-build

to build using this option:

github actions

in order to use this option, you will need to host your repository on github and commit each time you want to build. however it's sufficiently fast to be usable and provides an additional benefit of helping you create releases targeting multiple modules.

there are 2 workflows currently provided: build firmware and upload release.

build firmware has to be triggered manually but you can change it to trigger on each commit or pull request. a build typically takes 30-60 seconds. if there are no errors, it will build firmware for each specified module and upload hex files as artifacts to the workflow run (unfortunately, github will zip them when you download, simply unpack once you download them). the provided template targets teletype and ansible only, if you want to build for other modules simply edit module parameter under matrix in the .yml file.

upload release is triggered automatically when you create a new release. it will build firmware for each specified module and upload both hex and zip versions to your release as assets. important: unlike the previous action, this action will reference the commit the release tag is pointing to, not the latest commit!

both workflows will use the name of your repo for firmware files, if you prefer a different name simply modify the workflow templates.

local toolchain

you will likely want to set up the toolchain locally so you can easily make and test changes. this option will require most work to set it up but it will save you time down the road. follow the instructions here: https://github.com/denravonska/avr32-toolchain

additional information is available here: https://github.com/monome/libavr32 and here: https://github.com/monome/teletype

please note that some of the instructions are out of date (atmel doesn't provide headers anymore), so adjust accordingly.

important: if you want to build for a different module make sure to remove all *.o files first.

architecture

the main components are:

samples

for some simple app examples check out:

and for something more complex: https://github.com/scanner-darkly/polyearthsea