Supplemento del modello di interfaccia MB
Il descrittore del sistema operativo Microsoft viene suddiviso nei segmenti seguenti:
- Descrittore di una stringa del sistema operativo Microsoft
- Uno o più descrittori delle funzionalità del sistema operativo Microsoft
Per supportare il descrittore del sistema operativo, il dispositivo deve implementare il descrittore stringa. Descrittore stringa
Il descrittore stringa del sistema operativo Microsoft è una stringa archiviata in corrispondenza dell'indice stringa 0xEE. Il formato di questa stringa è ben definito.
Il descrittore stringa del sistema operativo Microsoft viene usato per raggiungere gli obiettivi seguenti
- La presenza del descrittore di stringa del sistema operativo Microsoft indica al sistema operativo che il dispositivo ha informazioni incorporate in esso, sotto forma di descrittori delle funzionalità del sistema operativo Microsoft.
- Il descrittore stringa del sistema operativo Microsoft ha un campo di firma incorporato usato per differenziarlo dalle stringhe casuali che potrebbero verificarsi in un dispositivo in corrispondenza dell'indice stringa 0xEE.
- Il descrittore di stringa del sistema operativo Microsoft ha anche un numero di versione incorporato che consente revisioni future del descrittore del sistema operativo Microsoft.
Solo un descrittore stringa del sistema operativo Microsoft viene archiviato in un dispositivo. Le sezioni seguenti descrivono la struttura del descrittore stringa del sistema operativo Microsoft e la relativa procedura di recupero. Struttura della stringa del sistema operativo
Ecco la struttura del descrittore stringa:
Struttura descrittore stringa
Campo | Lunghezza (byte) | Valore | Descrizione |
---|---|---|---|
bLength |
1 |
0x12 |
Lunghezza del descrittore |
bDescriptorType |
1 |
0x03 |
Descrittore stringa |
qwSignature |
14 |
"MSFT100" |
Campo firma (4D00530046005400310030030003000) |
bMS_VendorCode |
1 |
Codice fornitore |
Codice fornitore per recuperare altri descrittori di funzionalità del sistema operativo |
bPad |
1 |
0x00 |
Campo pad |
La struttura del descrittore stringa del sistema operativo Microsoft è fissa per la versione 1.00 e ha una lunghezza complessiva di 18 byte. Il numero di versione del descrittore stringa del sistema operativo Microsoft è elencato nel campo qwSignature . Le informazioni archiviate nel campo bMS_VendorCode devono essere un singolo valore di byte. Verrà usato per recuperare i descrittori delle funzionalità del sistema operativo Microsoft e questo valore di byte viene usato nel campo bmRequestType descritto di seguito:
Recupero del descrittore stringa del sistema operativo
Per recuperare le informazioni archiviate nella stringa, è necessario eseguire una richiesta standard GET_DESCRIPTOR al dispositivo. Ecco il formato della richiesta:
Richiesta stringa Get_Descriptor standard
bmRequestType | bRequest | wValue | Windex | wLength | Dati |
---|---|---|---|---|---|
1000 000b |
GET_DESCRIPTOR |
0x03EE |
0x0000 |
0x12 |
Restituisce la stringa . |
Il campo bmRequestType è una bitmap composta da tre parti, ovvero direzione del trasferimento dei dati, tipo di descrittore e destinatario. In base alla specifica USB, il valore di bmRequestType è impostato su 1000 0000b (0x80).
Per una richiesta di GET_DESCRIPTOR, il campo wValue viene suddiviso in due parti. Il byte elevato archivia il tipo descrittore e il byte basso archivia l'indice descrittore. Per recuperare il descrittore stringa del sistema operativo Microsoft, è necessario impostare il byte elevato per recuperare un descrittore stringa, 0x03. Poiché il descrittore stringa del sistema operativo Microsoft viene sempre archiviato in corrispondenza dell'indice 0xEE, questo indice stringa deve essere archiviato nel byte inferiore del campo wValue .
Il wIndex viene usato per archiviare l'ID lingua, ma deve essere impostato su zero per un descrittore di stringa del sistema operativo Microsoft.
Il campo wLength viene usato per indicare la lunghezza del descrittore stringa da recuperare. Il dispositivo deve rispondere a qualsiasi intervallo valido da 0x02 a 0xFF.
Se un dispositivo non ha un descrittore valido all'indirizzo corrispondente (0xEE), risponderà con un errore di richiesta o uno stallo. Quando i dispositivi non rispondono con uno stallo, verrà emesso un reimpostazione zero a fine singola nel dispositivo (per ripristinarlo, se dovrebbe andare in uno stato sconosciuto).
Verifica dell'integrità del descrittore del sistema operativo
Poiché i fornitori possono usare qualsiasi ID stringa per archiviare informazioni, il sistema operativo deve verificare che la stringa archiviata nell'indice 0xEE sia effettivamente il descrittore stringa del sistema operativo Microsoft. Per verificare questa operazione, verranno eseguiti i test seguenti. L'errore di uno dei due inibirà il recupero dei descrittori delle funzionalità del sistema operativo Microsoft.
- Se un fornitore archivia una stringa nella posizione di indice 0xEE, il sistema operativo recupera la stringa e la esegue una query per verificare se è la stringa del sistema operativo Microsoft. Questa operazione può essere verificata confrontando il campo della firma nella stringa con la voce del campo di firma specificata in precedenza. Una mancata corrispondenza impedisce un'ulteriore analisi della stringa.
- Il secondo test includerà una verifica della lunghezza della stringa in base al numero di versione specificato nel campo della firma. Il numero di versione specificato (nella stringa "MSFT100") è 1.00. Corrisponde a un descrittore stringa a 18 byte.
Vincoli di descrittore stringa del sistema operativo Microsoft
I vincoli seguenti si applicano ai descrittori delle stringhe del sistema operativo Microsoft e al relativo recupero:
- Per archiviare le informazioni in conformità alla specifica del descrittore del sistema operativo Microsoft, il dispositivo deve disporre di uno e solo descrittore stringa del sistema operativo Microsoft conforme alle informazioni descritte nei descrittori del sistema operativo Microsoft.
- Un fornitore di dispositivi è libero di usare qualsiasi valore nel campo bMS_VendorCode nel descrittore stringa del sistema operativo Microsoft
Descrittore di funzionalità
Un descrittore di funzionalità è un descrittore di formato fisso definito per uno scopo specifico.
Recupero di un descrittore di funzionalità del sistema operativo
Per recuperare un descrittore di funzionalità del sistema operativo Microsoft, è necessario eseguire una richiesta speciale GET_MS_DESCRIPTOR al dispositivo. Ecco il formato della richiesta:
Formato di richiesta dispositivo standard
bmRequestType | bRequest | wValue | Windex | wLength | Dati |
---|---|---|---|---|---|
1100 0000b |
GET_MS_DESCRIPTOR |
X |
Indice delle funzionalità |
Length |
Restituisce il descrittore |
Il campo bmRequestType è una bitmap composta da tre parti, ovvero direzione del trasferimento dei dati, tipo di descrittore e destinatario, ed è conforme alla specifica USB. Il descrittore di funzionalità del sistema operativo Microsoft è un descrittore specifico del fornitore e la direzione del trasferimento dei dati è dal dispositivo all'host. Pertanto, il valore di bmRequestType è impostato su 1100 0000b (0xC0).
Il campo bRequest viene usato per indicare il formato della richiesta. Per recuperare un descrittore di funzionalità del sistema operativo Microsoft, il campo bRequest deve essere popolato con un GET_MS_DESCRIPTOR byte speciale. Il valore di questo byte è indicato dal bMS_VendorCode, recuperato dal descrittore di stringa Microsoft. Per altre informazioni sul recupero del descrittore stringa del sistema operativo Microsoft, vedere Recupero del descrittore stringa del sistema operativo.
Il campo wValue viene messo in uso speciale ed è suddiviso in un byte elevato e un byte basso. Il byte elevato viene usato per archiviare il numero di interfaccia. Questo è essenziale per l'archiviazione dei descrittori delle funzionalità in base a ogni interfaccia, in particolare per i dispositivi compositi o i dispositivi con più interfacce. Nella maggior parte dei casi, verrà usata l'interfaccia 0. Il byte basso viene usato per archiviare un numero di pagina. Questa funzionalità impedisce ai descrittori di avere un limite di dimensioni pari a 64 KB (un limite impostato per le dimensioni del campo wLength ). Un descrittore verrà recuperato con il valore della pagina impostato inizialmente su zero. Se viene ricevuto un descrittore completo (dimensioni pari a 64 KB), il valore della pagina verrà incrementato di uno e la richiesta per il descrittore verrà inviata di nuovo (questa volta con il valore di pagina incrementato). Questo processo verrà ripetuto fino a quando non viene ricevuto un descrittore con dimensioni inferiori a 64 KB. Si noti che il numero massimo di pagine è 255, che inserisce un limite di 16 MB sulla dimensione del descrittore.
Il campo wIndex archivia il numero di indice delle funzionalità per il descrittore di funzionalità del sistema operativo Microsoft recuperato. Microsoft manterrà questo elenco di descrittori e indici delle funzionalità del sistema operativo Microsoft. Per altre informazioni sui descrittori delle funzionalità del sistema operativo Microsoft, vedere Descrittori del sistema operativo Microsoft.
Il campo wLength specifica la lunghezza del descrittore da recuperare. Se il descrittore è più lungo del numero di byte indicati nel campo wLength , vengono restituiti solo i byte iniziali del descrittore. Se è più breve del valore specificato nel campo wLength , viene restituito un pacchetto breve.
Se un descrittore del sistema operativo specifico non è presente, il dispositivo emetterà un errore di richiesta o un blocco.
Vincoli del descrittore delle funzionalità del sistema operativo Microsoft
I vincoli seguenti si applicano ai descrittori delle funzionalità del sistema operativo Microsoft e al relativo recupero.
- Tutti i descrittori delle funzionalità del sistema operativo Microsoft sono definiti e standardizzati. I fornitori non sono autorizzati a modificare, aggiungere o creare descrittori delle funzionalità del sistema operativo Microsoft senza consenso diretto da Microsoft.
- Tutti i descrittori delle funzionalità del sistema operativo Microsoft avranno una dimensione e un numero di versione incorporato in essi. Questi valori devono sempre segnalare informazioni corrette al sistema operativo.
- Un dispositivo può avere più descrittori delle funzionalità del sistema operativo Microsoft incorporati nel firmware.
- Alcuni descrittori delle funzionalità del sistema operativo Microsoft vengono archiviati a livello di interfaccia, mentre altri sono univoci per il dispositivo. I descrittori delle funzionalità del sistema operativo Microsoft a livello di dispositivo devono impostare il byte elevato del campo wValue come zero.
Struttura del descrittore di funzionalità
Per identificarsi come in grado di supportare MBIM, un dispositivo deve supportare anche il descrittore di configurazione esteso, che è uno dei descrittori di funzionalità definiti. La struttura di questo descrittore è la seguente.
Sezione Intestazione
La sezione intestazione archivia informazioni sul resto del descrittore di configurazione esteso. Il campo dwLength contiene la lunghezza dell'intero descrittore di configurazione estesa. La sezione intestazione contiene anche un numero di versione, che verrà inizialmente impostato su 1.00 (0100H). Le revisioni future di questo descrittore possono essere rilasciate in un secondo momento. Si noti che le versioni future del descrittore di configurazione estesa potrebbero anche dover aumentare il numero di voci nella sezione intestazione, quindi verificare che questo numero sia archiviato in modo accurato nel dispositivo e letto dal sistema operativo.
Sezione dell'intestazione del descrittore di configurazione estesa
Offset | Campo | Dimensione | Valore | Descrizione |
---|---|---|---|---|
0 |
dwLength |
4 |
DWORD senza segno |
Il campo lunghezza descrive la lunghezza del descrittore di configurazione esteso, in byte. |
4 |
bcdVersion |
2 |
BCD |
Numero di rilascio del descrittore di configurazione esteso in Decimale codice binario (ad esempio, la versione 1.00 è 0100H). |
6 |
Windex |
2 |
WORD |
Correzione = 0x0004 |
8 |
bCount |
1 |
BYTE |
Numero totale di sezioni di funzione che seguono la sezione intestazione = 0x01 |
9 |
RISERVATO |
7 |
RISERVATO |
Sezione Funzione
La sezione della funzione fornisce due informazioni importanti. Raggruppa interfacce consecutive che servono uno scopo simile nei gruppi di funzioni e fornisce ID compatibili e subcompatibili per ogni funzione.
Ecco il formato della sezione della funzione, inclusi i valori che devono essere usati da un dispositivo MBIM:
Sezione relativa alla funzione descrittore di configurazione estesa
Offset¹ | Campo | Dimensione | Valore | Descrizione |
---|---|---|---|---|
0 |
bFirstInterfaceNumber |
1 |
Byte |
Numero di interfaccia iniziale per questa funzione = 0x00 |
1 |
bInterfaceCount |
1 |
Byte |
Numero totale di interfacce da includere da questa funzione = 0x01 |
2 |
compatibleID |
8 |
Byte |
ID compatibile |
10 |
subCompatibleID |
8 |
Byte |
ID sottocompatibile |
18 |
RISERVATO |
6 |
RESERVED = 0 |
¹Offset della sezione della proprietà personalizzata è stato reimpostato su zero. Per calcolare l'offset di un campo dall'inizio del descrittore di configurazione esteso, aggiungere la lunghezza delle sezioni che lo precedono.
ID compatibili e subcompatibili in base alla configurazione che espone la funzione 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 fa riferimento al valore bConfiguration all'interno del descrittore di configurazione USB della configurazione che espone la funzione MBIM. bConfiguration non può essere 1 perché si tratta della configurazione predefinita che espone solo la funzione CDROM. bConfiguration non può essere maggiore di 4; ovvero, la funzione MBIM deve essere esposta all'interno delle prime quattro configurazioni.
- compatibleID rimane invariato per tutte le configurazioni. Il subcompatibleID cambia in base alla configurazione
Esempio
Questa tabella illustra uno scenario di configurazione multipla di esempio. La tabella elenca le funzioni disponibili in ogni configurazione e le azioni eseguite da versioni diverse del sistema operativo per ognuna di queste configurazioni:
Esempio di un dispositivo mobile a banda larga multiconfigurazione
bConfiguration | 1 (Windows-7-Configuration) | 2 (IHV-NCM-1.0-Configuration) | 3 (Windows-8-Configuration) | 3 (IHV-NCM-2.0-Configuration) |
---|---|---|---|---|
Funzioni esposte |
CDROM DS |
CD-ROM DS NCM1.0 Modem TV GPS FP Smart card PC/SC Chiamata vocale Diag |
CD-ROM DS MBIM |
CD-ROM DS NCM2.0 Modem TV GPS FP Smart card PC/SC Chiamata vocale Diag |
Le tabelle seguenti illustrano i valori usati dal descrittore di stringhe del sistema operativo Microsoft e dal descrittore della funzionalità di configurazione estesa del sistema operativo Microsoft per lo scenario multiconfigurazione dell'esempio precedente.
Esempio di un dispositivo mobile a banda larga multiconfigurazione
Campo | Lunghezza (byte) | Valore |
---|---|---|
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 |
Intestazione del descrittore della funzionalità di configurazione estesa del sistema operativo Microsoft di esempio
Offset | Campo | Dimensione | Valore |
---|---|---|---|
0 |
dwLength |
4 |
16 |
4 |
bcdVersion |
2 |
0100H |
6 |
Windex |
2 |
0x0004 |
8 |
bCount |
1 |
1 |
9 |
RISERVATO |
7 |
Esempio di descrittore delle funzionalità di configurazione estesa del sistema operativo Microsoft
Offset² | Campo | Dimensione | Valore |
---|---|---|---|
0 |
bFirstInterfaceNumber |
1 |
|
1 |
bInterfaceCount |
1 |
|
2 |
compatibleID |
8 |
|
10 |
subCompatibleID |
8 |
|
18 |
RISERVATO |
6 |
²Offset della sezione della proprietà personalizzata è stata reimpostata su zero. Per calcolare l'offset di un campo dall'inizio del descrittore di configurazione estesa, aggiungere la lunghezza delle sezioni che lo precede.