root/include/uapi/linux/usb/midi.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
   2 /*
   3  * <linux/usb/midi.h> -- USB MIDI definitions.
   4  *
   5  * Copyright (C) 2006 Thumtronics Pty Ltd.
   6  * Developed for Thumtronics by Grey Innovation
   7  * Ben Williamson <ben.williamson@greyinnovation.com>
   8  *
   9  * This software is distributed under the terms of the GNU General Public
  10  * License ("GPL") version 2, as published by the Free Software Foundation.
  11  *
  12  * This file holds USB constants and structures defined
  13  * by the USB Device Class Definition for MIDI Devices.
  14  * Comments below reference relevant sections of that document:
  15  *
  16  * http://www.usb.org/developers/devclass_docs/midi10.pdf
  17  */
  18 
  19 #ifndef __LINUX_USB_MIDI_H
  20 #define __LINUX_USB_MIDI_H
  21 
  22 #include <linux/types.h>
  23 
  24 /* A.1  MS Class-Specific Interface Descriptor Subtypes */
  25 #define USB_MS_HEADER           0x01
  26 #define USB_MS_MIDI_IN_JACK     0x02
  27 #define USB_MS_MIDI_OUT_JACK    0x03
  28 #define USB_MS_ELEMENT          0x04
  29 
  30 /* A.2  MS Class-Specific Endpoint Descriptor Subtypes */
  31 #define USB_MS_GENERAL          0x01
  32 
  33 /* A.3  MS MIDI IN and OUT Jack Types */
  34 #define USB_MS_EMBEDDED         0x01
  35 #define USB_MS_EXTERNAL         0x02
  36 
  37 /* 6.1.2.1  Class-Specific MS Interface Header Descriptor */
  38 struct usb_ms_header_descriptor {
  39         __u8  bLength;
  40         __u8  bDescriptorType;
  41         __u8  bDescriptorSubtype;
  42         __le16 bcdMSC;
  43         __le16 wTotalLength;
  44 } __attribute__ ((packed));
  45 
  46 #define USB_DT_MS_HEADER_SIZE   7
  47 
  48 /* 6.1.2.2  MIDI IN Jack Descriptor */
  49 struct usb_midi_in_jack_descriptor {
  50         __u8  bLength;
  51         __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
  52         __u8  bDescriptorSubtype;       /* USB_MS_MIDI_IN_JACK */
  53         __u8  bJackType;                /* USB_MS_EMBEDDED/EXTERNAL */
  54         __u8  bJackID;
  55         __u8  iJack;
  56 } __attribute__ ((packed));
  57 
  58 #define USB_DT_MIDI_IN_SIZE     6
  59 
  60 struct usb_midi_source_pin {
  61         __u8  baSourceID;
  62         __u8  baSourcePin;
  63 } __attribute__ ((packed));
  64 
  65 /* 6.1.2.3  MIDI OUT Jack Descriptor */
  66 struct usb_midi_out_jack_descriptor {
  67         __u8  bLength;
  68         __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
  69         __u8  bDescriptorSubtype;       /* USB_MS_MIDI_OUT_JACK */
  70         __u8  bJackType;                /* USB_MS_EMBEDDED/EXTERNAL */
  71         __u8  bJackID;
  72         __u8  bNrInputPins;             /* p */
  73         struct usb_midi_source_pin pins[]; /* [p] */
  74         /*__u8  iJack;  -- omitted due to variable-sized pins[] */
  75 } __attribute__ ((packed));
  76 
  77 #define USB_DT_MIDI_OUT_SIZE(p) (7 + 2 * (p))
  78 
  79 /* As above, but more useful for defining your own descriptors: */
  80 #define DECLARE_USB_MIDI_OUT_JACK_DESCRIPTOR(p)                 \
  81 struct usb_midi_out_jack_descriptor_##p {                       \
  82         __u8  bLength;                                          \
  83         __u8  bDescriptorType;                                  \
  84         __u8  bDescriptorSubtype;                               \
  85         __u8  bJackType;                                        \
  86         __u8  bJackID;                                          \
  87         __u8  bNrInputPins;                                     \
  88         struct usb_midi_source_pin pins[p];                     \
  89         __u8  iJack;                                            \
  90 } __attribute__ ((packed))
  91 
  92 /* 6.2.2  Class-Specific MS Bulk Data Endpoint Descriptor */
  93 struct usb_ms_endpoint_descriptor {
  94         __u8  bLength;                  /* 4+n */
  95         __u8  bDescriptorType;          /* USB_DT_CS_ENDPOINT */
  96         __u8  bDescriptorSubtype;       /* USB_MS_GENERAL */
  97         __u8  bNumEmbMIDIJack;          /* n */
  98         __u8  baAssocJackID[];          /* [n] */
  99 } __attribute__ ((packed));
 100 
 101 #define USB_DT_MS_ENDPOINT_SIZE(n)      (4 + (n))
 102 
 103 /* As above, but more useful for defining your own descriptors: */
 104 #define DECLARE_USB_MS_ENDPOINT_DESCRIPTOR(n)                   \
 105 struct usb_ms_endpoint_descriptor_##n {                         \
 106         __u8  bLength;                                          \
 107         __u8  bDescriptorType;                                  \
 108         __u8  bDescriptorSubtype;                               \
 109         __u8  bNumEmbMIDIJack;                                  \
 110         __u8  baAssocJackID[n];                                 \
 111 } __attribute__ ((packed))
 112 
 113 #endif /* __LINUX_USB_MIDI_H */

/* [<][>][^][v][top][bottom][index][help] */