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>
81#define AUDIO_DEFAULT_VENDOR_ID USB_TEMPLATE_VENDOR
82#define AUDIO_DEFAULT_PRODUCT_ID 0x27e0
83#define AUDIO_DEFAULT_MIXER "Mixer interface"
84#define AUDIO_DEFAULT_RECORD "Record interface"
85#define AUDIO_DEFAULT_PLAYBACK "Playback interface"
86#define AUDIO_DEFAULT_MANUFACTURER USB_TEMPLATE_MANUFACTURER
87#define AUDIO_DEFAULT_PRODUCT "Audio Test Device"
88#define AUDIO_DEFAULT_SERIAL_NUMBER "March 2008"
109 0x0a, 0x24, 0x01, 0x00, 0x01, 0xa9, 0x00, 0x02,
114 0x0c, 0x24, 0x02, 0x01, 0x01, 0x01, 0x00, 0x02,
115 0x03, 0x00, 0x00, 0x00
119 0x0c, 0x24, 0x02, 0x02, 0x01, 0x02, 0x00, 0x02,
120 0x03, 0x00, 0x00, 0x00
124 0x0c, 0x24, 0x02, 0x03, 0x03, 0x06, 0x00, 0x02,
125 0x03, 0x00, 0x00, 0x00
129 0x0c, 0x24, 0x02, 0x04, 0x05, 0x06, 0x00, 0x02,
130 0x03, 0x00, 0x00, 0x00
134 0x09, 0x24, 0x03, 0x05, 0x05, 0x06, 0x00, 0x01,
139 0x09, 0x24, 0x03, 0x06, 0x01, 0x03, 0x00, 0x09,
144 0x09, 0x24, 0x03, 0x07, 0x01, 0x01, 0x00, 0x08,
149 0x09, 0x24, 0x05, 0x08, 0x03, 0x0a, 0x0b, 0x0c,
154 0x0a, 0x24, 0x06, 0x09, 0x0f, 0x01, 0x01, 0x02,
159 0x0a, 0x24, 0x06, 0x0a, 0x02, 0x01, 0x43, 0x00,
164 0x0a, 0x24, 0x06, 0x0b, 0x03, 0x01, 0x01, 0x02,
169 0x0a, 0x24, 0x06, 0x0c, 0x04, 0x01, 0x01, 0x00,
174 0x0a, 0x24, 0x06, 0x0d, 0x02, 0x01, 0x03, 0x00,
179 0x0a, 0x24, 0x06, 0x0e, 0x03, 0x01, 0x01, 0x02,
184 0x0f, 0x24, 0x04, 0x0f, 0x03, 0x01, 0x0d, 0x0e,
185 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
213 .bInterfaceProtocol = 0,
218 0x07, 0x24, 0x01, 0x01, 0x03, 0x01, 0x00
223 0x0b, 0x24, 0x02, 0x01, 0x02, 0x02, 0x10, 0x01,
229 0x07, 0x25, 0x01, 0x00, 0x01, 0x04, 0x00
271 .bInterfaceProtocol = 0,
280 .bInterfaceProtocol = 0,
286 0x07, 0x24, 0x01, 0x07, 0x01, 0x01, 0x00
291 0x0b, 0x24, 0x02, 0x01, 0x02, 0x02, 0x10, 0x01,
297 0x07, 0x25, 0x01, 0x01, 0x00, 0x00, 0x00
329 .bInterfaceProtocol = 0,
338 .bInterfaceProtocol = 0,
373 .bDeviceSubClass = 0,
374 .bDeviceProtocol = 0,
400 if (string_index == 0) {
403 if (lang_id != 0x0409) {
407 return (ptr[string_index]);
415 struct sysctl_oid *parent;
435 SYSCTL_STATIC_CHILDREN(_hw_usb_templates), OID_AUTO,
436 parent_name, CTLFLAG_RW | CTLFLAG_MPSAFE,
437 0,
"USB Audio Interface device side template");
438 SYSCTL_ADD_U16(&
audio_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
440 1,
"Vendor identifier");
441 SYSCTL_ADD_U16(&
audio_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
443 1,
"Product identifier");
445 SYSCTL_ADD_PROC(&
audio_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
446 "mixer", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
448 "A",
"Mixer interface string");
449 SYSCTL_ADD_PROC(&
audio_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
450 "record", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
452 "A",
"Record interface string");
453 SYSCTL_ADD_PROC(&
audio_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
454 "playback", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
456 "A",
"Playback interface string");
458 SYSCTL_ADD_PROC(&
audio_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
459 "manufacturer", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
461 "A",
"Manufacturer string");
462 SYSCTL_ADD_PROC(&
audio_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
463 "product", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
465 "A",
"Product string");
466 SYSCTL_ADD_PROC(&
audio_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
467 "serial_number", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
469 "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
uint8_t bInterval[USB_SPEED_MAX]
uint16_t mps[USB_SPEED_MAX]
#define UISUBCLASS_AUDIOSTREAM
#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 const uint8_t audio_raw_desc_6[]
static const uint8_t audio_raw_desc_4[]
static const struct usb_temp_packet_size audio_isoc_mps
static const struct usb_temp_interface_desc audio_iface_0
#define AUDIO_DEFAULT_VENDOR_ID
#define AUDIO_DEFAULT_MANUFACTURER
#define AUDIO_DEFAULT_RECORD
SYSUNINIT(audio_uninit, SI_SUB_LOCK, SI_ORDER_FIRST, audio_uninit, NULL)
static const struct usb_temp_interface_desc audio_iface_1_alt_1
static const struct usb_temp_config_desc * audio_configs[]
static struct usb_string_descriptor audio_manufacturer
static const uint8_t audio_raw_desc_1[]
static const uint8_t audio_raw_desc_31[]
static const struct usb_temp_config_desc audio_config_desc
static const struct usb_temp_endpoint_desc audio_isoc_out_ep
static const uint8_t audio_raw_desc_10[]
#define AUDIO_DEFAULT_MIXER
static const uint8_t audio_raw_desc_5[]
struct usb_temp_device_desc usb_template_audio
static const uint8_t audio_raw_desc_32[]
static const uint8_t audio_raw_desc_2[]
static struct usb_string_descriptor audio_playback
static const struct usb_temp_interface_desc audio_iface_2_alt_1
#define AUDIO_DEFAULT_PLAYBACK
static const void * audio_raw_iface_0_desc[]
static const struct usb_temp_interface_desc audio_iface_2_alt_0
static const struct usb_temp_interface_desc * audio_interfaces[]
static const struct usb_temp_endpoint_desc * audio_iface_1_ep[]
#define AUDIO_DEFAULT_PRODUCT_ID
static void audio_init(void *arg __unused)
static const uint8_t audio_raw_desc_20[]
static const uint8_t audio_raw_desc_8[]
static const uint8_t audio_raw_desc_14[]
static void audio_uninit(void *arg __unused)
static const uint8_t audio_raw_desc_15[]
#define AUDIO_DEFAULT_PRODUCT
static const void * audio_raw_ep_1_desc[]
@ AUDIO_SERIAL_NUMBER_INDEX
@ AUDIO_MANUFACTURER_INDEX
static struct usb_string_descriptor audio_serial_number
static struct usb_string_descriptor audio_record
static struct sysctl_ctx_list audio_ctx_list
static const void * audio_raw_iface_2_desc[]
static const void * audio_raw_ep_2_desc[]
static const uint8_t audio_raw_desc_30[]
static struct usb_string_descriptor audio_mixer
static usb_temp_get_string_desc_t audio_get_string_desc
static const uint8_t audio_raw_desc_3[]
static const struct usb_temp_endpoint_desc audio_isoc_in_ep
static const struct usb_temp_endpoint_desc * audio_iface_2_ep[]
SYSINIT(audio_init, SI_SUB_LOCK, SI_ORDER_FIRST, audio_init, NULL)
static const uint8_t audio_raw_desc_12[]
static const uint8_t audio_raw_desc_21[]
#define AUDIO_DEFAULT_SERIAL_NUMBER
static const void * audio_raw_iface_1_desc[]
static const uint8_t audio_raw_desc_7[]
static const uint8_t audio_raw_desc_9[]
static const struct usb_temp_interface_desc audio_iface_1_alt_0
static const uint8_t audio_raw_desc_11[]
static const uint8_t audio_raw_desc_0[]
static const uint8_t audio_raw_desc_22[]
static struct usb_string_descriptor audio_product
static const struct usb_temp_interval audio_isoc_interval
static const uint8_t audio_raw_desc_13[]
uint8_t usb_make_str_desc(void *ptr, uint16_t max_len, const char *s)