mdReceive(3dm) mdReceive(3dm) NAME mdReceive - Accept MIDI events from a port SYNOPSIS #include <dmedia/midi.h> int mdReceive(MDport port, MDevent *evbuf, int count) DESCRIPTION mdReceive reads MIDI events from the MIDI interface associated with port into the evbuf array. evbuf must be allocated by the user and must contain space for count MDevent structures. For most events, the actual MIDI event is stored in the msg array of the MDevent, and the stamp field is set to a stamp value whose format is determined by the port's stamping mode (see mdSetStampMode). In addition, when a system exclusive event is received, the MIDI library allocates a block of memory for the system exclusive data and places a pointer to the block of memory in the sysexmsg field of the event structure. The msg[0] byte in the MDevent structure contains a 0xF0 (MD_SYSEX) to indicate that a system exclusive message has arrived. The msglen field contains a count of the bytes in data buffer. Long system exclusive messages may be decomposed into smaller chunks; the last message will have an 0xF7 (EOX) at the end of the sysexmsg buffer. The application must release the sysexmsg buffer with mdFree(3dm) once it is finished processing the message. If no events are available when mdReceive is called, the routine will block until one or more events arrive. The application can avoid blocking by calling select(2) on the file descriptor returned by mdGetFd(3dm) before calling mdReceive. mdReceive returns the number of events read. RETURN VALUE mdReceive returns the number of messages read from the given port, or -1 on error. The following error codes are expected: ENOMEM - No memory was available for incoming message storage. EFAULT - An invalid address was passed to the MIDI driver EINVAL - An undefined operation was called. SEE ALSO mdIntro(3dm), mdFree(3dm), mdSend(3dm), mvdSetStampMode(3dm) Page 1