ReactOS 0.4.15-dev-5836-g942b022
CMiniportDMusUARTStream Class Reference
Inheritance diagram for CMiniportDMusUARTStream:
Collaboration diagram for CMiniportDMusUARTStream:

Public Member Functions

STDMETHODIMP QueryInterface (REFIID InterfaceId, PVOID *Interface)
 
virtual ~CMiniportDMusUARTStream ()
 
 STDMETHODIMP_ (NTSTATUS) Init(IN CMiniportDMusUART *pMiniport
 
NTSTATUS HandlePortParams (IN PPCPROPERTY_REQUEST Request)
 
 STDMETHODIMP_ (NTSTATUS) Write(IN PVOID BufferAddress
 
friend STDMETHODIMP_ (NTSTATUS) SnapTimeStamp(PINTERRUPTSYNC InterruptSync
 
- Public Member Functions inherited from CUnknownImpl< IMXF >
 STDMETHODIMP_ (ULONG) AddRef()
 
 STDMETHODIMP_ (ULONG) Release()
 

Public Attributes

IN PUCHAR pPortBase
 
IN PUCHAR IN BOOLEAN fCapture
 
IN PUCHAR IN BOOLEAN IN PAllocatorMXF allocatorMXF
 
IN PUCHAR IN BOOLEAN IN PAllocatorMXF IN PMASTERCLOCK masterClock
 
 IMP_IMXF
 
IN ULONG BytesToWrite
 
IN ULONG OUT PULONG BytesWritten
 

Private Member Functions

 STDMETHODIMP_ (NTSTATUS) SourceEvtsToPort()
 
 STDMETHODIMP_ (NTSTATUS) ConsumeEvents()
 
 STDMETHODIMP_ (NTSTATUS) PutMessageLocked(PDMUS_KERNEL_EVENT pDMKEvt)
 

Private Attributes

CMiniportDMusUARTm_pMiniport
 
REFERENCE_TIME m_SnapshotTimeStamp
 
PUCHAR m_pPortBase
 
BOOLEAN m_fCapture
 
long m_NumFailedMPUTries
 
PAllocatorMXF m_AllocatorMXF
 
PMXF m_sinkMXF
 
PDMUS_KERNEL_EVENT m_DMKEvtQueue
 
ULONG m_NumberOfRetries
 
ULONG m_DMKEvtOffset
 
KDPC m_Dpc
 
KTIMER m_TimerEvent
 
BOOL m_TimerQueued
 
KSPIN_LOCK m_DpcSpinLock
 

Friends

PVOID pStream
 
VOID NTAPI DMusUARTTimerDPC (IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
 
NTSTATUS NTAPI PropertyHandler_Synth (IN PPCPROPERTY_REQUEST)
 

Additional Inherited Members

- Protected Member Functions inherited from CUnknownImpl< IMXF >
 CUnknownImpl ()
 
virtual ~CUnknownImpl ()
 

Detailed Description

Definition at line 186 of file miniport_dmus.cpp.

Constructor & Destructor Documentation

◆ ~CMiniportDMusUARTStream()

CMiniportDMusUARTStream::~CMiniportDMusUARTStream ( void  )
virtual

Definition at line 1852 of file miniport_dmus.cpp.

1853{
1854 PAGED_CODE();
1855
1856 DPRINT("~CMiniportDMusUARTStream");
1857
1859
1860 if (m_DMKEvtQueue)
1861 {
1862 if (m_AllocatorMXF)
1863 {
1864 m_AllocatorMXF->PutMessage(m_DMKEvtQueue);
1865 }
1866 else
1867 {
1868 DPRINT("~CMiniportDMusUARTStream, no allocator, can't flush DMKEvts");
1869 }
1871 }
1872 if (m_AllocatorMXF)
1873 {
1874 m_AllocatorMXF->Release();
1876 }
1877
1878 if (m_pMiniport)
1879 {
1880 if (m_fCapture)
1881 {
1883 }
1884 else
1885 {
1887 }
1888
1889 m_pMiniport->Release();
1890 }
1891}
#define PAGED_CODE()
CMiniportDMusUART * m_pMiniport
PAllocatorMXF m_AllocatorMXF
PDMUS_KERNEL_EVENT m_DMKEvtQueue
#define NULL
Definition: types.h:112
#define DPRINT
Definition: sndvol32.h:71
BOOLEAN NTAPI KeCancelTimer(IN OUT PKTIMER Timer)
Definition: timerobj.c:206

Member Function Documentation

◆ HandlePortParams()

NTSTATUS CMiniportDMusUARTStream::HandlePortParams ( IN PPCPROPERTY_REQUEST  Request)

Definition at line 2338 of file miniport_dmus.cpp.

2343{
2344 PAGED_CODE();
2345
2346 NTSTATUS ntStatus;
2347
2348 if (pRequest->Verb & KSPROPERTY_TYPE_SET)
2349 {
2351 }
2352
2354 if (NT_SUCCESS(ntStatus))
2355 {
2356 RtlCopyMemory(pRequest->Value, pRequest->Instance, sizeof(SYNTH_PORTPARAMS));
2357
2359
2360 if (Params->ValidParams & ~SYNTH_PORTPARAMS_CHANNELGROUPS)
2361 {
2362 Params->ValidParams &= SYNTH_PORTPARAMS_CHANNELGROUPS;
2363 }
2364
2365 if (!(Params->ValidParams & SYNTH_PORTPARAMS_CHANNELGROUPS))
2366 {
2367 Params->ChannelGroups = 1;
2368 }
2369 else if (Params->ChannelGroups != 1)
2370 {
2371 Params->ChannelGroups = 1;
2372 }
2373
2374 pRequest->ValueSize = sizeof(SYNTH_PORTPARAMS);
2375 }
2376
2377 return ntStatus;
2378}
LONG NTSTATUS
Definition: precomp.h:26
#define TRUE
Definition: types.h:120
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define SYNTH_PORTPARAMS_CHANNELGROUPS
Definition: dmusprop.h:105
struct _SYNTH_PORTPARAMS * PSYNTH_PORTPARAMS
struct _SYNTH_PORTPARAMS SYNTH_PORTPARAMS
#define KSPROPERTY_TYPE_SET
Definition: dmksctrl.h:43
FxRequest * pRequest
if(dx< 0)
Definition: linetemp.h:194
NTSTATUS ValidatePropertyRequest(IN PPCPROPERTY_REQUEST pRequest, IN ULONG ulValueSize, IN BOOLEAN fValueRequired)
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define STATUS_INVALID_DEVICE_REQUEST
Definition: udferr_usr.h:138
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
Definition: wdfrequest.h:308

◆ QueryInterface()

CMiniportDMusUARTStream::QueryInterface ( REFIID  InterfaceId,
PVOID Interface 
)

Definition at line 1807 of file miniport_dmus.cpp.

1812{
1813 PAGED_CODE();
1814
1815 DPRINT("Stream::NonDelegatingQueryInterface");
1816 ASSERT(Object);
1817
1819 {
1820 *Object = PVOID(PUNKNOWN(this));
1821 }
1822 else
1824 {
1825 *Object = PVOID(PMXF(this));
1826 }
1827 else
1828 {
1829 *Object = NULL;
1830 }
1831
1832 if (*Object)
1833 {
1834 //
1835 // We reference the interface for the caller.
1836 //
1837 PUNKNOWN(*Object)->AddRef();
1838 return STATUS_SUCCESS;
1839 }
1840
1842}
const GUID IID_IUnknown
IUnknown * PUNKNOWN
Definition: com_apitest.h:45
#define IID_IMXF
Definition: dmusicks.h:250
struct IMXF * PMXF
Definition: dmusicks.h:68
ULONG AddRef()
#define ASSERT(a)
Definition: mode.c:44
#define STATUS_SUCCESS
Definition: shellext.h:65
void * PVOID
Definition: typedefs.h:50
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
Definition: wdffdo.h:465
#define IsEqualGUIDAligned(guid1, guid2)
Definition: wdm.template.h:235

◆ STDMETHODIMP_() [1/6]

CMiniportDMusUARTStream::STDMETHODIMP_ ( NTSTATUS  )
private

◆ STDMETHODIMP_() [2/6]

CMiniportDMusUARTStream::STDMETHODIMP_ ( NTSTATUS  )

◆ STDMETHODIMP_() [3/6]

CMiniportDMusUARTStream::STDMETHODIMP_ ( NTSTATUS  )
private

◆ STDMETHODIMP_() [4/6]

CMiniportDMusUARTStream::STDMETHODIMP_ ( NTSTATUS  )

◆ STDMETHODIMP_() [5/6]

CMiniportDMusUARTStream::STDMETHODIMP_ ( NTSTATUS  )
private

◆ STDMETHODIMP_() [6/6]

CMiniportDMusUARTStream::STDMETHODIMP_ ( NTSTATUS  )

Friends And Related Function Documentation

◆ DMusUARTTimerDPC

VOID NTAPI DMusUARTTimerDPC ( IN PKDPC  Dpc,
IN PVOID  DeferredContext,
IN PVOID  SystemArgument1,
IN PVOID  SystemArgument2 
)
friend

Definition at line 2393 of file miniport_dmus.cpp.

2400{
2402
2403 CMiniportDMusUARTStream *aStream;
2405 if (aStream)
2406 {
2407 DPRINT("DMusUARTTimerDPC");
2408 if (false == aStream->m_fCapture)
2409 {
2410 (void) aStream->ConsumeEvents();
2411 }
2412 // ignores return value!
2413 }
2414}
_In_opt_ PVOID DeferredContext
Definition: ketypes.h:675

◆ PropertyHandler_Synth

NTSTATUS NTAPI PropertyHandler_Synth ( IN PPCPROPERTY_REQUEST  PropertyRequest)
friend

Definition at line 2432 of file miniport_dmus.cpp.

2436{
2437 NTSTATUS ntStatus;
2438
2439 PAGED_CODE();
2440
2442 {
2443 ntStatus = ValidatePropertyRequest(pRequest, sizeof(ULONG), TRUE);
2444 if (NT_SUCCESS(ntStatus))
2445 {
2446 // if return buffer can hold a ULONG, return the access flags
2447 PULONG AccessFlags = PULONG(pRequest->Value);
2448
2449 *AccessFlags = KSPROPERTY_TYPE_BASICSUPPORT;
2450 switch (pRequest->PropertyItem->Id)
2451 {
2454 *AccessFlags |= KSPROPERTY_TYPE_GET;
2455 }
2456 switch (pRequest->PropertyItem->Id)
2457 {
2459 *AccessFlags |= KSPROPERTY_TYPE_SET;
2460 }
2461 ntStatus = STATUS_SUCCESS;
2462 pRequest->ValueSize = sizeof(ULONG);
2463
2464 switch (pRequest->PropertyItem->Id)
2465 {
2467 if (pRequest->MinorTarget)
2468 {
2469 *AccessFlags |= KSPROPERTY_TYPE_GET;
2470 }
2471 else
2472 {
2473 pRequest->ValueSize = 0;
2475 }
2476 }
2477 }
2478 }
2479 else
2480 {
2481 ntStatus = STATUS_SUCCESS;
2482 switch(pRequest->PropertyItem->Id)
2483 {
2485 DPRINT("PropertyHandler_Synth:KSPROPERTY_SYNTH_CAPS");
2486
2487 if (pRequest->Verb & KSPROPERTY_TYPE_SET)
2488 {
2490 }
2491
2492 if (NT_SUCCESS(ntStatus))
2493 {
2494 ntStatus = ValidatePropertyRequest(pRequest, sizeof(SYNTHCAPS), TRUE);
2495
2496 if (NT_SUCCESS(ntStatus))
2497 {
2498 SYNTHCAPS *caps = (SYNTHCAPS*)pRequest->Value;
2499 int increment;
2500 RtlZeroMemory(caps, sizeof(SYNTHCAPS));
2501 // XXX Different guids for different instances!
2502 //
2503 if (pRequest->Node == eSynthNode)
2504 {
2505 increment = sizeof(wszDescOut) - 2;
2506 RtlCopyMemory( caps->Description,wszDescOut,increment);
2507 caps->Guid = CLSID_MiniportDriverDMusUART;
2508 }
2509 else
2510 {
2511 increment = sizeof(wszDescIn) - 2;
2512 RtlCopyMemory( caps->Description,wszDescIn,increment);
2513 caps->Guid = CLSID_MiniportDriverDMusUARTCapture;
2514 }
2515
2516 caps->Flags = SYNTH_PC_EXTERNAL;
2517 caps->MemorySize = 0;
2518 caps->MaxChannelGroups = 1;
2519 caps->MaxVoices = 0xFFFFFFFF;
2520 caps->MaxAudioChannels = 0xFFFFFFFF;
2521
2522 caps->EffectFlags = 0;
2523
2524 CMiniportDMusUART *aMiniport;
2525 ASSERT(pRequest->MajorTarget);
2526 aMiniport = (CMiniportDMusUART *)(PMINIPORTDMUS)(pRequest->MajorTarget);
2527 WCHAR wszDesc2[16];
2528 int cLen;
2529 cLen = swprintf(wszDesc2,L"[%03x]\0",PtrToUlong(aMiniport->m_pPortBase));
2530
2531 cLen *= sizeof(WCHAR);
2532 RtlCopyMemory((WCHAR *)((DWORD_PTR)(caps->Description) + increment),
2533 wszDesc2,
2534 cLen);
2535
2536
2537 pRequest->ValueSize = sizeof(SYNTHCAPS);
2538 }
2539 }
2540
2541 break;
2542
2544 DPRINT("PropertyHandler_Synth:KSPROPERTY_SYNTH_PORTPARAMETERS");
2545 {
2546 CMiniportDMusUARTStream *aStream;
2547
2548 aStream = (CMiniportDMusUARTStream*)(pRequest->MinorTarget);
2549 if (aStream)
2550 {
2551 ntStatus = aStream->HandlePortParams(pRequest);
2552 }
2553 else
2554 {
2556 }
2557 }
2558 break;
2559
2561 DPRINT("PropertyHandler_Synth:KSPROPERTY_SYNTH_CHANNELGROUPS");
2562
2563 ntStatus = ValidatePropertyRequest(pRequest, sizeof(ULONG), TRUE);
2564 if (NT_SUCCESS(ntStatus))
2565 {
2566 *(PULONG)(pRequest->Value) = 1;
2567 pRequest->ValueSize = sizeof(ULONG);
2568 }
2569 break;
2570
2572 DPRINT("PropertyHandler_Synth:KSPROPERTY_SYNTH_LATENCYCLOCK");
2573
2574 if(pRequest->Verb & KSPROPERTY_TYPE_SET)
2575 {
2577 }
2578 else
2579 {
2580 ntStatus = ValidatePropertyRequest(pRequest, sizeof(ULONGLONG), TRUE);
2581 if(NT_SUCCESS(ntStatus))
2582 {
2583 REFERENCE_TIME rtLatency;
2584 CMiniportDMusUARTStream *aStream;
2585
2586 aStream = (CMiniportDMusUARTStream*)(pRequest->MinorTarget);
2587 if(aStream == NULL)
2588 {
2590 }
2591 else
2592 {
2593 aStream->m_pMiniport->m_MasterClock->GetTime(&rtLatency);
2594 *((PULONGLONG)pRequest->Value) = rtLatency;
2595 pRequest->ValueSize = sizeof(ULONGLONG);
2596 }
2597 }
2598 }
2599 break;
2600
2601 default:
2602 DPRINT("Unhandled property in PropertyHandler_Synth");
2603 break;
2604 }
2605 }
2606 return ntStatus;
2607}
NTSTATUS HandlePortParams(IN PPCPROPERTY_REQUEST Request)
PMASTERCLOCK m_MasterClock
#define swprintf
Definition: precomp.h:40
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
IMiniportDMus * PMINIPORTDMUS
Definition: dmusicks.h:211
@ KSPROPERTY_SYNTH_PORTPARAMETERS
Definition: dmusprop.h:57
@ KSPROPERTY_SYNTH_CHANNELGROUPS
Definition: dmusprop.h:58
@ KSPROPERTY_SYNTH_CAPS
Definition: dmusprop.h:56
@ KSPROPERTY_SYNTH_LATENCYCLOCK
Definition: dmusprop.h:60
#define SYNTH_PC_EXTERNAL
Definition: dmusprop.h:65
struct _SYNTHCAPS SYNTHCAPS
#define PtrToUlong(u)
Definition: config.h:107
#define KSPROPERTY_TYPE_BASICSUPPORT
Definition: dmksctrl.h:45
#define KSPROPERTY_TYPE_GET
Definition: dmksctrl.h:42
@ eSynthNode
const WCHAR wszDescIn[]
const WCHAR wszDescOut[]
__GNU_EXTENSION typedef unsigned __int64 * PULONGLONG
Definition: ntbasedef.h:383
#define L(x)
Definition: ntvdm.h:50
WCHAR Description[128]
Definition: dmusprop.h:89
DWORD Flags
Definition: dmusprop.h:83
DWORD MemorySize
Definition: dmusprop.h:84
DWORD MaxChannelGroups
Definition: dmusprop.h:85
DWORD MaxAudioChannels
Definition: dmusprop.h:87
GUID Guid
Definition: dmusprop.h:82
DWORD EffectFlags
Definition: dmusprop.h:88
DWORD MaxVoices
Definition: dmusprop.h:86
uint32_t * PULONG
Definition: typedefs.h:59
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG
Definition: typedefs.h:59
uint64_t ULONGLONG
Definition: typedefs.h:67
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ pStream

friend PVOID pStream
friend

Definition at line 248 of file miniport_dmus.cpp.

Member Data Documentation

◆ allocatorMXF

IN PUCHAR IN BOOLEAN IN PAllocatorMXF CMiniportDMusUARTStream::allocatorMXF

Definition at line 218 of file miniport_dmus.cpp.

◆ BytesToWrite

IN ULONG CMiniportDMusUARTStream::BytesToWrite

Definition at line 235 of file miniport_dmus.cpp.

◆ BytesWritten

IN ULONG OUT PULONG CMiniportDMusUARTStream::BytesWritten

Definition at line 236 of file miniport_dmus.cpp.

◆ fCapture

IN PUCHAR IN BOOLEAN CMiniportDMusUARTStream::fCapture

Definition at line 217 of file miniport_dmus.cpp.

◆ IMP_IMXF

CMiniportDMusUARTStream::IMP_IMXF

Definition at line 230 of file miniport_dmus.cpp.

◆ m_AllocatorMXF

PAllocatorMXF CMiniportDMusUARTStream::m_AllocatorMXF
private

Definition at line 194 of file miniport_dmus.cpp.

Referenced by ~CMiniportDMusUARTStream().

◆ m_DMKEvtOffset

ULONG CMiniportDMusUARTStream::m_DMKEvtOffset
private

Definition at line 198 of file miniport_dmus.cpp.

◆ m_DMKEvtQueue

PDMUS_KERNEL_EVENT CMiniportDMusUARTStream::m_DMKEvtQueue
private

Definition at line 196 of file miniport_dmus.cpp.

Referenced by ~CMiniportDMusUARTStream().

◆ m_Dpc

KDPC CMiniportDMusUARTStream::m_Dpc
private

Definition at line 199 of file miniport_dmus.cpp.

◆ m_DpcSpinLock

KSPIN_LOCK CMiniportDMusUARTStream::m_DpcSpinLock
private

Definition at line 202 of file miniport_dmus.cpp.

◆ m_fCapture

BOOLEAN CMiniportDMusUARTStream::m_fCapture
private

Definition at line 192 of file miniport_dmus.cpp.

Referenced by ~CMiniportDMusUARTStream().

◆ m_NumberOfRetries

ULONG CMiniportDMusUARTStream::m_NumberOfRetries
private

Definition at line 197 of file miniport_dmus.cpp.

◆ m_NumFailedMPUTries

long CMiniportDMusUARTStream::m_NumFailedMPUTries
private

Definition at line 193 of file miniport_dmus.cpp.

◆ m_pMiniport

CMiniportDMusUART* CMiniportDMusUARTStream::m_pMiniport
private

Definition at line 189 of file miniport_dmus.cpp.

Referenced by SnapTimeStamp(), and ~CMiniportDMusUARTStream().

◆ m_pPortBase

PUCHAR CMiniportDMusUARTStream::m_pPortBase
private

Definition at line 191 of file miniport_dmus.cpp.

◆ m_sinkMXF

PMXF CMiniportDMusUARTStream::m_sinkMXF
private

Definition at line 195 of file miniport_dmus.cpp.

◆ m_SnapshotTimeStamp

REFERENCE_TIME CMiniportDMusUARTStream::m_SnapshotTimeStamp
private

Definition at line 190 of file miniport_dmus.cpp.

Referenced by SnapTimeStamp().

◆ m_TimerEvent

KTIMER CMiniportDMusUARTStream::m_TimerEvent
private

Definition at line 200 of file miniport_dmus.cpp.

Referenced by ~CMiniportDMusUARTStream().

◆ m_TimerQueued

BOOL CMiniportDMusUARTStream::m_TimerQueued
private

Definition at line 201 of file miniport_dmus.cpp.

◆ masterClock

IN PUCHAR IN BOOLEAN IN PAllocatorMXF IN PMASTERCLOCK CMiniportDMusUARTStream::masterClock

Definition at line 219 of file miniport_dmus.cpp.

◆ pPortBase

IN PUCHAR CMiniportDMusUARTStream::pPortBase

Definition at line 216 of file miniport_dmus.cpp.


The documentation for this class was generated from the following file: