Hi, thanks for responding.

--- Clemens Ladisch <[EMAIL PROTECTED]> wrote:

> Stephen Cameron wrote:
> > I have an Akai MPD16, it's a MIDI drum pad thingy.
> > Using the regular MIDI port works with linux just fine, but
> > I'd like to be able to use it using only USB, but it
> > seems not to be supported, so I thought I'd try to
> > add support myself.
> > 
> > I've had some success, despite not really knowing what I'm doing.
> > Not complete success, but close enough to complete
> > success that I'm very encouraged.
> > 
> > I added this into sound/usb/usbquirks.h:
> > 
> > /* Akai devices */
> > {
> >         USB_DEVICE_VENDOR_SPEC(0x09e8, 0x0062),
> >         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) 
> > {
> >                 .vendor_name = "AKAI Professional M.I. Corp.",
> >                 .product_name = "AKAIpro MPD16 USB/MIDI PAD CONTROL UNIT",
> 
> You don't need to set these strings if they're already present in the
> USB descriptors.
> 
> And if you need to set them, please use "AKAI"/"MPD16" because you aren't
> paid by AKAI's marketing department.  :-)
> 

LOL, ok.  I just made it match the strings I found down in /sys,
because I thought maybe the code was going to be comparing those
strings to recognize the device.  I didn't know what they were 
really for, and if I'm going to just guess values, I figured I
might as well use what clues I had.

> >                 .type = QUIRK_MIDI_RAW,
> > 
> > And then when I tap out things on the Akai, they
> > are played on my Yamaha Motif Rack.  Well, then it
> > sends something periodically (about 4 times per
> > second) something which makes a small quiet sound
> > on the Motif...
> 
> Your description indicates that the MPD16 doesn't actually use a raw
> protocol.

Alrighty.  I'll take your word for that.  I was just guessing.

> 
> Please uncomment the "#define DUMP_PACKETS" in sound/usb/usbmidi.c and
> show the packets that are logged in the system log.

Ok, here's a representative sample of what I get.
Mostly the thing was idle for this, but I did make two taps
on one of the pads.  Let me know if you'd like me to rty something
more specific, or if you have hints about how I should try to decode
this myself to figure out what's going on.

received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 21 fe ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f fe 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]
received packet: [ 21 fe ]
received packet: [ 0f f8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00
00 00 00 00 00 ]




> 
> The output of "lsusb -v" might have some further clues.

Hmm, I think /proc/bus/usb is empty...  Maybe that info is in /sys these days?
My userland is Fedora Core 3. (2.6.11 kernel goes with it, 
I think -- I'm on 2.6.16.11 now.)

[EMAIL PROTECTED] ~]# lsusb -v
[EMAIL PROTECTED] ~]# cat /proc/bus/usb
cat: /proc/bus/usb: Is a directory
[EMAIL PROTECTED] ~]# ls /proc/bus/usb
[EMAIL PROTECTED] ~]# lsusb -vv
[EMAIL PROTECTED] ~]#

Maybe a bunch of junk from /sys will be a tolerable substitute?

[EMAIL PROTECTED] 4-1]# pwd
/sys/bus/usb/devices/4-1
[EMAIL PROTECTED] 4-1]# ls
4-1:1.0              bMaxPacketSize0     driver        product
bcdDevice            bMaxPower           ep_00         speed
bConfigurationValue  bNumConfigurations  idProduct     uevent
bDeviceClass         bNumInterfaces      idVendor      usb_device:usbdev4.2
bDeviceProtocol      bus                 manufacturer  version
bDeviceSubClass      configuration       maxchild
bmAttributes         devnum              power
[EMAIL PROTECTED] 4-1]# find . -type f -print | awk '{ printf("echo %s ; cat %s 
; \n", $0, $0); }' | sh
./4-1:1.0/ep_82/direction
in
./4-1:1.0/ep_82/interval
0ms
./4-1:1.0/ep_82/type
Bulk
./4-1:1.0/ep_82/wMaxPacketSize
0040
./4-1:1.0/ep_82/bInterval
01
./4-1:1.0/ep_82/bmAttributes
02
./4-1:1.0/ep_82/bEndpointAddress
82
./4-1:1.0/ep_82/bLength
07
./4-1:1.0/ep_02/direction
out
./4-1:1.0/ep_02/interval
0ms
./4-1:1.0/ep_02/type
Bulk
./4-1:1.0/ep_02/wMaxPacketSize
0040
./4-1:1.0/ep_02/bInterval
01
./4-1:1.0/ep_02/bmAttributes
02
./4-1:1.0/ep_02/bEndpointAddress
02
./4-1:1.0/ep_02/bLength
07
./4-1:1.0/ep_81/direction
in
./4-1:1.0/ep_81/interval
0ms
./4-1:1.0/ep_81/type
Bulk
./4-1:1.0/ep_81/wMaxPacketSize
0040
./4-1:1.0/ep_81/bInterval
01
./4-1:1.0/ep_81/bmAttributes
02
./4-1:1.0/ep_81/bEndpointAddress
81
./4-1:1.0/ep_81/bLength
07
./4-1:1.0/ep_01/direction
out
./4-1:1.0/ep_01/interval
0ms
./4-1:1.0/ep_01/type
Bulk
./4-1:1.0/ep_01/wMaxPacketSize
0040
./4-1:1.0/ep_01/bInterval
01
./4-1:1.0/ep_01/bmAttributes
02
./4-1:1.0/ep_01/bEndpointAddress
01
./4-1:1.0/ep_01/bLength
07
./4-1:1.0/modalias
usb:v09E8p0062d0100dcFFdsc00dp00icFFisc00ipFF
./4-1:1.0/bInterfaceProtocol
ff
./4-1:1.0/bInterfaceSubClass
00
./4-1:1.0/bInterfaceClass
ff
./4-1:1.0/bNumEndpoints
04
./4-1:1.0/bAlternateSetting
 0
./4-1:1.0/bInterfaceNumber
00
./4-1:1.0/power/wakeup

./4-1:1.0/power/state
0
./4-1:1.0/uevent
cat: ./4-1:1.0/uevent: Permission denied
./ep_00/direction
both
./ep_00/interval
0ms
./ep_00/type
Control
./ep_00/wMaxPacketSize
0008
./ep_00/bInterval
00
./ep_00/bmAttributes
00
./ep_00/bEndpointAddress
00
./ep_00/bLength
07
./configuration
AkSys Mode
./product
AKAIpro MPD16 USB/MIDI PAD CONTROL UNIT
./manufacturer
AKAI Professional M.I. Corp.
./maxchild
0
./version
 1.10
./devnum
2
./speed
12
./bMaxPacketSize0
8
./bNumConfigurations
1
./bDeviceProtocol
00
./bDeviceSubClass
00
./bDeviceClass
ff
./bcdDevice
0100
./idProduct
0062
./idVendor
09e8
./bMaxPower
100mA
./bmAttributes
a0
./bConfigurationValue
1
./bNumInterfaces
 1
./power/wakeup
enabled
./power/state
0
./uevent
cat: ./uevent: Permission denied




> 
> > # ls -l /dev/snd/midi*
> > crw-------  1 scameron root  14, 18 May 18 19:32 /dev/snd/midi1
> > crw-------  1 scameron root  14, 34 May 18 19:32 /dev/snd/midi2
> 
> These two are OSS devices that should live in /dev.  Something's wrong
> with your udev rules.

They are whatever the default for Fedora core 3 is, I haven't messed
with them.

I find this in /etc/udev/rules.d/50-udev.rules:

# alsa devices
KERNEL="controlC[0-9]*", NAME="snd/%k"
KERNEL="hw[CD0-9]*",     NAME="snd/%k"
KERNEL="pcm[CD0-9cp]*",  NAME="snd/%k"
KERNEL="midi[CD0-9]*",   NAME="snd/%k"
KERNEL="timer",          NAME="snd/%k"
KERNEL="seq",            NAME="snd/%k"



__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 


-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Alsa-user mailing list
Alsa-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/alsa-user

Reply via email to