[wdmaudiodev] Re: USB2.0 High speed audio device for windows XP

  • From: AI Developer <developer@xxxxxxxxxxxxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx
  • Date: Thu, 21 Feb 2008 19:15:13 +0530

Hi Carsten,

I have the following suggestions:

a. Since your bridge pin exposes an analog data range, I would suggest that you use a D/A convertor as your node (KSNODETYPE_ADC). Or you might want to change the bridge to report a digital data range.
b. For the connections, connect the bridge pin (1) to your ADC's node 1, and then ADC's node 0 to the capture pin. I don't know the reason for this, but in some of our drivers, we had to make it so to get it to work right!
c. The INF you're using seems to have some sections for Win98/Me, and some missing sections for audio. Here's what I would recommend:

--------
;-------------------------------------------------------------------------------
; general sections :
;-------------------------------------------------------------------------------
[Version]
Signature="$CHICAGO$"
Class=MEDIA
ClassGUID ={4d36e96c-e325-11ce-bfc1-08002be10318}
provider=%Company%
LayoutFile=layout.inf
DriverVer=08/15/2005,2.6.0
 
[ControlFlags]
; All PnP devices should be excluded from manual AddDevice Applet list
ExcludeFromSelect=*
 
[DestinationDirs]
SPDIFDriver.CopyFiles=10,system32\drivers
 
[PreCopySection]
HKR,,NoSetupUI,,1

; ================= Device section=====================
[Manufacturer]
%Company%=Company
 
[Company]
%USB\VID_1218&PID_0030.DeviceDesc%=DrvInstall,USB\VID_1218&PID_0030
 

[DrvInstall.NT]
Include=ks.inf, wdmaudio.inf
Needs=KS.Registration, WDMAUDIO.Registration.NT
AddReg=DrvInstall.AddReg


[DrvInstall.AddReg]
;; Comes from USB Audio...
HKR,,SetupPreferredAudioDevices,3,01,00,00,00
HKR,,AssociatedFilters,,"wdmaud,swmidi,redbook"
HKR,,Driver,,SPDIF_USB_AudioDriver.sys
HKR,,NTMPDriver,,"SPDIF_USB_AudioDriver.sys,sbemul.sys"

HKR,,CLSID,,{17CCA71B-ECD7-11D0-B908-00A0C9223196}

HKR,Drivers,SubClasses,,"wave,mixer"

HKR,Drivers\wave\wdmaud.drv, Driver,,wdmaud.drv
HKR,Drivers\mixer\wdmaud.drv,Driver,,wdmaud.drv

HKR,Drivers\wave\wdmaud.drv,Description,,%USB\VID_1218&PID_0030.DeviceDesc%
HKR,Drivers\mixer\wdmaud.drv,Description,,%USB\VID_1218&PID_0030.DeviceDesc%


[SPDIFDriver.CopyFiles]
SPDIF_USB_AudioDriver.sys
 

;-------------------------------------------------------------------------------
; services sections
;-------------------------------------------------------------------------------
[DrvInstall.NT.Services]
Addservice = SPDIF_AUDIO, 0x00000002, DrvInstall.ServiceInstall
 
[DrvInstall.ServiceInstall]
DisplayName=%SPDIFDRV.SvcDesc%
ServiceType=%SERVICE_KERNEL_DRIVER%
StartType=%SERVICE_DEMAND_START%
ErrorControl=%SERVICE_ERROR_NORMAL%
ServiceBinary=%10%\system32\drivers\SPDIF_USB_AudioDriver.sys


;============================================================================
[Strings]
SERVICE_KERNEL_DRIVER=1
SERVICE_DEMAND_START=3
SERVICE_ERROR_NORMAL=1

Company="Company"
USB\VID_1218&PID_0030.DeviceDesc="SPDIF USB Audio Driver"
SPDIFDRV.SvcDesc="USB Audio Driver(SPDIF_USB_AudioDriver.sys)"
--------

Hope this helps!

Thanks.
Devendra.

carsten_30_@xxxxxx wrote:
Hi Devendra

I do not know if I can post attachments, so I put the code in here, wich means loss of formattig (sorry). I don't no if my code really helps. I'll be lucky, if some can send me a modified version of avssamp/awshws (from the dkk) with a modified inf, where the audio pin is accessible as a system audio device.

FILTER:

/**************************************************************************

    DESCRIPTOR AND DISPATCH LAYOUT

**************************************************************************/

GUID g_PINNAME_AUDIO_CAPTURE = {0x12345678, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

const GUID VolumeNodeType = {STATICGUIDOF(KSNODETYPE_SRC)};

const KSNODE_DESCRIPTOR KsNodeDescriptors[] = {DEFINE_NODE_DESCRIPTOR( NULL, &VolumeNodeType, NULL ) };

//    -------------
//  1-| 0 Node0 1 |-  Audio
//    -------------
const
KSTOPOLOGY_CONNECTION
KsConnections[] =
{
    { KSFILTER_NODE, 1, 0, 0 },
    { 0, 1, KSFILTER_NODE, 0 },
};

//
// CaptureFilterCategories:
//
// The list of category GUIDs for the capture filter.
//
const GUID CaptureFilterCategories [CAPTURE_FILTER_CATEGORIES_COUNT] =
{
    STATICGUIDOF (KSCATEGORY_AUDIO),
    STATICGUIDOF (KSCATEGORY_CAPTURE)
};

//=============================================================================
static KSDATARANGE PinDataRangesBridge[] = {
{
    sizeof(KSDATARANGE),
    0,
    0,
    0,
    STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
    STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG),
    STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE)
}
};
const KSDATARANGE_AUDIO PCM_Capture =
{
    //
    // KSDATARANGE
    //
    {  
        sizeof (KSDATARANGE_AUDIO),                 // FormatSize
        0,                                          // Flags
        0,                                          // SampleSize ignored?
        0,                                          // Reserved
 
        STATICGUIDOF (KSDATAFORMAT_TYPE_AUDIO),     // aka. MEDIATYPE_AUDIO
        STATICGUIDOF (KSDATAFORMAT_SUBTYPE_PCM),    // aka.
        STATICGUIDOF (KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) //
    },
 
    2,    // MaximumChannels;
    16,    // MinimumBitsPerSample;
    16,    // MaximumBitsPerSample;
    32000, // MinimumSampleFrequency;
    48000, //  MaximumSampleFrequency;
};
 
//
// CapturePinDataRanges:
//
// This is the list of data ranges supported on the capture pin.
//
const PKSDATARANGE CapturePinDataRanges [CAPTURE_PIN_DATA_RANGE_COUNT] =
{
    (PKSDATARANGE) &PCM_Capture,
};

//=============================================================================
static
PKSDATARANGE PinDataRangePointersBridge[] = {&PinDataRangesBridge[0]};


//
// CaptureFilterPinDescriptors:
//
// The list of pin descriptors on the capture filter. 
//
const KSPIN_DESCRIPTOR_EX CaptureFilterPinDescriptors [CAPTURE_FILTER_PIN_COUNT] =
{
    //
    // Capture Pin
    //
    {
        &CapturePinDispatch,
        NULL,            
        // KSPIN_DESCRIPTOR
        {
            NULL, 0,                          // Interfaces (NULL, 0 == default)
            NULL, 0,                          // Mediums (NULL, 0 == default)
            SIZEOF_ARRAY (CapturePinDataRanges), // Range Count
            CapturePinDataRanges,           // Ranges
            KSPIN_DATAFLOW_OUT,             // Dataflow
            KSPIN_COMMUNICATION_SINK,       // Communication
            &KSCATEGORY_CAPTURE, // &KSCATEGORY_AUDIO,              // Category
            &KSAUDFNAME_RECORDING_CONTROL,  // Name
            0                               // Reserved
        },
       
        //KSPIN_FLAG_GENERATE_MAPPINGS |      // Pin Flags
            KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING |
            KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY,
        1,                                  // Instances Possible
        1,                                  // Instances Necessary
        &CapturePinAllocatorFraming,        // Allocator Framing
        reinterpret_cast <PFNKSINTERSECTHANDLEREX>
            (CCapturePin::IntersectHandler)
    },

    // bridge pin
    {  
        NULL,
        NULL,
        {
            0, NULL, // SIZEOF_ARRAY(PinInterfaces), PinInterfaces,
            0, NULL, // SIZEOF_ARRAY(PinMediums),    PinMediums,
            SIZEOF_ARRAY(PinDataRangePointersBridge),
            PinDataRangePointersBridge, //Ranges..
            KSPIN_DATAFLOW_IN,
            KSPIN_COMMUNICATION_NONE,
            &KSNODETYPE_SPDIF_INTERFACE,     // Category
            &KSNODETYPE_SPDIF_INTERFACE,     // Name
            0
        },
        KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY | // Flags
          KSPIN_FLAG_FIXED_FORMAT,
        1, //InstancesPossible
        0, //InstancesNecessary
        NULL,
        NULL
    }
};

//
// CaptureFilterDispatch:
//
// This is the dispatch table for the capture filter.  It provides notification
// of creation, closure, processing (for filter-centrics, not for the capture
// filter), and resets (for filter-centrics, not for the capture filter).
//
const KSFILTER_DISPATCH CaptureFilterDispatch =
{
    CCaptureFilter::DispatchCreate,         // Filter Create
    NULL,                                   // Filter Close
    NULL,                                   // Filter Process
    NULL                                    // Filter Reset
};

//
// CaptureFilterDescription:
//
// The descriptor for the capture filter.  We don't specify any topology
// since there's only one pin on the filter.  Realistically, there would
// be some topological relationships here because there would be input
// pins from crossbars and the like.
//
const KSFILTER_DESCRIPTOR CaptureFilterDescriptor =
{
    &CaptureFilterDispatch,                 // Dispatch Table
    NULL,                                   // Automation Table
    KSFILTER_DESCRIPTOR_VERSION,            // Version
    0,                                      // Flags
    &KSNAME_Filter,                         // Reference GUID
    DEFINE_KSFILTER_PIN_DESCRIPTORS (CaptureFilterPinDescriptors),
    DEFINE_KSFILTER_CATEGORIES (CaptureFilterCategories),
    DEFINE_KSFILTER_NODE_DESCRIPTORS(KsNodeDescriptors),
    DEFINE_KSFILTER_CONNECTIONS(KsConnections),
    NULL                                    // Component ID
};
 
 
One possible inf (I tried lots of infs so far)
 
;-------------------------------------------------------------------------------
; general sections :
;-------------------------------------------------------------------------------
[Version]
Signature="$CHICAGO$"
Class=MEDIA
ClassGUID ={4d36e96c-e325-11ce-bfc1-08002be10318}
provider=%Company%
LayoutFile=layout.inf
DriverVer=08/15/2005,2.6.0
 
[ControlFlags]
; All PnP devices should be excluded from manual AddDevice Applet list
ExcludeFromSelect=*
 
[DestinationDirs]
SPDIFDriver.CopyFiles=10,system32\drivers
 
[PreCopySection]
HKR,,NoSetupUI,,1
 
; ================= Device section=====================
[Manufacturer]
%Company%=Company
 
[Company]
%USB\VID_1218&PID_0030.DeviceDesc%=DrvInstall,USB\VID_1218&PID_0030
 
;-------------------------------------------------------------------------------
; platform install sections
;-------------------------------------------------------------------------------
[DrvInstall]
Include=ks.inf, kscaptur.inf, dshowext.inf       
AlsoInstall=KS.Registration,KSCAPTUR.Registration, DSHOWEXT.Registration 
CopyFiles=SPDIFDriver.CopyFiles
AddReg=DrvInstall.AddReg,DrvInstall.PinNames
 
[DrvInstall.NT]
Include=ks.inf,kscaptur.inf,dshowext.inf       
Needs=KS.Registration,KSCAPTUR.Registration.NT, DSHOWEXT.Registration
CopyFiles=SPDIFDriver.CopyFiles
AddReg=DrvInstall.AddReg,DrvInstall.PinNames
          
 
[DrvInstall.AddReg]
HKR,,DevLoader,,*NTKERN
HKR,,NTMPDriver,,SPDIF_USB_AudioDriver.sys
 
[SPDIFDriver.CopyFiles]
SPDIF_USB_AudioDriver.sys
 
;-------------------------------------------------------------------------------
; services sections
;-------------------------------------------------------------------------------
[DrvInstall.NT.Services]
Addservice = SPDIF_AUDIO, 0x00000002, DrvInstall.ServiceInstall
 
[DrvInstall.ServiceInstall]
DisplayName=%SPDIFDRV.SvcDesc%
ServiceType=%SERVICE_KERNEL_DRIVER%
StartType=%SERVICE_DEMAND_START%
ErrorControl=%SERVICE_ERROR_NORMAL%
ServiceBinary=%10%\system32\drivers\SPDIF_USB_AudioDriver.sys
LoadOrderGroup=ExtendedBase
 

;-------------------------------------------------------------------------------
; interfaces sections
;-------------------------------------------------------------------------------
[DrvInstall.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,%KSSTRING_FILTER%,DrvInstall.C.Interface
AddInterface=%KSCATEGORY_AUDIO%,%KSSTRING_FILTER%,DrvInstall.A.Interface
 
AddInterface=%KSCATEGORY_AUDIO%,%KSNAME_Wave%,UsbAudio.I.Wave
AddInterface=%KSCATEGORY_AUDIO%,%KSNAME_Topology%,UsbAudio.I.Topo
 

[DrvInstall.NT.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,%KSSTRING_FILTER%,DrvInstall.C.Interface
AddInterface=%KSCATEGORY_AUDIO%,%KSSTRING_FILTER%,DrvInstall.A.Interface
 
AddInterface=%KSCATEGORY_AUDIO%,%KSNAME_Wave%,DrvInstall.W.Interface
AddInterface=%KSCATEGORY_AUDIO%,%KSNAME_Topology%,DrvInstall.T.Interface
 
[DrvInstall.C.Interface]
AddReg=DrvInstall.C.Interface.AddReg
 
[DrvInstall.C.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USB\VID_1218&PID_0030.DeviceDesc.CInterface%
 
[DrvInstall.A.Interface]
AddReg=DrvInstall.A.Interface.AddReg
 
[DrvInstall.A.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USB\VID_1218&PID_0030.DeviceDesc.AInterface%
 
[DrvInstall.W.Interface]
AddReg=DrvInstall.W.Interface.AddReg
 
[DrvInstall.W.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USB\VID_1218&PID_0030.DeviceDesc.WInterface%
 
[DrvInstall.T.Interface]
AddReg=DrvInstall.T.Interface.AddReg
 
[DrvInstall.T.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USB\VID_1218&PID_0030.DeviceDesc.TInterface%
 
;-------------------------------------------------------------------------------
; pinnames
;-------------------------------------------------------------------------------
[DrvInstall.PinNames]
;Audio capture pin name
HKLM,SYSTEM\CurrentControlSet\Control\MediaCategories\{12345678-0000-0000-00000000000000000},Name,0,%AudioCapturePinName%
HKLM,SYSTEM\CurrentControlSet\Control\MediaCategories\{12345678-0000-0000-00000000000000000},Display,1,00,00,00,00
 

;-------------------------------------------------------------------------------
; string sections
;-------------------------------------------------------------------------------
 
[Strings]
 
;----------------
; Non-Localizable
;----------------
 
; note: only register value is case sensitive, key is not.
KSSTRING_Filter="{9B365890-165F-11D0-A195-0020AFD156E4}"
 
ProxyVCap.CLSID="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
KSCATEGORY_AUDIO="{6994AD04-93EF-11D0-A3CC-00A0C9223196}"
KSCATEGORY_RENDER="{65E8773E-8F56-11D0-A3B9-00A0C9223196}"
KSCATEGORY_CAPTURE="{65E8773D-8F56-11D0-A3B9-00A0C9223196}"
KSCATEGORY_VIDEO="{6994AD05-93EF-11D0-A3CC-00A0C9223196}"
KSCATEGORY_CROSSBAR="{a799a801-a46d-11d0-a18c-00a02401dcd4}"
KSCATEGORY_TVTUNER="{a799a800-a46d-11d0-a18c-00a02401dcd4}"
KSCATEGORY_TVAUDIO="{a799a802-a46d-11d0-a18c-00a02401dcd4}"
 
SERVICE_KERNEL_DRIVER=1
SERVICE_DEMAND_START=3
SERVICE_ERROR_NORMAL=1
 
KSNAME_Wave="Wave"
KSNAME_Topology="Topology"
 
;----------------
; Localizable
;----------------
 
Company="Company"
USB\VID_1218&PID_0030.DeviceDesc="USB Audio Driver"
SPDIFDRV.SvcDesc="USB Audio Driver(SPDIF_USB_AudioDriver.sys)"
USB\VID_1218&PID_0030.DeviceDesc.CInterface="USB Audio Driver CInterface"
USB\VID_1218&PID_0030.DeviceDesc.AInterface="USB Audio Driver AInterface"
USB\VID_1218&PID_0030.DeviceDesc.WInterface="USB Audio Driver WInterface"
USB\VID_1218&PID_0030.DeviceDesc.TInterface="USB Audio Driver TInterface"
AudioCapturePinName="SPDIF Audio Capture Pin Name"
 
 

****************** WDMAUDIODEV addresses: Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx Subscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe Unsubscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe Moderator: mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx URL to WDMAUDIODEV page: http://www.wdmaudiodev.com/

Other related posts: