midi.h 1.4 KB
Newer Older
M
Markus Grabner 已提交
1
/*
2
 * Line 6 Linux USB driver
M
Markus Grabner 已提交
3
 *
4
 * Copyright (C) 2004-2010 Markus Grabner (grabner@icg.tugraz.at)
M
Markus Grabner 已提交
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
 *
 *	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

21
struct snd_line6_midi {
M
Markus Grabner 已提交
22
	/**
23
		 Pointer back to the Line 6 driver data structure.
M
Markus Grabner 已提交
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
	*/
	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;

	/**
		 Buffer for incoming MIDI stream.
	*/
60
	struct midi_buffer midibuf_in;
M
Markus Grabner 已提交
61 62 63 64

	/**
		 Buffer for outgoing MIDI stream.
	*/
65
	struct midi_buffer midibuf_out;
M
Markus Grabner 已提交
66 67 68
};

extern int line6_init_midi(struct usb_line6 *line6);
69 70
extern void line6_midi_receive(struct usb_line6 *line6, unsigned char *data,
			       int length);
M
Markus Grabner 已提交
71 72

#endif