The epic digital bus thread

Got all core bus stuff working - messages, data, commands, parameters, buttons. There are a few enhancements that I’ll add for user patches (methods for toggling bus status and MIDI forwarding setting, also same remapping support for buttons as parameters have).

After that is ready, I’ll rebase on current master branch and make better test patches. OwlProgram branch is here.

I’m considering some other non-critical changes (i.e. move some of the methods from global bus object to base patch class).

I’ve just remembered that MI Stages exposes UARTs that are used for connecting multiple modules. It’s seriously tempting to try to convert it into a controller and IO expander for OWL.

Are those symptoms of serial protocols addiction? Could it be a gateway to even more dangerous things like I2C?

I’ve added bus reset to default clause of digital bus reader which gets run if no valid protocol command ID was found in first byte of bus data frame. It looks like this solves the issue that was happening frequently when one of devices was reconnecting. Pretty sure that this was due to frames getting misaligned and preventing successful discovery on one of the devices.

Made some test patches for all digital bus features, will publish them as soon as I confirm that everything works as expected.

Also, started writing code for ChibiOs-based client for digital bus. Some ideas where this could be used:

  1. Touch controllers / capacitative keyboards (which was the original goal)

  2. Some kind of slider-based controller (because you can’t have too much sliders, also 18 ADC inputs on Teensy 4.1 look too tempting)

  3. A hub for connecting multiple devices (Teensy 4.1 has 8 UARTs). This would change bus topology to star and may require an option to disable forwarding incoming bus data. Hub could be generating new messages instead and this would give much lower latency for sending data used by remote peers.

  4. A host for connecting OpenTheremin. Too bad that I can’t claim first Owl-based Theremin this way.

  5. Extra CV/gate inputs for OWL (there’s a cheap Arduino based DIY module that I’ll try to use for this)