mioctl is an open-source command-line utility for configuring Mio X-series devices from Linux and other operating systems not supported by iConnectivity.
Being a command-line tool means the approach to configuration is very different from the official graphical tool, with emphasis on power rather than pretty. To me the device looks more like router-firewall on a MIDI network more than anything musical, so the command line interface is modelled with that in mind, and making it possible to do things with a single command things that would require dozens of mouse-clicks with current Auracle.
As there sadly is no documentation for the X-series configuration protocol, this is all reverse-engineered from analyzing network traffic between Auracle and MioXL. As such, it is inevitable that there will be errors and misunderstandings in the code.
As a general principle, this is not an attempt to document the protocol as such, that is a job only iConnectivity can do. This project aims to provide means to control the X-series devices to the same extent as the official software does, on platform(s) where that is not officially supported.
Developed and tested on Fedora 33, but the above is what matters. On other OS'es, device port names will differ but that is command-line overridable.
I have only tested this with MioXL running firmware 1.2.0, but I would expect MioXM to work too, or at least be relatively easy to support.
The older Mio-devices use an entirely different protocol and I have no means to support them as I have no access to such a device. However there's another open-source project supporting them: https://codeberg.org/dehnhardt/IConnConfig
As of the initial public version, the following is implemented:
I hope to eventually implement everything Auracle supports on these devices, but this is a hobby project among many others so it might take time, and due to the reverse-engineering nature there cannot be any promises.
Keep in mind this is a very early version with little in the way of sanity and error checking, and is more likely to respond to errors with a Python traceback than a coherent error message. It should not harm your device in any way as it only uses commands that Auracle uses, but there cannot be any guarantees.
mioctl presetshows currently loaded preset, add
--listto list all preset by their names.
mioctl infoshows device model, serial and firmware version
mioctl netshows current network configuration,
--dynamicsets DHCP networking,
--static <ip> <network> <gateway>sets statip ip. A reboot is required for the setting to take effect.
mioctl load [n]loads a preset. If preset number is not specified, it reloads the current one.
mioctl save [n]saves the current preset. If number is not specified, it saves on the current slot.
--name <presetname>can be supplied to save with a different name.
mioctl portlists device port numbers and names,
--set <name>is used to rename ports. Multiple ports can be renamed at once, in which case an incrementing number is automatically used as a suffix.
mioctl route --add/--remove <source>:<target>adds and removes routes, plain
mioctl routelists current routing table. For example,
mioctl route --add 1,2:5to add routes from ports 1 and 2 to port 5. Multiple port numbers are permitted on both source and target ports.
mioctl filterlists currently active (input) filters,
--set [<val1>[,<val2>...]can be used to set filters. To filter channel messages, specify
mioctl remaplists currently active (input) channel remaps,
--set <val1>[,<val2>,...]:<channel>can be used to set new remaps,
--channel <range>is used to specify channels for which the remap is performed and port range can be specified as a positional argument.
All port-related commands accept ports as positional arguments.
Port and channel ranges can be specified as comma-separated combinations
of individual numbers and numeric ranges, such as:
By default it will look for a MIDI port name containing 'mioX' which
should find it when connected via USB but this can be overridden with
--midiport <name> for access through any OS MIDI port that is somehow
connected to the device (be it DIN or otherwise)