Udostępnij przez


Uzupełnienie modelu interfejsu MB

Deskryptor systemu operacyjnego Microsoft jest podzielony na następujące segmenty:

  • Deskryptor ciągu systemu operacyjnego Microsoft
  • Co najmniej jeden deskryptor funkcji systemu operacyjnego Microsoft

Aby obsługiwać deskryptor systemu operacyjnego, urządzenie musi zaimplementować deskryptor ciągu. Deskryptor ciągu

Deskryptor ciągu systemu operacyjnego Microsoft jest ciągiem przechowywanym pod indeksem 0xEE. Format tego ciągu jest dobrze zdefiniowany.

Deskryptor ciągu systemu operacyjnego Microsoft służy do osiągnięcia następujących celów

  • Obecność deskryptora ciągów systemu operacyjnego Microsoft wskazuje systemowi operacyjnemu, że urządzenie zawiera informacje osadzone w nim, w postaci deskryptorów funkcji systemu operacyjnego Microsoft.
  • Deskryptor ciągu systemu operacyjnego Microsoft ma wbudowane pole sygnatury, które jest używane do odróżniania go od losowych ciągów, które mogą występować na urządzeniu na indeksie ciągu 0xEE.
  • Deskryptor ciągu systemu operacyjnego Microsoft ma również osadzony numer wersji, który umożliwia przyszłe wersje deskryptora systemu operacyjnego Microsoft.

Na urządzeniu jest przechowywany tylko jeden deskryptor ciągu systemu operacyjnego Microsoft. W poniższych sekcjach opisano strukturę deskryptora ciągu systemu operacyjnego Microsoft oraz procedurę pobierania. Struktura ciągu systemu operacyjnego

Oto struktura deskryptora ciągów:

Struktura deskryptora ciągów

(No changes needed) Długość (bajty) Wartość Opis

bLength

1

0x12

Długość deskryptora

bDescriptorType

1

0x03

Deskryptor ciągu

qwSignature

14

"MSFT100"

Pole podpisu (4D00530046005400310030003000)

bMS_VendorCode

1

Kod dostawcy

Kod dostawcy do pobierania innych deskryptorów funkcji systemu operacyjnego

bPad

1

0x00

Pole okienka

Struktura deskryptora ciągów systemu operacyjnego Microsoft jest stała dla wersji 1.00 i ma ogólną długość 18 bajtów. Numer wersji deskryptora ciągu systemu operacyjnego Microsoft znajduje się w polu qwSignature . Informacje przechowywane w polu bMS_VendorCode muszą być pojedynczą wartością bajtu. Będzie on używany do pobierania deskryptorów funkcji systemu operacyjnego Microsoft, a ta wartość bajtu jest używana w polu bmRequestType opisanym w następujący sposób:

Pobieranie deskryptora ciągu systemu operacyjnego

Aby pobrać informacje przechowywane w ciągu, do urządzenia musi zostać wysłane standardowe żądanie GET_DESCRIPTOR. Oto format żądania:

Standardowe żądanie ciągu Get_Descriptor

bmRequestType bRequest wValue wIndex długość Dane

1000 0000b

GET_DESCRIPTOR

0x03EE

0x0000

0x12

Zwraca ciąg

Pole bmRequestType to mapa bitowa składająca się z trzech części — kierunku transferu danych, typu deskryptora i adresata. Zgodnie ze specyfikacją USB wartość bmRequestType jest ustawiona na 1000 0000b (0x80).

W przypadku żądania GET_DESCRIPTOR pole wValue jest podzielone na dwie części. Wysoki bajt przechowuje typ deskryptora, a bajt niski przechowuje indeks deskryptora. Aby pobrać deskryptor ciągu systemu operacyjnego Microsoft, należy ustawić wysoki bajt, aby pobrać deskryptor ciągu — 0x03. Ponieważ deskryptor łańcucha systemu operacyjnego Microsoft jest zawsze przechowywany w indeksie łańcucha 0xEE, ten indeks powinien być przechowywany w dolnym bajcie pola wValue.

Indeks wIndex służy do przechowywania identyfikatora języka, ale musi być ustawiony na zero dla deskryptora ciągu systemu operacyjnego Microsoft.

Pole wLength służy do wskazywania długości deskryptora ciągu do pobrania. Urządzenie powinno odpowiadać na dowolny ważny zakres od 0x02 do 0xFF.

Jeśli urządzenie nie ma prawidłowego deskryptora na odpowiednim adresie (0xEE), odpowie błędem żądania lub zawieszeniem. pl-PL: Gdy urządzenia nie odpowiadają za pomocą sygnału STOP, reset z sygnałem zero zostanie wystawiony dla urządzenia (w celu odzyskania go, jeśli powinno przejść do nieznanego stanu).

Weryfikowanie integralności deskryptora systemu operacyjnego

Ponieważ dostawcy mogą używać dowolnego identyfikatora ciągu do przechowywania informacji, system operacyjny musi sprawdzić, czy ciąg przechowywany w indeksie 0xEE jest rzeczywiście deskryptorem ciągu systemu operacyjnego Microsoft. Aby to sprawdzić, zostaną przeprowadzone następujące testy. Awaria któregokolwiek uniemożliwi odzyskiwanie deskryptorów funkcji systemu operacyjnego firmy Microsoft.

  • Jeśli dostawca przechowuje ciąg w lokalizacji indeksu 0xEE, system operacyjny pobierze ciąg i wyśle do niego zapytanie, aby sprawdzić, czy jest to ciąg systemu operacyjnego Microsoft. Można to zweryfikować, porównując pole podpisu w ciągu z wcześniej określonym wpisem w polu podpisu. Niezgodność uniemożliwiłaby dalsze analizowanie ciągu.
  • Drugi test będzie zawierać weryfikację długości ciągu na podstawie numeru wersji określonego w polu podpisu. Określony numer wersji (w ciągu "MSFT100") to 1,00. Odpowiada to deskryptorowi ciągu 18-bajtowego.

Ograniczenia deskryptora ciągów systemu operacyjnego Microsoft

Następujące ograniczenia dotyczą deskryptorów ciągów systemu operacyjnego Microsoft i ich pobierania:

  • Aby przechowywać informacje zgodne ze specyfikacją deskryptora systemu operacyjnego Microsoft, urządzenie musi mieć deskryptor ciągu systemu operacyjnego Microsoft, który jest zgodny z informacjami opisanymi w deskryptorach systemu operacyjnego Microsoft.
  • Dostawca urządzenia może używać dowolnej wartości w polu bMS_VendorCode w deskryptorze ciągu systemu operacyjnego Microsoft

Atrybut funkcji

Deskryptor funkcji to deskryptor o stałym formacie, który został zdefiniowany w określonym celu.

Pobieranie deskryptora funkcji systemu operacyjnego

Aby pobrać deskryptor funkcji systemu operacyjnego Microsoft, do urządzenia należy wysłać specjalne żądanie GET_MS_DESCRIPTOR. Oto format żądania:

Standardowy format żądania urządzenia

bmRequestType bRequest wValue wIndex długość Dane

1100 0000b

GET_MS_DESCRIPTOR

X

Indeks funkcji

Długość

Zwraca deskryptor

Pole bmRequestType to mapa bitowa składająca się z trzech części — kierunku transferu danych, typu deskryptora i adresata — i jest zgodna ze specyfikacją USB. Deskryptor funkcji systemu operacyjnego Microsoft jest deskryptorem specyficznym dla dostawcy, a kierunek transferu danych jest z urządzenia do hosta. W związku z tym wartość bmRequestType jest ustawiona na 1100 0000b (0xC0).

Pole bRequest służy do wskazywania formatu żądania. Aby pobrać deskryptor funkcji systemu operacyjnego Microsoft, pole bRequest powinno zostać wypełnione specjalnym GET_MS_DESCRIPTOR bajtem. Wartość tego bajtu jest wskazywana przez bMS_VendorCode, który jest pobierany z deskryptora ciągów firmy Microsoft. Aby uzyskać więcej informacji na temat pobierania deskryptora ciągu systemu operacyjnego Microsoft, zobacz Pobieranie deskryptora ciągu systemu operacyjnego.

Pole wValue jest używane w specjalny sposób i jest podzielone na bajt wyższy i bajt niższy. Wysoki bajt służy do przechowywania numeru interfejsu. Jest to niezbędne do przechowywania deskryptorów funkcji na podstawie interfejsu, zwłaszcza w przypadku urządzeń złożonych lub urządzeń z wieloma interfejsami. W większości przypadków zostanie użyty interfejs 0. Niski bajt służy do przechowywania numeru strony. Ta funkcja uniemożliwia deskryptorom posiadanie granicy rozmiaru 64 KB (limit ustawiony przez rozmiar pola wLength ). Deskryptor zostanie pobrany z wartością strony początkowo ustawioną na zero. Jeśli zostanie odebrany pełny deskryptor (rozmiar to 64 KB), wartość strony zostanie zwiększona o jeden i żądanie deskryptora zostanie wysłane ponownie (tym razem z wartością strony zwiększoną o jeden). Ten proces będzie powtarzany do momentu odebrania deskryptora o rozmiarze mniejszym niż 64 KB. Należy pamiętać, że maksymalna liczba stron to 255, co powoduje ograniczenie rozmiaru deskryptora wynoszącego 16 MB.

Pole wIndex przechowuje numer indeksu funkcji dla deskryptora funkcji systemu operacyjnego Microsoft, który jest pobierany. Firma Microsoft będzie obsługiwać tę listę deskryptorów i indeksów funkcji systemu operacyjnego Microsoft. Aby dowiedzieć się więcej na temat deskryptorów funkcji systemu operacyjnego Microsoft, zobacz Deskryptory systemu operacyjnego Microsoft.

Pole wLength określa długość deskryptora do pobrania. Jeśli deskryptor jest dłuższy niż liczba bajtów określonych w polu wLength , zwracane są tylko początkowe bajty deskryptora. Jeśli jest krótszy niż wartość określona w polu wLength , zwracany jest krótki pakiet.

Jeśli określony deskryptor systemu operacyjnego nie jest obecny, urządzenie zgłosi błąd żądania lub zatrzyma się.

Ograniczenia deskryptora funkcji systemu operacyjnego Microsoft

Następujące ograniczenia dotyczą deskryptorów funkcji systemu operacyjnego Microsoft i ich pobierania.

  • Wszystkie deskryptory funkcji systemu operacyjnego Microsoft są zdefiniowane i ustandaryzowane. Dostawcy nie mogą modyfikować, dołączać ani tworzyć deskryptorów funkcji systemu operacyjnego Microsoft bez bezpośredniej zgody firmy Microsoft.
  • Wszystkie deskryptory funkcji systemu operacyjnego Microsoft będą miały w nich osadzony rozmiar i numer wersji. Te wartości powinny zawsze zgłaszać poprawne informacje do systemu operacyjnego.
  • Urządzenie może mieć więcej niż jeden deskryptor funkcji systemu operacyjnego Microsoft osadzony w oprogramowaniu układowym.
  • Niektóre deskryptory funkcji systemu operacyjnego Microsoft są przechowywane na poziomie interfejsu, a inne są unikatowe dla urządzenia. Deskryptory funkcji systemu operacyjnego Microsoft na poziomie urządzenia powinny ustawić wysoki bajt pola wValue jako zero.

Struktura deskryptora funkcji

Aby zidentyfikować się jako zdolny do obsługi MBIM, urządzenie musi również obsługiwać deskryptor rozszerzonej konfiguracji, który jest jednym ze zdefiniowanych deskryptorów funkcji. Struktura tego deskryptora jest następująca.

Sekcja Nagłówek

Sekcja nagłówka przechowuje informacje o pozostałej części deskryptora rozszerzonej konfiguracji. Pole dwLength zawiera długość całego deskryptora rozszerzonej konfiguracji. Sekcja nagłówka zawiera również numer wersji, który zostanie początkowo ustawiony na 1,00 (0100H). Przyszłe wersje tego deskryptora mogą zostać wydane na późniejszym etapie. Należy pamiętać, że przyszłe wersje deskryptora rozszerzonej konfiguracji mogą również wymagać zwiększenia liczby wpisów w sekcji nagłówka, dlatego sprawdź, czy ta liczba jest dokładnie przechowywana na urządzeniu i odczytywana przez system operacyjny.

Sekcja nagłówka rozszerzonego deskryptora konfiguracji

Przesunięcie (No changes needed) Rozmiar Wartość Opis

0

dwLength

4

DWORD bez znaku

Pole długości opisuje długość deskryptora rozszerzonej konfiguracji w bajtach.

4

bcdVersion

2

BCD

Numer wydania deskryptora rozszerzonej konfiguracji w kodzie binarnym dziesiętny (na przykład wersja 1.00 to 0100H).

6

wIndex

2

SŁOWO

Stała = 0x0004

8

bCount

1

BAJT

Łączna liczba sekcji funkcji, które są zgodne z sekcją nagłówka = 0x01

9

ZASTRZEŻONY

7

ZASTRZEŻONY

Sekcja funkcji

Sekcja funkcji zawiera dwa ważne informacje. Grupuje kolejne interfejsy, które służą podobnemu celowi do grup funkcji, i udostępnia zgodne i niezgodne identyfikatory dla każdej funkcji.

Oto format sekcji funkcji, w tym wartości, które powinny być używane przez urządzenie MBIM:

Sekcja funkcji deskryptora rozszerzonej konfiguracji

Przesunięcie (No changes needed) Rozmiar Wartość Opis

0

bFirstInterfaceNumber

1

Byte

Numer interfejsu początkowego dla tej funkcji = 0x00

1

bInterfaceCount

1

Byte

Całkowita liczba interfejsów, które muszą zostać dołączone do tej funkcji = 0x01

2

zgodny identyfikator

8

Bajty

Identyfikator zgodności

10

subCompatibleID

8

Bajty

Identyfikator niezgodny

18

ZASTRZEŻONY

6

ZAREZERWOWANE = 0

¹Offset sekcji właściwości niestandardowej został zresetowany do zera. Aby obliczyć przesunięcie pola od początku deskryptora rozszerzonej konfiguracji, dodaj długość poprzednich sekcji.

Zgodne i niezgodne identyfikatory oparte na konfiguracji uwidaczniającej funkcję MBIM

bConfiguration identyfikator kompatybilności 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)

  • Funkcja bConfiguration odnosi się do wartości bConfiguration w deskryptorze konfiguracji USB, która uwidacznia funkcję MBIM. Konfiguracja bConfiguration nie może być 1, ponieważ jest to domyślna konfiguracja uwidaczniająca tylko funkcję CDROM. Konfiguracja bConfiguration nie może być większa niż 4; oznacza to, że funkcja MBIM powinna być uwidoczniona w ramach pierwszych czterech konfiguracji.
  • wartość compatibleID pozostaje taka sama dla wszystkich konfiguracji. Identyfikator subcompatibleID zmienia się na podstawie konfiguracji

Przykład

W tej tabeli przedstawiono przykładowy scenariusz z wieloma konfiguracjami. W tabeli wymieniono funkcje dostępne w każdej konfiguracji oraz akcje podejmowane przez różne wersje systemu operacyjnego dla każdej z tych konfiguracji.

Przykład urządzenia szerokopasmowego z wieloma konfiguracjami

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

Uwidocznione funkcje

CDROM

SD

CD-ROM

SD

NCM1.0

Modem

TELEWIZJA

GPS

FP

Karta inteligentna PC/SC

Voice

Diag

CD-ROM

SD

MBIM

CD-ROM

SD

NCM2.0

Modem

TELEWIZJA

GPS

FP

Karta inteligentna PC/SC

Voice

Diag

W poniższych tabelach przedstawiono wartości używane przez deskryptor ciągu systemu operacyjnego Microsoft oraz deskryptor funkcji rozszerzonej konfiguracji systemu operacyjnego Microsoft dla scenariusza z wieloma konfiguracjami poprzedniego przykładu.

Przykład urządzenia szerokopasmowego z wieloma konfiguracjami

(No changes needed) Długość (bajty) Wartość

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

Przykładowy nagłówek deskryptora funkcji rozszerzonej konfiguracji systemu operacyjnego Microsoft

Przesunięcie (No changes needed) Rozmiar Wartość

0

dwLength

4

16

4

bcdVersion

2

0100H

6

wIndex

2

0x0004

8

bCount

1

1

9

ZASTRZEŻONY

7

Przykładowa funkcja deskryptora funkcji rozszerzonej konfiguracji systemu operacyjnego Microsoft

Przesunięcie² (No changes needed) Rozmiar Wartość

0

bFirstInterfaceNumber

1

1

bInterfaceCount

1

2

zgodny identyfikator

8

10

subCompatibleID

8

18

ZASTRZEŻONY

6

²Offset sekcji właściwości niestandardowej został zresetowany do zera. Aby obliczyć przesunięcie pola od początku deskryptora rozszerzonej konfiguracji, dodaj długość poprzednich sekcji.