00001 /* 00002 * @(#)plt/Win32.h 1.00 30 November 1999 00003 * 00004 * Copyright (c) 2000 Pete Goodliffe (pete@cthree.org) 00005 * 00006 * This file is part of TSE3 - the Trax Sequencer Engine version 3.00. 00007 * 00008 * This library is modifiable/redistributable under the terms of the GNU 00009 * General Public License. 00010 * 00011 * You should have received a copy of the GNU General Public License along 00012 * with this program; see the file COPYING. If not, write to the Free Software 00013 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00014 * 00015 */ 00016 00017 #ifndef TSE3_PLT_WIN32_H 00018 #define TSE3_PLT_WIN32_H 00019 00020 #include "tse3/MidiScheduler.h" 00021 #include <Windows.h> 00022 00023 namespace TSE3 00024 { 00025 namespace Plt 00026 { 00037 class Win32MidiScheduler : public MidiScheduler 00038 { 00039 public: 00040 00044 Win32MidiScheduler(); // throw (Win32MidiSchedulerException); 00045 virtual ~Win32MidiScheduler(); 00046 00047 protected: 00048 00052 virtual const char *impl_implementationName() const; 00056 virtual const char *impl_portName(int port) const; 00060 virtual const char *impl_portType(int port) const; 00064 virtual bool impl_portReadable(int port) const; 00068 virtual bool impl_portWriteable(int port) const; 00072 virtual void impl_start(Clock clock); 00076 virtual void impl_stop(Clock clock); 00080 virtual void impl_moveTo(Clock moveTime, Clock newTime); 00084 virtual Clock impl_clock(); 00088 virtual int impl_msecs(); 00092 virtual void impl_setTempo(int tempo, Clock changeTime); 00096 virtual bool impl_eventWaiting(); 00100 virtual MidiEvent impl_rx(); 00104 virtual void impl_tx(MidiCommand mc); 00108 virtual void impl_tx(MidiEvent mc); 00112 virtual void impl_txSysEx(int port, 00113 const unsigned char *data, 00114 size_t size); 00115 00116 private: 00117 00118 union HMIDI 00119 { 00120 HMIDIOUT out; 00121 HMIDIIN in; 00122 }; 00123 HMIDI *hMidi; 00124 UINT nMidi; 00125 00126 void runMidiData(HMIDIOUT, MidiCommand); 00127 static void callback(UINT, UINT, DWORD, DWORD, DWORD); 00128 }; 00129 } 00130 } 00131 00132 #endif