Jack2 1.9.10

JackWinMMEInputPort.h

00001 /*
00002 Copyright (C) 2011 Devin Anderson
00003 
00004 This program is free software; you can redistribute it and/or modify
00005 it under the terms of the GNU General Public License as published by
00006 the Free Software Foundation; either version 2 of the License, or
00007 (at your option) any later version.
00008 
00009 This program is distributed in the hope that it will be useful,
00010 but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 GNU General Public License for more details.
00013 
00014 You should have received a copy of the GNU General Public License
00015 along with this program; if not, write to the Free Software
00016 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00017 
00018 */
00019 
00020 #ifndef __JackWinMMEInputPort__
00021 #define __JackWinMMEInputPort__
00022 
00023 #include <mmsystem.h>
00024 
00025 #include "JackMidiAsyncQueue.h"
00026 #include "JackMidiBufferWriteQueue.h"
00027 #include "JackWinMMEPort.h"
00028 
00029 namespace Jack {
00030 
00031     class JackWinMMEInputPort : public JackWinMMEPort {
00032 
00033     private:
00034 
00035         static void CALLBACK
00036         HandleMidiInputEvent(HMIDIIN handle, UINT message, DWORD port,
00037                              DWORD param1, DWORD param2);
00038 
00039         void
00040         EnqueueMessage(DWORD timestamp, size_t length, jack_midi_data_t *data);
00041 
00042         void
00043         GetInErrorString(MMRESULT error, LPTSTR text);
00044 
00045         void
00046         ProcessWinMME(UINT message, DWORD param1, DWORD param2);
00047 
00048         void
00049         WriteInError(const char *jack_func, const char *mm_func,
00050                                 MMRESULT result);
00051 
00052         HMIDIIN handle;
00053         jack_midi_event_t *jack_event;
00054         jack_time_t start_time;
00055         bool started;
00056         jack_midi_data_t *sysex_buffer;
00057         MIDIHDR sysex_header;
00058         JackMidiAsyncQueue *thread_queue;
00059         JackMidiBufferWriteQueue *write_queue;
00060 
00061     public:
00062 
00063         JackWinMMEInputPort(const char *alias_name, const char *client_name,
00064                             const char *driver_name, UINT index,
00065                             size_t max_bytes=4096, size_t max_messages=1024);
00066 
00067         ~JackWinMMEInputPort();
00068 
00069         void
00070         ProcessJack(JackMidiBuffer *port_buffer, jack_nframes_t frames);
00071 
00072         bool
00073         Start();
00074 
00075         bool
00076         Stop();
00077 
00078     };
00079 
00080 }
00081 
00082 #endif