dmusicks.h 8.3 KB

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