It’s been quite some time since my last post, and you might wonder about the status of the library I announced a few months ago… well the bad news is that it’s taking waaaaay longer than I expected, but the good news is that I’m still working on it and most of the hard work has already been done.
So what’s the current status?
- The graphic library and the display abstraction layer have been completed and tested on Maschine MK1, Maschine Mikro MK2 and Maschine MK2 (I still have to test it on Maschine Mikro MK1 though…)
- The Windows/Mac/Linux usb communication layer is 100% working
- The SAM3X communication layer is currently being implemented
- I already started to write some demo applications (as you can see in the video below)
Before diving into boring technical details, here's the last demo application I wrote:
What you see in the video is a 3-channels (color coded) euclidean step sequencer written using maschinIO.
Now, back to the library: why is it taking so long? Besides all the possible personal reasons, there were quite a few technical issues I had to solve:
- The C++ standard library is not available on all platforms (Arduino…), so I had to write some low-level replacement classes (smart pointers and so on).
- The C++11 compiler is not available by default on Arduino, but since it’s easy to enable it (you just have to edit a configuration file) I finally decided to use some of the new features
- I wanted to support most of the Maschine controllers (MK1, Mikro MK1, MK2, Mikro MK2), but each controller has very different hardware and firmware features, so basically I had to reverse the protocol for each of them. In particular, Maschine MK1 is a non-HID device, while MK2 and both the Mikro MK1 and Mikro MK2 are HID devices. To make things more complicated, the display handling is completely different on each model. I spent hours analyzing logs and trying out some different driver implementations, and actually the Maschine MK1 driver still has some issues…
- I ended up writing a full graphics library and a nice abstraction layer which lets you use any of the Maschine models transparently without rewriting model-specific code.
- The embedded side (Arduino/Teensy) was also quite challenging, the Arduino IDE does not support libraries with nested folders so I had to come up with a workaround. Furthermore, supporting Arduino means writing at least two different drivers: one for the Arduino Due, which uses the SAM3X USB interface, and one for the MAX3421E chip, which is used on all of the “USB Host” expanders .
- Two months ago I decided to use CMake and I’m still dealing with some project setup issues on Windows.
What’s on the todo list?
- Solve all the CMake issues on Windows
- Finalize the SAM3X driver
- Write the MAX3421E driver
- Write some more demo apps
- Finalize the library documentation
Still quite some work to be done, so you’ll have to be patient :)