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