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>
82#define PHONE_DEFAULT_VENDOR_ID USB_TEMPLATE_VENDOR
83#define PHONE_DEFAULT_PRODUCT_ID 0x05dc
84#define PHONE_DEFAULT_MIXER "Mixer interface"
85#define PHONE_DEFAULT_RECORD "Record interface"
86#define PHONE_DEFAULT_PLAYBACK "Playback interface"
87#define PHONE_DEFAULT_HID "HID interface"
88#define PHONE_DEFAULT_MANUFACTURER USB_TEMPLATE_MANUFACTURER
89#define PHONE_DEFAULT_PRODUCT "USB Phone Device"
90#define PHONE_DEFAULT_SERIAL_NUMBER "March 2008"
111 0x05, 0x0b, 0x09, 0x01, 0xa1, 0x01, 0x05, 0x09,
112 0x19, 0x01, 0x29, 0x3f, 0x15, 0x00, 0x25, 0x01,
113 0x75, 0x01, 0x95, 0x80, 0x81, 0x00, 0x05, 0x08,
114 0x19, 0x01, 0x29, 0x10, 0x15, 0x00, 0x25, 0x01,
115 0x75, 0x01, 0x95, 0x80, 0x91, 0x00, 0xc0
119 0x0a, 0x24, 0x01, 0x00, 0x01, 0x4a, 0x00, 0x02,
124 0x0c, 0x24, 0x02, 0x01, 0x01, 0x02, 0x00, 0x01,
125 0x00, 0x00, 0x00, 0x00
129 0x0c, 0x24, 0x02, 0x02, 0x01, 0x01, 0x00, 0x01,
130 0x00, 0x00, 0x00, 0x00
134 0x09, 0x24, 0x03, 0x03, 0x01, 0x03, 0x00, 0x06,
139 0x09, 0x24, 0x03, 0x04, 0x01, 0x01, 0x00, 0x05,
144 0x0b, 0x24, 0x06, 0x05, 0x01, 0x02, 0x03, 0x00,
149 0x0b, 0x24, 0x06, 0x06, 0x02, 0x02, 0x03, 0x00,
169 .bInterfaceProtocol = 0,
174 0x07, 0x24, 0x01, 0x04, 0x01, 0x01, 0x00
178 0x0b, 0x24, 0x02, 0x01, 0x01, 0x02, 0x10, 0x01,
184 0x07, 0x25, 0x01, 0x00, 0x00, 0x00, 0x00
226 .bInterfaceProtocol = 0,
235 .bInterfaceProtocol = 0,
241 0x07, 0x24, 0x01, 0x02, 0x01, 0x01, 0x00
245 0x0b, 0x24, 0x02, 0x01, 0x01, 0x02, 0x10, 0x01,
251 0x07, 0x25, 0x01, 0x00, 0x00, 0x00, 0x00
283 .bInterfaceProtocol = 0,
292 .bInterfaceProtocol = 0,
333 .bInterfaceSubClass = 0,
334 .bInterfaceProtocol = 0,
371 .bDeviceSubClass = 0,
372 .bDeviceProtocol = 0,
388 if ((
req->bmRequestType == 0x81) && (
req->bRequest == 0x06) &&
389 (
req->wValue[0] == 0x00) && (
req->wValue[1] == 0x22) &&
390 (
req->wIndex[1] == 0) && (
req->wIndex[0] == 3 )) {
418 if (string_index == 0) {
421 if (lang_id != 0x0409) {
425 return (ptr[string_index]);
433 struct sysctl_oid *parent;
455 SYSCTL_STATIC_CHILDREN(_hw_usb_templates), OID_AUTO,
456 parent_name, CTLFLAG_RW | CTLFLAG_MPSAFE,
457 0,
"USB Phone device side template");
458 SYSCTL_ADD_U16(&
phone_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
459 "vendor_id", CTLFLAG_RWTUN,
461 SYSCTL_ADD_U16(&
phone_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
462 "product_id", CTLFLAG_RWTUN,
465 SYSCTL_ADD_PROC(&
phone_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
466 "mixer", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
468 "A",
"Mixer interface string");
469 SYSCTL_ADD_PROC(&
phone_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
470 "record", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
472 "A",
"Record interface string");
473 SYSCTL_ADD_PROC(&
phone_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
474 "playback", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
476 "A",
"Playback interface string");
477 SYSCTL_ADD_PROC(&
phone_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
478 "hid", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
480 "A",
"HID interface string");
482 SYSCTL_ADD_PROC(&
phone_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
483 "manufacturer", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
485 "A",
"Manufacturer string");
486 SYSCTL_ADD_PROC(&
phone_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
487 "product", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
489 "A",
"Product string");
490 SYSCTL_ADD_PROC(&
phone_ctx_list, SYSCTL_CHILDREN(parent), OID_AUTO,
491 "serial_number", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE,
493 "A",
"Serial number string");
const struct usb_temp_interface_desc ** ppIfaceDesc
usb_temp_get_string_desc_t * getStringDesc
const struct usb_temp_packet_size * pPacketSize
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
#define UDCLASS_IN_INTERFACE
const struct usb_string_lang usb_string_lang_en
int usb_temp_sysctl(SYSCTL_HANDLER_ARGS)
const void *() usb_temp_get_vendor_desc_t(const struct usb_device_request *req, uint16_t *plen)
const void *() usb_temp_get_string_desc_t(uint16_t lang_id, uint8_t string_index)
struct usb_temp_device_desc usb_template_cdce
static const uint8_t phone_raw_desc_32[]
static const uint8_t phone_raw_desc_31[]
static const uint8_t phone_raw_desc_4[]
#define PHONE_DEFAULT_RECORD
static const struct usb_temp_interface_desc phone_iface_3
#define PHONE_DEFAULT_HID
static struct sysctl_ctx_list phone_ctx_list
static const void * phone_raw_ep_2_desc[]
static const void * phone_raw_iface_2_desc[]
static const uint8_t phone_raw_desc_30[]
static const uint8_t phone_raw_desc_21[]
static const struct usb_temp_endpoint_desc phone_isoc_out_ep
static const uint8_t phone_raw_desc_0[]
static const struct usb_temp_packet_size phone_isoc_mps
static const struct usb_temp_interface_desc phone_iface_2_alt_0
static const struct usb_temp_endpoint_desc phone_hid_in_ep
static struct usb_string_descriptor phone_playback
static const struct usb_temp_interval phone_hid_interval
static const struct usb_temp_interface_desc phone_iface_2_alt_1
static const struct usb_temp_endpoint_desc * phone_iface_3_ep[]
#define PHONE_DEFAULT_MIXER
static const void * phone_raw_ep_1_desc[]
static struct usb_string_descriptor phone_serial_number
static const void * phone_raw_iface_0_desc[]
static uint8_t phone_hid_descriptor[]
struct usb_temp_device_desc usb_template_phone
static const struct usb_temp_interface_desc * phone_interfaces[]
static const uint8_t phone_raw_desc_1[]
#define PHONE_DEFAULT_VENDOR_ID
static const uint8_t phone_raw_desc_20[]
static const struct usb_temp_interface_desc phone_iface_1_alt_1
static const struct usb_temp_endpoint_desc * phone_iface_1_ep[]
static const uint8_t phone_raw_desc_5[]
static const struct usb_temp_interval phone_isoc_interval
SYSUNINIT(phone_uninit, SI_SUB_LOCK, SI_ORDER_FIRST, phone_uninit, NULL)
static const uint8_t phone_raw_desc_3[]
static const uint8_t phone_hid_raw_desc_0[]
#define PHONE_DEFAULT_PLAYBACK
static const uint8_t phone_raw_desc_22[]
static const uint8_t phone_raw_desc_6[]
SYSINIT(phone_init, SI_SUB_LOCK, SI_ORDER_FIRST, phone_init, NULL)
static void phone_uninit(void *arg __unused)
static const struct usb_temp_config_desc phone_config_desc
#define PHONE_DEFAULT_SERIAL_NUMBER
#define PHONE_DEFAULT_PRODUCT_ID
static const void * phone_hid_desc_0[]
@ PHONE_MANUFACTURER_INDEX
@ PHONE_SERIAL_NUMBER_INDEX
static const struct usb_temp_endpoint_desc phone_isoc_in_ep
static struct usb_string_descriptor phone_record
static const void * phone_raw_iface_1_desc[]
static struct usb_string_descriptor phone_product
static struct usb_string_descriptor phone_manufacturer
static usb_temp_get_vendor_desc_t phone_get_vendor_desc
static void phone_init(void *arg __unused)
static const struct usb_temp_packet_size phone_hid_mps
static const struct usb_temp_endpoint_desc * phone_iface_2_ep[]
static struct usb_string_descriptor phone_mixer
static const struct usb_temp_config_desc * phone_configs[]
static usb_temp_get_string_desc_t phone_get_string_desc
static struct usb_string_descriptor phone_hid
#define PHONE_DEFAULT_MANUFACTURER
static const uint8_t phone_raw_desc_2[]
#define PHONE_DEFAULT_PRODUCT
static const struct usb_temp_interface_desc phone_iface_0
static const struct usb_temp_interface_desc phone_iface_1_alt_0
uint8_t usb_make_str_desc(void *ptr, uint16_t max_len, const char *s)