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 = <number of jacks associated with this pin (nPinId) > 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" <npyatkov@xxxxxxx> To: <wdmaudiodev@xxxxxxxxxxxxx> 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 <mitchr@xxxxxxxxxxxxx> To: "wdmaudiodev@xxxxxxxxxxxxx" <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)" <soccerl@xxxxxxxxxxxxx> To: "wdmaudiodev@xxxxxxxxxxxxx" <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/