monome eurorack module
src: source code for the teletype algorithm
main.cand additional code for the Eurorack module (e.g. IO and UI)
tests: algorithm tests
simulator: a (very) simple teletype command parser and simulator
docs: files used to generate the teletype manual
See the libavr32 repo for more detailed instructions. You will also need
ragel installed and on the path, see below.
Alternatively, if you have Docker installed, you can quickly get building with a Docker image that has all the dependencies set up:
git clone --recursive --config core.autocrlf=input https://github.com/monome/teletype docker run --rm -it -v"$(pwd)/teletype":/target dewb/monome-build bash make
The reasoning behind these options:
git --recursive # clone libavr32 and unity submodules --config core.autocrlf=input # if on Windows, avoid adding CRLF line endings that can break compile scripts docker --rm # delete the container after exiting it -it # keep stdin attached, allocate tty -v"$(pwd)/teletype":/target # mount the ./teletype directory at /target inside the container
Make sure that the
libavr32 submodule is correctly checked out
cd module make clean make ./flash.sh
To run the tests:
cd tests make clean # only needed if you've built the module code make test
In the case of line ending issues
make test may fail, in this case
make tests && ./tests might work better.
The Ragel state machine compiler is required to build the firmware. It needs to be installed and on the path:
brew install ragel # Homebrew (OSX) apt install ragel # Debian / Ubuntu / WSL (Windows 10) pacman -Sy ragel # Arch Linux / MSYS2 (Windows)
Version 6.9 is known to work.
See section 6.3 in the Ragel manual for information on the
=> scanner constructor used.
Adding a new
If you want to add a new
MOD, please create the relevant
tele_mod_t in the
src/ops directory. You will then need to reference it in the following places:
src/ops/op.c: add a reference to your struct to the relevant table,
tele_mods. Ideally grouped with other ops from the same file.
src/ops/op_enum.h: please run
python3 utils/op_enums.pyto generate this file.
src/match_token.rl: add an entry to the Ragel list to match the token to the struct. Again, please try to keep the order in the list sensible.
module/config.mk: add a reference to any added .c files in the CSRCS list.
tests/Makefile: add a reference to any added .c files in /src, replacing ".c" with ".o", in the tests: recipe.
simulator/Makefile: add a reference to any added .c files in /src, replacing ".c" with ".o", in the OBJS list.
There is a test that checks to see if the above have all been entered correctly. (See above to run tests.)
To format the code using
make format in the project's root directory. This will only format code that has not been commited, it will format both staged and unstaged code.
To format all the code in this repo, run
In order to build the documentation you will need Python 3.6 or greater, Pandoc, as well as the Python libraries specified in the
requirements.pip file. In addition, to generate the PDF output you will also require TexLive (or MacTex).
On OSX the dependencies can be installed with
brew install python3 brew install pandoc brew cask install mactex # warning, MacTex is a very large install! cd utils pip3 install -r requirements.pip
On Linux I would suggest using
virtualenv to install all the Python dependencies (including those in the
requirements.pip file), and to ensure that the
python3 binary is version 3.6 or greater instead of the default of your distro.
To generate the documentation:
cd docs make # build both teletype.pdf and teletype.html make teletype.pdf # build just teletype.pdf (requires TexLive or MacTex) make teletype.html # build just teletype.html
Making a Release
To create a
teletype.zip file containing:
make release in the project's root directory