本文主要是介绍struct usb_device_id,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
struct usb_device_id {/* which fields to match against? */__u16 match_flags;/* Used for product specific matches; range is inclusive */__u16 idVendor; //供应商ID__u16 idProduct; //产品ID__u16 bcdDevice_lo;__u16 bcdDevice_hi;/* Used for device class matches */__u8 bDeviceClass; //设备类型__u8 bDeviceSubClass; //设备子类型__u8 bDeviceProtocol; //协议/* Used for interface class matches */__u8 bInterfaceClass; //接口类__u8 bInterfaceSubClass; //接口子类__u8 bInterfaceProtocol; //接口协议/* not matched against */kernel_ulong_t driver_info;
};
相关宏:
/* Some useful macros to use to create struct usb_device_id */
#define USB_DEVICE_ID_MATCH_VENDOR 0x0001
#define USB_DEVICE_ID_MATCH_PRODUCT 0x0002
#define USB_DEVICE_ID_MATCH_DEV_LO 0x0004
#define USB_DEVICE_ID_MATCH_DEV_HI 0x0008
#define USB_DEVICE_ID_MATCH_DEV_CLASS 0x0010
#define USB_DEVICE_ID_MATCH_DEV_SUBCLASS 0x0020
#define USB_DEVICE_ID_MATCH_DEV_PROTOCOL 0x0040
#define USB_DEVICE_ID_MATCH_INT_CLASS 0x0080
#define USB_DEVICE_ID_MATCH_INT_SUBCLASS 0x0100
#define USB_DEVICE_ID_MATCH_INT_PROTOCOL 0x0200
#define USB_DEVICE_ID_MATCH_DEVICE \(USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT)
#define USB_DEVICE_ID_MATCH_DEV_RANGE \(USB_DEVICE_ID_MATCH_DEV_LO | USB_DEVICE_ID_MATCH_DEV_HI)
#define USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION \(USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_DEV_RANGE)
#define USB_DEVICE_ID_MATCH_DEV_INFO \(USB_DEVICE_ID_MATCH_DEV_CLASS | \USB_DEVICE_ID_MATCH_DEV_SUBCLASS | \USB_DEVICE_ID_MATCH_DEV_PROTOCOL)
#define USB_DEVICE_ID_MATCH_INT_INFO \(USB_DEVICE_ID_MATCH_INT_CLASS | \USB_DEVICE_ID_MATCH_INT_SUBCLASS | \USB_DEVICE_ID_MATCH_INT_PROTOCOL)/*** USB_DEVICE - macro used to describe a specific usb device* @vend: the 16 bit USB Vendor ID* @prod: the 16 bit USB Product ID** This macro is used to create a struct usb_device_id that matches a* specific device.*/
#define USB_DEVICE(vend, prod) \.match_flags = USB_DEVICE_ID_MATCH_DEVICE, \.idVendor = (vend), \.idProduct = (prod)
/*** USB_DEVICE_VER - describe a specific usb device with a version range* @vend: the 16 bit USB Vendor ID* @prod: the 16 bit USB Product ID* @lo: the bcdDevice_lo value* @hi: the bcdDevice_hi value** This macro is used to create a struct usb_device_id that matches a* specific device, with a version range.*/
#define USB_DEVICE_VER(vend, prod, lo, hi) \.match_flags = USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, \.idVendor = (vend), \.idProduct = (prod), \.bcdDevice_lo = (lo), \.bcdDevice_hi = (hi)/*** USB_DEVICE_INTERFACE_PROTOCOL - describe a usb device with a specific interface protocol* @vend: the 16 bit USB Vendor ID* @prod: the 16 bit USB Product ID* @pr: bInterfaceProtocol value** This macro is used to create a struct usb_device_id that matches a* specific interface protocol of devices.*/
#define USB_DEVICE_INTERFACE_PROTOCOL(vend, prod, pr) \.match_flags = USB_DEVICE_ID_MATCH_DEVICE | \USB_DEVICE_ID_MATCH_INT_PROTOCOL, \.idVendor = (vend), \.idProduct = (prod), \.bInterfaceProtocol = (pr)/*** USB_DEVICE_INFO - macro used to describe a class of usb devices* @cl: bDeviceClass value* @sc: bDeviceSubClass value* @pr: bDeviceProtocol value** This macro is used to create a struct usb_device_id that matches a* specific class of devices.*/
#define USB_DEVICE_INFO(cl, sc, pr) \.match_flags = USB_DEVICE_ID_MATCH_DEV_INFO, \.bDeviceClass = (cl), \.bDeviceSubClass = (sc), \.bDeviceProtocol = (pr)/*** USB_INTERFACE_INFO - macro used to describe a class of usb interfaces* @cl: bInterfaceClass value* @sc: bInterfaceSubClass value* @pr: bInterfaceProtocol value** This macro is used to create a struct usb_device_id that matches a* specific class of interfaces.*/
#define USB_INTERFACE_INFO(cl, sc, pr) \.match_flags = USB_DEVICE_ID_MATCH_INT_INFO, \.bInterfaceClass = (cl), \.bInterfaceSubClass = (sc), \.bInterfaceProtocol = (pr)/*** USB_DEVICE_AND_INTERFACE_INFO - describe a specific usb device with a class of usb interfaces* @vend: the 16 bit USB Vendor ID* @prod: the 16 bit USB Product ID* @cl: bInterfaceClass value* @sc: bInterfaceSubClass value* @pr: bInterfaceProtocol value** This macro is used to create a struct usb_device_id that matches a* specific device with a specific class of interfaces.** This is especially useful when explicitly matching devices that have* vendor specific bDeviceClass values, but standards-compliant interfaces.*/
#define USB_DEVICE_AND_INTERFACE_INFO(vend, prod, cl, sc, pr) \.match_flags = USB_DEVICE_ID_MATCH_INT_INFO \| USB_DEVICE_ID_MATCH_DEVICE, \.idVendor = (vend), \.idProduct = (prod), \.bInterfaceClass = (cl), \.bInterfaceSubClass = (sc), \.bInterfaceProtocol = (pr)
这篇关于struct usb_device_id的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!