USB 介面關聯描述元 (IAD) 可讓裝置將屬於函式的介面分組。 本文說明用戶端驅動程式如何判斷裝置是否包含函式的 IAD。
通用序列匯流排規格修訂版 2.0 不支援在單一函式內將複合裝置的多個介面分組。 不過,USB 裝置工作小組 (DWG) 已建立 USB 裝置類別,以允許具有多個介面的功能。 USB 實作者論壇發出工程變更通知 (ECN) ,定義介面分組的機制。
ECN 會指定稱為介面關聯描述元 (IAD) 的 USB 描述元,可讓硬體製造商定義介面群組。 最有可能使用 IAD 的裝置類別包括:
- USB 視訊類別規格 (類別代碼 - 0x0E)
- USB 音訊類別規格 (類別代碼 - 0x01)
- USB 藍牙類別規格 (類別代碼 - 0xE0)
如何使用 IAD
下列小節說明如何使用 IAD 的相關資訊。
複合裝置在韌體中向 Windows 發出 IAD (介面關聯描述符) 警示
複合裝置的製造商通常會將零值指派給裝置描述元中的裝置類別 (bDeviceClass) 、子類別 (bDeviceSubClass) 和通訊協定 (bDeviceProtocol) 欄位,如 通用序列匯流排規格所指定。 製造商可以將每個單獨的接口與不同的設備類別和協議相關聯。
USB-IF 核心團隊設計了一個特殊的類別和協定代碼集,通知作業系統裝置韌體中存在一個或多個 IAD。 裝置描述元必須具有下表中顯示的值,否則作業系統無法偵測到裝置的 IAD 或正確地將裝置的介面分組。
| 裝置描述元欄位 | 必填值 |
|---|---|
| bDeviceClass | 0xEF |
| bDeviceSubClass | 0x02 |
| bDeviceProtocol | 0x01 |
程式代碼值會提示不支援 IAD 的 Windows 版本,以安裝能正確枚舉裝置的專用匯流排驅動程式。 如果裝置描述元中沒有這些代碼,系統可能無法列舉裝置,或裝置可能無法正常運作。
裝置可以有多個 IAD。 每一個 IAD 都必須位於 IAD 所描述之介面群組中的介面之前。
IAD 的函式類別 (bFunctionClass) 、子類別 (bFunctionSubclassClass) 和通訊協定 (bFunctionProtocol) 欄位必須包含描述函式中介面的 USB 裝置類別所指定的值。
IAD 的類別和子類別欄位不需要符合 IAD 描述之介面集合中介面的類別和子類別欄位。 Microsoft 建議集合中的第一個介面應具有與 IAD 的類別和子類別欄位相符的類別和子類別。 下表指出哪些欄位應該相符。
| IAD 欄位 | 對應介面欄位 |
|---|---|
| bFunctionClass | bInterfaceClass |
| bFunctionSubclass | bInterfaceSubClass |
IAD 的 bFirstInterface 欄位指出函式中第一個介面的編號。 IAD 的 bInterfaceCount 欄位指出介面集合中有多少個介面。 IAD 介面集合中的介面必須是連續的 (介面號碼清單中不能有間隙) ,因此具有第一個介面號碼的計數足以指定集合中的所有介面。
存取 IAD 的內容
用戶端驅動程式無法直接存取 IAD 描述元。 IAD 工程變更通知 (ECN) 指定,在裝置收到主機軟體對組態描述符的要求時,IAD 必須包含在傳回的組態資訊中 (GetDescriptor 組態)。 主機軟體無法直接使用 GetDescriptor 要求擷取 IAD。
不過,用戶端驅動程式可以查詢 USB 裝置的父驅動程式,以取得裝置的硬體識別碼 (標識碼) ,而裝置的硬體識別碼包含 IAD 欄位的內嵌資訊。
USB 介面關聯描述元範例
本節說明複合 USB 裝置的描述元版面配置。 範例裝置有兩個功能:
視頻課程功能
介面關聯描述元 (IAD) 會定義此函式。 函式包含兩個介面:介面零 (0) 和介面一 (1)。
系統會產生功能的硬體和相容識別碼 (ID),如支援 無線行動通訊裝置類別中所述。 在 OS 符合適當的 INF 檔案之後,系統會載入視訊類別驅動程式堆疊。
人工輸入裝置 (HID) 功能
此函式僅包含介面二 (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 端點描述元
. . . .
. . . .
. . . .