Requisitos de dispositivo para unidades de extensão de classe de vídeo USB

Esta seção descreve alguns requisitos específicos para implementar uma Unidade de Extensão no dispositivo. Se esses requisitos não forem atendidos, o driver de Classe de Vídeo USB poderá não funcionar corretamente com a Unidade de Extensão.

Descritor

O descritor de Unidade de Extensão deve conter um GUID válido e exclusivo. Esse GUID é usado por Usbvideo.sys para expor um conjunto de propriedades no nó de extensão correspondente. Você deve criar um GUID exclusivo para a Unidade de Extensão usando uma ferramenta chamada Guidgen.exe incluída no SDK do Microsoft Windows.

Os identificadores de propriedade no conjunto de propriedades da Unidade de Extensão (KSPROPERTY_EXTENSION_UNIT) correspondem a IDs de controle de unidade de extensão numeradas da mesma forma expostas pelo firmware classe de vídeo USB. Os controles de unidade de extensão podem ser acessados usando solicitações KSPROPERTY padrão por meio da interface IKsControl.

Os controles na Unidade de Extensão, conhecidos como IDs de controle de unidade de extensão, devem ser numerados continuamente de 1 para algum valor máximo n. Se houver lacunas, o driver da Classe de Vídeo USB não exporá os controles que estão além da lacuna. A implementação atual do driver de Classe de Vídeo USB limita o número de controles em uma Unidade de Extensão a 31.

Use Property ID=0 (KSPROPERTY_EXTENSION_UNIT_INFO) para obter parte do descritor de unidade de extensão, a sintaxe para a qual é definida pela Definição de Classe de Dispositivo de Barramento Serial Universal para Especificação de Dispositivos de Vídeo. Essa especificação está disponível no site do Fórum de Implementadores USB .

Use Property ID=1 e superior para enviar solicitações para o controle de unidade de extensão correspondente.

Lembre-se de que KSPROPERTY_EXTENSION_UNIT_CONTROL (ID da propriedade=1) não é uma propriedade real. Em vez disso, ele indica que identificadores 1 e superiores se referem a IDs de controle de unidade de extensão reais.

KSPROPERTY_EXTENSION_UNIT_PASS_THROUGH (ID da propriedade=0xffff) não está implementado.

O exemplo de código a seguir, obtido do exemplo completo mostrado na DLL de Plug-in de Unidade de Extensão de Exemplo, mostra como fazer uma solicitação de 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;
}

Solicitações de controle

O dispositivo deve dar suporte a solicitações de GET_CUR, GET_INFO, GET_LEN, GET_MIN, GET_MAX, GET_DEF e GET_RES para todos os controles de Unidade de Extensão de acordo com a especificação classe de vídeo USB. Se o dispositivo não implementar essas funções, as propriedades correspondentes não serão expostas ao modo de usuário.

Durante a inicialização do dispositivo, o driver emite as seguintes solicitações de controle para o dispositivo: GET_INFO, GET_LEN, GET_MIN e GET_MAX. Se qualquer uma dessas solicitações iniciais falhar, Usbvideo.sys desabilita o controle específico.

O valor retornado por GET_INFO informa ao driver quais solicitações GET e SET são válidas para um determinado controle. Além disso, GET_INFO informa ao driver se o controle é assíncrono. As solicitações assíncronas são compatíveis com pontos de extremidade de interrupção de status.