1 /* 2 * Line 6 Linux USB driver 3 * 4 * Copyright (C) 2004-2010 Markus Grabner (grabner@icg.tugraz.at) 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License as 8 * published by the Free Software Foundation, version 2. 9 * 10 */ 11 12 #ifndef MIDI_H 13 #define MIDI_H 14 15 #include <sound/rawmidi.h> 16 17 #include "midibuf.h" 18 19 #define MIDI_BUFFER_SIZE 1024 20 21 struct snd_line6_midi { 22 /* Pointer back to the Line 6 driver data structure */ 23 struct usb_line6 *line6; 24 25 /* MIDI substream for receiving (or NULL if not active) */ 26 struct snd_rawmidi_substream *substream_receive; 27 28 /* MIDI substream for transmitting (or NULL if not active) */ 29 struct snd_rawmidi_substream *substream_transmit; 30 31 /* Number of currently active MIDI send URBs */ 32 int num_active_send_urbs; 33 34 /* Spin lock to protect MIDI buffer handling */ 35 spinlock_t lock; 36 37 /* Wait queue for MIDI transmission */ 38 wait_queue_head_t send_wait; 39 40 /* Buffer for incoming MIDI stream */ 41 struct midi_buffer midibuf_in; 42 43 /* Buffer for outgoing MIDI stream */ 44 struct midi_buffer midibuf_out; 45 }; 46 47 extern int line6_init_midi(struct usb_line6 *line6); 48 extern void line6_midi_receive(struct usb_line6 *line6, unsigned char *data, 49 int length); 50 51 #endif 52