Condividi tramite


Requisiti dei dispositivi per le unità di estensione della classe video USB

Questa sezione descrive alcuni requisiti specifici per l'implementazione di un'unità di estensione nel dispositivo. Se questi requisiti non sono soddisfatti, il driver della classe video USB potrebbe non funzionare correttamente con l'unità di estensione.

Descrittore

Il descrittore di unità di estensione deve contenere un GUID univoco valido. Questo GUID viene usato da Usbvideo.sys per esporre una proprietà impostata sul nodo di estensione corrispondente. È necessario creare un GUID univoco per l'unità di estensione usando uno strumento denominato Guidgen.exe incluso nella Microsoft Windows SDK.

Gli identificatori di proprietà nel set di proprietà dell'unità di estensione (KSPROPERTY_EXTENSION_UNIT) corrispondono agli ID di controllo unità di estensione numerati simili esposti dal firmware della classe video USB. È possibile accedere ai controlli unità di estensione usando richieste KSPROPERTY standard tramite l'interfaccia IKsControl.

I controlli nell'unità di estensione, noti come ID di controllo unità di estensione, devono essere numerati continuamente da 1 a un valore massimo n. In caso di lacune, il driver USB Video Class non espone i controlli che si trovano oltre il divario. L'implementazione corrente del driver della classe video USB limita il numero di controlli in un'unità di estensione a 31.

Usare Property ID=0 (KSPROPERTY_EXTENSION_UNIT_INFO) per ottenere parte del descrittore dell'unità di estensione, la sintassi per la quale è definita dalla definizione della classe dispositivo del bus seriale universale per la specifica dei dispositivi video. Questa specifica è disponibile nel sito Web del forum degli implementatori USB .

Usare Property ID=1 e versioni successive per inviare richieste al controllo unità di estensione corrispondente.

Tenere presente che KSPROPERTY_EXTENSION_UNIT_CONTROL (ID proprietà=1) non è una proprietà reale. Indica invece che gli identificatori 1 e versioni successive fanno riferimento agli ID di controllo unità di estensione effettivi.

KSPROPERTY_EXTENSION_UNIT_PASS_THROUGH (ID proprietà=0xffff) non è implementato.

L'esempio di codice seguente, tratto dall'esempio completo illustrato nella DLL del plug-in di unità di estensione di esempio, illustra come effettuare una richiesta di KSPROPERTY_EXTENSION_UNIT_INFO:

ExtensionProp.Property.Set = PROPSETID_VIDCAP_EXTENSION_UNIT;
    ExtensionProp.Property.Id = KSPROPERTY_EXTENSION_UNIT_INFO;
    ExtensionProp.Property.Flags = KSPROPERTY_TYPE_GET |
                                   KSPROPERTY_TYPE_TOPOLOGY;
    ExtensionProp.NodeId = m_dwNodeId;

    hr = m_pKsControl->KsProperty(
        (PKSPROPERTY) &ExtensionProp,
                  sizeof(ExtensionProp),
        (PVOID) pInfo,
        ulSize,
        &ulBytesReturned);

        return hr;
}

Richieste di controllo

Il dispositivo deve supportare GET_CUR, GET_INFO, GET_LEN, GET_MIN, GET_MAX, GET_DEF e richieste di GET_RES per tutti i controlli unità di estensione in base alla specifica della classe video USB. Se il dispositivo non implementa queste funzioni, le proprietà corrispondenti non verranno esposte alla modalità utente.

Durante l'inizializzazione del dispositivo, il driver invia le richieste di controllo seguenti al dispositivo: GET_INFO, GET_LEN, GET_MIN e GET_MAX. Se una di queste richieste iniziali ha esito negativo, Usbvideo.sys disabilita il controllo specifico.

Il valore restituito da GET_INFO indica al driver quali richieste GET e SET sono valide per un determinato controllo. Inoltre, GET_INFO indica al driver se il controllo è asincrono. Le richieste asincrone sono supportate dagli endpoint di interruzione dello stato.