38#ifdef USB_GLOBAL_INCLUDE_FILE
39#include USB_GLOBAL_INCLUDE_FILE
41#include <sys/stdint.h>
42#include <sys/stddef.h>
47#include <sys/kernel.h>
49#include <sys/module.h>
52#include <sys/condvar.h>
53#include <sys/sysctl.h>
55#include <sys/unistd.h>
56#include <sys/callout.h>
57#include <sys/malloc.h>
78#define MIDI_DEFAULT_VENDOR_ID USB_TEMPLATE_VENDOR
79#define MIDI_DEFAULT_PRODUCT_ID 0x27de
80#define MIDI_DEFAULT_INTERFACE "MIDI interface"
81#define MIDI_DEFAULT_MANUFACTURER USB_TEMPLATE_MANUFACTURER
82#define MIDI_DEFAULT_PRODUCT "MIDI Test Device"
83#define MIDI_DEFAULT_SERIAL_NUMBER "March 2008"
95 0x09, 0x24, 0x01, 0x00, 0x01, 0x09, 0x00, 0x01, 0x01
108 .bInterfaceProtocol = 0,
119 0x05, 0x25, 0x01, 0x01, 0x01
135 0x05, 0x25, 0x01, 0x01, 0x03,
157 0x07, 0x24, 0x01, 0x00, 0x01, 0x41, 0x00
161 0x06, 0x24, 0x02, 0x01, 0x01, 0x00
165 0x06, 0x24, 0x02, 0x02, 0x02, 0x00
169 0x09, 0x24, 0x03, 0x01, 0x03, 0x01, 0x02, 0x01, 0x00
173 0x09, 0x24, 0x03, 0x02, 0x04, 0x01, 0x01, 0x01, 0x00
190 .bInterfaceProtocol = 0,
221 .bDeviceSubClass = 0,
222 .bDeviceProtocol = 0,
246 if (string_index == 0) {
249 if (lang_id != 0x0409) {
253 return (ptr[string_index]);
261 struct sysctl_oid *parent;
273 snprintf(parent_name,
sizeof(parent_name),
"%d",
USB_TEMP_MIDI);
277 SYSCTL_STATIC_CHILDREN(_hw_usb_templates), OID_AUTO,
278 parent_name, CTLFLAG_RW | CTLFLAG_MPSAFE,
279 0,
"USB MIDI device side template");
280 SYSCTL_ADD_U16(&
midi_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
281 "vendor_id", CTLFLAG_RWTUN,
283 SYSCTL_ADD_U16(&
midi_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
284 "product_id", CTLFLAG_RWTUN,
287 SYSCTL_ADD_PROC(&
midi_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
288 "interface", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
290 "A",
"Interface string");
292 SYSCTL_ADD_PROC(&
midi_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
293 "manufacturer", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
295 "A",
"Manufacturer string");
296 SYSCTL_ADD_PROC(&
midi_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
297 "product", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
299 "A",
"Product string");
300 SYSCTL_ADD_PROC(&
midi_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
301 "serial_number", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
303 "A",
"Serial number string");
const struct usb_temp_interface_desc ** ppIfaceDesc
usb_temp_get_string_desc_t * getStringDesc
const struct usb_temp_endpoint_desc ** ppEndpoints
uint16_t mps[USB_SPEED_MAX]
#define UISUBCLASS_MIDISTREAM
#define UISUBCLASS_AUDIOCONTROL
const struct usb_string_lang usb_string_lang_en
int usb_temp_sysctl(SYSCTL_HANDLER_ARGS)
const void *() usb_temp_get_string_desc_t(uint16_t lang_id, uint8_t string_index)
static void midi_init(void *arg __unused)
static const struct usb_temp_config_desc * midi_configs[]
static const struct usb_temp_endpoint_desc * midi_iface_1_ep[]
static const uint8_t midi_desc_raw_6[5]
static struct usb_string_descriptor midi_manufacturer
static const uint8_t midi_desc_raw_5[9]
static const struct usb_temp_packet_size midi_mps
static const uint8_t midi_desc_raw_3[6]
#define MIDI_DEFAULT_PRODUCT
static const void * midi_descs_3[]
static const struct usb_temp_config_desc midi_config_desc
static struct sysctl_ctx_list midi_ctx_list
static const uint8_t midi_desc_raw_0[9]
static const void * midi_descs_1[]
static struct usb_string_descriptor midi_serial_number
static const struct usb_temp_interface_desc * midi_interfaces[]
static struct usb_string_descriptor midi_product
#define MIDI_DEFAULT_VENDOR_ID
static usb_temp_get_string_desc_t midi_get_string_desc
static const void * midi_descs_2[]
#define MIDI_DEFAULT_MANUFACTURER
#define MIDI_DEFAULT_INTERFACE
#define MIDI_DEFAULT_SERIAL_NUMBER
static const uint8_t midi_desc_raw_7[5]
static const struct usb_temp_interface_desc midi_iface_1
#define MIDI_DEFAULT_PRODUCT_ID
SYSINIT(midi_init, SI_SUB_LOCK, SI_ORDER_FIRST, midi_init, NULL)
static const uint8_t midi_desc_raw_1[7]
static struct usb_string_descriptor midi_interface
@ MIDI_MANUFACTURER_INDEX
@ MIDI_SERIAL_NUMBER_INDEX
static void midi_uninit(void *arg __unused)
static const uint8_t midi_desc_raw_2[6]
SYSUNINIT(midi_uninit, SI_SUB_LOCK, SI_ORDER_FIRST, midi_uninit, NULL)
static const struct usb_temp_endpoint_desc midi_bulk_out_ep
struct usb_temp_device_desc usb_template_midi
static const void * midi_descs_0[]
static const struct usb_temp_endpoint_desc midi_bulk_in_ep
static const uint8_t midi_desc_raw_4[9]
static const struct usb_temp_interface_desc midi_iface_0
uint8_t usb_make_str_desc(void *ptr, uint16_t max_len, const char *s)