void CANJaguarConfiguration :: Configure ( CANJaguar & Jag )
{
	
	Jag.DisableControl ();
	
	Jag.ConfigMaxOutputVoltage ( MaxOutputVoltage );
	Jag.SetVoltageRampRate ( VoltageRampRate );
	
	Jag.ConfigFaultTime ( FaultTime );
	
	Jag.ConfigNeutralMode ( NeutralMode );
	
	Jag.ConfigLimitMode ( LimitMode );
	Jag.ConfigForwardLimit ( ForwardPositionLimit );
	Jag.ConfigForwardLimit ( ReversePositionLimit );
	
	switch ( Feedback )
	{

	case kFeedbackType_None:

		switch ( Mode )
		{

		case CANSpeedController :: kPercentVbus:
			Jag.SetPercentMode ();
			break;

		case CANSpeedController :: kCurrent:
			
			Jag.SetCurrentMode ( P, I, D );
			
			Jag.Set ( 0 );
			Jag.EnableControl ();
			
			break;

		case CANSpeedController :: kVoltage:
			Jag.SetVoltageMode ();
			break;
			
		default:
			
			Jag.SetVoltageMode ( CANJaguar :: Encoder, EncoderCounts );
			Jag.ConfigMaxOutputVoltage ( 0.0 );
			
			break;

		}
		
		break;
		
	case kFeedbackType_Encoder:
		
		switch ( Mode )
		{
			
		case CANSpeedController :: kPercentVbus:
			Jag.SetPercentMode ( CANJaguar :: Encoder, EncoderCounts );
			break;
	
		case CANSpeedController :: kCurrent:
			
			Jag.SetCurrentMode ( CANJaguar :: Encoder, EncoderCounts, P, I, D );
			
			Jag.Set ( 0 );
			Jag.EnableControl ();
			
			break;
		
		case CANSpeedController :: kSpeed:
			
			Jag.SetSpeedMode ( CANJaguar :: Encoder, EncoderCounts, P, I, D );
			
			Jag.Set ( 0 );
			Jag.EnableControl ();
			
			break;
			
		case CANSpeedController :: kVoltage:
			Jag.SetVoltageMode ( CANJaguar :: Encoder, EncoderCounts );
			break;
			
		default:
			
			Jag.SetVoltageMode ( CANJaguar :: Encoder, EncoderCounts );
			Jag.ConfigMaxOutputVoltage ( 0.0 );
			
			break;
			
		}
		
		break;
		
	case kFeedbackType_QuadEncoder:
		
		switch ( Mode )
		{
			
		case CANSpeedController :: kPercentVbus:
			Jag.SetPercentMode ( CANJaguar :: QuadEncoder, EncoderCounts );
			break;
		
		case CANSpeedController :: kCurrent:
			
			Jag.SetCurrentMode ( CANJaguar :: QuadEncoder, EncoderCounts, P, I, D );
			
			Jag.Set ( 0 );
			Jag.EnableControl ();
			
			break;
		
		case CANSpeedController :: kSpeed:
			
			Jag.SetSpeedMode ( CANJaguar :: QuadEncoder, EncoderCounts, P, I, D );
			
			Jag.Set ( 0 );
			Jag.EnableControl ();
			
			break;
		
		case CANSpeedController :: kPosition:
			
			Jag.SetPositionMode ( CANJaguar :: QuadEncoder, EncoderCounts, P, I, D );
			
			Jag.Set ( 0 );
			Jag.EnableControl ();
			
			break;
		
		case CANSpeedController :: kVoltage:
			
			Jag.SetVoltageMode ( CANJaguar :: QuadEncoder, EncoderCounts );
			
			Jag.Set ( 0 );
			Jag.EnableControl ();
			
			break;
			
		default:
			
			Jag.SetVoltageMode ( CANJaguar :: Encoder, EncoderCounts );
			Jag.ConfigMaxOutputVoltage ( 0.0 );
			
			break;
		
		}
		
		break;
		
	case kFeedbackType_Potentiometer:
		
		switch ( Mode )
		{
		
		
		case CANSpeedController :: kPercentVbus:
			Jag.SetPercentMode ( CANJaguar :: Potentiometer );
			break;
		
		case CANSpeedController :: kCurrent:
			
			Jag.SetCurrentMode ( CANJaguar :: Potentiometer, P, I, D );
			
			Jag.Set ( 0 );
			Jag.EnableControl ();
			
			break;
		
		case CANSpeedController :: kPosition:
			
			Jag.SetPositionMode ( CANJaguar :: Potentiometer, P, I, D );
			
			Jag.Set ( 0 );
			Jag.EnableControl ();
			
			break;
		
		case CANSpeedController :: kVoltage:
			Jag.SetVoltageMode ( CANJaguar :: Potentiometer );
			break;
			
		default:
			
			Jag.SetVoltageMode ( CANJaguar :: Encoder, EncoderCounts );
			Jag.ConfigMaxOutputVoltage ( 0.0 );
			
			break;
			
		}
		
		break;
		
	}
	
};