mirror of
https://github.com/reactos/reactos.git
synced 2025-04-27 00:50:23 +00:00
- Fix IPortWaveCyclic interface
- Implement IPortEvents interface svn path=/trunk/; revision=38913
This commit is contained in:
parent
ef794c62a4
commit
c41ccd6b73
1 changed files with 110 additions and 7 deletions
|
@ -6,6 +6,7 @@ typedef struct
|
||||||
IPortEventsVtbl *lpVbtlPortEvents;
|
IPortEventsVtbl *lpVbtlPortEvents;
|
||||||
IUnregisterSubdeviceVtbl *lpVtblUnregisterSubdevice;
|
IUnregisterSubdeviceVtbl *lpVtblUnregisterSubdevice;
|
||||||
IUnregisterPhysicalConnectionVtbl *lpVtblPhysicalConnection;
|
IUnregisterPhysicalConnectionVtbl *lpVtblPhysicalConnection;
|
||||||
|
IPortEventsVtbl *lpVtblPortEvents;
|
||||||
ISubdeviceVtbl *lpVtblSubDevice;
|
ISubdeviceVtbl *lpVtblSubDevice;
|
||||||
|
|
||||||
LONG ref;
|
LONG ref;
|
||||||
|
@ -22,6 +23,98 @@ typedef struct
|
||||||
|
|
||||||
|
|
||||||
const GUID GUID_DEVCLASS_SOUND; //FIXME
|
const GUID GUID_DEVCLASS_SOUND; //FIXME
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// IPortEvents
|
||||||
|
//
|
||||||
|
|
||||||
|
static
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
IPortEvents_fnQueryInterface(
|
||||||
|
IPortEvents* iface,
|
||||||
|
IN REFIID refiid,
|
||||||
|
OUT PVOID* Output)
|
||||||
|
{
|
||||||
|
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)CONTAINING_RECORD(iface, IPortWaveCyclicImpl, lpVtblPortEvents);
|
||||||
|
|
||||||
|
DPRINT1("IPortEvents_fnQueryInterface entered\n");
|
||||||
|
|
||||||
|
if (IsEqualGUIDAligned(refiid, &IID_IPortEvents) ||
|
||||||
|
IsEqualGUIDAligned(refiid, &IID_IUnknown))
|
||||||
|
{
|
||||||
|
*Output = &This->lpVbtlPortEvents;
|
||||||
|
InterlockedIncrement(&This->ref);
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
return STATUS_UNSUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
ULONG
|
||||||
|
NTAPI
|
||||||
|
IPortEvents_fnAddRef(
|
||||||
|
IPortEvents* iface)
|
||||||
|
{
|
||||||
|
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)CONTAINING_RECORD(iface, IPortWaveCyclicImpl, lpVtblPortEvents);
|
||||||
|
DPRINT1("IPortEvents_fnQueryInterface entered\n");
|
||||||
|
return InterlockedIncrement(&This->ref);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
ULONG
|
||||||
|
NTAPI
|
||||||
|
IPortEvents_fnRelease(
|
||||||
|
IPortEvents* iface)
|
||||||
|
{
|
||||||
|
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)CONTAINING_RECORD(iface, IPortWaveCyclicImpl, lpVtblPortEvents);
|
||||||
|
DPRINT1("IPortEvents_fnQueryInterface entered\n");
|
||||||
|
InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
|
if (This->ref == 0)
|
||||||
|
{
|
||||||
|
FreeItem(This, TAG_PORTCLASS);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* Return new reference count */
|
||||||
|
return This->ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
void
|
||||||
|
NTAPI
|
||||||
|
IPortEvents_fnAddEventToEventList(
|
||||||
|
IPortEvents* iface,
|
||||||
|
IN PKSEVENT_ENTRY EventEntry)
|
||||||
|
{
|
||||||
|
DPRINT1("IPortEvents_fnAddEventToEventList stub\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
void
|
||||||
|
NTAPI
|
||||||
|
IPortEvents_fnGenerateEventList(
|
||||||
|
IPortEvents* iface,
|
||||||
|
IN GUID* Set OPTIONAL,
|
||||||
|
IN ULONG EventId,
|
||||||
|
IN BOOL PinEvent,
|
||||||
|
IN ULONG PinId,
|
||||||
|
IN BOOL NodeEvent,
|
||||||
|
IN ULONG NodeId)
|
||||||
|
{
|
||||||
|
DPRINT1("IPortEvents_fnGenerateEventList stub\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static IPortEventsVtbl vt_IPortEvents =
|
||||||
|
{
|
||||||
|
IPortEvents_fnQueryInterface,
|
||||||
|
IPortEvents_fnAddRef,
|
||||||
|
IPortEvents_fnRelease,
|
||||||
|
IPortEvents_fnAddEventToEventList,
|
||||||
|
IPortEvents_fnGenerateEventList
|
||||||
|
};
|
||||||
|
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
// IUnknown interface functions
|
// IUnknown interface functions
|
||||||
//
|
//
|
||||||
|
@ -33,6 +126,7 @@ IPortWaveCyclic_fnQueryInterface(
|
||||||
IN REFIID refiid,
|
IN REFIID refiid,
|
||||||
OUT PVOID* Output)
|
OUT PVOID* Output)
|
||||||
{
|
{
|
||||||
|
WCHAR Buffer[100];
|
||||||
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)iface;
|
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)iface;
|
||||||
if (IsEqualGUIDAligned(refiid, &IID_IPortWaveCyclic) ||
|
if (IsEqualGUIDAligned(refiid, &IID_IPortWaveCyclic) ||
|
||||||
IsEqualGUIDAligned(refiid, &IID_IUnknown))
|
IsEqualGUIDAligned(refiid, &IID_IUnknown))
|
||||||
|
@ -41,6 +135,12 @@ IPortWaveCyclic_fnQueryInterface(
|
||||||
InterlockedIncrement(&This->ref);
|
InterlockedIncrement(&This->ref);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
else if (IsEqualGUIDAligned(refiid, &IID_IPortEvents))
|
||||||
|
{
|
||||||
|
*Output = &This->lpVtblPortEvents;
|
||||||
|
InterlockedIncrement(&This->ref);
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
else if (IsEqualGUIDAligned(refiid, &IID_ISubdevice))
|
else if (IsEqualGUIDAligned(refiid, &IID_ISubdevice))
|
||||||
{
|
{
|
||||||
*Output = &This->lpVtblSubDevice;
|
*Output = &This->lpVtblSubDevice;
|
||||||
|
@ -57,6 +157,10 @@ IPortWaveCyclic_fnQueryInterface(
|
||||||
return NewIDrmPort((PDRMPORT2*)Output);
|
return NewIDrmPort((PDRMPORT2*)Output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StringFromCLSID(refiid, Buffer);
|
||||||
|
DPRINT1("IPortWaveCyclic_fnQueryInterface no interface!!! iface %S\n", Buffer);
|
||||||
|
KeBugCheckEx(0, 0, 0, 0, 0);
|
||||||
|
|
||||||
return STATUS_UNSUCCESSFUL;
|
return STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,11 +280,12 @@ IPortWaveCyclic_fnInit(
|
||||||
Status = UnknownMiniport->lpVtbl->QueryInterface(UnknownMiniport, &IID_IPinCount, (PVOID*)&PinCount);
|
Status = UnknownMiniport->lpVtbl->QueryInterface(UnknownMiniport, &IID_IPinCount, (PVOID*)&PinCount);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
/* store IPinCount interface */
|
||||||
This->pPinCount = PinCount;
|
This->pPinCount = PinCount;
|
||||||
This->pDescriptor = NULL;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
/* check if the miniport adapter provides a valid device descriptor */
|
||||||
Status = Miniport->lpVtbl->GetDescription(Miniport, &This->pDescriptor);
|
Status = Miniport->lpVtbl->GetDescription(Miniport, &This->pDescriptor);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -188,18 +293,15 @@ IPortWaveCyclic_fnInit(
|
||||||
Miniport->lpVtbl->Release(Miniport);
|
Miniport->lpVtbl->Release(Miniport);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
This->pPinCount = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* does the Miniport adapter support IPowerNotify interface*/
|
||||||
Status = UnknownMiniport->lpVtbl->QueryInterface(UnknownMiniport, &IID_IPowerNotify, (PVOID*)&PowerNotify);
|
Status = UnknownMiniport->lpVtbl->QueryInterface(UnknownMiniport, &IID_IPowerNotify, (PVOID*)&PowerNotify);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
/* store reference */
|
||||||
This->pPowerNotify = PowerNotify;
|
This->pPowerNotify = PowerNotify;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
This->pPowerNotify = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* increment reference on resource list */
|
/* increment reference on resource list */
|
||||||
ResourceList->lpVtbl->AddRef(ResourceList);
|
ResourceList->lpVtbl->AddRef(ResourceList);
|
||||||
|
@ -329,8 +431,8 @@ static IPortWaveCyclicVtbl vt_IPortWaveCyclicVtbl =
|
||||||
IPortWaveCyclic_fnGetDeviceProperty,
|
IPortWaveCyclic_fnGetDeviceProperty,
|
||||||
IPortWaveCyclic_fnNewRegistryKey,
|
IPortWaveCyclic_fnNewRegistryKey,
|
||||||
IPortWaveCyclic_fnNotify,
|
IPortWaveCyclic_fnNotify,
|
||||||
IPortWaveCyclic_fnNewMasterDmaChannel,
|
|
||||||
IPortWaveCyclic_fnNewSlaveDmaChannel,
|
IPortWaveCyclic_fnNewSlaveDmaChannel,
|
||||||
|
IPortWaveCyclic_fnNewMasterDmaChannel
|
||||||
};
|
};
|
||||||
|
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
|
@ -514,6 +616,7 @@ NewPortWaveCyclic(
|
||||||
|
|
||||||
This->lpVtbl = &vt_IPortWaveCyclicVtbl;
|
This->lpVtbl = &vt_IPortWaveCyclicVtbl;
|
||||||
This->lpVtblSubDevice = &vt_ISubdeviceVtbl;
|
This->lpVtblSubDevice = &vt_ISubdeviceVtbl;
|
||||||
|
This->lpVtblPortEvents = &vt_IPortEvents;
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
*OutPort = (PPORT)(&This->lpVtbl);
|
*OutPort = (PPORT)(&This->lpVtbl);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue