text: /*++
  
  Copyright (c) Microsoft Corporation All Rights Reserved
  
  Module Name:
  
      minipairs.h
  
  Abstract:
  
      Local audio endpoint filter definitions. 
  --*/
  
  #ifndef _SIMPLEAUDIOSAMPLE_MINIPAIRS_H_
  #define _SIMPLEAUDIOSAMPLE_MINIPAIRS_H_
  
  #include "speakertopo.h"
  #include "speakertoptable.h"
  #include "speakerwavtable.h"
  
  #include "micarraytopo.h"
  #include "micarray1toptable.h"
  #include "micarraywavtable.h"
  
  
  NTSTATUS
  CreateMiniportWaveRTSimpleAudioSample
  ( 
      _Out_       PUNKNOWN *,
      _In_        REFCLSID,
      _In_opt_    PUNKNOWN,
      _In_        POOL_FLAGS,
      _In_        PUNKNOWN,
      _In_opt_    PVOID,
      _In_        PENDPOINT_MINIPAIR
  );
  
  NTSTATUS
  CreateMiniportTopologySimpleAudioSample
  ( 
      _Out_       PUNKNOWN *,
      _In_        REFCLSID,
      _In_opt_    PUNKNOWN,
      _In_        POOL_FLAGS,
      _In_        PUNKNOWN,
      _In_opt_    PVOID,
      _In_        PENDPOINT_MINIPAIR
  );
  
  //
  // Render miniports.
  //
  
  /*********************************************************************
  * Topology/Wave bridge connection for speaker (internal)             *
  *                                                                    *
  *              +------+                +------+                      *
  *              | Wave |                | Topo |                      *
  *              |      |                |      |                      *
  * System   --->|0    1|--------------->|0    1|---> Line Out         *
  *              |      |                |      |                      *
  *              +------+                +------+                      *
  *********************************************************************/
  static
  PHYSICALCONNECTIONTABLE SpeakerTopologyPhysicalConnections[] =
  {
      {
          KSPIN_TOPO_WAVEOUT_SOURCE,  // TopologyIn
          KSPIN_WAVE_RENDER3_SOURCE,   // WaveOut
          CONNECTIONTYPE_WAVE_OUTPUT
      }
  };
  
  static
  ENDPOINT_MINIPAIR SpeakerMiniports =
  {
      eSpeakerDevice,
      L"TopologySpeaker",                                     // make sure this or the template name matches with KSNAME_TopologySpeaker in the inf's [Strings] section 
      NULL,                                                   // optional template name
      CreateMiniportTopologySimpleAudioSample,
      &SpeakerTopoMiniportFilterDescriptor,
      0, NULL,                                                // Interface properties
      L"WaveSpeaker",                                         // make sure this or the template name matches with KSNAME_WaveSpeaker in the inf's [Strings] section
      NULL,                                                   // optional template name
      CreateMiniportWaveRTSimpleAudioSample,
      &SpeakerWaveMiniportFilterDescriptor,
      0,                                                      // Interface properties
      NULL,
      SPEAKER_DEVICE_MAX_CHANNELS,
      SpeakerPinDeviceFormatsAndModes,
      SIZEOF_ARRAY(SpeakerPinDeviceFormatsAndModes),
      SpeakerTopologyPhysicalConnections,
      SIZEOF_ARRAY(SpeakerTopologyPhysicalConnections),
      ENDPOINT_NO_FLAGS,
  };
  
  //
  // Capture miniports.
  //
  
  /*********************************************************************
  * Topology/Wave bridge connection for mic array  1 (front)           *
  *                                                                    *
  *              +------+    +------+                                  *
  *              | Topo |    | Wave |                                  *
  *              |      |    |      |                                  *
  *  Mic in  --->|0    1|===>|0    1|---> Capture Host Pin             *
  *              |      |    |      |                                  *
  *              +------+    +------+                                  *
  *********************************************************************/
  static
  PHYSICALCONNECTIONTABLE MicArray1TopologyPhysicalConnections[] =
  {
      {
          KSPIN_TOPO_BRIDGE,          // TopologyOut
          KSPIN_WAVE_BRIDGE,          // WaveIn
          CONNECTIONTYPE_TOPOLOGY_OUTPUT
      }
  };
  
  static
  ENDPOINT_MINIPAIR MicArray1Miniports =
  {
      eMicArrayDevice1,
      L"TopologyMicArray1",                   // make sure this or the template name matches with KSNAME_TopologyMicArray1 in the inf's [Strings] section 
      NULL,                                   // optional template name
      CreateMicArrayMiniportTopology,
      &MicArray1TopoMiniportFilterDescriptor,
      0, NULL,                                // Interface properties
      L"WaveMicArray1",                       // make sure this or the tempalte name matches with KSNAME_WaveMicArray1 in the inf's [Strings] section
      NULL,                                   // optional template name
      CreateMiniportWaveRTSimpleAudioSample,
      &MicArrayWaveMiniportFilterDescriptor,
      0,                                      // Interface properties
      NULL,
      MICARRAY_DEVICE_MAX_CHANNELS,
      MicArrayPinDeviceFormatsAndModes,
      SIZEOF_ARRAY(MicArrayPinDeviceFormatsAndModes),
      MicArray1TopologyPhysicalConnections,
      SIZEOF_ARRAY(MicArray1TopologyPhysicalConnections),
      ENDPOINT_NO_FLAGS,
  };
  
  
  //=============================================================================
  //
  // Render miniport pairs. NOTE: the split of render and capture is arbitrary and
  // unnessary, this array could contain capture endpoints.
  //
  static
  PENDPOINT_MINIPAIR  g_RenderEndpoints[] = 
  {
      &SpeakerMiniports,
  };
  
  #define g_cRenderEndpoints  (SIZEOF_ARRAY(g_RenderEndpoints))
  
  //=============================================================================
  //
  // Capture miniport pairs. NOTE: the split of render and capture is arbitrary and
  // unnessary, this array could contain render endpoints.
  //
  static
  PENDPOINT_MINIPAIR  g_CaptureEndpoints[] =
  {
      &MicArray1Miniports,
  };
  
  #define g_cCaptureEndpoints (SIZEOF_ARRAY(g_CaptureEndpoints))
  
  //=============================================================================
  //
  // Total miniports = # endpoints * 2 (topology + wave).
  //
  #define g_MaxMiniports  ((g_cRenderEndpoints + g_cCaptureEndpoints) * 2)
  
  #endif // _SIMPLEAUDIOSAMPLE_MINIPAIRS_H_
  