Audio-device drivers need to notify clients when certain events occur, such as when a waveform data block has been played, or when a MIDI input event is received. Clients must be notified when the following conditions occur:
When the client opens a device, the client specifies how it wants to be notified. There are three ways a driver can notify a client application:
To make the job of notifying clients easier, MMSYSTEM provides the DriverCallback function. DriverCallback takes information supplied by the client when it opened a device and notifies the client accordingly. A MIDI driver can use the function as shown in the following example to call DriverCallback:
void FAR PASCAL midiCallback(
NPPORTALLOC pPortalloc,
WORD msg,
DWORD dwParam1,
DWORD dwParam2)
{
if (pPortalloc->dwCallback)
DriverCallback
( pPortalloc->dwCallback, /* users callback DWORD */
HIWORD(pPortalloc->dwFlags), /* callback flags */
pPortalloc->hMidi, /* handle to the wave device */
msg, /* message from the driver */
Portalloc->dwInstance, /* user's instance data */
dwParam1, /* message-dependent parameter */
dwParam2 /* message-dependent parameter */
);
}
The parameter pPortalloc points to a structure containing the MIDI device handle, callback flags, and user instance data passed to the driver with the MODM_OPEN message. For an example of how to handle the MODM_OPEN message, see . The parameters msg, dwParam1, and dwParam2 specify the message and message-dependent parameters the driver is sending to the client.