?? usbd-func.h
字號:
__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));/* * 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));/* * HID class descriptor structures * * c.f. HID 6.2.1 */struct usb_class_hid_descriptor { __u8 bLength; __u8 bDescriptorType; __u16 bcdCDC; __u8 bCountryCode; __u8 bNumDescriptors; // 0x01 __u8 bDescriptorType0; __u16 wDescriptorLength0; /* optional descriptors are not supported. */} __attribute__((packed));struct usb_class_report_descriptor { __u8 bLength; // dummy __u8 bDescriptorType; __u16 wLength; __u8 bData[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; } 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_class_report_descriptor **reports_descriptor_array;};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 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 urb *, int); int (*recv_urb) (struct urb *); int (*recv_setup) (struct urb *); int (*alloc_urb_data) (struct urb *, int); void (*dealloc_urb_data) (struct 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 *);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -