Ergänzung des MB-Schnittstellenmodells
Die Microsoft-Betriebssystemdeskriptor ist in die folgenden Segmente unterteilt:
- Ein Microsoft-Betriebssystemzeichenfolgendeskriptor
- Mindestens ein Microsoft-Betriebssystemfeaturedeskriptor
Um den Betriebssystemdeskriptor zu unterstützen, muss das Gerät den Zeichenfolgendeskriptor implementieren. Zeichenfolgendeskriptor
Der Zeichenfolgendeskriptor des Microsoft-Betriebssystems ist eine Zeichenfolge, die im Zeichenfolgenindex 0xEE gespeichert wird. Das Format dieser Zeichenfolge ist klar definiert.
Der Microsoft-Betriebssystemzeichenfolgendeskriptor wird verwendet, um die folgenden Ziele zu erreichen
- Das Vorhandensein des Microsoft-Betriebssystemzeichenfolgendeskriptors gibt dem Betriebssystem an, dass auf dem Gerät Informationen in Form von Microsoft-Betriebssystemfeaturedeskriptoren eingebettet sind.
- Der Microsoft OS-Zeichenfolgendeskriptor verfügt über ein eingebettetes Signaturfeld, das verwendet wird, um es von zufälligen Zeichenfolgen zu unterscheiden, die sich möglicherweise auf einem Gerät am Zeichenfolgenindex 0xEE befinden.
- Der Microsoft-Betriebssystemzeichenfolgendeskriptor verfügt auch über eine eingebettete Versionsnummer, die zukünftige Überarbeitungen des Microsoft-Betriebssystemdeskriptors ermöglicht.
Auf einem Gerät wird nur ein Microsoft-Betriebssystemzeichenfolgendeskriptor gespeichert. In den folgenden Abschnitten wird die Struktur des Microsoft OS-Zeichenfolgendeskriptors und dessen Abrufprozedur beschrieben. Struktur der Betriebssystemzeichenfolge
Dies ist die Struktur des Zeichenfolgendeskriptors:
Zeichenfolgendeskriptorstruktur
Feld | Länge (Bytes) | Wert | Beschreibung |
---|---|---|---|
bLength |
1 |
0x12 |
Länge des Deskriptors |
bDescriptorType |
1 |
0x03 |
Zeichenfolgendeskriptor |
qwSignature |
14 |
"MSFT100" |
Signaturfeld (4D005300460054003100300030003000) |
bMS_VendorCode |
1 |
Anbietercode |
Anbietercode zum Abrufen anderer Betriebssystemfeaturedeskriptoren |
bPad |
1 |
0x00 |
Feld "Pad" |
Die Struktur des Microsoft-Betriebssystemzeichenfolgendeskriptors wurde für Version 1.00 behoben und weist eine Gesamtlänge von 18 Bytes auf. Die Versionsnummer des Microsoft-Betriebssystemzeichenfolgendeskriptors wird im Feld qwSignature aufgeführt. Die im Feld bMS_VendorCode gespeicherten Informationen müssen ein einzelner Bytewert sein. Es wird verwendet, um Microsoft OS-Funktionsdeskriptoren abzurufen, und dieser Bytewert wird im Feld bmRequestType wie folgt beschrieben verwendet:
Abrufen des Betriebssystemzeichenfolgendeskriptors
Um die in der Zeichenfolge gespeicherten Informationen abzurufen, muss eine Standardanforderung GET_DESCRIPTOR an das Gerät ausgestellt werden. Hier sehen Sie das Format der Anforderung:
Standard Get_Descriptor Zeichenfolgenanforderung
bmRequestType | bRequest | wValue | Windex | wLength | Daten |
---|---|---|---|---|---|
1000 0000b |
GET_DESCRIPTOR |
0x03EE |
0x0000 |
0x12 |
Gibt die Zeichenfolge zurück. |
Das BmRequestType-Feld ist eine Bitmap, die aus drei Teilen besteht: Datenübertragungsrichtung, Deskriptortyp und Empfänger. Gemäß der USB-Spezifikation ist der Wert von bmRequestType auf 1000 0000b (0x80) festgelegt.
Bei einer GET_DESCRIPTOR Anforderung ist das wValue-Feld in zwei Teile unterteilt. Das hohe Byte speichert den Deskriptortyp und das niedrige Byte den Deskriptorindex. Um den Microsoft OS-Zeichenfolgendeskriptor abzurufen, sollte das hohe Byte so festgelegt werden, dass ein Zeichenfolgendeskriptor abgerufen wird – 0x03. Da der Zeichenfolgendeskriptor des Microsoft-Betriebssystems immer am Index 0xEE gespeichert wird, sollte dieser Zeichenfolgenindex im unteren Byte des wValue-Felds gespeichert werden.
Der wIndex wird verwendet, um die Sprach-ID zu speichern, muss jedoch für einen Microsoft OS-Zeichenfolgendeskriptor auf 0 festgelegt werden.
Das wLength-Feld wird verwendet, um die Länge des abzurufenden Zeichenfolgendeskriptors anzugeben. Das Gerät sollte auf einen gültigen Bereich von 0x02 bis 0xFF reagieren.
Wenn ein Gerät nicht über einen gültigen Deskriptor an der entsprechenden Adresse (0xEE) verfügt, antwortet es mit einem Anforderungsfehler oder einer Verzögerung. Wenn Geräte nicht mit einem Stillstand reagieren, wird eine einmalige Nullzurücksetzung für das Gerät ausgegeben (um es wiederherzustellen, wenn es in einen unbekannten Zustand versetzt werden sollte).
Überprüfen der Integrität des Betriebssystemdeskriptors
Da Anbieter jede Zeichenfolgen-ID zum Speichern von Informationen verwenden dürfen, muss das Betriebssystem überprüfen, ob die im Index gespeicherte Zeichenfolge 0xEE tatsächlich der Zeichenfolgendeskriptor des Microsoft-Betriebssystems ist. Um dies zu überprüfen, werden die folgenden Tests durchgeführt. Ein Fehler von beiden verhindert den Abruf der Funktionsdeskriptoren des Microsoft-Betriebssystems.
- Wenn ein Anbieter eine Zeichenfolge am Indexspeicherort 0xEE speichert, ruft das Betriebssystem die Zeichenfolge ab und fragt sie ab, um festzustellen, ob es sich um die Zeichenfolge des Microsoft-Betriebssystems handelt. Dies kann überprüft werden, indem das Signaturfeld in der Zeichenfolge mit dem zuvor angegebenen Signaturfeldeintrag verglichen wird. Ein Konflikt würde eine weitere Analyse der Zeichenfolge verhindern.
- Der zweite Test umfasst eine Überprüfung der Länge der Zeichenfolge basierend auf der im Signaturfeld angegebenen Versionsnummer. Die angegebene Versionsnummer (in der Zeichenfolge "MSFT100") ist 1.00. Dies entspricht einem 18-Byte-Zeichenfolgendeskriptor.
Microsoft OS-Zeichenfolgendeskriptoreinschränkungen
Die folgenden Einschränkungen gelten für Microsoft-Betriebssystemzeichenfolgendeskriptoren und deren Abruf:
- Um Informationen in Übereinstimmung mit der Microsoft-Betriebssystemdeskriptorspezifikation zu speichern, muss das Gerät über einen einzigen Microsoft OS-Zeichenfolgendeskriptor verfügen, der den in Microsoft-Betriebssystemdeskriptoren beschriebenen Informationen entspricht.
- Ein Gerätehersteller kann jeden Wert im Feld bMS_VendorCode in der Zeichenfolgenbeschreibung des Microsoft-Betriebssystems verwenden.
Featuredeskriptor
Ein Featuredeskriptor ist ein Deskriptor im festen Format, der für einen bestimmten Zweck definiert wurde.
Abrufen eines Betriebssystemfeaturedeskriptors
Um eine Funktionsbeschreibung des Microsoft-Betriebssystems abzurufen, muss eine spezielle GET_MS_DESCRIPTOR Anforderung an das Gerät ausgegeben werden. Hier sehen Sie das Format der Anforderung:
Standard-Geräteanforderungsformat
bmRequestType | bRequest | wValue | Windex | wLength | Daten |
---|---|---|---|---|---|
1100 0000b |
GET_MS_DESCRIPTOR |
X |
Featureindex |
Länge |
Gibt Deskriptor zurück |
Das BmRequestType-Feld ist eine Bitmap, die aus drei Teilen besteht – Datenübertragungsrichtung, Deskriptortyp und Empfänger – und entspricht der USB-Spezifikation. Der Microsoft OS-Funktionsdeskriptor ist ein herstellerspezifischer Deskriptor, und die Richtung der Datenübertragung erfolgt vom Gerät zum Host. Daher ist der Wert von bmRequestType auf 1100 0000b (0xC0) festgelegt.
Das Feld bRequest wird verwendet, um das Format der Anforderung anzugeben. Um einen Microsoft OS-Funktionsdeskriptor abzurufen, sollte das Feld bRequest mit einem speziellen GET_MS_DESCRIPTOR Byte aufgefüllt werden. Der Wert dieses Byte wird durch den bMS_VendorCode angegeben, der aus dem Microsoft-Zeichenfolgendeskriptor abgerufen wird. Weitere Informationen zum Abrufen des Microsoft-Betriebssystemzeichenfolgendeskriptors finden Sie unter Abrufen des Betriebssystemzeichenfolgendeskriptors.
Das wValue-Feld wird speziell verwendet und in ein hohes und ein niedriges Byte unterteilt. Das hohe Byte wird verwendet, um die Schnittstellennummer zu speichern. Dies ist wichtig, um Featuredeskriptoren auf Schnittstellenbasis zu speichern, insbesondere für zusammengesetzte Geräte oder Geräte mit mehreren Schnittstellen. In den meisten Fällen wird die Schnittstelle 0 verwendet. Das niedrige Byte wird verwendet, um eine Seitenzahl zu speichern. Dieses Feature verhindert, dass Deskriptoren eine Größengrenze von 64 KB aufweisen (ein Grenzwert, der durch die Größe des wLength-Felds festgelegt wird). Ein Deskriptor wird abgerufen, wobei der Seitenwert zunächst auf 0 festgelegt ist. Wenn ein vollständiger Deskriptor (Größe ist 64 KB) empfangen wird, wird der Seitenwert um eins erhöht, und die Anforderung für den Deskriptor wird erneut gesendet (diesmal mit dem inkrementierten Seitenwert). Dieser Vorgang wird wiederholt, bis ein Deskriptor mit einer Größe von weniger als 64 KB empfangen wird. Beachten Sie, dass die maximale Seitenanzahl 255 beträgt, wodurch die Deskriptorgröße auf 16 MB begrenzt ist.
Im Feld wIndex wird die Featureindexnummer für den abgerufenen Featuredeskriptor des Microsoft-Betriebssystems gespeichert. Microsoft verwaltet diese Liste der Funktionsdeskriptoren und Indizes des Microsoft-Betriebssystems. Weitere Informationen zu Funktionsdeskriptoren des Microsoft-Betriebssystems finden Sie unter Microsoft OS-Deskriptoren.
Das wLength-Feld gibt die Länge des abzurufenden Deskriptors an. Wenn der Deskriptor länger ist als die Anzahl der Bytes, die im Feld wLength angegeben ist, werden nur die anfänglichen Bytes des Deskriptors zurückgegeben. Wenn es kürzer als der im Feld wLength angegebene Wert ist, wird ein kurzes Paket zurückgegeben.
Wenn ein bestimmter Betriebssystemdeskriptor nicht vorhanden ist, gibt das Gerät einen Anforderungsfehler oder einen Stillstand aus.
Einschränkungen für Microsoft-Betriebssystemfeaturedeskriptoren
Die folgenden Einschränkungen gelten für Microsoft-Betriebssystemfeaturedeskriptoren und deren Abruf.
- Alle Funktionsdeskriptoren des Microsoft-Betriebssystems sind definiert und standardisiert. Anbieter dürfen Funktionsdeskriptoren des Microsoft-Betriebssystems ohne direkte Zustimmung von Microsoft nicht ändern, anfügen oder erstellen.
- Alle Funktionsdeskriptoren des Microsoft-Betriebssystems haben eine Größe und versionsnummer, die darin eingebettet ist. Diese Werte sollten immer korrekte Informationen an das Betriebssystem melden.
- Auf einem Gerät kann mehr als ein Microsoft-Betriebssystemfeaturedeskriptor in die Firmware eingebettet sein.
- Einige Funktionsdeskriptoren des Microsoft-Betriebssystems werden auf Schnittstellenebene gespeichert, während andere für das Gerät eindeutig sind. Featuredeskriptoren auf Geräteebene sollten das hohe Byte des wValue-Felds auf Null festlegen.
Struktur des Featuredeskriptors
Um sich als in der Lage zu identifizieren, MBIM zu unterstützen, muss ein Gerät auch den erweiterten Konfigurationsdeskriptor unterstützen, der einer der definierten Featuredeskriptoren ist. Die Struktur dieses Deskriptors lautet wie folgt.
Headerabschnitt
Der Headerabschnitt speichert Informationen über den Rest der erweiterten Konfigurationsdeskriptor. Das Feld dwLength enthält die Länge des gesamten deskriptors für die erweiterte Konfiguration. Der Headerabschnitt enthält auch eine Versionsnummer, die zunächst auf 1.00 (0100H) festgelegt wird. Zukünftige Überarbeitungen dieses Deskriptors können zu einem späteren Zeitpunkt veröffentlicht werden. Beachten Sie, dass zukünftige Versionen des Deskriptors für erweiterte Konfiguration möglicherweise auch die Anzahl der Einträge im Headerabschnitt erhöhen müssen. Überprüfen Sie daher, ob diese Nummer genau auf dem Gerät gespeichert und vom Betriebssystem gelesen wird.
Abschnitt zum erweiterten Konfigurationsdeskriptorheader
Offset | Feld | Size | Wert | BESCHREIBUNG |
---|---|---|---|---|
0 |
dwLength |
4 |
DWORD ohne Vorzeichen |
Das Feld länge beschreibt die Länge des Deskriptors für die erweiterte Konfiguration in Bytes. |
4 |
bcdVersion |
2 |
BCD |
Releasenummer des erweiterten Konfigurationsdeskriptors in Binary Coded Decimal (z. B. Version 1.00 ist 0100H). |
6 |
Windex |
2 |
WORD |
Behoben = 0x0004 |
8 |
bCount |
1 |
BYTE |
Gesamtanzahl der Funktionsabschnitte, die dem Headerabschnitt folgen = 0x01 |
9 |
RESERVIERT |
7 |
RESERVIERT |
Funktionsabschnitt
Der Funktionsabschnitt enthält zwei wichtige Informationen. Es gruppiert aufeinanderfolgende Schnittstellen, die einen ähnlichen Zweck erfüllen, in Funktionsgruppen und stellt kompatible und unterkompatible IDs für jede Funktion bereit.
Hier sehen Sie das Format des Funktionsabschnitts, einschließlich Der Werte, die von einem MBIM-Gerät verwendet werden sollten:
Abschnitt der erweiterten Konfigurationsdeskriptorfunktion
Offset¹ | Feld | Size | Wert | BESCHREIBUNG |
---|---|---|---|---|
0 |
bFirstInterfaceNumber |
1 |
Byte |
Startschnittstellennummer für diese Funktion = 0x00 |
1 |
bInterfaceCount |
1 |
Byte |
Gesamtzahl der Schnittstellen, die von dieser Funktion eingeschlossen werden müssen = 0x01 |
2 |
compatibleID |
8 |
Byte |
Kompatible ID |
10 |
subCompatibleID |
8 |
Byte |
Unterkompatible ID |
18 |
RESERVIERT |
6 |
RESERVIERT = 0 |
¹Offset des abschnitts für benutzerdefinierte Eigenschaften wurde auf null zurückgesetzt. Um den Offset eines Felds am Anfang des erweiterten Konfigurationsdeskriptors zu berechnen, fügen Sie die Länge der Abschnitte hinzu, die ihm vorangestellt sind.
Kompatible und unterkompatible IDs basierend auf der Konfiguration, die die MBIM-Funktion verfügbar macht
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 bezieht sich auf den bConfiguration-Wert innerhalb des USB-Konfigurationsdeskriptors der Konfiguration, die die MBIM-Funktion verfügbar macht. bConfiguration kann nicht 1 sein, da dies die Standardkonfiguration ist, die nur die Funktion CDROM verfügbar macht. bConfiguration darf nicht größer als 4 sein; Das heißt, die MBIM-Funktion sollte innerhalb der ersten vier Konfigurationen verfügbar gemacht werden.
- compatibleID bleibt für alle Konfigurationen gleich. Die subcompatibleID ändert sich basierend auf der Konfiguration.
Beispiel
Diese Tabelle zeigt ein Beispiel für ein Szenario mit mehreren Konfigurationen. In der Tabelle sind die in jeder Konfiguration verfügbaren Funktionen und die Aktionen aufgeführt, die verschiedene Versionen des Betriebssystems für jede dieser Konfigurationen ausführen:
Beispiel für ein mobiles Breitbandgerät mit mehreren Konfigurationen
bConfiguration | 1 (Windows-7-Konfiguration) | 2 (IHV-NCM-1.0-Configuration) | 3 (Windows-8-Konfiguration) | 3 (IHV-NCM-2.0-Configuration) |
---|---|---|---|---|
Verfügbar gemachte Funktionen |
CDROM SD |
CD-ROM SD NCM1.0 Modem TV GPS FP PC/SC Smart Karte Sprache Diag |
CD-ROM SD MBIM |
CD-ROM SD NCM2.0 Modem TV GPS FP PC/SC Smart Karte Sprache Diag |
Die folgenden Tabellen zeigen die Werte, die vom Zeichenfolgendeskriptor des Microsoft-Betriebssystems und dem Erweiterten Konfigurationsfeaturedeskriptor des Microsoft-Betriebssystems für das Multikonfigurationsszenario des vorherigen Beispiels verwendet wurden.
Beispiel für ein mobiles Breitbandgerät mit mehreren Konfigurationen
Feld | Länge (Bytes) | Wert |
---|---|---|
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 |
Beispielheader für erweiterte Konfigurationsfeatures des Microsoft-Betriebssystems
Offset | Feld | Size | Wert |
---|---|---|---|
0 |
dwLength |
4 |
16 |
4 |
bcdVersion |
2 |
0100H |
6 |
Windex |
2 |
0x0004 |
8 |
bCount |
1 |
1 |
9 |
RESERVIERT |
7 |
Beispielfunktion für erweiterte Konfigurationsfeatures von Microsoft OS
Offset² | Feld | Size | Wert |
---|---|---|---|
0 |
bFirstInterfaceNumber |
1 |
|
1 |
bInterfaceCount |
1 |
|
2 |
compatibleID |
8 |
|
10 |
subCompatibleID |
8 |
|
18 |
RESERVIERT |
6 |
²Offset des Abschnitts für benutzerdefinierte Eigenschaften wurde auf 0 zurückgesetzt. Um den Offset eines Felds vom Anfang des deskriptors für die erweiterte Konfiguration zu berechnen, fügen Sie die Länge der abschnitte hinzu, die ihm vorangestellt sind.