linux/drivers/staging/line6/midi.h
<<
>>
Prefs
   1/*
   2 * Line6 Linux USB driver - 0.9.1beta
   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
  21struct snd_line6_midi {
  22        /**
  23                 Pointer back to the Line6 driver data structure.
  24        */
  25        struct usb_line6 *line6;
  26
  27        /**
  28                 MIDI substream for receiving (or NULL if not active).
  29        */
  30        struct snd_rawmidi_substream *substream_receive;
  31
  32        /**
  33                 MIDI substream for transmitting (or NULL if not active).
  34        */
  35        struct snd_rawmidi_substream *substream_transmit;
  36
  37        /**
  38                 Number of currently active MIDI send URBs.
  39        */
  40        int num_active_send_urbs;
  41
  42        /**
  43                 Spin lock to protect updates of send_urb.
  44        */
  45        spinlock_t send_urb_lock;
  46
  47        /**
  48                 Spin lock to protect MIDI buffer handling.
  49        */
  50        spinlock_t midi_transmit_lock;
  51
  52        /**
  53                 Wait queue for MIDI transmission.
  54        */
  55        wait_queue_head_t send_wait;
  56
  57        /**
  58                 Bit mask for output MIDI channels.
  59        */
  60        int midi_mask_transmit;
  61
  62        /**
  63                 Bit mask for input MIDI channels.
  64        */
  65        int midi_mask_receive;
  66
  67        /**
  68                 Buffer for incoming MIDI stream.
  69        */
  70        struct MidiBuffer midibuf_in;
  71
  72        /**
  73                 Buffer for outgoing MIDI stream.
  74        */
  75        struct MidiBuffer midibuf_out;
  76};
  77
  78extern int line6_init_midi(struct usb_line6 *line6);
  79extern void line6_midi_receive(struct usb_line6 *line6, unsigned char *data,
  80                               int length);
  81
  82#endif
  83