Skip to content

monome/teletype

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

* initial op set

* add aliases for chord add/remove

* I2M 006

* new ops, changes, fixes

* rename channel ops

* changes for BETA 2

* fix channel index for I2M.NCT

* fix channel index for I2M.C#

* I2M015

* I2C016 (more channel ops)

* I2M017

* fix channel ops

* buffer ops

* adjust buffer op ranges

* I2M.C.QN and I2M.C.QV

* update I2M.C.QN and I2M.C.QV

* add docs/help for i2c2midi ops

* fix i2c2midi doc
0871690

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

teletype

monome eurorack module

http://monome.org/docs/teletype

Directories

  • src: source code for the teletype algorithm
  • module: main.c and 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

Building

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

Tests

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.

Ragel

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 OP or MOD (a.k.a. PRE)

If you want to add a new OP or MOD, please create the relevant tele_op_t or 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_ops or tele_mods. Ideally grouped with other ops from the same file.
  • src/ops/op_enum.h: please run python3 utils/op_enums.py to 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.)

Code Formatting

To format the code using clang-format, run 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 make format-all.

Documentation

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.

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:

  • teletype.hex
  • flash.sh
  • update_firmware.command
  • teletype.pdf

Run make release in the project's root directory