FreeBSD kernel usb device Code
usb_template_midi.c File Reference
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/param.h>
#include <sys/queue.h>
#include <sys/types.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/bus.h>
#include <sys/module.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/condvar.h>
#include <sys/sysctl.h>
#include <sys/sx.h>
#include <sys/unistd.h>
#include <sys/callout.h>
#include <sys/malloc.h>
#include <sys/priv.h>
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usb_core.h>
#include <dev/usb/usb_ioctl.h>
#include <dev/usb/usb_util.h>
#include <dev/usb/template/usb_template.h>
Include dependency graph for usb_template_midi.c:

Go to the source code of this file.

Macros

#define MIDI_DEFAULT_VENDOR_ID   USB_TEMPLATE_VENDOR
 
#define MIDI_DEFAULT_PRODUCT_ID   0x27de
 
#define MIDI_DEFAULT_INTERFACE   "MIDI interface"
 
#define MIDI_DEFAULT_MANUFACTURER   USB_TEMPLATE_MANUFACTURER
 
#define MIDI_DEFAULT_PRODUCT   "MIDI Test Device"
 
#define MIDI_DEFAULT_SERIAL_NUMBER   "March 2008"
 

Enumerations

enum  {
  MIDI_LANG_INDEX , MIDI_INTERFACE_INDEX , MIDI_MANUFACTURER_INDEX , MIDI_PRODUCT_INDEX ,
  MIDI_SERIAL_NUMBER_INDEX , MIDI_MAX_INDEX
}
 

Functions

static const void * midi_get_string_desc (uint16_t lang_id, uint8_t string_index)
 
static void midi_init (void *arg __unused)
 
static void midi_uninit (void *arg __unused)
 
 SYSINIT (midi_init, SI_SUB_LOCK, SI_ORDER_FIRST, midi_init, NULL)
 
 SYSUNINIT (midi_uninit, SI_SUB_LOCK, SI_ORDER_FIRST, midi_uninit, NULL)
 

Variables

static struct usb_string_descriptor midi_interface
 
static struct usb_string_descriptor midi_manufacturer
 
static struct usb_string_descriptor midi_product
 
static struct usb_string_descriptor midi_serial_number
 
static struct sysctl_ctx_list midi_ctx_list
 
static const uint8_t midi_desc_raw_0 [9]
 
static const void * midi_descs_0 []
 
static const struct usb_temp_interface_desc midi_iface_0
 
static const struct usb_temp_packet_size midi_mps
 
static const uint8_t midi_desc_raw_7 [5]
 
static const void * midi_descs_2 []
 
static const struct usb_temp_endpoint_desc midi_bulk_out_ep
 
static const uint8_t midi_desc_raw_6 [5]
 
static const void * midi_descs_3 []
 
static const struct usb_temp_endpoint_desc midi_bulk_in_ep
 
static const struct usb_temp_endpoint_descmidi_iface_1_ep []
 
static const uint8_t midi_desc_raw_1 [7]
 
static const uint8_t midi_desc_raw_2 [6]
 
static const uint8_t midi_desc_raw_3 [6]
 
static const uint8_t midi_desc_raw_4 [9]
 
static const uint8_t midi_desc_raw_5 [9]
 
static const void * midi_descs_1 []
 
static const struct usb_temp_interface_desc midi_iface_1
 
static const struct usb_temp_interface_descmidi_interfaces []
 
static const struct usb_temp_config_desc midi_config_desc
 
static const struct usb_temp_config_descmidi_configs []
 
static usb_temp_get_string_desc_t midi_get_string_desc
 
struct usb_temp_device_desc usb_template_midi
 

Macro Definition Documentation

◆ MIDI_DEFAULT_INTERFACE

#define MIDI_DEFAULT_INTERFACE   "MIDI interface"

Definition at line 80 of file usb_template_midi.c.

◆ MIDI_DEFAULT_MANUFACTURER

#define MIDI_DEFAULT_MANUFACTURER   USB_TEMPLATE_MANUFACTURER

Definition at line 81 of file usb_template_midi.c.

◆ MIDI_DEFAULT_PRODUCT

#define MIDI_DEFAULT_PRODUCT   "MIDI Test Device"

Definition at line 82 of file usb_template_midi.c.

◆ MIDI_DEFAULT_PRODUCT_ID

#define MIDI_DEFAULT_PRODUCT_ID   0x27de

Definition at line 79 of file usb_template_midi.c.

◆ MIDI_DEFAULT_SERIAL_NUMBER

#define MIDI_DEFAULT_SERIAL_NUMBER   "March 2008"

Definition at line 83 of file usb_template_midi.c.

◆ MIDI_DEFAULT_VENDOR_ID

#define MIDI_DEFAULT_VENDOR_ID   USB_TEMPLATE_VENDOR

Definition at line 78 of file usb_template_midi.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
MIDI_LANG_INDEX 
MIDI_INTERFACE_INDEX 
MIDI_MANUFACTURER_INDEX 
MIDI_PRODUCT_INDEX 
MIDI_SERIAL_NUMBER_INDEX 
MIDI_MAX_INDEX 

Definition at line 69 of file usb_template_midi.c.

Function Documentation

◆ midi_get_string_desc()

static const void * midi_get_string_desc ( uint16_t  lang_id,
uint8_t  string_index 
)
static

◆ midi_init()

◆ midi_uninit()

static void midi_uninit ( void *arg  __unused)
static

Definition at line 307 of file usb_template_midi.c.

References midi_ctx_list.

◆ SYSINIT()

SYSINIT ( midi_init  ,
SI_SUB_LOCK  ,
SI_ORDER_FIRST  ,
midi_init  ,
NULL   
)

◆ SYSUNINIT()

SYSUNINIT ( midi_uninit  ,
SI_SUB_LOCK  ,
SI_ORDER_FIRST  ,
midi_uninit  ,
NULL   
)

Variable Documentation

◆ midi_bulk_in_ep

const struct usb_temp_endpoint_desc midi_bulk_in_ep
static
Initial value:
= {
.ppRawDesc = midi_descs_3,
.pPacketSize = &midi_mps,
.bEndpointAddress = UE_DIR_IN,
.bmAttributes = UE_BULK,
}
#define UE_BULK
Definition: usb.h:543
#define UE_DIR_IN
Definition: usb.h:531
static const struct usb_temp_packet_size midi_mps
static const void * midi_descs_3[]

Definition at line 143 of file usb_template_midi.c.

◆ midi_bulk_out_ep

const struct usb_temp_endpoint_desc midi_bulk_out_ep
static
Initial value:
= {
.ppRawDesc = midi_descs_2,
.pPacketSize = &midi_mps,
.bEndpointAddress = UE_DIR_OUT,
.bmAttributes = UE_BULK,
}
#define UE_DIR_OUT
Definition: usb.h:532
static const void * midi_descs_2[]

Definition at line 127 of file usb_template_midi.c.

◆ midi_config_desc

const struct usb_temp_config_desc midi_config_desc
static
Initial value:
= {
.ppIfaceDesc = midi_interfaces,
.bmAttributes = 0,
.bMaxPower = 0,
.iConfiguration = MIDI_PRODUCT_INDEX,
}
static const struct usb_temp_interface_desc * midi_interfaces[]
@ MIDI_PRODUCT_INDEX

Definition at line 200 of file usb_template_midi.c.

◆ midi_configs

const struct usb_temp_config_desc* midi_configs[]
static
Initial value:
= {
NULL,
}
static const struct usb_temp_config_desc midi_config_desc

Definition at line 207 of file usb_template_midi.c.

◆ midi_ctx_list

struct sysctl_ctx_list midi_ctx_list
static

Definition at line 90 of file usb_template_midi.c.

Referenced by midi_init(), and midi_uninit().

◆ midi_desc_raw_0

const uint8_t midi_desc_raw_0[9]
static
Initial value:
= {
0x09, 0x24, 0x01, 0x00, 0x01, 0x09, 0x00, 0x01, 0x01
}

Definition at line 94 of file usb_template_midi.c.

◆ midi_desc_raw_1

const uint8_t midi_desc_raw_1[7]
static
Initial value:
= {
0x07, 0x24, 0x01, 0x00, 0x01, 0x41, 0x00
}

Definition at line 156 of file usb_template_midi.c.

◆ midi_desc_raw_2

const uint8_t midi_desc_raw_2[6]
static
Initial value:
= {
0x06, 0x24, 0x02, 0x01, 0x01, 0x00
}

Definition at line 160 of file usb_template_midi.c.

◆ midi_desc_raw_3

const uint8_t midi_desc_raw_3[6]
static
Initial value:
= {
0x06, 0x24, 0x02, 0x02, 0x02, 0x00
}

Definition at line 164 of file usb_template_midi.c.

◆ midi_desc_raw_4

const uint8_t midi_desc_raw_4[9]
static
Initial value:
= {
0x09, 0x24, 0x03, 0x01, 0x03, 0x01, 0x02, 0x01, 0x00
}

Definition at line 168 of file usb_template_midi.c.

◆ midi_desc_raw_5

const uint8_t midi_desc_raw_5[9]
static
Initial value:
= {
0x09, 0x24, 0x03, 0x02, 0x04, 0x01, 0x01, 0x01, 0x00
}

Definition at line 172 of file usb_template_midi.c.

◆ midi_desc_raw_6

const uint8_t midi_desc_raw_6[5]
static
Initial value:
= {
0x05, 0x25, 0x01, 0x01, 0x03,
}

Definition at line 134 of file usb_template_midi.c.

◆ midi_desc_raw_7

const uint8_t midi_desc_raw_7[5]
static
Initial value:
= {
0x05, 0x25, 0x01, 0x01, 0x01
}

Definition at line 118 of file usb_template_midi.c.

◆ midi_descs_0

const void* midi_descs_0[]
static
Initial value:
= {
NULL
}
static const uint8_t midi_desc_raw_0[9]

Definition at line 98 of file usb_template_midi.c.

◆ midi_descs_1

const void* midi_descs_1[]
static
Initial value:
= {
NULL
}
static const uint8_t midi_desc_raw_5[9]
static const uint8_t midi_desc_raw_3[6]
static const uint8_t midi_desc_raw_1[7]
static const uint8_t midi_desc_raw_2[6]
static const uint8_t midi_desc_raw_4[9]

Definition at line 176 of file usb_template_midi.c.

◆ midi_descs_2

const void* midi_descs_2[]
static
Initial value:
= {
NULL
}
static const uint8_t midi_desc_raw_7[5]

Definition at line 122 of file usb_template_midi.c.

◆ midi_descs_3

const void* midi_descs_3[]
static
Initial value:
= {
NULL
}
static const uint8_t midi_desc_raw_6[5]

Definition at line 138 of file usb_template_midi.c.

◆ midi_get_string_desc

usb_temp_get_string_desc_t midi_get_string_desc
static

Definition at line 212 of file usb_template_midi.c.

◆ midi_iface_0

const struct usb_temp_interface_desc midi_iface_0
static
Initial value:
= {
.ppEndpoints = NULL,
.ppRawDesc = midi_descs_0,
.bInterfaceClass = UICLASS_AUDIO,
.bInterfaceSubClass = UISUBCLASS_AUDIOCONTROL,
.bInterfaceProtocol = 0,
.iInterface = MIDI_INTERFACE_INDEX,
}
#define UICLASS_AUDIO
Definition: usb.h:429
#define UISUBCLASS_AUDIOCONTROL
Definition: usb.h:430
@ MIDI_INTERFACE_INDEX
static const void * midi_descs_0[]

Definition at line 103 of file usb_template_midi.c.

◆ midi_iface_1

const struct usb_temp_interface_desc midi_iface_1
static
Initial value:
= {
.ppRawDesc = midi_descs_1,
.ppEndpoints = midi_iface_1_ep,
.bInterfaceClass = UICLASS_AUDIO,
.bInterfaceSubClass = UISUBCLASS_MIDISTREAM,
.bInterfaceProtocol = 0,
.iInterface = MIDI_INTERFACE_INDEX,
}
#define UISUBCLASS_MIDISTREAM
Definition: usb.h:432
static const struct usb_temp_endpoint_desc * midi_iface_1_ep[]
static const void * midi_descs_1[]

Definition at line 185 of file usb_template_midi.c.

◆ midi_iface_1_ep

const struct usb_temp_endpoint_desc* midi_iface_1_ep[]
static
Initial value:
= {
NULL,
}
static const struct usb_temp_endpoint_desc midi_bulk_out_ep
static const struct usb_temp_endpoint_desc midi_bulk_in_ep

Definition at line 150 of file usb_template_midi.c.

◆ midi_interface

struct usb_string_descriptor midi_interface
static

Definition at line 85 of file usb_template_midi.c.

Referenced by midi_get_string_desc(), and midi_init().

◆ midi_interfaces

const struct usb_temp_interface_desc* midi_interfaces[]
static
Initial value:
= {
NULL,
}
static const struct usb_temp_interface_desc midi_iface_1
static const struct usb_temp_interface_desc midi_iface_0

Definition at line 194 of file usb_template_midi.c.

◆ midi_manufacturer

struct usb_string_descriptor midi_manufacturer
static

Definition at line 86 of file usb_template_midi.c.

Referenced by midi_get_string_desc(), and midi_init().

◆ midi_mps

const struct usb_temp_packet_size midi_mps
static
Initial value:
= {
.mps[USB_SPEED_LOW] = 8,
.mps[USB_SPEED_FULL] = 64,
.mps[USB_SPEED_HIGH] = 512,
}
@ USB_SPEED_LOW
Definition: usb.h:753
@ USB_SPEED_FULL
Definition: usb.h:754
@ USB_SPEED_HIGH
Definition: usb.h:755

Definition at line 112 of file usb_template_midi.c.

◆ midi_product

struct usb_string_descriptor midi_product
static

Definition at line 87 of file usb_template_midi.c.

Referenced by midi_get_string_desc(), and midi_init().

◆ midi_serial_number

struct usb_string_descriptor midi_serial_number
static

Definition at line 88 of file usb_template_midi.c.

Referenced by midi_get_string_desc(), and midi_init().

◆ usb_template_midi

struct usb_temp_device_desc usb_template_midi
Initial value:
= {
.getStringDesc = &midi_get_string_desc,
.ppConfigDesc = midi_configs,
.bcdDevice = 0x0100,
.bDeviceClass = 0,
.bDeviceSubClass = 0,
.bDeviceProtocol = 0,
.iManufacturer = MIDI_MANUFACTURER_INDEX,
.iProduct = MIDI_PRODUCT_INDEX,
.iSerialNumber = MIDI_SERIAL_NUMBER_INDEX,
}
static const struct usb_temp_config_desc * midi_configs[]
#define MIDI_DEFAULT_VENDOR_ID
static usb_temp_get_string_desc_t midi_get_string_desc
#define MIDI_DEFAULT_PRODUCT_ID
@ MIDI_MANUFACTURER_INDEX
@ MIDI_SERIAL_NUMBER_INDEX

Definition at line 214 of file usb_template_midi.c.

Referenced by midi_init(), and usb_temp_setup_by_index().