Détermination de la topologie d’appareil BDA
Une topologie d’appareil BDA est composée d’un réseau connecté de nœuds, chacun représentant une transformation sur un signal. Les nœuds peuvent être regroupés arbitrairement entre différents filtres. Ce regroupement arbitraire offre aux fournisseurs de matériel une certaine liberté dans la façon dont ils implémentent leur matériel et leurs pilotes afin que ces matériels et pilotes fonctionnent de manière générique avec les fournisseurs de réseau pour les différents types de réseaux qu’ils souhaitent prendre en charge.
Pour que cette architecture de regroupement arbitraire fonctionne, le fournisseur de réseau doit être en mesure d’interroger des filtres sur le type de transformations que ces filtres effectuent sur un signal (c’est-à-dire les types de réseaux de nœuds que le filtre peut prendre en charge). Le minidriver Ring 0 sous-jacent d’un filtre transmet une image de ses réseaux de nœuds pris en charge au fournisseur de réseau via le jeu de propriétés KSPROPSETID_BdaTopology .
Lors de la détermination de la topologie de modèle pour un filtre, le fournisseur réseau effectue une itération des listes de types de nœuds et de types de broches, et interroge chaque nœud et chaque épingle pour connaître ses fonctionnalités. Le fournisseur de réseau utilise les propriétés suivantes de KSPROPSETID_BdaTopology pour déterminer la topologie de modèle pour le filtre :
KSPROPERTY_BDA_NODE_TYPES
Les types de nœuds représentent les nœuds fonctionnels possibles dans le filtre. La propriété KSPROPERTY_BDA_NODE_TYPES renvoie une liste de tous les types de nœuds fournis par un filtre instance du minidriver BDA. Le minidriver affecte des valeurs arbitraires pour identifier les types de nœuds. En règle générale, le minidriver utilise l’index de chaque élément de la liste des types de nœuds du minidriver comme valeur pour chaque type de nœud. Le minidriver BDA affecte à chaque type de nœud un GUID de description de nœud. Les GUID de description pour les types de nœuds actuellement pris en charge par le fournisseur de réseau sont définis dans bdamedia.h. Cette description du nœud indique au fournisseur de réseau ce que fait le nœud. Dans une topologie de modèle, un type de nœud ne peut se produire qu’une seule fois. Toutefois, plusieurs nœuds d’un type spécifique peuvent avoir le même GUID de description de nœud. Cela permet à une transformation de signal spécifique de se produire à plusieurs endroits de la topologie du filtre tout en permettant au fournisseur de réseau d’identifier un nœud de topologie unique sans ambiguïté.
KSPROPERTY_BDA_PIN_TYPES
Les types d’épingle représentent les connexions possibles à d’autres filtres dans le graphique. La propriété KSPROPERTY_BDA_PIN_TYPES renvoie une liste de tous les types d’épingles qui peuvent être créés sur le filtre. Dans une topologie de modèle, un type d’épingle ne peut se produire qu’une seule fois.
KSPROPERTY_BDA_TEMPLATE_CONNECTIONS
La propriété KSPROPERTY_BDA_TEMPLATE_CONNECTIONS renvoie un tableau qui représente toutes les connexions possibles entre les types de nœuds et les types de broches qui peuvent être configurés sur le filtre. Pour plus d’informations , consultez Topologie de connexion de mappage.
Lorsqu’un filtre instance est créé et ajouté au graphique, il a généralement des broches d’entrée, mais pas de broches de sortie. Pour créer des broches de sortie, le fournisseur de réseau utilise d’abord les propriétés KSPROPSETID_BdaTopology pour déterminer les opérations que le filtre peut effectuer. À partir de ces propriétés, le fournisseur de réseau détermine les opérations qu’il nécessite que le filtre effectue pour un graphique de filtre particulier. Le fournisseur de réseau utilise ensuite l’ensemble de méthodes KSMETHODSETID_BdaDeviceConfiguration pour créer des broches de sortie correspondant à un type de broche particulier et créer la topologie interne, qui est le chemin matériel réel, entre ces broches et les broches d’entrée. Pour plus d’informations, consultez Configuration d’un filtre BDA .
L’extrait de code suivant montre comment définir des fonctions exportées par la bibliothèque de prise en charge BDA en tant que routines de distribution pour le jeu de propriétés KSPROPSETID_BdaTopology :
//
// KSPROPSETID_BdaTopology property set
//
// Defines the dispatch routines for the filter level
// topology properties
//
DEFINE_KSPROPERTY_TABLE(FilterTopologyProperties)
{
DEFINE_KSPROPERTY_ITEM_BDA_NODE_TYPES(
BdaPropertyNodeTypes,
NULL
),
DEFINE_KSPROPERTY_ITEM_BDA_PIN_TYPES(
BdaPropertyPinTypes,
NULL
),
DEFINE_KSPROPERTY_ITEM_BDA_TEMPLATE_CONNECTIONS(
BdaPropertyTemplateConnections,
NULL
),
DEFINE_KSPROPERTY_ITEM_BDA_CONTROLLING_PIN_ID(
BdaPropertyGetControllingPinId,
NULL
)
};