On Mon, May 17, 2010 at 11:48:15PM +0100, wdev@xxxxxxxxxxx wrote: > The decoding routine is based on own reverse-engineering. It seems to > recognize all the messages that MPD16 sends during normal operation > (that is, via standard MIDI messages). > > Configuration (changing pad sensitivity, slider controller and MIDI > notes) is not supported in this version. > > Signed-off-by: Krzysztof Foltman <wdev@xxxxxxxxxxx> > > diff --git a/sound/usb/midi.c b/sound/usb/midi.c > index 2c1558c..57d642a 100644 > --- a/sound/usb/midi.c > +++ b/sound/usb/midi.c > @@ -645,6 +645,34 @@ static struct usb_protocol_ops snd_usbmidi_cme_ops = { > }; > > /* > + * AKAI MPD16 protocol: one or more chunks consisting of first byte of > + * (0x20 | msg_len) and then a MIDI message (msg_len bytes long) > + * > + * Messages sent: > + * 21 FE (active sense) > + * 23 90 xx xx (note on) > + * 23 Ax xx xx (polyphonic pressure) > + * 23 Bx xx xx (control change) > + */ > +static void snd_usbmidi_akai_input(struct snd_usb_midi_in_endpoint *ep, > + uint8_t *buffer, int buffer_length) > +{ > + unsigned int pos = 0; > + while (pos < (unsigned)buffer_length && (buffer[pos] & 0xF8) == 0x20) > + { > + int msg_len = buffer[pos] & 0x0f; > + snd_usbmidi_input_data(ep, 0, &buffer[pos + 1], msg_len); > + pos += 1 + msg_len; > + } > +} Just a minor coding style flaw here for the curly brackets. See Documentation/CodingStyle or let scripts/checkpatch.pl annoy you :) FWIW, I think the block above could also be a for-loop, but that's certainly a matter of taste. Thanks, Daniel _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel