Novation ReMote 25SL, M-Audio Trigger Finger


#1

M-Audio Trigger Finger (old silver version. Seems to work OK in when hosted by Ax.
Novation ReMote 25SL is detected as USB device attached...but nothing further, indeed the Ax needs to reboot before it'll detect the Trigger Finger again.


#2

Better add the controllers to this topic:


#3

Well, that topic specifically says don't post controllers that don't work, so this is the requested new thread for the Novation.

Sorry if it's awkward to add the Trigger Finger info into the same thread, I thought it would help to make clear why I'd identified the Novation as not-working.

Before adding the Trigger Finger "officially" to the list I'd like to confirm that all the functions work.
NoteOn, NoteOff are OK. ...but what about CC and Prog Ch
Right now I don't know how to do that, I'm used to PLogue Bidule where you'd be able to drop an object that represented the controller onto the patch and hook up a midi monitor to it...so the Ax stuff is something of a culture shock :wink:

I'm currently looking into running a program on my Windows pc to get the midi info from the Novation as recommended in another thread. Doesn't seem to be an easy answer to that though.


#4

correct, issues should be posted in their own thread.

we really need a few more details...
what versions of axoloti firmware (1.0.6?) ?
what does the console say?
what are you trying... specifically what messages are you sending? is anything getting through?

Im also a bit confused you are talking about two controllers, M-Audio Trigger Finger (old silver version) , Novation ReMote 25SL ... are they both not working?
also I need more than just known 'old silver version'... model number, release date? ...
also can you confirmed they are both class compliant midi devices?

as you can appreciate there are thousands of midi controllers, no way we can test or own them all, so you are our eyes and ears ... to get this working :smile:


#5

Must have misinterpreted since the Trigger Finger is working. A title like Controller X doesn't work might have been better.


#6

Ok, thanks for getting back to me.

afaik the Trigger Finger works ok. It doesn't have a model number.
It's been replaced with the "Trigger Finger Pro" so "old silver" was my attempt to
differentiate the 2 devices without actually checking what the new one was called :wink:
I'll make sure it can send CC and ProgCh to the Ax as well as NoteOn/Off before I report it
as compatible though.

My hope was that the fact that I could get the TrigFinger going would of itself be useful in diagnosing the problem with the Novation.

Here's what happens when I connect pc to the Ax, and then plug in the Novation.

USB device found
connected
Authentic Axoloti Core
Firmware version: 1.0.0.1, crc=0xFBC69470, entrypoint=0x20011000
Axoloti says: USB Device Attached
.
That's then basically 'it' for USB hosting.
Novation appears to be all powered up and working, but nothing gets through to the Ax.
No detection of removal. No further detection of any connected devices.

I'm on Windows.

I installed 1.0.7 runtime and .msi
I'm happy to install 1.0.6 if that helps.

In case it's useful here's a console dump from the first connection to the Ax after reboot.

Link to firmware CRC FBC69470
USB device found
not accesseable : -12
USB device found
connected
Authentic Axoloti Core
search path : \Users\Andy\Documents\axoloti\axoloti-factory\objects
Incorrect sha hash detected for object: C:\Users\Andy\Documents\axoloti\axoloti-factory\objects\lfo\sine r.axo its implementation does not match its signature. Correct SHA hash would be e68bda2e8fb0db34ff178f2fab6bd14f301b8c42
Firmware version: 1.0.0.1, crc=0xFBC69470, entrypoint=0x20011000
search path : \Users\Andy\Documents\axoloti\objects
search path : \Users\Andy\Documents\axoloti\axoloti-contrib\objects
C:\Users\Andy\Documents\axoloti\axoloti-contrib\objects\rbrt\control\gate_hold.axo,org.simpleframework.xml.core.AttributeException: Attribute 'appVersion' does not have a match in class axoloti.object.AxoObjectFile at line 1
org.simpleframework.xml.core.AttributeException: Attribute 'appVersion' does not have a match in class axoloti.object.AxoObjectFile at line 1
at org.simpleframework.xml.core.Composite.readAttribute(Composite.java:494)
at org.simpleframework.xml.core.Composite.readAttributes(Composite.java:413)
at org.simpleframework.xml.core.Composite.access$300(Composite.java:59)
at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1382)
at org.simpleframework.xml.core.Composite.read(Composite.java:201)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)
at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
at org.simpleframework.xml.core.Persister.read(Persister.java:625)
at org.simpleframework.xml.core.Persister.read(Persister.java:606)
at org.simpleframework.xml.core.Persister.read(Persister.java:584)
at org.simpleframework.xml.core.Persister.read(Persister.java:543)
at org.simpleframework.xml.core.Persister.read(Persister.java:521)
at org.simpleframework.xml.core.Persister.read(Persister.java:426)
at axoloti.object.AxoObjects.LoadAxoObjectsFromFolder(AxoObjects.java:237)
at axoloti.object.AxoObjects.LoadAxoObjectsFromFolder(AxoObjects.java:222)
at axoloti.object.AxoObjects.LoadAxoObjectsFromFolder(AxoObjects.java:222)
at axoloti.object.AxoObjects.LoadAxoObjects(AxoObjects.java:312)
at axoloti.object.AxoObjects$2.run(AxoObjects.java:359)
at java.lang.Thread.run(Thread.java:745)

C:\Users\Andy\Documents\axoloti\axoloti-contrib\objects\tb\audio\mixer.axo,org.simpleframework.xml.core.AttributeException: Attribute 'appVersion' does not have a match in class axoloti.object.AxoObjectFile at line 1
org.simpleframework.xml.core.AttributeException: Attribute 'appVersion' does not have a match in class axoloti.object.AxoObjectFile at line 1
at org.simpleframework.xml.core.Composite.readAttribute(Composite.java:494)
at org.simpleframework.xml.core.Composite.readAttributes(Composite.java:413)
at org.simpleframework.xml.core.Composite.access$300(Composite.java:59)
at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1382)
at org.simpleframework.xml.core.Composite.read(Composite.java:201)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)
at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
at org.simpleframework.xml.core.Persister.read(Persister.java:625)
at org.simpleframework.xml.core.Persister.read(Persister.java:606)
at org.simpleframework.xml.core.Persister.read(Persister.java:584)
at org.simpleframework.xml.core.Persister.read(Persister.java:543)
at org.simpleframework.xml.core.Persister.read(Persister.java:521)
at org.simpleframework.xml.core.Persister.read(Persister.java:426)
at axoloti.object.AxoObjects.LoadAxoObjectsFromFolder(AxoObjects.java:237)
at axoloti.object.AxoObjects.LoadAxoObjectsFromFolder(AxoObjects.java:222)
at axoloti.object.AxoObjects.LoadAxoObjectsFromFolder(AxoObjects.java:222)
at axoloti.object.AxoObjects.LoadAxoObjects(AxoObjects.java:312)
at axoloti.object.AxoObjects$2.run(AxoObjects.java:359)
at java.lang.Thread.run(Thread.java:745)

C:\Users\Andy\Documents\axoloti\axoloti-contrib\objects\tb\disp\print f.axo,org.simpleframework.xml.core.AttributeException: Attribute 'appVersion' does not have a match in class axoloti.object.AxoObjectFile at line 1
org.simpleframework.xml.core.AttributeException: Attribute 'appVersion' does not have a match in class axoloti.object.AxoObjectFile at line 1
at org.simpleframework.xml.core.Composite.readAttribute(Composite.java:494)
at org.simpleframework.xml.core.Composite.readAttributes(Composite.java:413)
at org.simpleframework.xml.core.Composite.access$300(Composite.java:59)
at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1382)
at org.simpleframework.xml.core.Composite.read(Composite.java:201)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)
at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
at org.simpleframework.xml.core.Persister.read(Persister.java:625)
at org.simpleframework.xml.core.Persister.read(Persister.java:606)
at org.simpleframework.xml.core.Persister.read(Persister.java:584)
at org.simpleframework.xml.core.Persister.read(Persister.java:543)
at org.simpleframework.xml.core.Persister.read(Persister.java:521)
at org.simpleframework.xml.core.Persister.read(Persister.java:426)
at axoloti.object.AxoObjects.LoadAxoObjectsFromFolder(AxoObjects.java:237)
at axoloti.object.AxoObjects.LoadAxoObjectsFromFolder(AxoObjects.java:222)
at axoloti.object.AxoObjects.LoadAxoObjectsFromFolder(AxoObjects.java:222)
at axoloti.object.AxoObjects.LoadAxoObjects(AxoObjects.java:312)
at axoloti.object.AxoObjects$2.run(AxoObjects.java:359)
at java.lang.Thread.run(Thread.java:745)

C:\Users\Andy\Documents\axoloti\axoloti-contrib\objects\tb\disp\print i.axo,org.simpleframework.xml.core.AttributeException: Attribute 'appVersion' does not have a match in class axoloti.object.AxoObjectFile at line 1
org.simpleframework.xml.core.AttributeException: Attribute 'appVersion' does not have a match in class axoloti.object.AxoObjectFile at line 1
at org.simpleframework.xml.core.Composite.readAttribute(Composite.java:494)
at org.simpleframework.xml.core.Composite.readAttributes(Composite.java:413)
at org.simpleframework.xml.core.Composite.access$300(Composite.java:59)
at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1382)
at org.simpleframework.xml.core.Composite.read(Composite.java:201)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)
at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
at org.simpleframework.xml.core.Persister.read(Persister.java:625)
at org.simpleframework.xml.core.Persister.read(Persister.java:606)
at org.simpleframework.xml.core.Persister.read(Persister.java:584)
at org.simpleframework.xml.core.Persister.read(Persister.java:543)
at org.simpleframework.xml.core.Persister.read(Persister.java:521)
at org.simpleframework.xml.core.Persister.read(Persister.java:426)
at axoloti.object.AxoObjects.LoadAxoObjectsFromFolder(AxoObjects.java:237)
at axoloti.object.AxoObjects.LoadAxoObjectsFromFolder(AxoObjects.java:222)
at axoloti.object.AxoObjects.LoadAxoObjectsFromFolder(AxoObjects.java:222)
at axoloti.object.AxoObjects.LoadAxoObjects(AxoObjects.java:312)
at axoloti.object.AxoObjects$2.run(AxoObjects.java:359)
at java.lang.Thread.run(Thread.java:745)

finished loading objects


#7

Yeah try 1.0.6
( after use 1.0.8)

Also when you connect the device there should be more logging regarding the device - this is important to see ( you will see this for your other controller)
(Plug it in whilst the UI is connected)

Ignore the plugging in different controllers for now, let's keep it simple initially.


#8

Windows 8.1
1.0.6 wont run.
I've tried removing/deleting 1.0.7 before install.
1.0.8 doesn't have a windows runtime available (yet?), so I don't think I can install it.

1.0.7 running ok.

The log I sent for wasn't missing anything.
Plug in the Novation and I get
Axoloti says: USB Device Attached
...that's all I'm afraid.


#9

The windows runtime for 1.0.8 is the same as for 1.0.7 and 1.0.6.
Novation Remote 25SL... I have a Remote 25, and that one is not USB Midi class compliant, so I suspect 25SL is also not class compliant. The availability of a specific driver from Novation for the 25SL adds evidence towards that direction.
So USB Midi won't work. DIN Midi should work...


#10

Ta Johannes, good point.
...and something I can check.

I just plugged the 25SL into my win 8 machine,
It identifies Manufacturer as (Generic USB Audio).
...and it's working fine, sending midi to Plogue Bidule.
I'm thinking that if Win8 found the specific drivers for the 25SL
it would have filled the manufacturer field with "Novation".

I'd guess that the specific driver is just needed for the "speed dial" function.
(quick control of vst plugins)

What do you think though?


#11

a quick google search, it appears its class compliant

as for running 1.0.7... we need to sort this out.
its not supported, you need to move to 1.0.8 which uses the same runtime as 1.0.7 and 1.0.6.

BUT as I said, please try 1.0.6 first... why does this not run?
if necessary, move your axoloti home directory and retry.

as you have seen with your other usb drivers, other information comes up when you plug them in,
are you sure there is nothing else in the logs when its plugged in?
(usually we see an error regarding usb class)

my current assumption would be its something to do with the way the controller exposes its midi interface, or perhaps an embedded hub.
the issue is, we would need to see full details of how the usb device tree looks.

perhaps you could download, and yes Microsofts USBView to check what the SL is exposing


#12

Hi,
I don't have any idea why 1.0.6 won't run...or rather, it does run, visible in task manager, but it never shows the console. It could be some "Windows8 thing", connected to the previous installation of 1.0.8 msi (which I uninstalled right away when I realised I didn't have a runtime for it) or 1.0.7 (also unistalled). When I tried a system restore to before 1.0.8 it failed, something to do with 1.0.6.
I'm now on 1.0.8.

I have 3 directories associated with Ax on my machine. On in 'Users/Documents'. Two in Program Files(x86). (axolotl_runtime & Axolotl ) If it helps you I can move whichever of those is "home".
Thought...is it possible the stuff in User/Documents would cause 1.0.6 to hang?

Yes, I'm afraid I did indeed give you the whole of the console log generated when the 25SL is plugged into the usb host. There ain't any more! I'm sure you get plenty of problem that folks simply don't answer the questions you ask, not the case here though, if I can help it.

Here's the log for connecting to the Ax then plugging the 25SL into it

USB device found
not accesseable : -12
USB device found
connected
Authentic Axoloti Core
Firmware version: 1.0.0.1, crc=0xFBC69470, entrypoint=0x20011000
Axoloti says: USB Device Attached

...after that, the Ax will no longer detect any USB device that's plugged into it

I'm working on "downloading usbview.exe". So far I only found source code for it, and subsequently Microsoft's usual cryptic error messages as to why it won't compile.


#13

yes, stuff in the axoloti home directory could cause it to hang, hence why I said move it :smile:

yeah, we have to be sure, sometimes people don't mention things, because they believe its not relevant...

ok, there is a bit of a concern here... I expect to see:

Enumeration done.

(and logging about VPIDs etc)

this is low level stuff, that just is printing out the details it gets when enumerating the available devices/interfaces. way before selecting it as a midi device .

now... this is where 1.0.6 becomes important.
I made a fix after 1.0.6 that resolved an issue with descriptions not being parsed properly, obviously for the most part that seems to have worked, but I'm wondering if for certain devices this is causing issues.
(or it may be the fix is actually does not resolve the issue fully, or its something completely different)

its a pain, if I had the a 25SL, Im sure I could fix it, in a few minutes, but its extremely difficult to fix something you cannot reproduce.

anyway, try 1.0.6 this will give us a starting point as to where the issue is likely to be.
(Ive a feeling the enumeration may actually be crashing... hence the in ability to connect other devices)


#14

OK.
Removed 1.0.7 msi ( checked directory deleted)
Deleted home directory ( I didn't put anything new there yet).
Installed 1.0.6 msi
Console now shows.
On connection the console asked to fix firmware mismatch, which I ok'd.
...but no change on what happens when 25SL is plugged in.

Well, at least the 1.0.6 installation problem is solved.

Having read that runtime hasn't changed since 1.0.6 I left that alone.
...but can go back to the one from 1.0.6 if that will help.


#15

Gave up on trying to get usbview.exe from Microsoft, and googled a download.
Sorry for delay on that.

Here's the info for the 25SL

Device Descriptor:
bcdUSB: 0x0100
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x1235
idProduct: 0x0008
bcdDevice: 0x0301
iManufacturer: 0x01
0x0409: "Novation DMS"
iProduct: 0x02
0x0409: "ReMOTE SL Compact"
0x0409: "ReMOTE SL Compact"
0x0409: "ReMOTE SL Compact"
iSerialNumber: 0x00
bNumConfigurations: 0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed: Full
Device Address: 0x01
Open Pipes: 2

Endpoint Descriptor:
bEndpointAddress: 0x05 OUT
Transfer Type: Bulk
wMaxPacketSize: 0x0020 (32)
wInterval: 0x0000
bSyncAddress: 0x00

Endpoint Descriptor:
bEndpointAddress: 0x84 IN
Transfer Type: Bulk
wMaxPacketSize: 0x0020 (32)
wInterval: 0x0000
bSyncAddress: 0x00

Configuration Descriptor:
wTotalLength: 0x00A5
bNumInterfaces: 0x02
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0x64 (200 Ma)

Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x00
bInterfaceClass: 0x01 (Audio)
bInterfaceSubClass: 0x01 (Audio Control)
bInterfaceProtocol: 0x00
iInterface: 0x02
0x0409: "ReMOTE SL Compact"
0x0409: "ReMOTE SL Compact"
0x0409: "ReMOTE SL Compact"

Audio Control Interface Header Descriptor:
bLength: 0x09
bDescriptorType: 0x24
bDescriptorSubtype: 0x01
bcdADC: 0x0100
wTotalLength: 0x0009
bInCollection: 0x01
baInterfaceNr[1]: 0x01

Interface Descriptor:
bInterfaceNumber: 0x01
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x01 (Audio)
bInterfaceSubClass: 0x03 (MIDI Streaming)
bInterfaceProtocol: 0x00
iInterface: 0x02
0x0409: "ReMOTE SL Compact"
0x0409: "ReMOTE SL Compact"
0x0409: "ReMOTE SL Compact"

Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x07
07 24 01 00 01 81 00

Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x06
06 24 02 01 01 00

Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x09
09 24 03 02 02 01 01 01 00

Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x09
09 24 03 01 03 01 04 01 00

Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x06
06 24 02 02 04 00

Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x06
06 24 02 01 05 00

Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x09
09 24 03 02 06 01 05 01 00

Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x09
09 24 03 01 07 01 08 01 00

Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x06
06 24 02 02 08 00

Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x06
06 24 02 01 09 00

Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x09
09 24 03 02 0A 01 09 01 00

Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x09
09 24 03 01 0B 01 0C 01 00

Unknown Descriptor:
bDescriptorType: 0x24
bLength: 0x06
06 24 02 02 0C 00

Endpoint Descriptor:
bEndpointAddress: 0x05 OUT
Transfer Type: Bulk
wMaxPacketSize: 0x0020 (32)
wInterval: 0x0000
bSyncAddress: 0x00

Audio Streaming Class Specific Audio Data Endpoint Descriptor:
bLength: 0x07
bDescriptorType: 0x25
bDescriptorSubtype: 0x01
bmAttributes: 0x03
bLockDelayUnits: 0x01
wLockDelay: 0x0905

Endpoint Descriptor:
bEndpointAddress: 0x84 IN
Transfer Type: Bulk
wMaxPacketSize: 0x0020 (32)
wInterval: 0x0000
bSyncAddress: 0x00

Audio Streaming Class Specific Audio Data Endpoint Descriptor:
bLength: 0x07
bDescriptorType: 0x25
bDescriptorSubtype: 0x01
bmAttributes: 0x03
bLockDelayUnits: 0x03
wLockDelay: 0x0B07


#16

Any ideas then?
Sorry again for delay on running usbview.exe. (also I've been busy with work since then so no chance to play with toys)
I reckon you're right that the enumeration is crashing,
so I guess that's a bug regardless of whether 25SL support is possible.


#17

sorry, also busy here...

ok, so I'm correct in saying the behaviour is identical in 1.0.6 and 1.08,
i.e the console reports the same thing...

please bare in mind, Im 'running blind' there, as I cannot reproduce, so even tiny details are potentially very important.

Id generally agree, but with a caveat that its only the 25SL we have this issue with and its not unknown for devices to 'get it wrong'... its also complicated by the fact the parsing code is actually from the STM32HostLibrary, its not actually code we wrote. however... given Ive already found (and fixed) one bug in this code, I can't say Id be surprised if its got another bug.
fixing is also tricky, small changes here, could potentially break other usb devices, so we need to tread very carefully. no point fixing for the 25SL for it to only break 3 other devices!.

this looks suspicious, 0x24 is not a normal descriptor you would expect, and is not handled by the STM code.
but Ive had a look at the STM code, and it looks like it should skip it. as its only looking for interface and endpoint descriptors.

so im a bit 'stumped' at the moment... if I had the controller (none of my controllers show anything remotely similar :frowning: ), I could start writing some debug code, to see where it gets in the parsing process, and would probably find where it is barfing. but I cant really do this remotely,


#18

Ok, had another look at this.... I think I may know what the issue is...

@johannes the issue is really down to the size and number of the descriptors in the above.
the first issue (but doesnt cause crash) is we have max endpoints set at 6, the above has 17
the more critical issue, is usbctl/core don't correctly size buffers, in particular when the main config description is requested, it uses bTotalLength may be greater than the buffer the is allocated.

annoying there is also a bit of a 'confusion' about what the max size should be, it can be
USBH_MAX_SIZE_CONFIGURATION (which is what it in reality is)
USBH_MAX_DATA_BUFFER (ok, set to same as above)

USBH_CONFIGURATION_DESCRIPTOR_SIZE , which I suspect is what it really should be, as this is dependent on what you set max endpoints to.

so... I think I need to ensure we don't get buffer overruns, and also increase the number of endpoints.
hopefully that will fix it...

the issue is, as discussed above, Ive no way to really test it in these 'extreme' cases.

EDIT: hmm actually the above are not endpoint descriptors. there are only 2 of these.
hmm, need to add up the above to see if it goes over the 0x200 we have allocated, which seems a little unlikely,

EDIT2: adding up the above doesn't look like it would exceed 0x200 (though we do need to protect against this), perhaps log it, as also dont want to be reading 'partial' descriptors. (if the desc was above 0x200 then it would crash currently)
Ive also see that ParseCfgDesc needs a bit more attention, it wouldn't crash, I can see a scenario where it wont handle the interface as expected.


#19

OTG_HS supports 1 bidirectional control endpoint + 5 IN + 5 OUT endpoints.

17 descriptors, not 17 endpoints.
Aren't these 0x24 type unknown descriptors just "CS_INTERFACE" audio class specific descriptors ?

Haven't looked in depth, but a buffer overflow during enumeration sounds likely...


#20

this is worth retesting on 1.0.9
see https://sebiik.github.io/community.axoloti.com.backup/t/axoloti-test-release-1-0-9/

I made some changes in this area for 1.0.9 to do with skipping unsupported interfaces rather than aborting.
this may (or may not!) have been the issue with the above. so worth testing.