I have implemented a bda driver for our usb device. Now, we should
support MCE, which requests the driver to support two devices on one
hub.
After refer to ddk sample, generictuner, I implemented GetMedium method
in the tuner filter, like following:
---8<--------------------------------------------->8---
CFilter::GetMedium(IN PIRP p_irp,
IN PKSMETHOD p_ks_property,
OUT KSPIN_MEDIUM* p_ks_medium)
{
NTSTATUS status = STATUS_SUCCESS;
if (p_ks_medium == NULL)
{
p_irp->IoStatus.Information = sizeof(KSPIN_MEDIUM);
return STATUS_MORE_ENTRIES;
}
PKSFILTER p_ks_filter = KsGetFilterFromIrp(p_irp);
if (p_ks_filter == NULL || p_ks_filter->Context == NULL)
{
status = STATUS_INVALID_PARAMETER;
return status;
}
CFilter* p_filter = (CFilter*)p_ks_filter->Context;
if (p_filter->m_p_device == NULL)
{
status = STATUS_INVALID_PARAMETER;
return status;
}
p_filter->m_p_device->GetInstanceID(p_ks_medium->Id);
// So, we only support two instances now.
if (p_ks_medium->Id == 0)
{
p_ks_medium->Set = GUID_FIRST_INSTANCE;
}
else if (p_ks_medium->Id = 1)
{
p_ks_medium->Set = GUID_SECOND_INSTANCE;
}
else
{
p_ks_medium->Set = KSMEDIUMSETID_Standard;
}
p_ks_medium->Flags = 0;
return status;
}
---8<--------------------------------------------->8---
But after I enabled this method, the two filters, tuner and capture,
could not be conneted successfully.
Did I missed something? Or may I misunder the medium? Did the Medium
use to differentiate the instances from one driver?
Any comments are welcome!
Advance thanks!
William