Freigeben über


Geräteanforderungen für USB-Videoklassenerweiterungseinheiten

In diesem Abschnitt werden einige spezifische Anforderungen für die Implementierung einer Erweiterungseinheit auf dem Gerät beschrieben. Wenn diese Anforderungen nicht erfüllt sind, funktioniert der USB-Videoklassentreiber möglicherweise nicht ordnungsgemäß mit der Erweiterungseinheit.

Deskriptor

Der Deskriptor der Erweiterungseinheit muss eine gültige, eindeutige GUID enthalten. Diese GUID wird von Usbvideo.sys verwendet, um einen Eigenschaftssatz auf dem entsprechenden Erweiterungsknoten verfügbar zu machen. Sie sollten eine eindeutige GUID für die Erweiterungseinheit erstellen, indem Sie ein Tool namens Guidgen.exe verwenden, das im Microsoft Windows SDK enthalten ist.

Eigenschaftenbezeichner für den Erweiterungseinheitseigenschaftssatz (KSPROPERTY_EXTENSION_UNIT) entsprechen ähnlich nummerierten Erweiterungseinheitssteuerungs-IDs, die von der USB-Videoklassenfirmware verfügbar gemacht werden. Auf Steuerelemente von Erweiterungseinheiten kann mithilfe von KSPROPERTY-Standardanforderungen über die IKsControl-Schnittstelle zugegriffen werden.

Die Steuerelemente auf der Erweiterungseinheit, die als Steuer-IDs der Erweiterungseinheit bezeichnet werden, müssen fortlaufend von 1 bis zu einem maximalen Wert n nummeriert werden. Wenn Lücken vorhanden sind, macht der USB-Videoklassentreiber nicht die Steuerelemente verfügbar, die außerhalb der Lücke liegen. Die aktuelle Implementierung des USB Video Class-Treibers beschränkt die Anzahl der Steuerelemente auf einer Erweiterungseinheit auf 31.

Verwenden Sie Property ID=0 (KSPROPERTY_EXTENSION_UNIT_INFO), um einen Teil des Erweiterungseinheitsdeskriptors abzurufen, dessen Syntax durch die Spezifikation der Universal Serial Bus Device Class Definition for Video Devices definiert wird. Diese Spezifikation ist auf der Website des USB Implementers Forum verfügbar.

Verwenden Sie Property ID=1 und höher, um Anforderungen an das entsprechende Erweiterungseinheitssteuerelement zu senden.

Beachten Sie, dass KSPROPERTY_EXTENSION_UNIT_CONTROL (Eigenschafts-ID=1) keine reale Eigenschaft ist. Stattdessen wird angegeben, dass bezeichner 1 und höher auf die tatsächlichen Erweiterungseinheitssteuerungs-IDs verweisen.

KSPROPERTY_EXTENSION_UNIT_PASS_THROUGH (Eigenschafts-ID=0xffff) ist nicht implementiert.

Im folgenden Codebeispiel, das aus dem vollständigen Beispiel in der Beispielerweiterungseinheit-Plug-In-DLL entnommen wird, wird gezeigt, wie Sie eine KSPROPERTY_EXTENSION_UNIT_INFO Anforderung erstellen:

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;
}

Steuern von Anforderungen

Das Gerät muss GET_CUR, GET_INFO, GET_LEN, GET_MIN, GET_MAX, GET_DEF und GET_RES Anforderungen für alle Extension Unit-Steuerelemente gemäß der USB-Videoklassenspezifikation unterstützen. Wenn Ihr Gerät diese Funktionen nicht implementiert, werden die entsprechenden Eigenschaften nicht für den Benutzermodus verfügbar gemacht.

Während der Geräteinitialisierung gibt der Treiber die folgenden Steuerungsanforderungen an das Gerät aus: GET_INFO, GET_LEN, GET_MIN und GET_MAX. Wenn eine dieser anfänglichen Anforderungen fehlschlägt, deaktiviert Usbvideo.sys das jeweilige Steuerelement.

Der von GET_INFO zurückgegebene Wert teilt dem Treiber mit, welche GET- und SET-Anforderungen für ein bestimmtes Steuerelement gültig sind. Darüber hinaus teilt GET_INFO dem Treiber mit, ob das Steuerelement asynchron ist. Asynchrone Anforderungen werden von Status Interrupt-Endpunkten unterstützt.