00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __JackWinMMEOutputPort__
00021 #define __JackWinMMEOutputPort__
00022
00023 #include "JackMidiAsyncQueue.h"
00024 #include "JackMidiBufferReadQueue.h"
00025 #include "JackThread.h"
00026 #include "JackWinMMEPort.h"
00027
00028 namespace Jack {
00029
00030 class JackWinMMEOutputPort :
00031 public JackWinMMEPort, public JackRunnableInterface {
00032
00033 private:
00034
00035 static void CALLBACK
00036 HandleMessageEvent(HMIDIOUT handle, UINT message, DWORD_PTR port,
00037 DWORD_PTR param1, DWORD_PTR param2);
00038
00039 void
00040 GetOutErrorString(MMRESULT error, LPTSTR text);
00041
00042 void
00043 HandleMessage(UINT message, DWORD_PTR param1, DWORD_PTR param2);
00044
00045 bool
00046 Signal(HANDLE semaphore);
00047
00048 bool
00049 Wait(HANDLE semaphore);
00050
00051 void
00052 WriteOutError(const char *jack_func, const char *mm_func,
00053 MMRESULT result);
00054
00055 HMIDIOUT handle;
00056 JackMidiBufferReadQueue *read_queue;
00057 HANDLE sysex_semaphore;
00058 JackThread *thread;
00059 JackMidiAsyncQueue *thread_queue;
00060 HANDLE thread_queue_semaphore;
00061 HANDLE timer;
00062
00063 public:
00064
00065 JackWinMMEOutputPort(const char *alias_name, const char *client_name,
00066 const char *driver_name, UINT index,
00067 size_t max_bytes=4096, size_t max_messages=1024);
00068
00069 ~JackWinMMEOutputPort();
00070
00071 bool
00072 Execute();
00073
00074 bool
00075 Init();
00076
00077 void
00078 ProcessJack(JackMidiBuffer *port_buffer, jack_nframes_t frames);
00079
00080 bool
00081 Start();
00082
00083 bool
00084 Stop();
00085
00086 };
00087
00088 }
00089
00090 #endif