1 #ifndef _DMUSICKS_ 2 #define _DMUSICKS_ 3 4 #define DONT_HOLD_FOR_SEQUENCING 0x8000000000000000 5 6 #ifndef REFERENCE_TIME 7 typedef LONGLONG REFERENCE_TIME; 8 #endif 9 10 typedef struct _DMUS_KERNEL_EVENT { 11 BYTE bReserved; 12 BYTE cbStruct; 13 USHORT cbEvent; 14 USHORT usChannelGroup; 15 USHORT usFlags; 16 REFERENCE_TIME ullPresTime100ns; 17 ULONGLONG ullBytePosition; 18 struct _DMUS_KERNEL_EVENT *pNextEvt; 19 union { 20 BYTE abData[sizeof(PBYTE)]; 21 PBYTE pbData; 22 struct _DMUS_KERNEL_EVENT *pPackageEvt; 23 } uData; 24 } DMUS_KERNEL_EVENT, *PDMUS_KERNEL_EVENT; 25 26 typedef enum { 27 DMUS_STREAM_MIDI_INVALID = -1, 28 DMUS_STREAM_MIDI_RENDER = 0, 29 DMUS_STREAM_MIDI_CAPTURE, 30 DMUS_STREAM_WAVE_SINK 31 } DMUS_STREAM_TYPE; 32 33 DEFINE_GUID(CLSID_MiniportDriverDMusUART, 0xd3f0ce1c, 0xFFFC, 0x11D1, 0x81, 0xB0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1); 34 DEFINE_GUID(CLSID_MiniportDriverDMusUARTCapture, 0xD3F0CE1D, 0xFFFC, 0x11D1, 0x81, 0xB0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1); 35 36 /* =============================================================== 37 IMasterClock Interface 38 */ 39 40 #undef INTERFACE 41 #define INTERFACE IMasterClock 42 43 DECLARE_INTERFACE_(IMasterClock,IUnknown) 44 { 45 DEFINE_ABSTRACT_UNKNOWN() 46 47 STDMETHOD_(NTSTATUS,GetTime)( THIS_ 48 OUT REFERENCE_TIME * pTime 49 ) PURE; 50 }; 51 52 typedef IMasterClock *PMASTERCLOCK; 53 54 #define IMP_IMasterClock \ 55 STDMETHODIMP_(NTSTATUS) GetTime( \ 56 OUT REFERENCE_TIME * pTime \ 57 ) 58 59 /* =============================================================== 60 IMXF Interface 61 */ 62 63 #undef INTERFACE 64 #define INTERFACE IMXF 65 66 struct IMXF; 67 typedef struct IMXF *PMXF; 68 69 #define DEFINE_ABSTRACT_IMXF() \ 70 STDMETHOD_(NTSTATUS,SetState)(THIS_ \ 71 IN KSSTATE State \ 72 ) PURE; \ 73 STDMETHOD_(NTSTATUS,PutMessage) \ 74 ( THIS_ \ 75 IN PDMUS_KERNEL_EVENT pDMKEvt \ 76 ) PURE; \ 77 STDMETHOD_(NTSTATUS,ConnectOutput) \ 78 ( THIS_ \ 79 IN PMXF sinkMXF \ 80 ) PURE; \ 81 STDMETHOD_(NTSTATUS,DisconnectOutput) \ 82 ( THIS_ \ 83 IN PMXF sinkMXF \ 84 ) PURE; 85 86 #define IMP_IMXF \ 87 STDMETHODIMP_(NTSTATUS) SetState \ 88 ( \ 89 IN KSSTATE State \ 90 ); \ 91 STDMETHODIMP_(NTSTATUS) PutMessage \ 92 ( THIS_ \ 93 IN PDMUS_KERNEL_EVENT pDMKEvt \ 94 ); \ 95 STDMETHODIMP_(NTSTATUS) ConnectOutput \ 96 ( THIS_ \ 97 IN PMXF sinkMXF \ 98 ); \ 99 STDMETHODIMP_(NTSTATUS) DisconnectOutput \ 100 ( THIS_ \ 101 IN PMXF sinkMXF \ 102 ) 103 104 105 DECLARE_INTERFACE_(IMXF,IUnknown) 106 { 107 DEFINE_ABSTRACT_UNKNOWN() 108 109 DEFINE_ABSTRACT_IMXF() 110 }; 111 112 /* =============================================================== 113 IAllocatorMXF Interface 114 */ 115 116 #undef INTERFACE 117 #define INTERFACE IAllocatorMXF 118 119 struct IAllocatorMXF; 120 typedef struct IAllocatorMXF *PAllocatorMXF; 121 122 #define STATIC_IID_IAllocatorMXF\ 123 0xa5f0d62c, 0xb30f, 0x11d2, 0xb7, 0xa3, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1 124 DEFINE_GUIDSTRUCT("a5f0d62c-b30f-11d2-b7a3-0060083316c1", IID_IAllocatorMXF); 125 #define IID_IAllocatorMXF DEFINE_GUIDNAMED(IID_IAllocatorMXF) 126 127 128 DECLARE_INTERFACE_(IAllocatorMXF, IMXF) 129 { 130 DEFINE_ABSTRACT_UNKNOWN() 131 132 DEFINE_ABSTRACT_IMXF() 133 134 STDMETHOD_(NTSTATUS,GetMessage)(THIS_ 135 OUT PDMUS_KERNEL_EVENT * ppDMKEvt 136 ) PURE; 137 138 STDMETHOD_(USHORT,GetBufferSize)(THIS) PURE; 139 140 STDMETHOD_(NTSTATUS,GetBuffer)(THIS_ 141 OUT PBYTE * ppBuffer 142 )PURE; 143 144 STDMETHOD_(NTSTATUS,PutBuffer)(THIS_ 145 IN PBYTE pBuffer 146 ) PURE; 147 }; 148 149 #define IMP_IAllocatorMXF \ 150 IMP_IMXF; \ 151 STDMETHODIMP_(NTSTATUS) GetMessage( \ 152 OUT PDMUS_KERNEL_EVENT * ppDMKEvt \ 153 ); \ 154 \ 155 STDMETHODIMP_(USHORT) GetBufferSize(void); \ 156 \ 157 STDMETHODIMP_(NTSTATUS) GetBuffer( \ 158 OUT PBYTE * ppBuffer \ 159 ); \ 160 \ 161 STDMETHODIMP_(NTSTATUS) PutBuffer( \ 162 IN PBYTE pBuffer \ 163 ) 164 165 #undef INTERFACE 166 #define INTERFACE IPortDMus 167 168 DEFINE_GUID(IID_IPortDMus, 0xc096df9c, 0xfb09, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1); 169 DEFINE_GUID(CLSID_PortDMus, 0xb7902fe9, 0xfb0a, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1); 170 171 DECLARE_INTERFACE_(IPortDMus, IPort) 172 { 173 DEFINE_ABSTRACT_UNKNOWN() 174 175 DEFINE_ABSTRACT_PORT() 176 177 STDMETHOD_(void,Notify)(THIS_ 178 IN PSERVICEGROUP ServiceGroup OPTIONAL 179 )PURE; 180 181 STDMETHOD_(void,RegisterServiceGroup)(THIS_ 182 IN PSERVICEGROUP ServiceGroup 183 ) PURE; 184 }; 185 typedef IPortDMus *PPORTDMUS; 186 187 #define IMP_IPortDMus \ 188 IMP_IPort; \ 189 STDMETHODIMP_(void) Notify( \ 190 IN PSERVICEGROUP ServiceGroup OPTIONAL \ 191 ); \ 192 \ 193 STDMETHODIMP_(void) RegisterServiceGroup( \ 194 IN PSERVICEGROUP ServiceGroup \ 195 ) 196 197 #undef INTERFACE 198 #define INTERFACE IMiniportDMus 199 200 DEFINE_GUID(IID_IMiniportDMus, 0xc096df9d, 0xfb09, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1); 201 DECLARE_INTERFACE_(IMiniportDMus, IMiniport) 202 { 203 DEFINE_ABSTRACT_UNKNOWN() 204 205 DEFINE_ABSTRACT_MINIPORT() 206 207 STDMETHOD_(NTSTATUS,Init)(THIS_ 208 IN PUNKNOWN UnknownAdapter, 209 IN PRESOURCELIST ResourceList, 210 IN PPORTDMUS Port, 211 OUT PSERVICEGROUP * ServiceGroup 212 ) PURE; 213 214 STDMETHOD_(void,Service)(THIS) PURE; 215 216 STDMETHOD_(NTSTATUS,NewStream)(THIS_ 217 OUT PMXF * MXF, 218 IN PUNKNOWN OuterUnknown OPTIONAL, 219 IN POOL_TYPE PoolType, 220 IN ULONG PinID, 221 IN DMUS_STREAM_TYPE StreamType, 222 IN PKSDATAFORMAT DataFormat, 223 OUT PSERVICEGROUP * ServiceGroup, 224 IN PAllocatorMXF AllocatorMXF, 225 IN PMASTERCLOCK MasterClock, 226 OUT PULONGLONG SchedulePreFetch 227 ) PURE; 228 }; 229 230 typedef IMiniportDMus *PMINIPORTDMUS; 231 #undef INTERFACE 232 233 #define IMP_IMiniportDMus \ 234 IMP_IMiniport; \ 235 STDMETHODIMP_(NTSTATUS) Init( \ 236 IN PUNKNOWN UnknownAdapter, \ 237 IN PRESOURCELIST ResourceList, \ 238 IN PPORTDMUS Port, \ 239 OUT PSERVICEGROUP * ServiceGroup \ 240 ); \ 241 \ 242 STDMETHODIMP_(void) Service(THIS); \ 243 \ 244 STDMETHODIMP_(NTSTATUS) NewStream( \ 245 OUT PMXF * MXF, \ 246 IN PUNKNOWN OuterUnknown, \ 247 IN POOL_TYPE PoolType, \ 248 IN ULONG PinID, \ 249 IN DMUS_STREAM_TYPE StreamType, \ 250 IN PKSDATAFORMAT DataFormat, \ 251 OUT PSERVICEGROUP * ServiceGroup, \ 252 IN PAllocatorMXF AllocatorMXF, \ 253 IN PMASTERCLOCK MasterClock, \ 254 OUT PULONGLONG SchedulePreFetch \ 255 ) 256 257 #endif /* _DMUSICKS_ */ 258 259