Linux USB 구동 개발 (2) - USB 구동 몇 가지 중요 한 데이터 구조
1. struct usbinterface 인터페이스 함수
struct usb_interface
{
struct usb_host_interface *altsetting;
struct usb_host_interface *cur_altsetting;
unsigned num_altsetting;
int minor;
enum usb_interface_condition condition;
unsigned is_active:1;
unsigned needs_remote_wakeup:1;
struct device dev;
struct device *usb_dev;
int pm_usage_cnt;
};
struct usb_interface 의 struct usbhost_interface *cur_altsetting 구성원, 현재 사용 중인 설정 표시
1、struct usb_host_interface
struct usb_host_interface
{
struct usb_interface_descriptor desc;//usb , usb , , , , usb 。
//usb usb eeprom
/* array of desc.bNumEndpoint endpoints associated with this
* interface setting. these will be in no particular order.
*/
struct usb_host_endpoint *endpoint;//
char *string; /* iInterface string, if present */
unsigned char *extra; /* Extra descriptors */
int extralen;
};
구체 적 으로 인터페이스 설명자 에 이 르 면 인터페이스 자체 의 정 보 를 묘사 하 는 것 이다.하나의 인 터 페 이 스 는 여러 개의 설정 을 할 수 있 습 니 다. 서로 다른 설정 을 사용 하면 인 터 페 이 스 를 설명 하 는 정보 가 다 를 수 있 기 때문에 인터페이스 설명 자 는 struct usb 에 두 지 않 았 습 니 다.interface 구조 에 있 는 것 이 아니 라 인터페이스 설정 을 나타 내 는 struct usbhost_인터페이스 구조 에서.
2. struct usbhost_endpoint 점 함수
struct usb_host_endpoint
{
struct usb_endpoint_descriptor desc;
struct list_head urb_list;// urb .urb usb , urb . usb , urb, ,
// usb core, host controller,
void *hcpriv;// HCD(host controller driver)
struct ep_device *ep_dev; /* For sysfs info */
unsigned char *extra; /* Extra descriptors */
int extralen;
};
3. struct usb장치 장치 함수
struct usb_device {
int devnum; //devnum usb usb . usb_bus_type 128
char devpath [16]; /* Use in messages: /port/port/...*/ // root hub. dev->devpath[0]=’0’
enum usb_device_state state; // Attached,Powered,Default,Address,Configured,Suspended;
//Attached usb , hub 。 USB_STATE_NOTATTACHED Attached。
//Address ,
//Configured , 0 SetConfiguration() ,
//Suspended , , ,3ms , , 。 ,usb 、
enum usb_device_speed speed; /* high/full/low (or error) */
struct usb_tt *tt; // TT, / , , / , OHCI/UHCI hub 。
int ttport; // TT, / , , / , OHCI/UHCI hub 。
unsigned int toggle[2]; /* one bit for each endpoint // .IN toggle[0].OUT toggle[1]. , ep toggle
* ([0] = IN, [1] = OUT) */ DATA0 DATA1
struct usb_device *parent; /* our hub, unless we're the root */
//USB Root Hub , , Root Hub 4 , USB , Hub, Hub , ,
// 。
struct usb_bus *bus; /* Bus we're part of */
struct usb_host_endpoint ep0; // 0 , struct usb_device
struct device dev; /* Generic device interface */ struct usb_device struct device
struct usb_device_descriptor descriptor;/* Descriptor */ , bMaxPacketSize0 filed 0 maximum packet size
struct usb_host_config *config; //
struct usb_host_config *actconfig;//
struct usb_host_endpoint *ep_in[16];//ep_in[16],359 ,ep_out[16], 0, 15 IN 15 OUT , 0 ,
struct usb_host_endpoint *ep_out[16];// Message , , ep_in ep_out 16
char **rawdescriptors; /* Raw descriptors for each config */
unsigned short bus_mA; /* Current available from the bus */ host controller , , usb 500mA
u8 portnum; // root hub hub, USB hub ,portnum 。
u8 level; // , , usb 。Root Hub level 0, level 1, level 2,
unsigned discon_suspended:1; /* Disconnected while suspended */
unsigned have_langid:1; /* whether string_langid is valid */
int string_langid; /* language ID for strings */
/* static strings from the device */
char *product; /* iProduct string, if present */
char *manufacturer; /* iManufacturer string, if present */
char *serial; /* iSerialNumber string, if present */
// 、
struct list_head filelist;
#ifdef CONFIG_USB_DEVICE_CLASS
struct device *usb_classdev;
#endif
#ifdef CONFIG_USB_DEVICEFS
struct dentry *usbfs_dentry; /* usbfs dentry entry for the device */
#endif
/*
* Child devices - these can be either new devices
* (if this is a hub device), or different instances
* of this same device.
*
* Each instance needs its own set of data structures.
*/
int maxchild; /* Number of ports if hub */
struct usb_device *children[USB_MAXCHILDREN];
int pm_usage_cnt; /* usage counter for autosuspend */
u32 quirks; //quirk
#ifdef CONFIG_PM
struct delayed_work autosuspend; /* for delayed autosuspends */
struct mutex pm_mutex; /* protects PM operations */
unsigned long last_busy; /* time of last use */
int autosuspend_delay; /* in jiffies */
unsigned auto_pm:1; /* autosuspend/resume in progress */
unsigned do_remote_wakeup:1; /* remote wakeup should be enabled */
unsigned autosuspend_disabled:1; /* autosuspend and autoresume */
unsigned autoresume_disabled:1; /* disabled by the user */
#endif
};
4. struct usbhost_config 설정 함수
struct usb_host_config {
struct usb_config_descriptor desc;
char *string;
struct usb_interface *interface[USB_MAXINTERFACES]; // ,
struct usb_interface_cache *intf_cache[USB_MAXINTERFACES]; //usb
unsigned char *extra;
int extralen;
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.