Open StarAurryon opened 4 years ago
Hello, i have installed - it has connected to my POD HD500X - thank you for your efforts ! Please let me know if you create an update and i will give it a test.
Mark.
Hello,
Thanks for the feedback. I was wondering if there were still people using the pod HD500x on Linux. And it is motivating me a lot. I have an update that fixes some issues on my ssd. But it also split the project between the core lib and the GUI as I am willing to port it over GTK3.
I will try to push it soon so that people could use FX and Amp functions of their POD properly without crash. However, do not expect heavy development on the coming months as I am starting my own company.
Aurryon.
Thank you - I want to mainly be able to control the pod via Linux as I'm playing with jamulus / jack etc and using the pod as my audio interface but running on ubuntustudio.
Thank you for your efforts - good luck with the new company - what will the company be offering?
Mark.
I'm not using this, I don't have a pod. I've been reverse engineering the L6 USB protocol and making a clone of the FBV3 used with a Spider V amp. I've made significant progress controlling the amp, but I'm still trying to figure out feedback from the amp. Any chance you have what you figured out in a spread sheet, or other type of documentation that you'd be willing to share? I have a feeling that there may be some overlap, or at least hints, how they communicate.
I have mine in a "research" folder here https://github.com/stric9r/Line6-FBV3-Clone . It's just a live document of what I've figured out so far.
@MarkJTiller As a start I plan to offer Google Drive like features for retail and extending to business with some addition. We are currently terribly lacking such services in Europe: Hosted in Europe by European owned companies (GDPR and against Patriot Act).
@stric9r If by feedback of the amp, you mean the value of the knob when turning them from the device, it is working for me with my POD HD 500X. That's handled by this in my code if I remember correctly:
&ParameterChange{Message: Message{mtype: 0x0006, smtype: 11520, msize: 28, mname: "Item Parameter Change"}},
So you should expect a 28byte message from the device (if it is generic) after a 4byte header. As for a spreadsheet, I got no documentation, I basically try the implementation after the Wireshark capture.
Please check out my new repo as I am splitting the GUI from the core lib at lpedit-lib/model/pod/message. But basically what I am doing is:
func (m *Message) parseParameterChange(paramFunc string, p *pod.Pod) (error, int, interface{}) {
And for the definitions they are here model/pod/amp.go
Hope this helps
Aurryon
@stric9r One more thing. I am using the kernel alsa hwdep interface. So I do not need to handle my POD init or filter messages.
Hi, tried to get the pre-compiled lpedit (0.5) to run on my debian testing box - however: ./lpedit: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./lpedit)
There is no glibc 2.32 in any of the debian distributions...yet ... :-(
Will the glibc 2.31 currently available be OK if I try to compile the program? thx jenkd
Hi,
Oh crap... You can try to compile it yourself. But be aware that the qt lib is quite buggy and sometimes is preventing the compilations as generated imports are not correct.
That's why I would like to port it over gtk3 (gotk3), but I don't have time yet.
Best of luck. I will try to push a static binary if possible. Aurryon
Hi everybody,
I'm looking to port the UI to GTK 4 with gotk4 as it would be easier to maintain than with this QT lib. If some people are willing to help, I'm taking the offer ;-)
@StarAurryon just wondering if there's any hope of making this tool support HX Stomp? I've no idea if the protocol is similar, but it'd be great to have some native tooling to control it in Linux.
@graham33 It is always possible. However before thinking about this we should get kernel support. Could you give me the driver that is currently used and possibly the lsusb output in very verbose mode. I read that audio is at least working on linux.
Thanks. Yes I believe the audio does work.
Here's the output in dmesg
when the HX Stomp is connected:
[ 570.970671] usb 3-2.3.2.1.1: new high-speed USB device number 18 using xhci_hcd
[ 571.060974] usb 3-2.3.2.1.1: New USB device found, idVendor=0e41, idProduct=4246, bcdDevice= 2.00
[ 571.060982] usb 3-2.3.2.1.1: New USB device strings: Mfr=1, Product=3, SerialNumber=2
[ 571.060986] usb 3-2.3.2.1.1: Product: HX Stomp
[ 571.060989] usb 3-2.3.2.1.1: Manufacturer: LINE 6
[ 571.060992] usb 3-2.3.2.1.1: SerialNumber: 3014982
[ 571.076386] usb 3-2.3.2.1.1: parse_audio_format_rates_v2v3(): unable to retrieve number of sample rates: set it to a predefined value (clock 16).
[ 571.081351] usb 3-2.3.2.1.1: parse_audio_format_rates_v2v3(): unable to retrieve number of sample rates: set it to a predefined value (clock 16).
[ 571.088162] input: LINE 6 HX Stomp as /devices/pci0000:00/0000:00:1d.0/0000:06:00.0/0000:07:04.0/0000:3d:00.0/0000:3e:02.0/0000:3f:00.0/usb3/3-2/3-2.3/3-2.3.2/3-2.3.2.1/3-2.3.2.1.1/3-2.3.2.1.1:1.5/0003:0E41:4246.0019/input/input50
[ 571.140214] hid-generic 0003:0E41:4246.0019: input,hidraw15: USB HID v1.11 Keyboard [LINE 6 HX Stomp] on usb-0000:3f:00.0-2.3.2.1.1/input5
And here's the (very verbose!) lsusb
:
Bus 003 Device 018: ID 0e41:4246 Line6, Inc. HX Stomp
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 239 Miscellaneous Device
bDeviceSubClass 2
bDeviceProtocol 1 Interface Association
bMaxPacketSize0 64
idVendor 0x0e41 Line6, Inc.
idProduct 0x4246
bcdDevice 2.00
iManufacturer 1 LINE 6
iProduct 3 HX Stomp
iSerial 2 3014982
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0130
bNumInterfaces 6
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Interface Association:
bLength 8
bDescriptorType 11
bFirstInterface 1
bInterfaceCount 4
bFunctionClass 1 Audio
bFunctionSubClass 0
bFunctionProtocol 32
iFunction 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 1 Control Device
bInterfaceProtocol 32
iInterface 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 2.00
bCategory 10
wTotalLength 0x002e
bmControls 0x00
AudioControl Interface Descriptor:
bLength 8
bDescriptorType 36
bDescriptorSubtype 10 (CLOCK_SOURCE)
bClockID 16
bmAttributes 1 Internal fixed clock
bmControls 0x00
bAssocTerminal 0
iClockSource 0
AudioControl Interface Descriptor:
bLength 17
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 32
wTerminalType 0x0201 Microphone
bAssocTerminal 64
bCSourceID 16
bNrChannels 8
bmChannelConfig 0x00000000
iChannelNames 0
bmControls 0x0000
iTerminal 0
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 64
wTerminalType 0x0301 Speaker
bAssocTerminal 32
bSourceID 32
bCSourceID 16
bmControls 0x0000
iTerminal 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 0
AudioStreaming Interface Descriptor:
bLength 16
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 32
bmControls 0x00
bFormatType 1
bmFormats 0x00000001
PCM
bNrChannels 8
bmChannelConfig 0x00000000
iChannelNames 0
AudioStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bSubslotSize 4
bBitResolution 24
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x03 EP 3 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x00e0 1x 224 bytes
bInterval 1
AudioStreaming Endpoint Descriptor:
bLength 8
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bmControls 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 3
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 3
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 0
AudioStreaming Interface Descriptor:
bLength 16
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 64
bmControls 0x00
bFormatType 1
bmFormats 0x00000001
PCM
bNrChannels 8
bmChannelConfig 0x00000000
iChannelNames 0
AudioStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bSubslotSize 4
bBitResolution 24
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 37
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Implicit feedback Data
wMaxPacketSize 0x00e0 1x 224 bytes
bInterval 1
AudioStreaming Endpoint Descriptor:
bLength 8
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bmControls 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 4
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 1 Audio
bInterfaceSubClass 3 MIDI Streaming
bInterfaceProtocol 0
iInterface 0
MIDIStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 1.00
wTotalLength 0x003d
MIDIStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (MIDI_IN_JACK)
bJackType 1 Embedded
bJackID 1
iJack 0
MIDIStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (MIDI_IN_JACK)
bJackType 2 External
bJackID 2
iJack 0
MIDIStreaming Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (MIDI_OUT_JACK)
bJackType 1 Embedded
bJackID 3
bNrInputPins 1
baSourceID( 0) 2
BaSourcePin( 0) 1
iJack 0
MIDIStreaming Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (MIDI_OUT_JACK)
bJackType 2 External
bJackID 4
bNrInputPins 1
baSourceID( 0) 1
BaSourcePin( 0) 1
iJack 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
bRefresh 0
bSynchAddress 0
MIDIStreaming Endpoint Descriptor:
bLength 5
bDescriptorType 37
bDescriptorSubtype 1 (GENERAL)
bNumEmbMIDIJack 1
baAssocJackID( 0) 1
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
bRefresh 0
bSynchAddress 0
MIDIStreaming Endpoint Descriptor:
bLength 5
bDescriptorType 37
bDescriptorSubtype 1 (GENERAL)
bNumEmbMIDIJack 1
baAssocJackID( 0) 3
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 5
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.11
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 37
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 8
Device Qualifier (for other device speed):
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
bNumConfigurations 1
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0001
Self Powered
Could you run lsusb with sudo "can't get debug descriptor: Resource temporarily unavailable" ?
That was using sudo. I'm guessing that error is coming from the kernel/driver.
@graham33 Moving to #5
@graham33 I would need a wireshark usbpcap dump from windows when changing settings on the app to understand how it is communicating. It could be midi, hid or something else.
Hi @StarAurryon . I own a HD500X and I use it extensively as audio interface on Ubuntu 20.04. I'm having same issue than @JenKD to run pre-compiled v0.5. Are you planning to continue development? I would love to help as beta tester (on Ubuntu 20.04 or any other distro you suggest :smile:)
Hi @cjacobsen
I don't have a load of time for now unfortunately. I am planning to continue the project by the way, but due to the lack of interest of the community and the fact that I am running a starting business + owning a new house, time is running out quickly.
The current main issue is that I choose to use QT go bindings and it "sucks" a lot (random compilation issues). What I would need is some help of go developers to port it to GTK. But I don't have time to create a cool website for the project nor federate people.
Every inch of help is welcome.
Works nice to me, thanks a lot. I only would add an option to backup and restore the patches
I was so excited to find this project, but two days later I still can't compile on Ubuntu. It fails to find the headers for GL, even though they exist in the standard location (/usr/include/GL). From the comments above it sounds like such issues are common with go, so I'm just wondering if there's an obvious fix (like defining environmental variables)?
If not, I am a total noob but would contribute where I could to a port. Perhaps a python version would facilitate a cross-platform version.
@prattems same comment as before, the project is in an unmaintained state on the gui side as I don't have time. The library thereceipe/qt is likely at fault with modern distros and same could happen with python qt libs if not updated.
I am looking to migrate the UI to https://wails.io/ which seems more stable to create a JavaScript/TypeScript GUI version. If you have Web developer skill we can start something.
wails.io looks pretty cool indeed, should be quite easy to port the old UI or create a new one from scratch.
@manast I'm setuping the beginning of the implementation with typescript/react/tailwindcss. And I will see who wants to contribute.
thereceipe/qt is unmaintained since 2020. It does not even compile anymore on my computer.
Tailwind? ouch 😅
I think plain css (or just something like less/sass) will be more flexible for this kind of UI (as we could have pretty cool controllers, buttons, etc).
I just found this and I'm so happy it exists. Thank you for doing the hard work to get it to this point. I'll be playing with it over the coming weeks and will let you know if I encounter any issues. I can also help fix things if you are looking for help maintaining this :)
Thank you @StarAurryon, this is cool. I stumbled across it some weeks ago. Today, being too lazy to boot and update Windows, I downloaded the binary... and it works with my POD HD Desktop, which is not even listed in the ReadMe. Amps contains only Amp A, Mixer tab is empty and in Controllers tab all selections are empty, regardless of using FBV express MKII or FBV shortboard MKI.
The current main issue is that I choose to use QT go bindings and it "sucks" a lot (random compilation issues). What I would need is some help of go developers to port it to GTK. But I don't have time to create a cool website for the project nor federate people.
Wondering if it makes sense to use the library for building a server component and an SPA as the frontend. Maybe with Vue, as it seems to be preferred by "backend folks doing frontend".
Two benetfits:
@FlorentBrianFoxcorner that is quite a good idea, as that would also allow interacting with the POD without any cables.
Using NodeJS and this package: https://github.com/node-usb/node-usb it would also be as easy to do a native frontend with ElectronJS, or a server + a frontend in any likeable javascript framework.
ah, I forgot lpedit-lib is actually written in go, no need to go the NodeJS path then, just add an http interface to the existing library.
Hi there,
Got pretty good news. The wails app is in progress (React/Tailwind/Go). I am finishing the left side of the panel (set/preset select, save/discard, etc..) which should be available in the coming weeks. I still have some issues but it should be ok.
When this will be done I will focus on the pedal + amp effects. And in a third time I will re-implement the pedal placement on the pedalboard (drag and drop move).
The new initial version is published. Please try to clone the repo and build to see if it is working for you.
Thank you @StarAurryon, very nice!
@FlorentBrianFoxcorner Thanks for the feedback.
Ubuntu 22.04, dependency: sudo apt install libwebkit2gtk-4.0-dev
I will add this to the readme
`runs in "native" webkit window, runs in Firefox :-), single view: Input 1 Source, Input 2 Source, Guitar impedance, Input Setup, Tempo, Set List, Preset list selector, About
This is intended behaviour for now. I am working to get the pedals on the UI for now.
Connects to POD HD 500, fetches all fields contained in view except Input Setup, applies changes to POD as well as preset selection
Great
Connects to POD HD Desktop, does not display any setting but invalid Tempo of 120.0, fetches Set List, let me chose Set List, applies Preset selection to POD
Could you open an issue in lpedit-lib project and attach a file containing the message of a preset load (launch the app in console and change your preset on PODHD, the message should be available in hex) so that I can check what is wrong ?
@StarAurryon done :-)
@StarAurryon Hey there, I'm currently reversing the Line 6 Helix USB protocol in order to provide a library that would allow having a Linux and Android app to controle the Helix devices like Helix Edit does on Windows/Mac.
Apart from the code in the repository, did you created any text document to describe the protocol when you reversed it ? If so it might be some help to me in my attempt to reverse the Helix protocol.
Thanks Flo
Hi @flowernert . Unfortunately no, I did not describe the protocol in a document. In addition LPEdit is one of my first go project and the raw []byte message is not mapped directly to a struct as it should. I'm only extracting the fields offset by offset which is not truly readable.
I hope by the end of the year I will be able to map all the []byte directly to a C struct, so the code would be more readable.
One more thing, some of the init is done at the kernel level to provide the alsa HWDep interface I'm using. So you should check that first. https://www.alsa-project.org/alsa-doc/alsa-lib/group___hw_dep.html . I'm not part of the kernel team so you should see with the line6 kernel module developers or write that part from scratch if the module is not available or the interface not accessible on android.
Have a nice evening, Aurryon,
Hi @flowernert . Unfortunately no, I did not describe the protocol in a document. In addition LPEdit is one of my first go project and the raw []byte message is not mapped directly to a struct as it should. I'm only extracting the fields offset by offset which is not truly readable.
@StarAurryon Thanks for your answer, it was just to avoid spending time in redoing it if you already did, so I guess more work for me, but that's the kind of thing I enjoy
I think I found the kernel hwdep implementation for line6 devices here, hopefully it can also give me some additional understanding of the protocol used to communicate with the Line 6 HX devices
Hello,
This is a thread to get all of your feedback.
Aurryon