⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbd-func.h

📁 linux嵌入式课程实践中的一个关于声卡驱动程序 。
💻 H
📖 第 1 页 / 共 2 页
字号:
    __u8        iInterface;} __attribute__((packed));struct usb_configuration_descriptor {    __u8        bLength;    __u8        bDescriptorType;                // 0x2    __u16       wTotalLength;    __u8        bNumInterfaces;    __u8        bConfigurationValue;    __u8        iConfiguration;    __u8        bmAttributes;    __u8        bMaxPower;} __attribute__((packed));struct usb_device_descriptor {    __u8        bLength;    __u8        bDescriptorType;                // 0x01    __u16       bcdUSB;    __u8        bDeviceClass;    __u8        bDeviceSubClass;    __u8        bDeviceProtocol;    __u8        bMaxPacketSize0;    __u16       idVendor;    __u16       idProduct;    __u16       bcdDevice;    __u8        iManufacturer;    __u8        iProduct;    __u8        iSerialNumber;    __u8        bNumConfigurations;} __attribute__((packed));struct usb_string_descriptor {    __u8        bLength;    __u8        bDescriptorType;                // 0x03    __u16       wData[0];} __attribute__((packed));struct usb_generic_descriptor {    __u8        bLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;} __attribute__((packed));/* HID class descriptor structure */struct usb_class_hid_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;	__u16		bcdHID;	__u8		bCountryCode;	__u8		bNumDescriptors;    __u8        bDescriptorType1;	__u16		wDescriptorLength1;} __attribute__((packed));/*  * communications class descriptor structures * * c.f. CDC 5.2 Table 25c */struct usb_class_function_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;} __attribute__((packed));struct usb_class_function_descriptor_generic {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;    __u8        bmCapabilities;} __attribute__((packed));struct usb_class_header_function_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x00    __u16       bcdCDC;} __attribute__((packed));struct usb_class_call_management_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x01    __u8        bmCapabilities;    __u8        bDataInterface;} __attribute__((packed));struct usb_class_abstract_control_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x02    __u8        bmCapabilities;} __attribute__((packed));struct usb_class_direct_line_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x03} __attribute__((packed));struct usb_class_telephone_ringer_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x04    __u8        bRingerVolSeps;    __u8        bNumRingerPatterns;} __attribute__((packed));struct usb_class_telephone_call_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x05    __u8        bmCapabilities;} __attribute__((packed));struct usb_class_union_function_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x06    __u8        bMasterInterface;    __u8        bSlaveInterface0[0];} __attribute__((packed));struct usb_class_country_selection_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x07    __u8        iCountryCodeRelDate;    __u16       wCountryCode0[0];} __attribute__((packed));struct usb_class_telephone_operational_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x08    __u8        bmCapabilities;} __attribute__((packed));struct usb_class_usb_terminal_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x09    __u8        bEntityId;    __u8        bInterfaceNo;    __u8        bOutInterfaceNo;    __u8        bmOptions;    __u8        bChild0[0];} __attribute__((packed));struct usb_class_network_channel_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x0a    __u8        bEntityId;    __u8        iName;    __u8        bChannelIndex;    __u8        bPhysicalInterface;} __attribute__((packed));struct usb_class_protocol_unit_function_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x0b    __u8        bEntityId;    __u8        bProtocol;    __u8        bChild0[0];} __attribute__((packed));struct usb_class_extension_unit_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x0c    __u8        bEntityId;    __u8        bExtensionCode;    __u8        iName;    __u8        bChild0[0];} __attribute__((packed));struct usb_class_multi_channel_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x0d    __u8        bmCapabilities;} __attribute__((packed));struct usb_class_capi_control_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x0e    __u8        bmCapabilities;} __attribute__((packed));struct usb_class_ethernet_networking_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x0f    __u8        iMACAddress;    __u32       bmEthernetStatistics;    __u16       wMaxSegmentSize;    __u16       wNumberMCFilters;    __u8        bNumberPowerFilters;} __attribute__((packed));struct usb_class_atm_networking_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x10    __u8        iEndSystermIdentifier;    __u8        bmDataCapabilities;    __u8        bmATMDeviceStatistics;    __u16       wType2MaxSegmentSize;    __u16       wType3MaxSegmentSize;    __u16       wMaxVC;} __attribute__((packed));struct usb_class_mdlm_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x12    __u16	bcdVersion;    __u8	bGUID[16];} __attribute__((packed));struct usb_class_mdlmd_descriptor {    __u8        bFunctionLength;    __u8        bDescriptorType;    __u8        bDescriptorSubtype;                     // 0x13    __u8	bGuidDescriptorType;    __u8	bDetailData[0];} __attribute__((packed));/*  * descriptor union structures */struct usb_descriptor {    union {        struct usb_generic_descriptor generic;        struct usb_endpoint_descriptor endpoint;        struct usb_interface_descriptor interface;        struct usb_configuration_descriptor configuration;        struct usb_device_descriptor device;        struct usb_string_descriptor string;        struct usb_otg_descriptor otg;    } descriptor;} __attribute__((packed));struct usb_class_descriptor {    union {        struct usb_class_function_descriptor function;        struct usb_class_function_descriptor_generic generic;        struct usb_class_header_function_descriptor header_function;        struct usb_class_call_management_descriptor call_management;        struct usb_class_abstract_control_descriptor abstract_control;        struct usb_class_direct_line_descriptor direct_line;        struct usb_class_telephone_ringer_descriptor telephone_ringer;        struct usb_class_telephone_operational_descriptor telephone_operational;        struct usb_class_telephone_call_descriptor telephone_call;        struct usb_class_union_function_descriptor union_function;        struct usb_class_country_selection_descriptor country_selection;        struct usb_class_usb_terminal_descriptor usb_terminal;        struct usb_class_network_channel_descriptor network_channel;        struct usb_class_extension_unit_descriptor extension_unit;        struct usb_class_multi_channel_descriptor multi_channel;        struct usb_class_capi_control_descriptor capi_control;        struct usb_class_ethernet_networking_descriptor ethernet_networking;        struct usb_class_atm_networking_descriptor atm_networking;        struct usb_class_mdlm_descriptor mobile_direct;        struct usb_class_mdlmd_descriptor mobile_direct_detail;        struct usb_class_hid_descriptor hid;    } descriptor;} __attribute__((packed));struct usb_alternate_instance {    struct usb_interface_descriptor *interface_descriptor;    int                         classes;    struct usb_class_descriptor **classes_descriptor_array;    int                         endpoints;    int                         *endpoint_transfersize_array;    struct usb_endpoint_descriptor **endpoints_descriptor_array;    struct usb_otg_descriptor   *otg_descriptor;};struct usb_interface_instance {    int                         alternates;    //struct usb_interface_descriptor **alternates_descriptor_array;    struct usb_alternate_instance *alternates_instance_array;};/* Operations that the bus interface driver can use to interact with a * function driver.  * * Typically these are called to deal with either specific changes of state * to an endpoint: * reset, suspend, resume; or to process received data.  * * The default endpoint 0 driver will use the configure entry point to tell * a function driver that it has been configured for use. * * The urb sent callback is specified in the usbd_urb structure so that specific * completion routines can be specified for each type of data being * transmitted. * * The receive urb function is called when there is data to be processed. * * The receive setup function is called when there is an endpoint zero * setup packet to be processed. * * The alloc urb data function is called to allocate urb data buffers. * */struct usb_function_operations {    void (* event)(struct usb_device_instance *, usb_device_event_t, int);       int (* urb_sent) (struct usbd_urb *, int);    int (* recv_urb) (struct usbd_urb *);    int (* recv_setup) (struct usbd_urb *);    int (* alloc_urb_data) (struct usbd_urb *, int );    void (* dealloc_urb_data) (struct usbd_urb *);    void (* function_init) (struct usb_bus_instance *, struct usb_device_instance *, struct usb_function_driver *);    void (* function_exit) (struct usb_device_instance *);};struct usb_configuration_instance {    int                         interfaces;    struct usb_configuration_descriptor *configuration_descriptor;    struct usb_interface_instance *interface_instance_array;    struct usb_function_driver *function_driver;};/* Function Driver data structure * * Function driver and its configuration descriptors.  * * This is passed to the usb-device layer when registering. It contains all * required information about the function driver for the usb-device layer * to use the function drivers configuration data and to configure this * function driver an active configuration. * * Note that each function driver registers itself on a speculative basis. * Whether a function driver is actually configured will depend on the USB * HOST selecting one of the function drivers configurations.  * * This may be done multiple times WRT to either a single bus interface * instance or WRT to multiple bus interface instances. In other words a * multiple configurations may be selected for a specific bus interface. Or * the same configuration may be selected for multiple bus interfaces.  * */struct usb_function_driver {    const char         *name;    struct usb_function_operations *ops;// functions                                         // device & configuration descriptions     struct usb_device_description        *device_description;    struct usb_configuration_description *configuration_description;    int                 configurations;                                        // constructed descriptors    struct usb_device_descriptor        *device_descriptor;    struct usb_configuration_instance *configuration_instance_array;    struct list_head    drivers;        // linked list     struct module	*this_module;	// manage inc use counts to prevent unload races};void usbd_function_init(struct usb_bus_instance *, struct usb_device_instance *, struct usb_function_driver *);void usbd_function_close(struct usb_device_instance *);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -