linux-headers (unknown)

(root)/
include/
linux/
usb/
midi.h
       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 */