-
Notifications
You must be signed in to change notification settings - Fork 5
home
helix_usb is a set of python scripts allowing for communications with Line6's HX Stomp (and maybe all other Helix products like the Helix (LT), maybe Pod Go, HX Effects and the rack version) over USB. For this, I kind of reverse engineered the protocol being sent between HX Edit and the HX Stomp. Saying that I have completely reverse engineered the protocol is a little bit too much. Often, the scripts just react like HX Edit (e.g. they answer with the same byte-sequence) but I didn't understand which information is really exchanged. Luckily, it seems to work in most of the cases.
NOTE: At the time of this writing, spontaneous communication termination is observed, especially after changing the preset on the HX Stomp frequently.
Used HX Stomp firmware: 3.11
As usual, we first need the existing source-code. Go and clone the git-repro:
git clone https://github.com/kempline/helix_usb.git
It is recommended to create a virtual python environment. Please install the following modules:
#!
pip install pyusb
pip install xlsxwriter
Once the project is set-up properly, the script can pair with the HX Stomp. Please note that this is only possible, if the device is not already connected with another process. HX Edit for example needs to be closed. On my macOS device it is not sufficient to close HX Edit (since it's still running in the background then) - it really needs to be stopped entirely (Quit!)).
While pairing, helix_usb collects all data, HX Edit would collect. This includes:
- Current preset name
- Current preset settings
- Names of all presets
After the initial data exchange, helix_usb takes care of the continuous communication with the Stomp. This covers mainly sending keep-alive messages sent more or less every second as well as reacting on some commands from HX Stomp.
Other features of helix_usb are functions, to change various settings on the HX device, for example:
- Change the labels for one of the foot switches
- Change the LED color for one of the foot switches
- Change the function of a foot switch (Midi-CC, Midi-CC-Toggle and so on)
- Change Midi Channel
- Rename a preset
An overview of the current features is given in
Admitting that those features seem useless on their own, here's another video showing a typical use-case of helix_usb.
Combining helix_usb with a Line6 FBV3
Here, a Line6 FBV3 foot controller is connected to a PC using a self-developed USB to RS485 converter (RS485 is the protocol being used by Line6 since ages for their "old style" FBV foot controllers). Also connected to the same PC is my HX Stomp communicating with helix_usb. As you can see in the video, the LEDs FS1-FS5 (as well as the preset number and the preset name) are being synced between the two Line6 devices.
Maybe, some developers of 3rd party foot controllers might be interested in this project. Especially if their devices already have RGB LEDs, they might want to consider adding USB support in order to retrieve way more information from a Helix device compared to what they can get using Midi. Thus, the existing color LEDs could stay in sync with the Helix device.
Personally, when it comes to gear, I prefer small sizes and little weight over foot switch quantity. Sure, I could easily get an HX Stomp XL or an used Helix LT if I need more switches, but I really like the HX Stomp's form factor. Since you can easily put two of them in your guitar case, bringing the Stomp and a back-up Stomp to a concert by bike is (at least theoretically) feasible. I don't want to cycle to my next concert but sometimes, parking situations and walking distance to the stage is quite "challenging". That's why I always try to keep my gear as small as possible.
Long story short: I will spend the next weeks on developing something based on helix_usb that allows me, to make more of the existing three foot switches. As some of you might know from other gear, I'd love to implement a "Morph" feature (just as the Kemper Profiling Amp offers). I'd use foot switches 1 and 2 for switching between the sounds. If I use foot switch 2 it will change to my Rhythm/Crunch sound. Using helix_usb, the label for foot switch 2 shall change from "Rhythm" to "Lead". If I push foot switch 2 again, the color of the LED should change from orange (Crunch) to red (Lead) and the sound shall become more distorted, louder, with delay (all what you want for a solo sound) immediately. If I push foot switch 2 again, the color of the LED should change from red (Lead) to orange (Rhythm) and the sound shall fade from the solo sound to my standard crunch sound over time (something between 1s-2s). Thus, I can continue to play and don't care about adjusting my pots. Free foot switch number 3 would then be used to control apps on the iPad (BandHelper in my case) and maybe to launch the tuner (switch hold). Honestly, I hope to get similar features in one of the upcoming firmware updates, but you never know what Line6 is currently working on.
Finally, an HX Edit for mobile devices could be developed on top of this project.
Rather than explaining many details here on the main page, several sub-pages describe different aspects of this project.
The Message Structure is important for understanding the communication. My guess is, that I understand 30%-40% - most of it is explained here.
The project uses different modes, while communicating with the Stomp. Those modes are described here.
Main useful feature of the project is to get the current preset from the Stomp. Thus, it is necessary to read the data (and to do something useful with it). Here is the documentation of what I understand from the data so far.
If you want to capture your own data being transferred between HX Stomp and HX Edit, you might be interested in the workflow I set up for this project.
Here, a small tool called usb_monitor.py is explained.
As it can be seen in the LICENSE file, this work is published under MIT License. In my understanding it says: Do what you want with the code (you can even build commercial products out of it) but make sure to credit the author of this work. At least this was my intention when I made this a public project.
As also stated in LICENSE.txt there is no liability. And even if I never had any issues in terms of data loss when playing with the USB communication, I strongly recommend to MAKE A BACKUP OF YOUR LINE6 HELIX DEVICE WHENEVER YOU USE THIS CODE!!!!