Поделиться через


Дополнение к модели интерфейса MB

Дескриптор ОС Майкрософт разбит на следующие сегменты:

  • Один дескриптор строки ОС Майкрософт
  • Один или несколько дескрипторов функций ОС Майкрософт

Для поддержки дескриптора ОС устройство должно реализовать дескриптор строки. Дескриптор строки

Дескриптор строки ОС Майкрософт — это строка, которая хранится в строковом индексе 0xEE. Формат этой строки четко определен.

Дескриптор строки ОС Майкрософт используется для достижения следующих целей.

  • Наличие дескриптора строки ОС Майкрософт указывает операционной системе на то, что устройство имеет внедренную информацию в виде дескрипторов функций ОС Майкрософт.
  • Дескриптор строки ОС Майкрософт имеет внедренное поле сигнатуры, которое используется для отличия от случайных строк, которые могут находиться на устройстве в строковом индексе 0xEE.
  • Дескриптор строки ОС Майкрософт также имеет встроенный номер версии, который позволяет использовать будущие редакции дескриптора ОС Майкрософт.

На устройстве хранится только один дескриптор строки ОС Майкрософт. В следующих разделах описывается структура дескриптора строки ОС Майкрософт и его процедура извлечения. Структура строки ОС

Ниже приведена структура дескриптора строки:

Структура дескриптора строки

Поле Длина (байт) Значение Описание

bLength

1

0x12

Длина дескриптора

bDescriptorType

1

0x03

Дескриптор строки

qwSignature

14

"MSFT100"

Поле сигнатуры (4D00530046005400310030003000)

bMS_VendorCode

1

Код поставщика

Код поставщика для получения других дескрипторов функций ОС

bPad

1

0x00

Поле панели

Структура дескриптора строки ОС Майкрософт фиксирована для версии 1.00 и имеет общую длину 18 байт. Номер версии дескриптора строки ОС Майкрософт указан в поле qwSignature . Сведения, хранящиеся в поле bMS_VendorCode , должны быть одним байтовым значением. Он будет использоваться для получения дескрипторов функций ОС Майкрософт, и это значение байта используется в поле bmRequestType , описанном ниже.

Получение дескриптора строки ОС

Чтобы получить сведения, хранящиеся в строке, на устройство должен быть выдан стандартный запрос GET_DESCRIPTOR. Ниже приведен формат запроса:

Стандартный строковый запрос Get_Descriptor

bmRequestType bRequest wValue wIndex wLength Данные

1000 0000b

GET_DESCRIPTOR

0x03EE

0x0000

0x12

Возвращает строку .

Поле bmRequestType — это растровое изображение, состоящее из трех частей: направление передачи данных, тип дескриптора и получатель. Согласно спецификации USB, значение bmRequestType равно 1000 0000b (0x80).

Для запроса GET_DESCRIPTOR поле wValue делится на две части. В высоком байте хранится тип дескриптора, а в низком — индекс дескриптора. Чтобы получить дескриптор строки ОС Майкрософт, необходимо задать высокий байт, чтобы получить дескриптор строки — 0x03. Так как дескриптор строки ОС Майкрософт всегда хранится в индексе 0xEE, этот строковый индекс должен храниться в нижнем байте поля wValue .

WIndex используется для хранения идентификатора языка, но для дескриптора строки ОС Майкрософт ему необходимо задать нулевое значение.

Поле wLength используется для указания длины извлекаемого дескриптора строки. Устройство должно реагировать на любой допустимый диапазон от 0x02 до 0xFF.

Если устройство не имеет допустимого дескриптора по соответствующему адресу (0xEE), оно ответит ошибкой запроса или остановкой. Если устройства не отвечают на ошибку, на устройство будет выдано однократное нулевое сброс (чтобы восстановить его, если оно должно перейти в неизвестное состояние).

Проверка целостности дескриптора ОС

Так как поставщикам разрешено использовать любой идентификатор строки для хранения информации, операционная система должна убедиться, что строка, храняющаяся в индексе 0xEE, действительно является дескриптором строки ОС Майкрософт. Чтобы проверить это, будут проведены следующие тесты. Сбой любого из этих дескрипторов будет препятствовать получению дескрипторов функций ОС Майкрософт.

  • Если поставщик хранит строку в расположении индекса 0xEE, операционная система извлекает строку и запрашивает ее, чтобы узнать, является ли она строкой ОС Майкрософт. Это можно проверить, сравнив поле подписи в строке с записью поля подписи, указанной ранее. Несоответствие помешает дальнейшему анализу строки.
  • Второй тест будет включать проверку длины строки на основе номера версии, указанного в поле сигнатуры. Указанный номер версии (в строке MSFT100) — 1,00. Соответствует 18-байтовому дескриптору строки.

Ограничения строкового дескриптора ОС Майкрософт

К дескрипторам строк ОС Майкрософт и их извлечению применяются следующие ограничения:

  • Для хранения сведений в соответствии со спецификацией дескриптора ОС Майкрософт устройство должно иметь только один дескриптор строки ОС Майкрософт, который соответствует сведениям, приведенным в разделе Дескрипторы ОС Майкрософт.
  • Поставщик устройства может использовать любое значение в поле bMS_VendorCode дескриптора строки ОС Майкрософт.

Дескриптор компонентов

Дескриптор функции — это дескриптор фиксированного формата, определенный для определенной цели.

Получение дескриптора функций ОС

Чтобы получить дескриптор компонента ОС Майкрософт, на устройство должен быть выдан специальный запрос GET_MS_DESCRIPTOR. Ниже приведен формат запроса:

Стандартный формат запроса устройства

bmRequestType bRequest wValue wIndex wLength Данные

1100 0000b

GET_MS_DESCRIPTOR

X

Индекс компонентов

Длина

Возвращает дескриптор

Поле bmRequestType представляет собой растровое изображение, состоящее из трех частей ( направление передачи данных, тип дескриптора и получатель) и соответствует спецификации USB. Дескриптор функций ОС Майкрософт — это дескриптор, зависящий от поставщика, и направление передачи данных с устройства на узел. Таким образом, значение bmRequestType равно 1100 0000b (0xC0).

Поле bRequest используется для указания формата запроса. Чтобы получить дескриптор компонентов ОС Майкрософт, поле bRequest должно быть заполнено специальным GET_MS_DESCRIPTOR байтом. Значение этого байта обозначается bMS_VendorCode, извлекаемой из дескриптора строки Майкрософт. Дополнительные сведения о получении дескриптора строки ОС Майкрософт см. в разделе Получение дескриптора строки ОС.

Поле wValue используется специально и разбивается на высокий байт и низкий байт. Для хранения номера интерфейса используется высокий байт. Это важно для хранения дескрипторов функций на основе каждого интерфейса, особенно для составных устройств или устройств с несколькими интерфейсами. В большинстве случаев используется интерфейс 0. Низкий байт используется для хранения номера страницы. Эта функция не позволяет дескрипторам иметь границу размера 64 КБ (ограничение, заданное размером поля wLength ). Дескриптор будет возвращен с начальным значением страницы, равным нулю. Если получен полный дескриптор (размер составляет 64 КБ), значение страницы увеличивается на единицу и запрос дескриптора будет отправлен снова (на этот раз с увеличенным значением страницы). Этот процесс будет повторяться до получения дескриптора размером менее 64 КБ. Обратите внимание, что максимальное количество страниц составляет 255, что ограничивает размер дескриптора в 16 МБ.

В поле wIndex хранится номер индекса компонента для извлекаемого дескриптора компонентов ОС Майкрософт. Корпорация Майкрософт будет поддерживать этот список дескрипторов и индексов компонентов ОС Майкрософт. Дополнительные сведения о дескрипторов компонентов ОС Майкрософт см. в разделе Дескрипторы ОС Майкрософт.

Поле wLength указывает длину извлекаемого дескриптора. Если дескриптор превышает число байтов, указанное в поле wLength , возвращаются только начальные байты дескриптора. Если оно короче значения, указанного в поле wLength , возвращается короткий пакет.

Если определенный дескриптор ОС отсутствует, устройство выдаст ошибку запроса или зависнет.

Ограничения дескриптора компонентов ОС Майкрософт

Следующие ограничения применяются к дескрипторам компонентов ОС Майкрософт и их извлечению.

  • Все дескрипторы компонентов ОС Майкрософт определены и стандартизированы. Поставщикам запрещено изменять, добавлять или создавать дескрипторы компонентов ОС Майкрософт без прямого согласия корпорации Майкрософт.
  • Все дескрипторы компонентов ОС Майкрософт будут иметь размер и номер версии. Эти значения всегда должны передавать правильные сведения операционной системе.
  • В встроенное ПО устройства может быть внедрено несколько дескрипторов функций ОС Майкрософт.
  • Некоторые дескрипторы функций ОС Майкрософт хранятся на уровне интерфейса, а другие уникальны для устройства. Дескрипторы функций ОС Майкрософт на уровне устройства должны устанавливать высокий байт поля wValue как нуль.

Структура дескриптора признаков

Чтобы определить себя как способного поддерживать MBIM, устройство также должно поддерживать расширенный дескриптор конфигурации, который является одним из определенных дескрипторов функций. Структура этого дескриптора выглядит следующим образом.

Раздел заголовка

В разделе заголовка хранятся сведения об остальной части расширенного дескриптора конфигурации. Поле dwLength содержит длину всего дескриптора расширенной конфигурации. Раздел заголовка также содержит номер версии, который изначально будет иметь значение 1.00 (0100H). Будущие редакции этого дескриптора могут быть выпущены позже. Обратите внимание, что в будущих версиях дескриптора расширенной конфигурации также может потребоваться увеличить количество записей в разделе заголовка, поэтому убедитесь, что это число точно хранится на устройстве и считывается операционной системой.

Раздел заголовка дескриптора расширенной конфигурации

Offset Поле Size Значение Описание

0

dwLength

4

Неподписанный DWORD

Поле length описывает длину дескриптора расширенной конфигурации в байтах.

4

bcdVersion

2

BCD

Номер выпуска дескриптора расширенной конфигурации в двоичном кодированном десятичном формате (например, версия 1.00 — 0100H).

6

wIndex

2

WORD

Исправлено = 0x0004

8

bCount

1

BYTE

Общее количество разделов функций, следующих за заголовком , = 0x01

9

RESERVED

7

RESERVED

Раздел "Функция"

Раздел функции содержит два важных элемента информации. Он группирует последовательные интерфейсы, которые служат аналогичной цели, в группы функций и предоставляет совместимые и несообъединяемые идентификаторы для каждой функции.

Ниже приведен формат раздела функции, включая значения, которые должны использоваться устройством MBIM:

Раздел функции дескриптора расширенной конфигурации

Offset¹ Поле Size Значение Описание

0

bFirstInterfaceNumber

1

Byte

Начальный номер интерфейса для этой функции = 0x00

1

bInterfaceCount

1

Byte

Общее число интерфейсов, которые должны быть включены в из этой функции = 0x01

2

compatibleID

8

Байты

Совместимый идентификатор

10

subCompatibleID

8

Байты

Субсовместимый идентификатор

18

RESERVED

6

RESERVED = 0

Значение ¹Offset раздела настраиваемых свойств было сброшено до нуля. Чтобы вычислить смещение поля от начала дескриптора расширенной конфигурации, добавьте длину разделов, предшествующих ему.

Совместимые и субсовместимые идентификаторы на основе конфигурации, предоставляющей функцию MBIM

bConfiguration compatibleID subCompatibleID

2

ALTRCFG

(0x41 0x4C 0x54 0x52 0x43 0x46 0x47 0x00)

20000000

(0x32 0x00 0x00 0x00 0x00 0x00 0x00 0x00)

3

ALTRCFG

(0x41 0x4C 0x54 0x52 0x43 0x46 0x47 0x00)

30000000

(0x33 0x00 0x00 0x00 0x00 0x00 0x00 0x00)

4

ALTRCFG

(0x41 0x4C 0x54 0x52 0x43 0x46 0x47 0x00)

40000000

(0x34 0x00 0x00 0x00 0x00 0x00 0x00 0x00)

  • bConfiguration относится к значению bConfiguration в дескрипторе конфигурации USB конфигурации, которая предоставляет функцию MBIM. BConfiguration не может иметь значение 1, так как это конфигурация по умолчанию, предоставляющая только функцию CDROM. bConfiguration не может быть больше 4; то есть функция MBIM должна быть предоставлена в первых четырех конфигурациях.
  • Значение compatibleID остается неизменным для всех конфигураций. SubcompatibleID изменяется в зависимости от конфигурации

Пример

В этой таблице показан пример сценария с несколькими конфигурациями. В таблице перечислены функции, доступные в каждой конфигурации, и действия, выполняемые различными версиями операционной системы для каждой из этих конфигураций:

Пример мобильного широкополосного устройства с несколькими конфигурациями

bConfiguration 1 (Windows-7-Configuration) 2 (IHV-NCM-1.0-Configuration) 3 (Windows-8-Configuration) 3 (IHV-NCM-2.0-Configuration)

Функции, предоставляемые

CDROM

SD

компакт-диск

SD

NCM1.0

Modem (Модем)

TV

GPS

FP

Интеллектуальные карта PC/SC

Голосовая связь

Рис

компакт-диск

SD

MBIM

компакт-диск

SD

NCM2.0

Modem (Модем)

TV

GPS

FP

Интеллектуальные карта PC/SC

Голосовая связь

Рис

В следующих таблицах показаны значения, используемые дескриптором строки ОС Майкрософт и дескриптором расширенной конфигурации ОС Майкрософт для сценария с несколькими конфигурациями предыдущего примера.

Пример мобильного широкополосного устройства с несколькими конфигурациями

Поле Длина (байт) Значение

bLength

1

0x12

bDescriptorType

1

0x03

qwSignature

14

MSFT100

0x4D 0x00 0x53 0x00 0x46 0x00 0x54 0x00 0x31 0x00 0x30 0x00 0x30 0x00

bMS_VendorCode

1

0xA5

bPad

1

0x00

Пример заголовка дескриптора функции расширенной конфигурации MICROSOFT

Offset Поле Size Значение

0

dwLength

4

16

4

bcdVersion

2

0100H

6

wIndex

2

0x0004

8

bCount

1

1

9

RESERVED

7

Пример функции-дескриптора расширенной конфигурации Ос Майкрософт

Offset² Поле Size Значение

0

bFirstInterfaceNumber

1

1

bInterfaceCount

1

2

compatibleID

8

10

subCompatibleID

8

18

RESERVED

6

Значение ²Offset раздела настраиваемых свойств было сброшено до нуля. Чтобы вычислить смещение поля от начала дескриптора расширенной конфигурации, добавьте длину разделов, предшествующих ему.