linux/include/uapi/linux/usb/midi.h
<<
>>
Prefs
   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 */
  38struct 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 */
  49struct 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
  60struct usb_midi_source_pin {
  61        __u8  baSourceID;
  62        __u8  baSourcePin;
  63} __attribute__ ((packed));
  64
  65/* 6.1.2.3  MIDI OUT Jack Descriptor */
  66struct 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)                 \
  81struct 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 */
  93struct 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)                   \
 105struct 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 */
 114