| 
					
				 | 
			
			
				@@ -1,27 +1,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "Launchpad.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "RtMidi.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "MidiMessage.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <string> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-LaunchpadColor::LaunchpadColor() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	: red(0), green(0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-LaunchpadColor::LaunchpadColor(unsigned char r, unsigned char g) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	: red(r), green(g) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-bool LaunchpadColor::operator==(const LaunchpadColor& color) const 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return red == color.red && green == color.green; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-bool LaunchpadColor::operator!=(const LaunchpadColor& color) const 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return !operator==(color); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+namespace midi { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Launchpad::Launchpad() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	: midiin(), midiout(), keyPressedCallback(0), keyReleasedCallback(0) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -39,10 +19,7 @@ Launchpad::Launchpad() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(!midiout.isPortOpen()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		throw RtMidiError( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			"no launchpad for midi output found",  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			RtMidiError::NO_DEVICES_FOUND 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		throw "no launchpad for midi output found"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for(unsigned int i=0; i<midiin.getPortCount(); i++) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -55,14 +32,11 @@ Launchpad::Launchpad() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(!midiin.isPortOpen()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		throw RtMidiError( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			"no launchpad for midi input found",  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			RtMidiError::NO_DEVICES_FOUND 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		throw "no launchpad for midi input found"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void Launchpad::midiMessageCallback(double timeStamp, MidiMessage &message, void *userData) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void Launchpad::midiMessageCallback(double timeStamp, Message &message, void *userData) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	Launchpad *launchpad = (Launchpad*) userData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -116,17 +90,11 @@ void Launchpad::setColor(unsigned char x, unsigned char y, const LaunchpadColor& 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if(x >= width || y >= height || (x == 8 && y == 8)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		throw RtMidiError( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			"specified launchpad position is out of range",  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			RtMidiError::INVALID_PARAMETER 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		throw "specified launchpad position is out of range"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if(color.red > 3 || color.green > 3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		throw RtMidiError( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			"specified launchpad color is out of range",  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			RtMidiError::INVALID_PARAMETER 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		throw "specified launchpad color is out of range"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	unsigned char velocity = (color.green << 4) + color.red; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -182,104 +150,4 @@ void Launchpad::keyReleased(unsigned char x, unsigned char y) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void LaunchpadScreen::keyPressed(unsigned char x, unsigned char y) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void LaunchpadScreen::keyReleased(unsigned char x, unsigned char y) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const LaunchpadColor& LaunchpadScreen::getColor(unsigned char x, unsigned char y) const 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return colors[x][y]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void LaunchpadScreen::setColor(unsigned char x, unsigned char y, const LaunchpadColor& color) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if(active && (!launchpad->issetColor(x, y) || launchpad->getColor(x, y) != color)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        launchpad->setColor(x, y, color); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    colors[x][y] = color; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void LaunchpadScreen::setColorAll(const LaunchpadColor& color) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for(unsigned char x = 0; x < Launchpad::width; x++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for(unsigned char y = 0; y < Launchpad::height; y++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(x != 8 || y != 8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				setColor(x, y, color); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void LaunchpadScreen::sync() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for(unsigned char x = 0; x < Launchpad::width; x++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for(unsigned char y = 0; y < Launchpad::height; y++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if((x != 8 || y != 8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			    && (!launchpad->issetColor(x, y) || launchpad->getColor(x, y) != colors[x][y])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                launchpad->setColor(x, y, colors[x][y]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-LaunchpadScreen::LaunchpadScreen() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    : launchpad(0), active(false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void LaunchpadScreen::enable() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if(!launchpad) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        throw RtMidiError( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            "no launchpad set", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            RtMidiError::INVALID_USE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    launchpad->keyEventCallbackData = (void*)this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    launchpad->keyPressedCallback = keyPressedCallback; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    launchpad->keyReleasedCallback = keyReleasedCallback; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sync(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    active = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void LaunchpadScreen::disable() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    launchpad->keyPressedCallback = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    launchpad->keyReleasedCallback = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    launchpad->keyEventCallbackData = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    active = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-bool LaunchpadScreen::enabled() const 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return active; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void LaunchpadScreen::setLaunchpad(Launchpad& l) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if(enabled()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        disable(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        launchpad = &l; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        enable(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        launchpad = &l; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void LaunchpadScreen::keyPressedCallback(unsigned char x, unsigned char y, void* screen) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ((LaunchpadScreen*)screen)->keyPressed(x, y); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void LaunchpadScreen::keyReleasedCallback(unsigned char x, unsigned char y, void* screen) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ((LaunchpadScreen*)screen)->keyReleased(x, y); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} // namespace 
			 |