<def f='src/src/sys/dev/midi_if.h' l='97' ll='102'/>
<size>32</size>
<doc f='src/src/sys/dev/midi_if.h' l='75'>/*
 * The extended hardware interface is for use by drivers that are better off
 * getting messages whole to transmit, rather than byte-by-byte through
 * output().  Two examples are midisyn (which interprets MIDI messages in
 * software to drive synth chips) and umidi (which has to send messages in the
 * packet-based USB MIDI protocol).  It is silly for them to have to reassemble
 * messages midi had to split up to poke through the single-byte interface.
 *
 * To register use of the extended interface, a driver will call back midi&apos;s
 * midi_register_hw_if_ext() function during getinfo(); thereafter midi will
 * deliver channel messages, system common messages other than sysex, and sysex
 * messages, respectively, through these methods, and use the original output
 * method only for system realtime messages (all of which are single byte).
 * Other drivers that have no reason to change from the single-byte interface
 * simply don&apos;t call the register function, and nothing changes for them.
 *
 * IMPORTANT: any code that provides a midi_hw_if_ext struct MUST initialize
 * its members BY NAME (typically with a C99-style initializer with designators)
 * and assure that any unused members contain zeroes (which is what C99
 * initializers will do), and make no assumptions about the size or order of
 * the struct, to allow for further extension of this interface as needed.
 */</doc>
<mbr r='midi_hw_if_ext::channel' o='0' t='int (*)(void *, int, int, u_char *, int)'/>
<mbr r='midi_hw_if_ext::common' o='64' t='int (*)(void *, int, u_char *, int)'/>
<mbr r='midi_hw_if_ext::sysex' o='128' t='int (*)(void *, u_char *, int)'/>
<mbr r='midi_hw_if_ext::compress' o='192' t='int'/>
