| 
					
				 | 
			
			
				@@ -1,6 +1,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "Launchpad.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "RtMidi.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "MidiMessage.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <string> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 LaunchpadColor::LaunchpadColor() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	: red(0), green(0) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -20,10 +21,40 @@ bool LaunchpadColor::operator==(const LaunchpadColor& color) const 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Launchpad::Launchpad() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	: midiin(), midiout(), keyPressedCallback(0), keyReleasedCallback(0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // define callback before opening port to keep the message queue empty. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	midiin.setCallback(midiMessageCallback, (void*) this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	midiout.openPort(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	midiin.openPort(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for(int i=0; i<midiout.getPortCount(); i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(midiout.getPortName(i).find("Launchpad") != std::string::npos) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	        midiout.openPort(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(!midiout.isPortOpen()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		throw RtMidiError( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			"no launchpad for midi output found",  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			RtMidiError::NO_DEVICES_FOUND 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for(int i=0; i<midiin.getPortCount(); i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(midiin.getPortName(i).find("Launchpad") != std::string::npos) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	        midiin.openPort(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(!midiin.isPortOpen()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		throw RtMidiError( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			"no launchpad for midi input found",  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			RtMidiError::NO_DEVICES_FOUND 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void Launchpad::midiMessageCallback(double timeStamp, MidiMessage &message, void *userData) 
			 |