Home | History | Annotate | Download | only in ddk
      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