Skip to content

andree182/podx3

Repository files navigation

podx3

Linux kernel contains support for some Line6 PODs, but not X3, and apparently also not for settings manipulation and now also for X3 and settings manipulation.

This code is partly based on what was already done in http://sourceforge.net/p/line6linux/ (esp. the x3 branch). Some userspace stuff+docs will be dumped here.

pypodx3.py

This tool can be used to dump the commands used to configure the pod. You'll need python + pyusb for it. Just execute it and you should, ideally, start seeing decoded incoming stuff from the POD (i.e. you need to turn knobs etc.). Ctrl+C terminates it.

Read/write command format seem to be (almost) the same, for the future reference - except for some direction flags/addresses. Some messages may be uni-directional though (to-be-researched).

If it doesn't work, make sure line6usb driver is not loaded, and/or that you have sufficient permissions (sudo).

Sample output:

%<------------------------------------------------------------------------------
no kernel driver attached
set configuration...
-- init (expecting 20 10 04)
resp: 20 10 04
-- INIT F000...F080
87 FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
BF FF FF FF FF FF 1F FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
POD Serial: 1620786
< INT 0 / 5|5 -> 0|0
< INT 0 / 5|5 -> 1|0
< FLT 0|3 / 1|0 | 5 -> 0.516129 
< FLT 0|3 / 1|0 | 5 -> 0.512219 
< FLT 0|3 / 1|0 | 5 -> 0.508309 
< FLT 0|3 / 1|0 | 5 -> 0.504399 
< FLT 0|3 / 1|0 | 5 -> 0.502444 
< FLT 0|3 / 1|0 | 5 -> 0.498534 
< FLT 0|3 / 1|0 | 5 -> 0.496579 
< FLT 0|3 / 1|0 | 5 -> 0.492669 
< FLT 0|3 / 1|0 | 5 -> 0.490714 
< FLT 0|3 / 1|0 | 5 -> 0.487781 
< FLT 0|3 / 1|0 | 5 -> 0.485826 
< FLT 0|3 / 1|0 | 5 -> 0.481916 
< FLT 0|3 / 1|0 | 5 -> 0.479961 
< FLT 0|3 / 1|0 | 5 -> 0.477028 
< FLT 0|3 / 1|0 | 5 -> 0.473118 
< FLT 0|3 / 1|0 | 5 -> 0.469208 
< FLT 0|3 / 1|0 | 5 -> 0.465298 
< FLT 0|3 / 1|0 | 5 -> 0.461388 
< FLT 0|3 / 1|0 | 5 -> 0.457478 
< FLT 0|3 / 1|0 | 5 -> 0.455523 
< FLT 0|3 / 1|0 | 5 -> 0.451613 
< FLT 0|3 / 1|0 | 5 -> 0.449658 
< FLT 0|3 / 1|0 | 5 -> 0.448680 
< FLT 0|3 / 1|0 | 5 -> 0.452590 
< FLT 0|3 / 1|0 | 5 -> 0.456501 
< FLT 0|3 / 1|0 | 5 -> 0.461388 
< FLT 0|3 / 1|0 | 5 -> 0.467253 
< FLT 0|3 / 1|0 | 5 -> 0.473118 
< FLT 0|3 / 1|0 | 5 -> 0.478983 
< FLT 0|3 / 1|0 | 5 -> 0.484848 
< FLT 0|3 / 1|0 | 5 -> 0.489736 
< FLT 0|3 / 1|0 | 5 -> 0.494624 
< FLT 0|3 / 1|0 | 5 -> 0.496579 
< FLT 0|3 / 1|0 | 5 -> 0.497556 
< FLT 0|3 / 1|0 | 5 -> 0.500489 
< FLT 0|3 / 1|0 | 5 -> 0.501466 
< FLT 0|3 / 1|0 | 5 -> 0.502444 
ERROR: Unexpected value 'which': 35
< EffectDump: [4096] 36 30 27 73 20 52 26 42 20 20 20 20 20 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00...
< INT 0 / 0|3 -> 0|0
< INT 0 / 3|3 -> 0|0
< INT 0 / 1|3 -> 0|0
< INT 0 / 0|3 -> 1|0
< INT 0 / 3|3 -> 1|0
< INT 0 / 1|3 -> 1|0
< INT 0 / 3|2 -> 1|0
< INT 0 / 3|2 -> 0|0
< INT 0 / 3|5 -> 1|0
< INT 0 / 3|5 -> 0|0
%<------------------------------------------------------------------------------

POD bulk message format

Apparently, pod bulk messages consist of header and body.

Header

At least the incoming messages may not be complete. The header byte-format is: ContentsLength ?? Flags ??

Flags is 0x01 for first packet, 0x04 for followup packets (to be appended to previous buffer).

Contents

Standard floats are used, e.g.

06 00 0A 03 00 40 00 15 00 00 00 00 00 00 03 00 01 00 00 00 05 00 10 3F DD 74 53 3F

for setting "Tone volume".

The detailed format is "decrypted" to a great degree, and is currently documented by code in the module pypodx3_parser.py.

Audio transfer

Isochronous data has S24_3LE format, input is 8 channels / output 2 channels. Fortunately it's out-of-box compatible with ALSA.

While the control doesn't seem to be required, audio doesn't seem to work unless the host is listening for URBs (even if none arrive). Because of that, the linux driver has to provide isochronous audio and bulk handling code... Pity, I was hoping userspace will handle the bulk handling entirely.

About

Line6 Pod X3 (and compatible) - linux driver

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages