__u8 bEndpointAddress; //端點地址:0~3位是端點號,第7位是方向(0-OUT,1-IN)
端點地址:總共8位0,1,2,3四位表示端點號,第7位表示端點方向
那麼由這5位可以確定32個端點地址.
其中輸入端點0-15輸出端點0-15
Out endpoint for all omron health devices,
所有Omron健康設備的輸出端點地址(共8位,包括端點號,端點類型和端點方向)
static const uint32_t OMRON_OUT_ENDPT = 0x02;
In endpoint for all omron health devices,
所有Omron健康設備的輸入端點地址(共8位,包括端點號,端點類型,和端點方向)
static const uint32_t OMRON_IN_ENDPT = 0x81;
我們和設備通信的時候,不是使用端點號,端點號不能唯一確定一個管道,而是使用端點地址,端點地址中的端點號和端點方向,可以唯一確定一個管道pipe.
0x81 端點的地址 1000 0001
D7 表示傳輸方向 1 爲輸入
D6~D4 reserved
D3~D0 爲端點號 端點號爲 01
也就是說 1 號端點,輸入端點
//////////////////////////////////////////////////////////////
0x02 端點的地址 0000 0010
D7 表示傳輸方向 1 爲輸入
D6~D4 reserved
D3~D0 爲端點號 端點號爲 2
端點號爲 2,輸出端點
USB 通訊的最基本形式是通過某些稱爲 端點 的. 一個 USB 端點只能在一個方向承載數據, 或者從主機到設備(稱爲輸出端點)或者從設備到主機(稱爲輸入端點). 端點可看作一個單向的管道.
一個 USB 端點可是 4 種不同類型的一種, 它來描述數據如何被傳送:
- CONTROL
控制端點被用來允許對 USB 設備的不同部分存取. 通常用作配置設備, 獲取關於設備的信息, 發送命令到設備, 或者獲取關於設備的狀態報告. 這些端點在尺寸上常常較小. 每個 USB 設備有一個控制端點稱爲"端點 0", 被 USB 核用來在插入時配置設備. 這些傳送由 USB 協議保證來總有足夠的帶寬使它到達設備.
- INTERRUPT
中斷端點傳送小量的數據, 以固定的速率在每次 USB 主請求設備數據時. 這些端點對 USB 鍵盤和鼠標來說是主要的傳送方法. 它們還用來傳送數據到 USB 設備來控制設備, 但通常不用來傳送大量數據. 這些傳送由 USB 協議保證來總有足夠的帶寬使它到達設備.
- BULK
塊端點傳送大量的數據. 這些端點常常比中斷端點大(它們一次可持有更多的字符). 它們是普遍的, 對於需要傳送不能有任何數據丟失的數據. 這些傳送不被 USB 協議保證來一直使它在特定時間範圍內完成. 如果總線上沒有足夠的空間來發送整個 BULK 報文, 它被分爲多次傳送到或者從設備. 這些端點普遍在打印機, 存儲器, 和網絡設備上.
- ISOCHRONOUS
同步端點也傳送大量數據, 但是這個數據常常不被保證它完成. 這些端點用在可以處理數據丟失的設備中, 並且更多依賴於保持持續的數據流. 實時數據收集, 例如音頻和視頻設備, 一直都使用這些端點.
控制和塊端點用作異步數據傳送, 無論何時驅動決定使用它們. 中斷和同步端點是週期性的. 這意味着這些端點被設置來連續傳送數據在固定的時間, 這使它們的帶寬被 USB 核所保留.
USB 端點在內核中使用結構 struct usb_host_endpoint 來描述. 這個結構包含真實的端點信息在另一個結構中, 稱爲 struct usb_endpoint_descriptor. 後者包含所有的 USB-特定 數據, 以設備自身特定的準確格式. 驅動關心的這個結構的成員是:
- bEndpointAddress
這是這個特定端點的 USB 地址. 還包含在這個 8-位 值的是端點的方向. 位掩碼 USB_DIR_OUT 和 USB_DIR_IN 可用來和這個成員比對, 來決定給這個端點的數據是到設備還是到主機.
- bmAttributes
這是端點的類型. 位掩碼 USB_ENDPOINT_XFERTYPE_MASK 應當用來和這個值比對, 來決定這個端點是否是 USB_ENDPOINT_XFER_ISOC, USB_ENDPOINT_XFER_BULK, 或者是類型 USB_ENDPOINT_XFER_INT. 這些宏定義了同步, 塊, 和中斷端點, 相應地.
- wMaxPacketSize
這是以字節計的這個端點可一次處理的最大大小. 注意驅動可能發送大量的比這個值大的數據到端點, 但是數據會被分爲 wMaxPakcetSize 的塊, 當真正傳送到設備時. 對於高速設備, 這個成員可用來支持端點的一個高帶寬模式, 通過使用幾個額外位在這個值的高位部分. 關於如何完成的細節見 USB 規範.
- bInterval
如果這個端點是中斷類型的, 這個值是爲這個端點設置的間隔, 即在請求端點的中斷之間的時間. 這個值以毫秒錶示.