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
[email protected]
https://lists.sourceforge.net/lists/listinfo/alsa-user