FunctionFS 描述符

以下描述了一些可以寫入 FFS gadget 的描述符。裝置和配置描述符由複合 gadget 處理,使用者不會將其寫入 FFS gadget。

描述符按照描述符頭部寫入 FFS gadget 中的“ep0”檔案。

描述符格式

偏移

名稱

型別

描述

0

magic

LE32

FUNCTIONFS_DESCRIPTORS_MAGIC_V2

4

length

LE32

整個資料塊的長度

8

flags

LE32

functionfs_flags 的組合

eventfd

LE32

eventfd 檔案描述符

fs_count

LE32

全速描述符的數量

hs_count

LE32

高速描述符的數量

ss_count

LE32

超高速描述符的數量

os_count

LE32

MS OS 描述符的數量

fs_descrs

Descriptor[]

全速描述符列表

hs_descrs

Descriptor[]

高速描述符列表

ss_descrs

Descriptor[]

超高速描述符列表

os_descrs

OSDesc[]

MS OS 描述符列表

根據設定的標誌,結構中可能會缺少各種欄位。任何無法識別的標誌都會導致整個塊被拒絕,並返回 -ENOSYS。

舊版描述符格式(自 3.14 起已棄用)

偏移

名稱

型別

描述

0

magic

LE32

FUNCTIONFS_DESCRIPTORS_MAGIC

4

length

LE32

整個資料塊的長度

8

fs_count

LE32

全速描述符的數量

12

hs_count

LE32

高速描述符的數量

16

fs_descrs

Descriptor[]

全速描述符列表

hs_descrs

Descriptor[]

高速描述符列表

所有數字必須採用小端位元組序。

Descriptor[] 是一個有效的 USB 描述符陣列,其格式如下

偏移

名稱

型別

描述

0

bLength

U8

描述符的長度

1

bDescriptorType

U8

描述符型別

2

payload

描述符的有效載荷

OSDesc[] 是一個有效的 MS OS 功能描述符陣列,具有以下格式之一

偏移

名稱

型別

描述

0

interface

U8

相關介面編號

1

dwLength

U32

描述符的長度

5

bcdVersion

U16

當前支援:1

7

wIndex

U16

當前支援:4

9

bCount

U8

ext. compat. 的數量

10

Reserved

U8

0

11

ExtCompat[]

ext. compat. d. 列表

偏移

名稱

型別

描述

0

interface

U8

相關介面編號

1

dwLength

U32

描述符的長度

5

bcdVersion

U16

當前支援:1

7

wIndex

U16

當前支援:5

9

wCount

U16

ext. compat. 的數量

11

ExtProp[]

ext. prop. d. 列表

ExtCompat[] 是一個有效的擴充套件相容性描述符陣列,其格式如下

偏移

名稱

型別

描述

0

bFirstInterfaceNumber

U8

介面索引或第一個

IAD 組中的介面

1

Reserved

U8

1

2

CompatibleID

U8[8]

相容 ID 字串

10

SubCompatibleID

U8[8]

子相容 ID 字串

18

Reserved

U8[6]

0

ExtProp[] 是一個有效的擴充套件屬性描述符陣列,其格式如下

偏移

名稱

型別

描述

0

dwSize

U32

描述符的長度

4

dwPropertyDataType

U32

1..7

8

wPropertyNameLength

U16

bPropertyName 長度 (NL)

10

bPropertyName

U8[NL]

此屬性的名稱

10+NL

dwPropertyDataLength

U32

bPropertyData 長度 (DL)

14+NL

bProperty

U8[DL]

此屬性的有效載荷

介面描述符

可以寫入標準 USB 介面描述符。最近的介面描述符的類/子類決定了接受的特定於類的描述符型別。

特定於類的描述符

僅接受最近介面描述符的類/子類的特定於類的描述符。以下是一些支援的特定於類的描述符。

DFU 功能描述符

當介面類為 USB_CLASS_APP_SPEC 且介面子類為 USB_SUBCLASS_DFU 時,可以提供 DFU 功能描述符。DFU 功能描述符在本編寫時在裝置韌體升級 (DFU) 的 USB 規範版本 1.1 中進行了描述。

struct usb_dfu_functional_descriptor

DFU 功能描述符

定義:

struct usb_dfu_functional_descriptor {
    __u8 bLength;
    __u8 bDescriptorType;
    __u8 bmAttributes;
    __le16 wDetachTimeOut;
    __le16 wTransferSize;
    __le16 bcdDFUVersion;
};

成員

bLength

描述符的大小(位元組)

bDescriptorType

USB_DT_DFU_FUNCTIONAL

bmAttributes

DFU 屬性

wDetachTimeOut

DFU_DETACH 後等待的最長時間(毫秒,le16)

wTransferSize

每次控制寫入的最大位元組數 (le16)

bcdDFUVersion

DFU 規範版本(BCD,le16)