1. 程式人生 > >USB系列--1-基本結構體

USB系列--1-基本結構體

介紹USB裝置結構體和裝置描述符結構體。

1. USB裝置結構體

usb_device位於/linux/include/usb.h

/**
 * struct usb_device - kernel's representation of a USB device
 * @devnum: device number; address on a USB bus
 * @devpath: device ID string for use in messages (e.g., /port/...)
 * @route: tree topology hex string for use with xHCI
 * @state: device state: configured, not attached, etc.
 * @speed: device speed: high/full/low (or error)
 * @tt: Transaction Translator info; used with low/full speed dev, highspeed hub
 * @ttport: device port on that tt hub
 * @toggle: one bit for each endpoint, with ([0] = IN, [1] = OUT) endpoints
 * @parent: our hub, unless we'
re the root * @bus: bus we're part of * @ep0: endpoint 0 data (default control pipe) * @dev: generic device interface * @descriptor: USB device descriptor * @bos: USB device BOS descriptor set * @config: all of the device's configs * @actconfig: the active configuration * @ep_in: array of IN endpoints * @ep_out
: array of OUT endpoints * @rawdescriptors: raw descriptors for each config * @bus_mA: Current available from the bus * @portnum: parent port number (origin 1) * @level: number of USB hub ancestors * @can_submit: URBs may be submitted * @persist_enabled: USB_PERSIST enabled for this device * @have_langid
: whether string_langid is valid * @authorized: policy has said we can use it; * (user space) policy determines if we authorize this device to be * used or not. By default, wired USB devices are authorized. * WUSB devices are not, until we authorize them from user space. * FIXME -- complete doc * @authenticated: Crypto authentication passed * @wusb: device is Wireless USB * @lpm_capable: device supports LPM * @usb2_hw_lpm_capable: device can perform USB2 hardware LPM * @usb2_hw_lpm_besl_capable: device can perform USB2 hardware BESL LPM * @usb2_hw_lpm_enabled: USB2 hardware LPM is enabled * @usb2_hw_lpm_allowed: Userspace allows USB 2.0 LPM to be enabled * @usb3_lpm_u1_enabled: USB3 hardware U1 LPM enabled * @usb3_lpm_u2_enabled: USB3 hardware U2 LPM enabled * @string_langid: language ID for strings * @product: iProduct string, if present (static) * @manufacturer: iManufacturer string, if present (static) * @serial: iSerialNumber string, if present (static) * @filelist: usbfs files that are open to this device * @maxchild: number of ports if hub * @quirks: quirks of the whole device * @urbnum: number of URBs submitted for the whole device * @active_duration: total time device is not suspended * @connect_time: time device was first connected * @do_remote_wakeup: remote wakeup should be enabled * @reset_resume: needs reset instead of resume * @port_is_suspended: the upstream port is suspended (L2 or U3) * @wusb_dev: if this is a Wireless USB device, link to the WUSB * specific data for the device. * @slot_id: Slot ID assigned by xHCI * @removable: Device can be physically removed from this port * @l1_params: best effor service latency for USB2 L1 LPM state, and L1 timeout. * @u1_params: exit latencies for USB3 U1 LPM state, and hub-initiated timeout. * @u2_params: exit latencies for USB3 U2 LPM state, and hub-initiated timeout. * @lpm_disable_count: Ref count used by usb_disable_lpm() and usb_enable_lpm() * to keep track of the number of functions that require USB 3.0 Link Power * Management to be disabled for this usb_device. This count should only * be manipulated by those functions, with the bandwidth_mutex is held. * * Notes: * Usbcore drivers should not set usbdev->state directly. Instead use * usb_set_device_state(). */ struct usb_device { int devnum; //裝置號,還記得上一篇USB命名"裝置號-埠號:配置.介面"命名方式,每插入一個新裝置,USBCore會為其設定一個裝置號 char devpath[16]; //該裝置在SysFS中的路徑,一般為"/sys/devices/pci0000:00/0000:00:12.2/_usb_1" u32 route; enum usb_device_state state; //該裝置的狀態,如剛插上時為Attached enum usb_device_speed speed; //速度級別 high full low struct usb_tt *tt; //我們知道高速USB之前還存在全速和低速USB,那麼高速USB裝置怎麼相容其他 int ttport; //低速裝置,通過使用TT(Transaction Translator)--高速USB中的轉換電路 unsigned int toggle[2]; //對於中斷傳輸、批量傳輸、和控制傳輸,傳輸資料時,需要DATA0和DATA1交 //替進行,toggle就是標識0端點的IN 和 OUT的DATAx的狀態 struct usb_device *parent; //父hub,如果是roothub,就是NULL struct usb_bus *bus; //裝置所在的匯流排 struct usb_host_endpoint ep0; //端點0被特殊對待,在結構體中靜態存在 struct device dev; //嵌入到usb_device中的device struct usb_device_descriptor descriptor; //裝置描述符,描述該裝置資訊,後面會分析 struct usb_host_bos *bos; struct usb_host_config *config; //所有的配置資訊列表 struct usb_host_config *actconfig; //當前活躍的資訊 struct usb_host_endpoint *ep_in[16]; //該裝置的輸入端點 struct usb_host_endpoint *ep_out[16]; //輸出端點 char **rawdescriptors; unsigned short bus_mA; //能夠從匯流排得到的電流值 u8 portnum; u8 level; unsigned can_submit:1; unsigned persist_enabled:1; unsigned have_langid:1; unsigned authorized:1; unsigned authenticated:1; unsigned wusb:1; unsigned lpm_capable:1; unsigned usb2_hw_lpm_capable:1; unsigned usb2_hw_lpm_besl_capable:1; unsigned usb2_hw_lpm_enabled:1; unsigned usb2_hw_lpm_allowed:1; unsigned usb3_lpm_u1_enabled:1; unsigned usb3_lpm_u2_enabled:1; int string_langid; /* static strings from the device */ char *product; char *manufacturer; char *serial; struct list_head filelist; int maxchild; u32 quirks; atomic_t urbnum; unsigned long active_duration; #ifdef CONFIG_PM unsigned long connect_time; unsigned do_remote_wakeup:1; unsigned reset_resume:1; unsigned port_is_suspended:1; #endif struct wusb_dev *wusb_dev; int slot_id; enum usb_device_removable removable; struct usb2_lpm_parameters l1_params; struct usb3_lpm_parameters u1_params; struct usb3_lpm_parameters u2_params; unsigned lpm_disable_count; }; #define to_usb_device(d) container_of(d, struct usb_device, dev)

2 USB裝置描述符結構體

usb_device_descriptor位於“

/* USB_DT_DEVICE: Device descriptor */
struct usb_device_descriptor {
    __u8  bLength;          //該裝置描述符的長度
    __u8  bDescriptorType;  // USB_DT_DEVICE = 0x01

    __le16 bcdUSB;          //版本號
    __u8  bDeviceClass;     //
    __u8  bDeviceSubClass;
    __u8  bDeviceProtocol;
    __u8  bMaxPacketSize0;  //端點0一次可以處理的最大位元組數
    __le16 idVendor;        //廠商號
    __le16 idProduct;       //產品號
    __le16 bcdDevice;       //版本號
    __u8  iManufacturer;    //分別對應上面的索引值 index
    __u8  iProduct;
    __u8  iSerialNumber;
    __u8  bNumConfigurations;   //裝置在當前速度級別下支援的配置數量
} __attribute__ ((packed));
原文地址:http://coderdock.com

相關推薦

USB系列--1-基本結構

介紹USB裝置結構體和裝置描述符結構體。 1. USB裝置結構體 usb_device位於/linux/include/usb.h /** * struct usb_device - kernel's representation of a US

UNP筆記(1)——基本結構和工具函式

一、socket相關結構體 socket相關的結構體主要是存放地址的一些結構體,例如sockaddr_in(最常用)、sockaddr_in6(IPv6地址結構體)、sockaddr(socket的函式裡面都用這個當引數,其他結構體強轉過來)和sockaddr_stora

Go語言中結構的使用-第1部分結構

1 概述 結構體是由成員構成的複合型別。Go 語言使用結構體和結構體成員來描述真實世界的實體和實體對應的各種屬性。 結構體成員,也可稱之為成員變數,欄位,屬性。屬性要滿足唯一性。 結構體的概念在軟體工程上舊的術語叫 ADT(抽象資料型別:Abstract Data Type) 資料層

自然語言處理系列-1-基本應用

本文介紹自然語言處理的常見任務,使讀者在遇到實際問題時能夠找到用怎樣的工具去解決。 眾所周知,自然語言處理的目標是讓計算機理解人類文字,使計算機具備理解和推理的能力。現實任務中,用到自然語言處理技術的有如下幾個場景: 當我們新推出了一款產品,如何衡量它在市場

二叉樹系列(1)——基本概念和遍歷

二叉樹是一種非常重要的資料結構,其在查詢、排序等領域有著非常重要的應用。本文簡單介紹一些關於二叉樹的基本概念,並給出幾種二叉樹的基本遍歷方法。全文程式碼為Java語言實現。 二叉樹的基本概念 1. 二叉樹的定義 定義: 二叉樹是n(n >= 0)個節

C語言複習筆記(1)——結構

結構體 結構體宣告 結構體是一種由一序列的成員組成的型別,成員的儲存以順序分配於記憶體中(與聯合體相反,聯合體是由一個序列的成員組成的型別,成員儲存在記憶體中重疊)。 結構體的型別指定符與聯合體( union )型別指定符相同,只是所用的關鍵詞有別。 語法 str

7天內完成基礎USB開發(1)——免韌USB開發介紹

       USB介面廣泛應用於各種外設與PC或嵌入式系統的通訊,在各行各業發揮著巨大的作用。如今已經成為最常見的數字介面,全球總裝置量超過150億,並以每年20億的數量遞增(by CNN)。        然而USB的裝置的開發卻有著不小的難度。USB功能主要由USB

maya系列1——基本操作

最近專案比較輕鬆,對於maya比較感興趣,閒暇時間看看,以下是學習心得; 1 開始使用     下載maya2018學生版,然後開始建立專案。maya2018預設建立的多邊形是直接顯示在中心的,要想單獨拿出來並且可拖拽可以做如下設定: 建立-多邊形基本體-互動式建立,將

學習筆記1-goland結構(struct)

寫在前面:若有侵權,請發郵件[email protected]告知。 轉載者告知:如果本文被轉載,但凡涉及到侵權相關事宜,轉載者需負責。

c++調用python系列(1): 結構作為入參及返回結構

pac 格式 lob 打包成 def 程序 png 校驗 upload 最近在打算用python作測試用例以便對遊戲服務器進行功能測試以及壓力測試; 因為服務器是用c++寫的,采用的TCP協議,當前的架構是打算用python構造結構體,傳送給c++層進行socket

libevent源碼分析1 ----evnet相關結構分析

所有 active 復用 超時 handling 源碼 執行 evb tel 位於代碼event-internal.h中。 event_base類似事件的集合,你創建一個事件,必須將該事件指定一個集合。 struct event_base { 50 const

HDU 4507 吉哥系列故事――恨7不成妻(數位DP+結構

開始 bsp 相等 continue 退出 tin get 結構 eof 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=4507 題目大意:如果一個整數符合下面3個條件之一,那麽我們就說這個整數和7有關     1、整數中某一

USB1-4章學習——USB結構體系概述

大量 普通 管道 配置 div 健壯性 接口 事先 點號 第一章 術語與縮寫 一些術語與縮寫,沒有太多用處 第二章 緒論 無太多用處第三章 背景 介紹了USB的一些硬件指標 使用場所等 可泛讀了解第四章 結構體系概述 (極其重要 是理解整個USB工作原理的

FFmpeg總結(六)AV系列結構之AVPacket

type 獲得 tty his err views pen required pan AVPacket位置:libavcodec/avcodec.h下: AVPacket: 通常通過demuxer導出的data packet作為解碼器的inpu

golang筆記(1)-數據庫查詢結果映射至結構

tint 地址 style 定義數據 range con clas num end 通用的映射模式 query:="select id,name from user where id=?" //單個結構體ret:=&Activity{} DbClient(

[js高手之路]深入淺出webpack系列1-安裝與基本打包用法和命令參數

查看 2-2 gre colors 令行 一起 切換 json round webpack,我想大家應該都知道或者聽過,Webpack是前端一個工具,可以讓各個模塊進行加載,預處理,再進行打包。現代的前端開發很多環境都依賴webpack構建,比如vue官方就推薦使用webp

結構初始化及定義1

HA int tdi %d struct 初始 student har nbsp #include<stdio.h> struct student{ int num; char name[20]; float score; }; int m

智能合約語言 Solidity 教程系列6 - 結構與映射

區塊鏈 智能合約 Solidity 教程系列第6篇 - Solidity 結構體與映射。Solidity 系列完整的文章列表請查看分類-Solidity。 寫在前面 Solidity 是以太坊智能合約編程語言,閱讀本文前,你應該對以太坊、智能合約有所了解,如果你還不了解,建議你先看以太坊是什麽 本系列

了解java虛擬機---JVM的基本結構1

show 擁有 處理 對象 文章 xss 分享 action 啟動 1. JVM的基本結構 1.1. 類加載子系統 類加載子系統負責從文件或者網絡中加載Class信息,加載的類信息存放於方法區的內存空間。方法區中可能還會存放運行時常量信息,包括字符串與數字常量。(這部分常

資料結構作業1-資料結構基本概念

1-1 抽象資料型別中基本操作的定義與具體實現有關。 (1分) [ ] T [x] F 1-2 若用連結串列來表示一個線性表,則表中元素的地址一定是連續的。 (1分) [ ] T [x] F 2-1 在決定選取何種儲存結構時,一般不考慮()。 (2分) [ ] A.