/*************************************************************************** * * Copyright (C) 2000-2000 Microsoft Corporation. All Rights Reserved. * * File: kshlp.h * Content: WDM/CSA helper functions. * History: * Date By Reason * ==== == ====== * 05/16/2000 jstokes Created. * ***************************************************************************/ #ifndef __KSHLP_H__ #define __KSHLP_H__ #include #include #include #define KSPIN_DATAFLOW_CAPTURE KSPIN_DATAFLOW_OUT #define KSPIN_DATAFLOW_RENDER KSPIN_DATAFLOW_IN // Device-specific DirectSound property sets typedef struct tagKSDSPROPERTY { GUID PropertySet; ULONG PropertyId; ULONG NodeId; ULONG AccessFlags; } KSDSPROPERTY, *PKSDSPROPERTY; // KS stream data typedef struct tagKSSTREAMIO { KSSTREAM_HEADER Header; OVERLAPPED Overlapped; BOOL fPendingIrp; } KSSTREAMIO, *PKSSTREAMIO; // System audio device properties typedef struct tagKSSADPROPERTY { KSPROPERTY Property; ULONG DeviceId; ULONG Reserved; } KSSADPROPERTY, *PKSSADPROPERTY; // Topology node information typedef struct tagKSNODE { ULONG NodeId; ULONG CpuResources; } KSNODE, *PKSNODE; typedef struct tagKSVOLUMENODE { KSNODE Node; KSPROPERTY_STEPPING_LONG VolumeRange; } KSVOLUMENODE, *PKSVOLUMENODE; // Our own version of NTSTATUS typedef LONG NTSTATUS; #define NT_SUCCESS(s) ((NTSTATUS)(s) >= 0) #define NT_INFORMATION(s) ((ULONG)(s) >> 30 == 1) #define NT_WARNING(s) ((ULONG)(s) >> 30 == 2) #define NT_ERROR(s) ((ULONG)(s) >> 30 == 3) // Reserved node identifiers #define NODE_UNINITIALIZED 0xFFFFFFFF #define NODE_WILDCARD 0xFFFFFFFE #define NODE_PIN_UNINITIALIZED 0xFFFFFFFF #define IS_VALID_NODE(nodeid) \ (NODE_UNINITIALIZED != (nodeid)) // Node implementation #define KSAUDIO_CPU_RESOURCES_UNINITIALIZED 'ENON' #define IS_HARDWARE_NODE(impl) \ (KSAUDIO_CPU_RESOURCES_NOT_HOST_CPU == (impl)) #define IS_SOFTWARE_NODE(impl) \ (KSAUDIO_CPU_RESOURCES_HOST_CPU == (impl)) #ifdef __cplusplus HRESULT PostDevIoctl ( HANDLE hDevice, DWORD dwControlCode, LPVOID pvIn = NULL, DWORD cbIn = 0, LPVOID pvOut = NULL, DWORD cbOut = 0, LPDWORD pcbReturned = NULL, LPOVERLAPPED pOverlapped = NULL ); HRESULT KsGetProperty ( HANDLE hDevice, REFGUID guidPropertySet, ULONG ulPropertyId, LPVOID pvData, ULONG cbData, PULONG pcbDataReturned = NULL ); HRESULT KsSetProperty ( HANDLE hDevice, REFGUID guidPropertySet, ULONG ulPropertyId, LPVOID pvData, ULONG cbData ); HRESULT KsGetPinProperty ( HANDLE hDevice, ULONG ulPropertyId, ULONG ulPinId, LPVOID pvData, ULONG cbData, PULONG pcbDataReturned = NULL ); HRESULT KsSetPinProperty ( HANDLE hDevice, ULONG ulPropertyId, ULONG ulPinId, LPVOID pvData, ULONG cbData ); HRESULT KsGetNodeProperty ( HANDLE hDevice, REFGUID guidPropertySet, ULONG ulPropertyId, ULONG ulNodeId, LPVOID pvData, ULONG cbData, PULONG pcbDataReturned = NULL ); HRESULT KsSetNodeProperty ( HANDLE hDevice, REFGUID guidPropertySet, ULONG ulPropertyId, ULONG ulNodeId, LPVOID pvData, ULONG cbData ); HRESULT KsGetMultiplePinProperties ( HANDLE hDevice, ULONG ulPropertyId, ULONG ulPinId, PKSMULTIPLE_ITEM * ppKsMultipleItem ); HRESULT KsGetMultipleTopologyProperties ( HANDLE hDevice, ULONG ulPropertyId, PKSMULTIPLE_ITEM * ppKsMultipleItem ); HRESULT KsSetTopologyNodeEnable ( HANDLE hDevice, ULONG ulNodeId, BOOL fEnable ); HRESULT KsGetTopologyNodeEnable ( HANDLE hDevice, ULONG ulNodeId, PBOOL pfEnable ); HRESULT KsTopologyNodeReset ( HANDLE hDevice, ULONG ulNodeId, BOOL fReset ); #endif // __cplusplus #endif // __KSHLP_H__