1// ****************************************************************************
2//
3//		CEchoGals_midi.cpp
4//
5//		Implementation file for the CEchoGals driver class (midi functions).
6//
7//		Set editor tabs to 3 for your viewing pleasure.
8//
9// ----------------------------------------------------------------------------
10//
11// This file is part of Echo Digital Audio's generic driver library.
12// Copyright Echo Digital Audio Corporation (c) 1998 - 2005
13// All rights reserved
14// www.echoaudio.com
15//
16// This library is free software; you can redistribute it and/or
17// modify it under the terms of the GNU Lesser General Public
18// License as published by the Free Software Foundation; either
19// version 2.1 of the License, or (at your option) any later version.
20//
21// This library is distributed in the hope that it will be useful,
22// but WITHOUT ANY WARRANTY; without even the implied warranty of
23// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24// Lesser General Public License for more details.
25//
26// You should have received a copy of the GNU Lesser General Public
27// License along with this library; if not, write to the Free Software
28// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
29//
30// ****************************************************************************
31
32#include "CEchoGals.h"
33
34
35#ifdef MIDI_SUPPORT
36
37/****************************************************************************
38
39	MIDI output
40
41 ****************************************************************************/
42
43//===========================================================================
44//
45// Write a bunch of MIDI data to the MIDI output
46//
47// The DSP only buffers up 64 bytes internally for MIDI output; if you try
48// to send more than the DSP can handle, the actual count sent will be returned
49// to you.  ECHOSTATUS_BUSY is returned if the DSP is still processing the
50// last driver command.
51//
52//===========================================================================
53
54ECHOSTATUS CEchoGals::WriteMidi
55(
56	DWORD		dwExpectedCt,
57	PBYTE		pBuffer,
58	PDWORD	pdwActualCt
59)
60{
61	return GetDspCommObject()->WriteMidi( 	pBuffer,
62														dwExpectedCt,
63														pdwActualCt );
64}	// ECHOSTATUS CLayla24::WriteMidi
65
66
67
68
69/****************************************************************************
70
71	MIDI input
72
73 ****************************************************************************/
74
75
76//===========================================================================
77//
78//	Read a single MIDI byte from the circular MIDI input buffer
79//
80//===========================================================================
81
82ECHOSTATUS CEchoGals::ReadMidiByte
83(
84	ECHOGALS_MIDI_IN_CONTEXT	*pContext,
85	DWORD								&dwMidiData,
86	LONGLONG							&llTimestamp
87)
88{
89
90	return m_MidiIn.GetMidi(pContext,dwMidiData,llTimestamp);
91
92}	// ReadMidiByte
93
94
95//===========================================================================
96//
97//	Open and enable the MIDI input
98//
99// The context struct should be set to zero before calling OpenMidiInput
100//
101//===========================================================================
102
103ECHOSTATUS CEchoGals::OpenMidiInput(ECHOGALS_MIDI_IN_CONTEXT *pContext)
104{
105
106	return m_MidiIn.Arm(pContext);
107
108}	// OpenMidiInput
109
110
111//===========================================================================
112//
113//	Close and disable the MIDI input
114//
115//===========================================================================
116
117ECHOSTATUS CEchoGals::CloseMidiInput(ECHOGALS_MIDI_IN_CONTEXT *pContext)
118{
119	return m_MidiIn.Disarm(pContext);
120}
121
122
123//===========================================================================
124//
125//	Reset the MIDI input, but leave it open and enabled
126//
127//===========================================================================
128
129ECHOSTATUS CEchoGals::ResetMidiInput(ECHOGALS_MIDI_IN_CONTEXT *pContext)
130{
131	m_MidiIn.Reset(pContext);
132
133	return ECHOSTATUS_OK;
134}
135
136
137
138#endif // MIDI_SUPPORT
139
140