v0.6.xx (codename: Thoon)
The quest for this release is to support the sharing of your work created on and for the ER-301. This includes:
- Unit presets (*.unit) created using the ER-301 user interface. Shall we call this the high-level API?
- New units created using the mid-level API (aka lua scripting of the functionality exposed by the low-level API).
- Extensions of the base firmware via the low-level API (aka C/C++ coding).
Here are some of the highlights of v0.6 firmware:
Package Manager on the Device
Sharing of code and presets via packages. Low-level (c/c++) developers, mid-level (lua) developers, high-level (presets) developers will all share their work using the same file format (i.e. a package). From the user’s perspective there will be no difference. For example, if you want to package any number of presets so that you can share them with other users, ER-301’s package manager will collect all the necessary assets and create the package archive for you. Others can install your presets on to their ER-301 by just copying your package archive to the
ER-301/packages folder of their front SD card and installing it from the package manager. One file, a few clicks, and no faffing with paths or folder names.
Run-time linking of shared libraries (*.so)
It is now possible to dynamically link shared libraries (*.so) to the bare-metal firmware during runtime. (Yes, I had to write my own dynamic linker. Yes, I now know way more than I want to about ELF files and the ARM/Thumb instruction set. ) This functionality is accessible via lua’s require and package.loadlib interfaces. Please refer to the core and teletype mod source code for a comprehensive example. To the non-technical reader: This means almost any C/C++ code when properly compiled and prepared can be run on the ER-301. This includes both audio and graphics code and I’ve made sure the API is maximally expressive by forcing all of the factory units to use the same. In fact, the factory units are now implemented and packaged in exactly the same way you would package your own work.
Linux Desktop emulation of the Firmware
I wish I had done this years ago. This tool can be used to test new code before running it on an actual ER-301. This tightens the compile-run cycle a lot and gives you access to much more powerful debugging tools.
USB device functions
The ER-301 can now enumerate as a mass storage device or a virtual serial port when connected to a host PC. The mass storage function provides access to the front SD card and the virtual serial port provides console output. Once you enable the USB functionality in the General Settings, switching the STORAGE toggle to ‘eject’ will unmount your front SD card and allow the host PC to mount the SD card. Eject from the host PC to allow the ER-301 to mount the SD card again.
Open-sourcing the ER-301 firmware
This is a scary step for such a large project but in the end, the best developer documentation is the source code itself.
Please read the change log for a full listing of the changes of each release.
Backwards Compatibility Warning
As in previous versions, this firmware will create its system files in its own folder (
ER-301/v0.6) and initially populate the quicksaves by copying them from the v0.5 system folders. However, presets that live outside of the system folders are not touched. More importantly, do not expect presets/quicksaves created with this firmware to be compatible with earlier firmwares.