Pilote miniport de topologie
Un pilote de miniport de topologie gère les différents contrôles matériels (par exemple, le volume et le muting) dans le circuit mixeur de l’adaptateur audio. Ce pilote énumère les contrôles en tant que nœuds dans la topologie du mélangeur, ce qui permet aux clients de découvrir les interconnexions entre les nœuds et d’interroger et de définir les paramètres de contrôle à chaque nœud.
Le pilote système SysAudio examine la topologie de l’adaptateur lorsqu’il génère un graphique de filtre audio. L’API mixer (décrite dans la section multimédia Windows de la documentation Microsoft Windows SDK) représente les nœuds de topologie en tant que contrôles de ligne de mixage et les expose à des applications en mode utilisateur telles que SndVol32. Pour plus d’informations, consultez SysTray et SndVol32.
Un pilote de miniport de topologie doit implémenter une interface de miniport de topologie, que le pilote de port utilise pour initialiser le pilote miniport. L’interface miniport, IMiniportTopology, hérite des méthodes de l’interface IMiniport ; il ne fournit aucune méthode supplémentaire. Un pilote d’adaptateur audio forme un filtre de topologie en liant l’interface IMiniportTopology d’un objet miniport à l’interface IPortTopology d’un objet de port.
En règle générale, un filtre de topologie englobe la plupart des nœuds de topologie d’une carte, même si d’autres appareils au sein de l’adaptateur peuvent contenir des nœuds de topologie supplémentaires. Par exemple, un appareil wave, qui est représenté sous la forme d’un filtre d’ondes, peut contenir des nœuds DAC (KSNODETYPE_DAC) et ADC (KSNODETYPE_ADC).
L’interrogation et la définition des paramètres de contrôle sur les nœuds de topologie sont effectuées par le biais de demandes de propriétés. Chaque type de nœud est associé à une propriété ou à un ensemble de propriétés spécifique. Un nœud ne peut prendre en charge qu’une seule valeur de contrôle. Par exemple, un nœud de volume (KSNODETYPE_VOLUME) a une valeur indiquant son paramètre de volume actuel. D’autres nœuds peuvent prendre en charge plusieurs valeurs de contrôle. Par exemple, un nœud 3D (KSNODETYPE_3D_EFFECTS) prend en charge un certain nombre de propriétés de mémoire tampon 3D et d’écouteur 3D. En revanche, un nœud de somme (KSNODETYPE_SUM) n’a aucune valeur de contrôle.
Un pilote de miniport de topologie utilise un descripteur de connexion (PCCONNECTION_DESCRIPTOR) pour décrire une connexion entre deux nœuds de topologie. Chaque connexion est dirigée et spécifie à la fois un nœud à partir du nœud et un nœud vers. Un nœud peut avoir plusieurs broches, et la fonction exécutée par une broche peut différer de celle des autres broches. Pour distinguer une broche d’une autre, le pilote miniport numérote les broches sur un nœud. Ces numéros d’épingle apparaissent dans les descripteurs de connexion. Par exemple, un filtre de variable d’état peut avoir trois broches de sortie (une pour les fréquences haute, moyenne et basse) numérotées 1, 2 et 3. La numérotation des broches permet aux clients du pilote miniport de déterminer quelles connexions sont associées à quelles broches.
Un descripteur de connexion utilise un identificateur de nœud unique, PCFILTER_NODE, pour distinguer une broche sur le filtre d’une broche sur un nœud dans le filtre. Les connexions câblées de chacun des circuits de mixage aux périphériques de rendu et de capture audio de l’adaptateur audio sont représentées sous la forme d’une broche sur le filtre de topologie. D’autres broches de filtre de topologie représentent des connexions physiques externes, telles qu’une prise jack lineout sur l’adaptateur carte. Les broches d’un filtre de topologie représentent les connexions physiques câblées du matériel de la carte. Par conséquent, les broches ne peuvent pas fournir un contrôle explicite sur l’éventuelle connexion et ne peuvent pas être utilisées pour gérer le flux de données sur cette connexion.
Un descripteur de connexion unique peut décrire une connexion entre deux types de broches dans une topologie. Les broches des deux côtés d’une connexion peuvent être des broches sur le filtre ou des broches sur des nœuds dans le filtre, ou la connexion peut avoir une broche de filtre d’un côté et une broche de nœud sur l’autre. Un pilote miniport spécifie sa topologie en tant que tableau de descripteurs de connexion. Une broche unique peut avoir plusieurs connexions, ce qui signifie que la même broche peut apparaître dans plusieurs descripteurs de connexion dans le tableau.
La description de topologie qu’un client obtient à partir d’un pilote miniport n’est pas conçue pour prendre en charge la découverte ouverte de la façon d’interpréter les types de nœuds inconnus du client. La numérotation des broches de nœud seule ne fournit pas au client les informations nécessaires pour découvrir les fonctions des broches. Bien que le pilote miniport identifie le type d’un nœud (au moyen d’un GUID), il ne fournit pas de liste standardisée de paramètres pour décrire le type de nœud ou les broches prises en charge par le type de nœud.
Par exemple, si un client énumère un nœud qui utilise le GUID de type nœud KSNODETYPE_VOLUME pour s’identifier, le client ne peut utiliser le nœud que s’il connaît les conventions relatives au traitement des nœuds de volume. Par convention, un nœud de volume, par exemple, prend en charge la propriété KSPROPERTY_AUDIO_VOLUMELEVEL et affecte les numéros de broche de nœud 0 et 1 aux broches de sortie (source) et d’entrée (récepteur), respectivement. En outre, un client capable de contrôler un nœud de volume effectue généralement une recherche dirigée qui limite son exploration à un nombre relativement faible de types de nœuds (nœuds de volume et de désactive, par exemple). Le client explore généralement uniquement des parties d’un graphique de filtre susceptibles de contenir des nœuds de volume (par exemple, des lignes de mélangeur).
L’interface miniport prend en charge la remise de modifications de valeur de contrôle non sollicitées du pilote miniport au pilote de port. Cette fonctionnalité s’adapte aux appareils dotés de boutons de contrôle, de curseurs ou de commutateurs qui peuvent être manipulés physiquement par l’utilisateur. Chaque fois que l’utilisateur modifie la valeur de contrôle d’un nœud, une interruption matérielle avertit le pilote de port qu’un événement matériel s’est produit.