Open callmemagnus opened 9 months ago
The device PID isn't supported and not listed here. The main question is though: Does it use the Mustang protocol, or something different like the LT series?
I took to ownership of the AUR package for this plugin as the previous versions did not compile anymore.
Nice, thank you! :smiley:
Ha! I didn't see the list... Shame on me.
Regarding the similarity with the LT, I don't know, both products look surprisingly similar from an external point of view.
I've only used the Fender Tone android App to access it via Bluetooth.
I now wonder if the GT provides anything more than an audio interface over USB... I will check that.
You can do a simple test:
0032
to the linked codeI added
diff --git a/src/com/ConnectionFactory.cpp b/src/com/ConnectionFactory.cpp
index 6c52c31..71b6b2d 100644
--- a/src/com/ConnectionFactory.cpp
+++ b/src/com/ConnectionFactory.cpp
@@ -41,6 +41,7 @@ namespace plug::com
inline constexpr std::uint16_t mustangFloor{0x0012};
inline constexpr std::uint16_t mustangI_II_v2{0x0014};
inline constexpr std::uint16_t mustangIII_IV_V_v2{0x0016};
+ inline constexpr std::uint16_t mustangGT_40{0x0032};
}
inline constexpr std::initializer_list<std::uint16_t> pids{
@@ -50,7 +51,8 @@ namespace plug::com
usbPID::mustangMini,
usbPID::mustangFloor,
usbPID::mustangI_II_v2,
- usbPID::mustangIII_IV_V_v2};
+ usbPID::mustangIII_IV_V_v2,
+ usbPID::mustangGT_40};
DeviceModel getModel(std::uint16_t pid)
{
@@ -70,6 +72,8 @@ namespace plug::com
return DeviceModel{"Mustang I/II", DeviceModel::Category::MustangV2, 24};
case usbPID::mustangIII_IV_V_v2:
return DeviceModel{"Mustang III/IV/V", DeviceModel::Category::MustangV2, 100};
+ case usbPID::mustangGT_40:
+ return DeviceModel{"Mustang GT40", DeviceModel::Category::MustangV2, 100};
default:
throw CommunicationException{"Unknown device pid: " + std::to_string(pid)};
}
Last changed line: total guess!
I also added the productId in a udev file rule with:
ATTRS{idVendor}=="1ed8", ATTRS{idProduct}=="0032", ENV{ID_AUDIO_MODELING_AMP}="1", MODE="0666"
Running the compiled version:
$ LIBUSB_DEBUG=4 ./src/plug
[timestamp] [threadID] facility level [function call] <message>
--------------------------------------------------------------------------------
[ 0.000019] [000fd316] libusb: debug [libusb_init_context] created default context
[ 0.000024] [000fd316] libusb: debug [libusb_init_context] libusb v1.0.27.11882
[ 0.000031] [000fd316] libusb: debug [usbi_add_event_source] add fd 16 events 1
[ 0.000037] [000fd316] libusb: debug [usbi_io_init] using timer for timeouts
[ 0.000040] [000fd316] libusb: debug [usbi_add_event_source] add fd 17 events 1
[ 0.000047] [000fd316] libusb: debug [get_kernel_version] reported kernel version is 6.6.16-2-MANJARO
[ 0.000065] [000fd316] libusb: debug [op_init] found usbfs at /dev/bus/usb
[ 0.000069] [000fd316] libusb: debug [op_init] max iso packet length is (likely) 98304 bytes
[ 0.000074] [000fd316] libusb: debug [op_init] sysfs is available
[ 0.000250] [000fd31d] libusb: debug [linux_udev_event_thread_main] udev event thread entering
[ 0.005661] [000fd316] libusb: debug [linux_get_device_address] getting address for device: usb1 detached: 0
[ 0.005669] [000fd316] libusb: debug [linux_get_device_address] scan usb1
[ 0.005693] [000fd316] libusb: debug [linux_get_device_address] bus=1 dev=1
[ 0.005697] [000fd316] libusb: debug [linux_enumerate_device] busnum 1 devaddr 1 session_id 257
[ 0.005713] [000fd316] libusb: debug [linux_enumerate_device] allocating new device for 1/1 (session 257)
[ 0.005795] [000fd316] libusb: debug [linux_get_device_address] getting address for device: 1-2 detached: 0
[ 0.005799] [000fd316] libusb: debug [linux_get_device_address] scan 1-2
[ 0.005821] [000fd316] libusb: debug [linux_get_device_address] bus=1 dev=16
[ 0.005823] [000fd316] libusb: debug [linux_enumerate_device] busnum 1 devaddr 16 session_id 272
[ 0.005827] [000fd316] libusb: debug [linux_enumerate_device] allocating new device for 1/16 (session 272)
[ 0.005849] [000fd316] libusb: debug [linux_get_parent_info] dev 0x55a5a14a4d50 (1-2) has parent 0x55a5a14eefa0 (usb1) port 2
[ 0.005922] [000fd316] libusb: debug [linux_get_device_address] getting address for device: 1-3 detached: 0
[ 0.005929] [000fd316] libusb: debug [linux_get_device_address] scan 1-3
[ 0.005955] [000fd316] libusb: debug [linux_get_device_address] bus=1 dev=2
[ 0.005959] [000fd316] libusb: debug [linux_enumerate_device] busnum 1 devaddr 2 session_id 258
[ 0.005962] [000fd316] libusb: debug [linux_enumerate_device] allocating new device for 1/2 (session 258)
[ 0.005987] [000fd316] libusb: debug [linux_get_parent_info] dev 0x55a5a14ef0c0 (1-3) has parent 0x55a5a14eefa0 (usb1) port 3
[ 0.006052] [000fd316] libusb: debug [linux_get_device_address] getting address for device: 1-4 detached: 0
[ 0.006056] [000fd316] libusb: debug [linux_get_device_address] scan 1-4
[ 0.006078] [000fd316] libusb: debug [linux_get_device_address] bus=1 dev=3
[ 0.006080] [000fd316] libusb: debug [linux_enumerate_device] busnum 1 devaddr 3 session_id 259
[ 0.006083] [000fd316] libusb: debug [linux_enumerate_device] allocating new device for 1/3 (session 259)
[ 0.006104] [000fd316] libusb: debug [linux_get_parent_info] dev 0x55a5a14a4a50 (1-4) has parent 0x55a5a14eefa0 (usb1) port 4
[ 0.006162] [000fd316] libusb: debug [linux_get_device_address] getting address for device: 1-4.1 detached: 0
[ 0.006165] [000fd316] libusb: debug [linux_get_device_address] scan 1-4.1
[ 0.006188] [000fd316] libusb: debug [linux_get_device_address] bus=1 dev=4
[ 0.006192] [000fd316] libusb: debug [linux_enumerate_device] busnum 1 devaddr 4 session_id 260
[ 0.006195] [000fd316] libusb: debug [linux_enumerate_device] allocating new device for 1/4 (session 260)
[ 0.006218] [000fd316] libusb: debug [linux_get_parent_info] dev 0x55a5a14a5b30 (1-4.1) has parent 0x55a5a14a4a50 (1-4) port 1
[ 0.006276] [000fd316] libusb: debug [linux_get_device_address] getting address for device: 1-4.4 detached: 0
[ 0.006278] [000fd316] libusb: debug [linux_get_device_address] scan 1-4.4
[ 0.006299] [000fd316] libusb: debug [linux_get_device_address] bus=1 dev=6
[ 0.006301] [000fd316] libusb: debug [linux_enumerate_device] busnum 1 devaddr 6 session_id 262
[ 0.006304] [000fd316] libusb: debug [linux_enumerate_device] allocating new device for 1/6 (session 262)
[ 0.006330] [000fd316] libusb: debug [linux_get_parent_info] dev 0x55a5a14a5a10 (1-4.4) has parent 0x55a5a14a4a50 (1-4) port 4
[ 0.006382] [000fd316] libusb: debug [linux_get_device_address] getting address for device: usb2 detached: 0
[ 0.006385] [000fd316] libusb: debug [linux_get_device_address] scan usb2
[ 0.006406] [000fd316] libusb: debug [linux_get_device_address] bus=2 dev=1
[ 0.006409] [000fd316] libusb: debug [linux_enumerate_device] busnum 2 devaddr 1 session_id 513
[ 0.006412] [000fd316] libusb: debug [linux_enumerate_device] allocating new device for 2/1 (session 513)
[ 0.006482] [000fd316] libusb: debug [linux_get_device_address] getting address for device: usb3 detached: 0
[ 0.006486] [000fd316] libusb: debug [linux_get_device_address] scan usb3
[ 0.006507] [000fd316] libusb: debug [linux_get_device_address] bus=3 dev=1
[ 0.006510] [000fd316] libusb: debug [linux_enumerate_device] busnum 3 devaddr 1 session_id 769
[ 0.006513] [000fd316] libusb: debug [linux_enumerate_device] allocating new device for 3/1 (session 769)
[ 0.006581] [000fd316] libusb: debug [linux_get_device_address] getting address for device: 3-2 detached: 0
[ 0.006585] [000fd316] libusb: debug [linux_get_device_address] scan 3-2
[ 0.006606] [000fd316] libusb: debug [linux_get_device_address] bus=3 dev=2
[ 0.006609] [000fd316] libusb: debug [linux_enumerate_device] busnum 3 devaddr 2 session_id 770
[ 0.006611] [000fd316] libusb: debug [linux_enumerate_device] allocating new device for 3/2 (session 770)
[ 0.006635] [000fd316] libusb: debug [linux_get_parent_info] dev 0x55a5a14a4bf0 (3-2) has parent 0x55a5a14a6340 (usb3) port 2
[ 0.006688] [000fd316] libusb: debug [linux_get_device_address] getting address for device: usb4 detached: 0
[ 0.006690] [000fd316] libusb: debug [linux_get_device_address] scan usb4
[ 0.006711] [000fd316] libusb: debug [linux_get_device_address] bus=4 dev=1
[ 0.006715] [000fd316] libusb: debug [linux_enumerate_device] busnum 4 devaddr 1 session_id 1025
[ 0.006717] [000fd316] libusb: debug [linux_enumerate_device] allocating new device for 4/1 (session 1025)
[ 0.078059] [000fd316] libusb: debug [libusb_get_device_list]
[ 0.078087] [000fd316] libusb: debug [libusb_get_device_descriptor]
[ 0.078090] [000fd316] libusb: debug [libusb_get_device_descriptor]
[ 0.078093] [000fd316] libusb: debug [libusb_get_device_descriptor]
[ 0.078097] [000fd316] libusb: debug [libusb_get_device_descriptor]
[ 0.078100] [000fd316] libusb: debug [libusb_get_device_descriptor]
[ 0.078102] [000fd316] libusb: debug [libusb_get_device_descriptor]
[ 0.078107] [000fd316] libusb: debug [libusb_get_device_descriptor]
[ 0.078110] [000fd316] libusb: debug [libusb_get_device_descriptor]
[ 0.078114] [000fd316] libusb: debug [libusb_get_device_descriptor]
[ 0.078116] [000fd316] libusb: debug [libusb_get_device_descriptor]
[ 0.078124] [000fd316] libusb: debug [libusb_open] open 1.16
[ 0.078151] [000fd316] libusb: debug [usbi_add_event_source] add fd 24 events 4
[ 0.078156] [000fd316] libusb: debug [libusb_claim_interface] interface 0
[ 0.078459] [000fd316] libusb: debug [libusb_submit_transfer] transfer 0x55a5a1a813f0
[ 0.078469] [000fd316] libusb: debug [add_to_flying_list] arm timer for timeout in 1000ms (first in line)
[ 0.078495] [000fd316] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 0.078498] [000fd316] libusb: debug [handle_events] event sources modified, reallocating event data
[ 0.078503] [000fd316] libusb: debug [usbi_wait_for_events] poll() 3 fds with timeout in 60000ms
[ 0.078837] [000fd316] libusb: debug [usbi_wait_for_events] poll() returned 1
[ 0.078847] [000fd316] libusb: debug [reap_for_handle] urb type=2 status=0 transferred=4
[ 0.078851] [000fd316] libusb: debug [handle_control_completion] handling completion status 0
[ 0.078855] [000fd316] libusb: debug [arm_timer_for_next_timeout] no timeouts, disarming timer
[ 0.078860] [000fd316] libusb: debug [usbi_handle_transfer_completion] transfer 0x55a5a1a813f0 has callback 0x7fd1d1679c90
[ 0.078863] [000fd316] libusb: debug [sync_transfer_cb] actual_length=4
[ 0.078869] [000fd316] libusb: debug [libusb_free_transfer] transfer 0x55a5a1a813f0
[ 0.078873] [000fd316] libusb: debug [libusb_submit_transfer] transfer 0x55a5a1a814e0
[ 0.078877] [000fd316] libusb: debug [add_to_flying_list] arm timer for timeout in 1000ms (first in line)
[ 0.078887] [000fd316] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 0.078890] [000fd316] libusb: debug [usbi_wait_for_events] poll() 3 fds with timeout in 60000ms
[ 0.079202] [000fd316] libusb: debug [usbi_wait_for_events] poll() returned 1
[ 0.079211] [000fd316] libusb: debug [reap_for_handle] urb type=2 status=0 transferred=56
[ 0.079214] [000fd316] libusb: debug [handle_control_completion] handling completion status 0
[ 0.079217] [000fd316] libusb: debug [arm_timer_for_next_timeout] no timeouts, disarming timer
[ 0.079221] [000fd316] libusb: debug [usbi_handle_transfer_completion] transfer 0x55a5a1a814e0 has callback 0x7fd1d1679c90
[ 0.079225] [000fd316] libusb: debug [sync_transfer_cb] actual_length=56
[ 0.079228] [000fd316] libusb: debug [libusb_free_transfer] transfer 0x55a5a1a814e0
[ 0.079254] [000fd316] libusb: debug [libusb_submit_transfer] transfer 0x55a5a1a81720
[ 0.079258] [000fd316] libusb: debug [add_to_flying_list] arm timer for timeout in 500ms (first in line)
[ 0.079263] [000fd316] libusb: debug [submit_bulk_transfer] need 1 urbs for new transfer with length 64
[ 0.079268] [000fd316] libusb: error [submit_bulk_transfer] submiturb failed, errno=2
[ 0.079272] [000fd316] libusb: debug [submit_bulk_transfer] first URB failed, easy peasy
[ 0.079275] [000fd316] libusb: debug [arm_timer_for_next_timeout] no timeouts, disarming timer
[ 0.079279] [000fd316] libusb: debug [libusb_free_transfer] transfer 0x55a5a1a81720
ERROR: Input/Output Error
``
That's a different error than expected. Do you get this error each time?
No. If I start the application, I get the IO Error. If I then use the "Connect" entry in the menu, I get the following error:
...
[ 0.074970] [0019426b] libusb: debug [add_to_flying_list] arm timer for timeout in 500ms (first in line)
[ 0.074980] [0019426b] libusb: debug [submit_bulk_transfer] need 1 urbs for new transfer with length 64
[ 0.074989] [0019426b] libusb: error [submit_bulk_transfer] submiturb failed, errno=2
[ 0.074994] [0019426b] libusb: debug [submit_bulk_transfer] first URB failed, easy peasy
[ 0.075001] [0019426b] libusb: debug [arm_timer_for_next_timeout] no timeouts, disarming timer
[ 0.075010] [0019426b] libusb: debug [libusb_free_transfer] transfer 0x562bfbe01c70
ERROR: Input/Output Error
[ 3.716230] [0019426b] libusb: debug [libusb_get_device_list]
[ 3.716255] [0019426b] libusb: debug [libusb_get_device_descriptor]
[ 3.716259] [0019426b] libusb: debug [libusb_get_device_descriptor]
[ 3.716261] [0019426b] libusb: debug [libusb_get_device_descriptor]
[ 3.716265] [0019426b] libusb: debug [libusb_get_device_descriptor]
[ 3.716267] [0019426b] libusb: debug [libusb_get_device_descriptor]
[ 3.716271] [0019426b] libusb: debug [libusb_get_device_descriptor]
[ 3.716275] [0019426b] libusb: debug [libusb_get_device_descriptor]
[ 3.716278] [0019426b] libusb: debug [libusb_get_device_descriptor]
[ 3.716282] [0019426b] libusb: debug [libusb_get_device_descriptor]
[ 3.716286] [0019426b] libusb: debug [libusb_get_device_descriptor]
[ 3.716293] [0019426b] libusb: debug [libusb_open] open 1.18
[ 3.716327] [0019426b] libusb: debug [usbi_add_event_source] add fd 27 events 4
[ 3.716331] [0019426b] libusb: debug [libusb_claim_interface] interface 0
[ 3.716361] [0019426b] libusb: debug [libusb_release_interface] interface 0
[ 3.716367] [0019426b] libusb: debug [libusb_close]
[ 3.716371] [0019426b] libusb: debug [usbi_remove_event_source] remove fd 27
ERROR: Resource busy
This might be an indication of a different protocol. Usually it should fail with some kind of 'invalid id', not on USB writing.
That is sad news.
Just to cement the disappointment a bit further, I'm presently working on support for the LT40S but I also have a Mustang Micro, and based on my experience with that I dont think there is going to be much hope of getting the GT working over USB.
The original mustang-plug by piorekf was based on reverse engineering the USB protocol of amplifiers released up until around 2015. Fender released an official control application for this on Windows and macOS called 'Fender Plug'. I believe that the Fender Mustang hardware released from 2015 on were accompanied by iOS/Android mobile applications which controlled the amp wirelessly (probably over Bluetooth) and didn't have a USB control app. The current version of the mobile control app is called Fender TONE v4 but I don't have a device this works with.
The LT series of Mustangs go back to USB control, but are driven by a desktop app, also called Fender Tone (I think the version number might be 1.5... but I would need to run it up). The work under way at the moment is focussing on reverse engineering the LT USB protocol.
The Mustang Micro has both Bluetooth and USB capability, but no control app - the Bluetooth can only be used to capture an input audio stream which the amp will play through its speaker as accompaniment to the guitar input. The USB exposes a generic audio device, so the sound can be captured on Linux, but the USB descriptors don't declare proprietary control endpoint (the LT does). I'm guessing the GT 40's USB service offering will be similar - generic audio so players can capture on a DAW, but no control capability over USB.
I'm guessing that for both the Mustang Micro and the GT series (and newer GTX), Fender have no intention of supporting USB control, and have built firmware which doesn't accept commands of any protocol over USB.
It is possible that GT/GTX series could be integrated into offa-plug if someone with the right skills was able to snoop the Bluetooth wireless traffic and add a Bluetooth option to the connecton factory, but this is an order of magnitude more work than adding support for a variant protocol under the existing USB connection management.
NB if anyone wants to take this on, they might want to look at the new Mustang Micro Plus which, unlike the original Mustang Micro, does support control from the same Fender TONE mobile application. I don't have skills in the right area to look at the Bluetooth connection architecture, but it's not unlikely that the work I'm doing on the LT series protocol (which is looking like JSON over a packet framing protocol inherited from pre-2015) may come in useful once someone manages to get a connection up.
I'm trying to make plug work with my Mustang GT 40.
I took to ownership of the AUR package for this plugin as the previous versions did not compile anymore.
I'm using version 1.4.5.
Is there any successful attempt by someone fro this amp ?
Seems that the amp is seen by the system. I can use it as an audio device.
I don't see anything useful here.
Is there something I can try to make this work ?