161864d84STakashi Iwai /* 2c078a4aaSChris Rorvick * Line 6 Linux USB driver 361864d84STakashi Iwai * 461864d84STakashi Iwai * Copyright (C) 2004-2010 Markus Grabner (grabner@icg.tugraz.at) 561864d84STakashi Iwai * 661864d84STakashi Iwai * This program is free software; you can redistribute it and/or 761864d84STakashi Iwai * modify it under the terms of the GNU General Public License as 861864d84STakashi Iwai * published by the Free Software Foundation, version 2. 961864d84STakashi Iwai * 1061864d84STakashi Iwai */ 1161864d84STakashi Iwai 1261864d84STakashi Iwai #ifndef MIDI_H 1361864d84STakashi Iwai #define MIDI_H 1461864d84STakashi Iwai 1561864d84STakashi Iwai #include <sound/rawmidi.h> 1661864d84STakashi Iwai 1761864d84STakashi Iwai #include "midibuf.h" 1861864d84STakashi Iwai 1961864d84STakashi Iwai #define MIDI_BUFFER_SIZE 1024 2061864d84STakashi Iwai 2161864d84STakashi Iwai struct snd_line6_midi { 22*cddbd4f1STakashi Iwai /* Pointer back to the Line 6 driver data structure */ 2361864d84STakashi Iwai struct usb_line6 *line6; 2461864d84STakashi Iwai 25*cddbd4f1STakashi Iwai /* MIDI substream for receiving (or NULL if not active) */ 2661864d84STakashi Iwai struct snd_rawmidi_substream *substream_receive; 2761864d84STakashi Iwai 28*cddbd4f1STakashi Iwai /* MIDI substream for transmitting (or NULL if not active) */ 2961864d84STakashi Iwai struct snd_rawmidi_substream *substream_transmit; 3061864d84STakashi Iwai 31*cddbd4f1STakashi Iwai /* Number of currently active MIDI send URBs */ 3261864d84STakashi Iwai int num_active_send_urbs; 3361864d84STakashi Iwai 34*cddbd4f1STakashi Iwai /* Spin lock to protect MIDI buffer handling */ 35bc518ba4STakashi Iwai spinlock_t lock; 3661864d84STakashi Iwai 37*cddbd4f1STakashi Iwai /* Wait queue for MIDI transmission */ 3861864d84STakashi Iwai wait_queue_head_t send_wait; 3961864d84STakashi Iwai 40*cddbd4f1STakashi Iwai /* Buffer for incoming MIDI stream */ 4161864d84STakashi Iwai struct midi_buffer midibuf_in; 4261864d84STakashi Iwai 43*cddbd4f1STakashi Iwai /* Buffer for outgoing MIDI stream */ 4461864d84STakashi Iwai struct midi_buffer midibuf_out; 4561864d84STakashi Iwai }; 4661864d84STakashi Iwai 4761864d84STakashi Iwai extern int line6_init_midi(struct usb_line6 *line6); 4861864d84STakashi Iwai extern void line6_midi_receive(struct usb_line6 *line6, unsigned char *data, 4961864d84STakashi Iwai int length); 5061864d84STakashi Iwai 5161864d84STakashi Iwai #endif 52