USB 介面關聯描述項
USB 介面關聯描述元 (IAD) 可讓裝置將屬於函式的介面分組。 本文說明客戶端驅動程式如何判斷裝置是否包含函式的IAD。
通用序列總線規格 2.0 版不支援在單一函式內將複合裝置的多個介面分組。 不過,USB 裝置工作群組 (DWG) 建立允許具有多個介面之函式的 USB 裝置類別。 USB 實作者的論壇發出工程變更通知, (ECN) 定義群組介面的機制。
ECN 會指定稱為介面關聯描述元的 USB 描述項, (IAD) ,讓硬體製造商定義介面的群組。 最有可能使用 IAD 的裝置類別包括:
- USB 視訊類別規格 (類別程式代碼 - 0x0E)
- USB 音訊類別規格 (類別程式代碼 - 0x01)
- USB 藍牙類別規格 (類別程式代碼 - 0xE0)
如何使用 IAD
下列小節描述如何使用IAD的資訊。
複合裝置會警示韌體中 IAD 的 Windows
複合裝置製造商通常會將零的值指派給裝置類別, (bDeviceClass) 、子類別 (bDeviceSubClass) ,以及由通用序列總線規格所指定的通訊協定 (bDeviceProtocol) 字段。 製造商可以將每個個別介面與不同的裝置類別和通訊協定產生關聯。
USB-IF 核心小組設計了特殊的類別和通訊協定程序代碼集,通知操作系統有一或多個 IAD 存在於裝置韌體中。 裝置描述項必須具有出現在下表中的值,或操作系統不會正確偵測裝置的 IAD 或將裝置的介面分組。
裝置描述項欄位 | 必要值 |
---|---|
bDeviceClass | 0xEF |
bDeviceSubClass | 0x02 |
bDeviceProtocol | 0x01 |
不支援 IAD 的 Windows 程式代碼值警示版本,以安裝正確列舉裝置的特殊用途總線驅動程式。 如果沒有裝置描述元中的這些代碼,系統可能無法列舉裝置,或裝置可能無法正常運作。
裝置可以有多個 IAD。 每個 IAD 都必須緊接在 IAD 所描述介面群組中的介面之前。
函式類別 (bFunctionClass) 、子類別 (bFunctionSubclassClass) (,以及 IAD 的 bFunctionProtocol) 字段,必須包含描述函式中介面的 USB 裝置類別所指定的值。
IAD 的類別和子類別欄位不需要符合 IAD 所描述介面集合中介面的類別和子類別欄位。 Microsoft 建議集合的第一個介面具有符合 IAD 類別和子類別欄位的類別和子類別字段。 下表指出哪些欄位應該相符。
IAD 欄位 | 對應的介面欄位 |
---|---|
bFunctionClass | bInterfaceClass |
bFunctionSubclassClass | bInterfaceSubClass |
IAD 的 bFirstInterface 字段表示函式中第一個介面的數目。 IAD 的 bInterfaceCount 字段會指出介面集合中的介面數目。 IAD 介面集合中的介面必須是連續的 () 介面編號清單中沒有間距,因此具有第一個介面編號的計數就足以指定集合中的所有介面。
存取 IAD 的內容
用戶端驅動程式無法直接存取 IAD 描述項。 IAD 工程變更通知 (ECN) 指定裝置從主機軟體收到設定描述元的要求時,必須在設定資訊中包含 IAD, (GetDescriptor 設定) 。 主機軟體無法使用 GetDescriptor 要求直接擷取 IAD。
不過,客戶端驅動程式可以查詢 USB 裝置的父驅動程式,以取得裝置的硬體識別碼 (標識碼) ,而裝置的硬體識別元包含 IAD 字段的內嵌資訊。
USB 介面關聯描述項範例
本節說明複合 USB 裝置的描述項配置。 範例裝置有兩個功能:
影片類別函式
IAD (介面關聯描述元) 定義此函式。 函式包含兩個介面:介面零 (0) 和介面 1 (1) 。
系統會為函式產生硬體和相容的標識碼 (標識碼) ,如 支援無線行動通訊裝置類別中所述。 OS 符合適當的 INF 檔案之後,系統會載入視訊類別驅動程式堆疊。
人類輸入設備 (HID) 函式
此函式只包含介面 2 (2) 。
系統會產生函式的硬體與相容標識符,如 USB 複合裝置上的介面集合列舉中所述。 在 OS 符合適當的 INF 檔案之後,系統會將人類輸入設備載入 (HID) 類別驅動程式。
描述項如下所示:
裝置描述元
BYTE bLength 0x12
BYTE bDescriptorType 0x01
WORD bcdUSB 0x0200
BYTE bDeviceClass 0xEF
BYTE bDeviceSubClass 0x02
BYTE bDeviceProtocol 0x01
BYTE bMaxPacketSize0 0x40
WORD idVendor 0x045E
WORD idProduct 0xFFFF
WORD bcdDevice 0x0100
BYTE iManufacturer 0x01
WORD iProduct 0x02
WORD iSerialNumber 0x02
BYTE bNumConfigurations 0x01
組態描述項
BYTE bLength 0x09
BYTE bDescriptorType 0x02
WORD wTotalLength 0x...
BYTE bNumInterfaces 0x03
BYTE bConfigurationValue 0x01
BYTE iConfiguration 0x01
BYTE bmAttributes 0x80 // (BUS Powered)
BYTE bMaxPower 0x19 // (50 mA)
介面關聯描述項
BYTE bLength 0x08
BYTE bDescriptorType 0x0B
BYTE bFirstInterface 0x00
BYTE bInterfaceCount 0x02
BYTE bFunctionClass 0x0E
BYTE bFunctionSubClass 0x03
BYTE bFunctionProtocol 0x00
BYTE iFunction 0x04
影片控制介面描述項
BYTE bLength 0x09
BYTE bDescriptorType 0x04
BYTE bInterfaceNumber 0x00
BYTE bAlternateSetting 0x00
BYTE bNumEndpoints 0x01
BYTE bInterfaceClass 0x0E
BYTE bInterfaceSubClass 0x01
BYTE bInterfaceProtocol 0x00
BYTE iInterface 0x05
視訊控件類別特定的描述元
. . . .
. . . .
. . . .
影片控制端點描述項
. . . .
. . . .
. . . .
影片串流介面描述項
BYTE bLength 0x09
BYTE bDescriptorType 0x04
BYTE bInterfaceNumber 0x01
BYTE bAlternateSetting 0x00
BYTE bNumEndpoints 0x01
BYTE bInterfaceClass 0x0E
BYTE bInterfaceSubClass 0x02
BYTE bInterfaceProtocol 0x00
BYTE iInterface 0x06
視訊串流類別特定描述元
. . . .
. . . .
. . . .
影片串流端點描述項
. . . .
. . . .
. . . .
(HID) 介面描述元的人類輸入設備
BYTE bLength 0x09
BYTE bDescriptorType 0x04
BYTE bInterfaceNumber 0x02
BYTE bAlternateSetting 0x00
BYTE bNumEndpoints 0x01
BYTE bInterfaceClass 0x03
BYTE bInterfaceSubClass 0x01
BYTE bInterfaceProtocol 0x01
BYTE iInterface 0x07
HID 類別特定描述元
. . . .
. . . .
. . . .
HID 端點描述元
. . . .
. . . .
. . . .