[wdmaudiodev] Re: Fwd: Re: KSPROPERTY_JACK_DESCRIPTION

  • From: "Nikolay V. Pyatkov" <npyatkov@xxxxxxx>
  • To: <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Thu, 15 Mar 2007 16:51:52 -0400

Mitchell,

It works. Thank you. My mistake was I attached the property to a pin, not to the filter.

Nikolay 

 

 


------ Original Message ------
Received: Mon, 12 Mar 2007 03:22:30 PM EDT
From: Mitchell Rundle
To: "wdmaudiodev@xxxxxxxxxxxxx"
Subject: [wdmaudiodev] Re: Fwd: Re: KSPROPERTY_JACK_DESCRIPTION


Nikolay, sorry for the delay. 

 

Starting with the MSVAD “simple” sample in the WDK, here’s what it takes to add support for KSPROPERTY_JACK_DESCRIPTION.

 

1)     In Simple\TopTable.h, change the automation table in MiniportFilterDescriptor to point to a new automation table:

 

//=============================================================================

static

PCPROPERTY_ITEM PropertiesTopoFilter[] =

{

    {

        &KSPROPSETID_Jack,

        KSPROPERTY_JACK_DESCRIPTION,

        KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,

        PropertyHandler_TopoFilter

    }

};

 

DEFINE_PCAUTOMATION_TABLE_PROP(AutomationTopoFilter, PropertiesTopoFilter);

 

//=============================================================================

static

PCFILTER_DESCRIPTOR MiniportFilterDescriptor =

{

  0,                                  // Version

  &AutomationTopoFilter,              // AutomationTable

  sizeof(PCPIN_DESCRIPTOR),           // PinSize

  SIZEOF_ARRAY(MiniportPins),         // PinCount

  MiniportPins,                       // Pins

  sizeof(PCNODE_DESCRIPTOR),          // NodeSize

  SIZEOF_ARRAY(TopologyNodes),        // NodeCount

  TopologyNodes,                      // Nodes

  SIZEOF_ARRAY(MiniportConnections),  // ConnectionCount

  MiniportConnections,                // Connections

  0,                                  // CategoryCount

  NULL                                // Categories

};

 

 

2)     In simple\MinTopo.h, add a new property handler to the filter object:

 

class CMiniportTopology :

    public CMiniportTopologyMSVAD,

    public IMiniportTopology,

    public CUnknown

{

  public:

    DECLARE_STD_UNKNOWN();

    DEFINE_STD_CONSTRUCTOR(CMiniportTopology);

    ~CMiniportTopology();

 

    IMP_IMiniportTopology;

 

    NTSTATUS                    PropertyHandlerJackDescription

    (

        IN PPCPROPERTY_REQUEST  PropertyRequest

    );

};

typedef CMiniportTopology *PCMiniportTopology;

 

extern NTSTATUS PropertyHandler_TopoFilter(IN PPCPROPERTY_REQUEST PropertyRequest);

 

3)  In MinTopo.cpp, implement the property handler:

 

NTSTATUS

CMiniportTopology::PropertyHandlerJackDescription

(

    IN PPCPROPERTY_REQUEST      PropertyRequest

)

{

    PAGED_CODE();

 

    ASSERT(PropertyRequest);

 

    DPF_ENTER(("[PropertyHandlerJackDescription]"));

 

    NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST;

    ULONG    nPinId = (ULONG)-1;

 

    if (PropertyRequest->InstanceSize >= sizeof(ULONG))

    {

        nPinId = *(PULONG(PropertyRequest->Instance));

 

        if ((nPinId < ARRAYSIZE(JackDescriptions)) && (JackDescriptions[nPinId] != NULL))

        {

            if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT)

            {

                ntStatus =

                    PropertyHandler_BasicSupport

                    (

                        PropertyRequest,

                        KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_GET,

                        VT_ILLEGAL

                    );

            }

            else

            {

                ULONG cJacks =

                ULONG cbNeeded = sizeof(KSMULTIPLE_ITEM) + sizeof(KSJACK_DESCRIPTION) * cJacks;

 

                if (PropertyRequest->ValueSize == 0)

                {

                    PropertyRequest->ValueSize = cbNeeded;

                    ntStatus = STATUS_BUFFER_OVERFLOW;

                }

                else if (PropertyRequest->ValueSize < cbNeeded)

                {

                    ntStatus = STATUS_BUFFER_TOO_SMALL;

                }

                else

                {

                    if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET)

                    {

                        PKSMULTIPLE_ITEM pMI = (PKSMULTIPLE_ITEM)PropertyRequest->Value;

                        PKSJACK_DESCRIPTION pDesc = (PKSJACK_DESCRIPTION)(pMI+1);

 

                        pMI->Size = sizeof(KSJACK_DESCRIPTION);

                        pMI->Count = cJacks;

 

                        // TODO:  copy jack info struct(s) into pDesc...

 

                        ntStatus = STATUS_SUCCESS;

                    }

                }

            }

        }

    }

 

    return ntStatus;

}

 

NTSTATUS

PropertyHandler_TopoFilter

(

    IN PPCPROPERTY_REQUEST      PropertyRequest

)

{

    PAGED_CODE();

 

    ASSERT(PropertyRequest);

 

    DPF_ENTER(("[PropertyHandler_TopoFilter]"));

 

    // PropertryRequest structure is filled by portcls.

    // MajorTarget is a pointer to miniport object for miniports.

    //

    NTSTATUS            ntStatus = STATUS_INVALID_DEVICE_REQUEST;

    PCMiniportTopology  pMiniport = (PCMiniportTopology)PropertyRequest->MajorTarget;

 

    if (IsEqualGUIDAligned(*PropertyRequest->PropertyItem->Set, KSPROPSETID_Jack) &&

        (PropertyRequest->PropertyItem->Id == KSPROPERTY_JACK_DESCRIPTION))

    {

        ntStatus =

            pMiniport->PropertyHandlerJackDescription

            (

                PropertyRequest

            );

    }

 

    return ntStatus;

} // PropertyHandler_TopoFilter

 

 

Regards,

Mitch

Microsoft Corp.

 

This posting is provided "AS IS" with no warranties, and confers no rights.

 

From: wdmaudiodev-bounce@xxxxxxxxxxxxx [mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Nikolay V. Pyatkov
Sent: Wednesday, February 28, 2007 8:49 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: Fwd: Re: KSPROPERTY_JACK_DESCRIPTION

 

Can anybody point me to a sample of code which uses KSPROPERTY_JACK_DESCRIPTION?

Thanks,

Nikolay


------ Original Message ------
Received: Fri, 23 Feb 2007 01:08:38 PM EST
From: "Nikolay V. Pyatkov"
To:
Subject: [wdmaudiodev] Re: Fwd: Re: KSPROPERTY_JACK_DESCRIPTION

No I do not see that message.

Just to test my sanity I have added two KdPrint() 's

The output from GetDescrioption() is:

pin no. 0, AutomationTable 00000000
pin no. 1, AutomationTable 00000000
pin no. 2, AutomationTable 00000000
pin no. 3, AutomationTable 00000000
pin no. 4, AutomationTable 86BB3418
pin no. 5, AutomationTable 00000000

Looks like the tablbe is attached to the speaker pin, but the PropertyHandlerGeneric() is never called with KSPROPERTY_JACK_DESCRIPTION parameter.

Also I do not see any unrecognized properties in the KsStudio log windows.

Thanks,

Nikolay


NTSTATUS

CMiniportTopologyMSVAD::PropertyHandlerGeneric(IN PPCPROPERTY_REQUEST PropertyRequest)

{
 switch (PropertyRequest->PropertyItem->Id)

 {

 case KSPROPERTY_JACK_DESCRIPTION:

  ntStatus = PropertyHandlerJack(PropertyRequest);

  KdPrint(("[PropertyHandlerGeneric: KSPROPERTY_JACK_DESCRIPTION]"));

  break;

 }


} // PropertyHandlerGeneric

 

CMiniportTopologyMSVAD::GetDescription( PPCFILTER_DESCRIPTOR *  OutFilterDescriptor )
{
    *OutFilterDescriptor = m_FilterDescriptor;
    unsigned int i;
    for (i = 0; i < m_FilterDescriptor->PinCount; i++)
    {
        KdPrint(("pin no. %d, AutomationTable %p\n",
            i, m_FilterDescriptor->Pins[i].AutomationTable));
    }
    return (STATUS_SUCCESS);
} // GetDescription



------ Original Message ------
Received: Thu, 22 Feb 2007 07:03:56 PM EST
From: Mitchell Rundle
To: "wdmaudiodev@xxxxxxxxxxxxx"
Subject: [wdmaudiodev] Re: Fwd: Re: KSPROPERTY_JACK_DESCRI PTION

Correct, KSStudio hasn’t yet been updated to show jack info.  If you search the logging window though, it should show

 

KSStudio does not recognize property GUID {4509F757-2D46-4637-8E62-CE7DB944F57B} supported by the filter.

This is not a driver bug.

 

Regards,

Mitch

 

From: wdmaudiodev-bounce@xxxxxxxxxxxxx [mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Cheng-mean Liu (SOCCER)
Sent: Thursday, February 22, 2007 2:31 PM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: Fwd: Re: KSPROPERTY_JACK_DESCRIPTION

 

I don’t think KSStudio would display it because KSStudio does not know such a new KSPROPSETID.

You can verify this by running your HD Audio device with inbox HDAudio driver and check information from mmsys.cpl and ksstudio.

 

From: wdmaudiodev-bounce@xxxxxxxxxxxxx [mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Nikolay V. Pyatkov
Sent: Thursday, February 22, 2007 2:10 PM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Fwd: Re: KSPROPERTY_JACK_DESCRIPTION

 

I tried that too. Works the same. Should not KsStudio report at least something about this new property for the pin?

 

Thanks,

Nikolay




------ Original Message ------
Received: Thu, 22 Feb 2007 02:12:44 PM EST
From: "Cheng-mean Liu (SOCCER)"
To: "wdmaudiodev@xxxxxxxxxxxxx"
Subject: [wdmaudiodev] Re: KSPROPERTY_JACK_DESCRIPTION


I would try to replace KSPROPSETID_Audio with KSPROPSETID_Jack in your PCPROPERTY_ITEM structure for the topology filter
{
&KSPROPSETID_Jack, //<---------------------------like this line
KSPROPERTY_JACK_DESCRIPTION,
KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,
PropertyHandler_Topology
},

Thanks.

Cheng-mean Liu
Microsoft Corporation
This posting is provided "AS IS" with no warranties, and confers no rights.

-----Original Message-----
From: wdmaudiodev-bounce@xxxxxxxxxxxxx [mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Nikolay V. Pyatkov
Sent: Thurs d ay, February 22, 2007 7:07 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] KSPROPERTY_JACK_DESCRIPTION

I need to display speaker connection status in a portcls audio driver. To
begin I have modified audio/msvad/simple code in the DDK 6000. But the jack
is not displayed on the audio panel and the KsStudio does not show the
KSPROPERTY_JACK_DESCRIPTION when the driver is instantiated. The code is
below.

Any help or code sample would be appreciated.

Thanks,
Nikolay


static PCPROPERTY_ITEM PropertiesJack[] =
{
{
&KSPROPSETID_Audio,
KSPROPERTY_JACK_DESCRIPTION,
KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,
PropertyHandler_Topology
},
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_CPU_RESOURCES,
KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,
PropertyHandler_Topology
}
};

DEFINE_PCAUTOMATION_TABLE_PROP(AutomationJack, PropertiesJack); < B R>



// KSPIN_TOPO_LINEOUT_DEST (output jack)
{
0,
0,
0, // InstanceCount
&AutomationJack, // AutomationTable
{ // KsPinDescriptor
0, // InterfacesCount
NULL, // Interfaces
0, // MediumsCount
NULL, // Mediums
SIZEOF_ARRAY(PinDataRangePointersBridge), // DataRangesCount
PinDataRangePointersBridge, // DataRanges
KSPIN_DATAFLOW_OUT, // DataFlow
KSPIN_COMMUNICATION_NONE, // Communication
&KSNODETYPE_SPEAKER, // Category
NULL, // Name
0 // Reserved
}
},



// KSPROPERTY_JACK_DESCRIPTION handler
NTSTATUS CMiniportTopologyMSVAD::PropertyHandlerJack
(
IN PPCPROPERTY_REQUEST PropertyRequest
)
{
NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST;


typedef struct
{
KSMULTIPLE_ITEM mult_item;
KSJACK_DESCRIPTION dsc;
} tJackProperty;

tJackProperty * pJackProperty;


if (PropertyRequest->Verb & KSPROPERTY _T YP E_GET)
{
ntStatus = ValidatePropertyParams(PropertyRequest,
sizeof(tJackProperty));
if (NT_SUCCESS(ntStatus))
{
pJackProperty = (tJackProperty *)PropertyRequest->Value;
pJackProperty->mult_item.Size = sizeof(tJackProperty);
pJackProperty->mult_item.Count = 1;
pJackProperty->dsc.ChannelMapping = 1; //ePcxChanMap_Unknown;
pJackProperty->dsc.Color = 0x808080; // Grey?
pJackProperty->dsc.ConnectionType = eConnTypeUnknown;
pJackProperty->dsc.GeoLocation = eGeoLocFront;
pJackProperty->dsc.GenLocation = eGenLocOther;
pJackProperty->dsc.PortConnection = ePortConnUnknown;
pJackProperty->dsc.IsConnected = getSpeakerConnectionStatus();
}
}
else if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT)
{
ntStatus =
PropertyHandler_BasicSupport
(
PropertyRequest,
KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,
VT_ILLEGAL
);
}

r etu rn ntStatus;
}
******************

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/

******************

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/

 

****************** 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/


****************** 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/

 

****************** 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/


****************** 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: