/* * Line6 Linux USB driver - 0.8.0 * * Copyright (C) 2004-2009 Markus Grabner (grabner@icg.tugraz.at) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation, version 2. * */ #ifndef MIDI_H #define MIDI_H #include <sound/rawmidi.h> #include "midibuf.h" #define MIDI_BUFFER_SIZE 1024 struct snd_line6_midi { /** Pointer back to the Line6 driver data structure. */ struct usb_line6 *line6; /** MIDI substream for receiving (or NULL if not active). */ struct snd_rawmidi_substream *substream_receive; /** MIDI substream for transmitting (or NULL if not active). */ struct snd_rawmidi_substream *substream_transmit; /** Number of currently active MIDI send URBs. */ int num_active_send_urbs; /** Spin lock to protect updates of send_urb. */ spinlock_t send_urb_lock; /** Spin lock to protect MIDI buffer handling. */ spinlock_t midi_transmit_lock; /** Wait queue for MIDI transmission. */ wait_queue_head_t send_wait; /** Bit mask for output MIDI channels. */ int midi_mask_transmit; /** Bit mask for input MIDI channels. */ int midi_mask_receive; /** Buffer for incoming MIDI stream. */ struct MidiBuffer midibuf_in; /** Buffer for outgoing MIDI stream. */ struct MidiBuffer midibuf_out; }; extern int line6_init_midi(struct usb_line6 *line6); extern void line6_midi_receive(struct usb_line6 *line6, unsigned char *data, int length); #endif