Re: [PATCH] us428control support for mixxx

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



here is the patch with good indentation :-)

Signed-off-by: Cedric GESTES < goctaf@xxxxxxxxx>

On 10/4/06, Takashi Iwai < tiwai@xxxxxxx> wrote:
At Sat, 30 Sep 2006 18:06:53 +0200,
CTAF ctaf wrote:
>
> This patch allow to change the mapping of the us428, the new mapping is used with
> mixxx.
> To use the new mapping:
> ./us428control -m mixxx
>
> I already posted an older version on the bug tracker, but I had'nt have response for
> it.
> thanks.
>
> Signed-off-by: Cedric GESTES < goctaf@xxxxxxxxx >

Thanks.  Through a quick look, the changes seem OK to me.
But, could you fix the indent before merging to the tree?
Karsten's original code uses 8-char tabs for indentation while you're
using 2-chars.


Takashi


diff -r 7f7a0bf510a4 us428control/Cus428Midi.cc
--- a/us428control/Cus428Midi.cc	Tue Sep 12 15:35:53 2006 +0200
+++ b/us428control/Cus428Midi.cc	Thu Oct 05 14:28:57 2006 +0200
@@ -1,3 +1,4 @@
+/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
 /*
  *
  * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@xxxxxxxx>
@@ -78,7 +79,7 @@ char Cus428Midi::KnobParam[] = {
 	0x35,
 	0x36,
 	0x37,
-	};
+};
 
 extern int verbose;
 
diff -r 7f7a0bf510a4 us428control/Cus428Midi.h
--- a/us428control/Cus428Midi.h	Tue Sep 12 15:35:53 2006 +0200
+++ b/us428control/Cus428Midi.h	Thu Oct 05 14:28:17 2006 +0200
@@ -1,3 +1,4 @@
+/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
 /*
  *
  * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@xxxxxxxx>
@@ -62,7 +63,7 @@
 
 
 class Cus428Midi {
- public:
+public:
 	Cus428Midi():
 		Seq(0){}
 
@@ -87,14 +88,23 @@ class Cus428Midi {
 		return Err;
 	}
 
-	int SendMidiControl(char Param, char Val){
-		snd_seq_ev_set_controller(&Ev, 15, Param, Val & 0x7F);
+	int SendMidiControl(char Channel, char Param, char Val){
+		snd_seq_ev_set_controller(&Ev, Channel, Param, Val & 0x7F);
 		SubMitEvent();
 		return 0;
-	} 
+	}
 
-	int SendMidiControl(Cus428State::eKnobs K, bool Down){
-		return SendMidiControl(KnobParam[K - Cus428State::eK_RECORD], Down ? 0x7F : 0);
+	int SendMidiNote(char Channel, char Note, char Val){
+		if (!Val)
+			snd_seq_ev_set_noteoff(&Ev, Channel, Note, Val & 0x7F);
+		else
+			snd_seq_ev_set_noteon(&Ev, Channel, Note, Val & 0x7F);
+		SubMitEvent();
+		return 0;
+	}
+
+	int SendMidiControl(char Channel, Cus428State::eKnobs K, bool Down){
+		return SendMidiControl(Channel, KnobParam[K - Cus428State::eK_RECORD], Down ? 0x7F : 0);
 	}
 
 	// To parse and dispatch input MIDI events.
@@ -106,7 +116,7 @@ class Cus428Midi {
 	// Made public for friendliness.
 	snd_seq_t *Seq;
 
- private:
+private:
 	int Port;
 	snd_seq_event_t Ev;
 	int SubMitEvent(){
diff -r 7f7a0bf510a4 us428control/Cus428State.cc
--- a/us428control/Cus428State.cc	Tue Sep 12 15:35:53 2006 +0200
+++ b/us428control/Cus428State.cc	Thu Oct 05 14:43:00 2006 +0200
@@ -1,3 +1,4 @@
+/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
 /*
  * Controller for Tascam US-X2Y
  *
@@ -46,7 +47,6 @@ void Cus428State::InitDevice(void)
 		SliderChangedTo(eFaderM, ((unsigned char*)(us428ctls_sharedmem->CtlSnapShot + us428ctls_sharedmem->CtlSnapShotLast))[eFaderM]);
 }
 
-
 int Cus428State::LightSend()
 {
 	int Next = us428ctls_sharedmem->p4outLast + 1;
@@ -57,6 +57,11 @@ int Cus428State::LightSend()
 	return us428ctls_sharedmem->p4outLast = Next;
 }
 
+void Cus428State::SliderSend(int S)
+{
+	Midi.SendMidiControl(15, 0x40 + S, ((unsigned char*)us428_ctls)[S] / 2);
+}
+
 void Cus428State::SendVolume(usX2Y_volume &V)
 {
 	int Next = us428ctls_sharedmem->p4outLast + 1;
@@ -67,22 +72,100 @@ void Cus428State::SendVolume(usX2Y_volum
 	us428ctls_sharedmem->p4outLast = Next;
 }
 
+void Cus428State::UserSliderChangedTo(int S, unsigned char New)
+{
+	SliderSend(S);
+}
+
 void Cus428State::SliderChangedTo(int S, unsigned char New)
 {
-	if (StateInputMonitor() && S <= eFader3
-	    || S == eFaderM) {
+	if (StateInputMonitor() && S <= eFader3 || S == eFaderM) {
 		usX2Y_volume &V = Volume[S >= eFader4 ? eFader4 : S];
 		V.SetTo(S, New);
 		if (S == eFaderM || !LightIs(eL_Mute0 + S))
 			SendVolume(V);
 	}
-	else SliderSend(S);
-}
-
-void Cus428State::SliderSend(int S)
-{
-	Midi.SendMidiControl(0x40 + S, ((unsigned char*)us428_ctls)[S] / 2);
-}
+	else
+		UserSliderChangedTo(S, New);
+}
+
+void Cus428State::UserKnobChangedTo(eKnobs K, bool V)
+{
+	switch (K) {
+	case eK_STOP:
+		if (verbose > 1)
+			printf("Knob STOP now %i\n", V);
+		if (V) TransportToggle(T_STOP);
+		Midi.SendMidiControl(15, K, V);
+		break;
+	case eK_PLAY:
+		if (verbose > 1)
+			printf("Knob PLAY now %i", V);
+		if (V) TransportToggle(T_PLAY);
+		if (verbose > 1)
+			printf(" Light is %i\n", LightIs(eL_Play));
+		Midi.SendMidiControl(15, K, V);
+		break;
+	case eK_REW:
+		if (verbose > 1)
+			printf("Knob REW now %i", V);
+		if (V) TransportToggle(T_REW);
+		if (verbose > 1)
+			printf(" Light is %i\n", LightIs(eL_Rew));
+		Midi.SendMidiControl(15, K, V);
+		break;
+	case eK_FFWD:
+		if (verbose > 1)
+			printf("Knob FFWD now %i", V);
+		if (V) TransportToggle(T_F_FWD);
+		if (verbose > 1)
+			printf(" Light is %i\n", LightIs(eL_FFwd));
+		Midi.SendMidiControl(15, K, V);
+		break;
+	case eK_RECORD:
+		if (verbose > 1)
+			printf("Knob RECORD now %i", V);
+		if (V) TransportToggle(T_RECORD);
+		if (verbose > 1)
+			printf(" Light is %i\n", LightIs(eL_Record));
+		Midi.SendMidiControl(15, K, V);
+		break;
+	case eK_SET:
+		if (verbose > 1)
+			printf("Knob SET now %i", V);
+		bSetLocate = V;
+		break;
+	case eK_LOCATE_L:
+		if (verbose > 1)
+			printf("Knob LOCATE_L now %i", V);
+		if (V) {
+			if (bSetLocate)
+				aWheel_L = aWheel;
+			else {
+				aWheel = aWheel_L;
+				LocateSend();
+			}
+		}
+		break;
+	case eK_LOCATE_R:
+		if (verbose > 1)
+			printf("Knob LOCATE_R now %i", V);
+		if (V) {
+			if (bSetLocate)
+				aWheel_R = aWheel;
+			else {
+				aWheel = aWheel_R;
+				LocateSend();
+			}
+		}
+		break;
+	default:
+		if (verbose > 1)
+			printf("Knob %i now %i\n", K, V);
+		Midi.SendMidiControl(15, K, V);
+	}
+}
+
 
 void Cus428State::KnobChangedTo(eKnobs K, bool V)
 {
@@ -109,75 +192,7 @@ void Cus428State::KnobChangedTo(eKnobs K
 		}
 		break;
 	default:
-		switch (K) {
-		case eK_STOP:
-			if (verbose > 1)
-				printf("Knob STOP now %i\n", V);
-			if (V) TransportToggle(T_STOP);
-			Midi.SendMidiControl(K, V);
-			break;
-		case eK_PLAY:
-			if (verbose > 1)
-				printf("Knob PLAY now %i", V);
-			if (V) TransportToggle(T_PLAY);
-			if (verbose > 1)
-				printf(" Light is %i\n", LightIs(eL_Play));
-			Midi.SendMidiControl(K, V);
-			break;
-		case eK_REW:
-			if (verbose > 1)
-				printf("Knob REW now %i", V);
-			if (V) TransportToggle(T_REW);
-			if (verbose > 1)
-				printf(" Light is %i\n", LightIs(eL_Rew));
-			Midi.SendMidiControl(K, V);
-			break;
-		case eK_FFWD:
-			if (verbose > 1)
-				printf("Knob FFWD now %i", V);
-			if (V) TransportToggle(T_F_FWD);
-			if (verbose > 1)
-				printf(" Light is %i\n", LightIs(eL_FFwd));
-			Midi.SendMidiControl(K, V);
-			break;
-		case eK_RECORD:
-			if (verbose > 1)
-				printf("Knob RECORD now %i", V);
-			if (V) TransportToggle(T_RECORD);
-			if (verbose > 1)
-				printf(" Light is %i\n", LightIs(eL_Record));
-			Midi.SendMidiControl(K, V);
-			break;
-		case eK_SET:
-			if (verbose > 1)
-				printf("Knob SET now %i", V);
-			bSetLocate = V;
-			break;
-		case eK_LOCATE_L:
-			if (verbose > 1)
-				printf("Knob LOCATE_L now %i", V);
-			if (V) {
-				if (bSetLocate)
-					aWheel_L = aWheel;
-				else {
-					aWheel = aWheel_L;
-					LocateSend();
-				}
-			}
-			break;
-		case eK_LOCATE_R:
-			if (verbose > 1)
-				printf("Knob LOCATE_R now %i", V);
-			if (V) {
-				if (bSetLocate)
-					aWheel_R = aWheel;
-				else {
-					aWheel = aWheel_R;
-					LocateSend();
-				}
-			}
-			break;
-		case eK_InputMonitor:
+		if (K == eK_InputMonitor) {
 			if (verbose > 1)
 				printf("Knob InputMonitor now %i", V);
 			if (V) {
@@ -195,22 +210,40 @@ void Cus428State::KnobChangedTo(eKnobs K
 			}
 			if (verbose > 1)
 				printf(" Light is %i\n", LightIs(eL_InputMonitor));
-			break;
-		default:
-			if (verbose > 1)
-				printf("Knob %i now %i\n", K, V);
-			Midi.SendMidiControl(K, V);
-		}
-	}
-}
-
-
-void Cus428State::WheelChangedTo(E_In84 W, char Diff)
+		} else
+			UserKnobChangedTo(K, V);
+	}
+}
+
+void Cus428State::UserWheelChangedTo(E_In84 W, char Diff)
 {
 	char Param;
 	switch (W) {
 	case eWheelPan:
-		if (StateInputMonitor() && Light[0].Value) {
+		Param = 0x4D;
+		break;
+	case eWheelGain:
+		Param = 0x48;
+		break;
+	case eWheelFreq:
+		Param = 0x49;
+		break;
+	case eWheelQ:
+		Param = 0x4A;
+		break;
+	case eWheel:
+	        Param = 0x60;
+	        // Update the absolute wheel position.
+		WheelDelta((int) ((unsigned char *) us428_ctls)[W]);
+		break;
+	}
+	Midi.SendMidiControl(15, Param, ((unsigned char *) us428_ctls)[W]);
+}
+
+void Cus428State::WheelChangedTo(E_In84 W, char Diff)
+{
+	if (W == eWheelPan && StateInputMonitor() && Light[0].Value)
+		{
 			int index = 0;
 
 			while( index < 4 && (1 << index) !=  Light[0].Value)
@@ -224,24 +257,7 @@ void Cus428State::WheelChangedTo(E_In84 
 				SendVolume(Volume[index]);
 			return;
 		}
-		Param = 0x4D;
-		break;
-	case eWheelGain:
-		Param = 0x48;
-		break;
-	case eWheelFreq:
-		Param = 0x49;
-		break;
-	case eWheelQ:
-		Param = 0x4A;
-		break;
-	case eWheel:
-		Param = 0x60;
-		// Update the absolute wheel position.
-		WheelDelta((int) ((unsigned char *) us428_ctls)[W]);
-		break;
-	}
-	Midi.SendMidiControl(Param, ((unsigned char *) us428_ctls)[W]);
+	UserWheelChangedTo(W, Diff);
 }
 
 
@@ -249,9 +265,9 @@ void Cus428State::LocateWheel ( unsigned
 void Cus428State::LocateWheel ( unsigned char *tc )
 {
 	aWheel  = (60 * 60 * 30) * (int) tc[0]		// hh - hours    [0..23]
-			+ (     60 * 30) * (int) tc[1]		// mm - minutes  [0..59]
-			+ (          30) * (int) tc[2]		// ss - seconds  [0..59]
-			+                  (int) tc[3];		// ff - frames   [0..29]
+		+ (     60 * 30) * (int) tc[1]		// mm - minutes  [0..59]
+		+ (          30) * (int) tc[2]		// ss - seconds  [0..59]
+		+                  (int) tc[3];		// ff - frames   [0..29]
 }
 
 
@@ -276,8 +292,8 @@ void Cus428State::WheelDelta ( int W )
 	if (dW > 0 && dW > +W_DELTA_MIN)
 		dW -= W_DELTA_MAX;
 	else
-	if (dW < 0 && dW < -W_DELTA_MIN)
-		dW += W_DELTA_MAX;
+		if (dW < 0 && dW < -W_DELTA_MIN)
+			dW += W_DELTA_MAX;
 
 	W0 = W;
 	aWheel += dW;
@@ -356,7 +372,7 @@ void Cus428State::TransportToggle ( unsi
 			uTransport = T_STOP;
 			Midi.SendMmcCommand(MMC_CMD_STOP);
 		} else {
-		    uTransport &= T_RECORD;
+			uTransport &= T_RECORD;
 			uTransport |= T_PLAY;
 			Midi.SendMmcCommand(MMC_CMD_PLAY);
 		}
@@ -366,7 +382,7 @@ void Cus428State::TransportToggle ( unsi
 			uTransport &= ~T_RECORD;
 			Midi.SendMmcCommand(MMC_CMD_RECORD_EXIT);
 		} else {
-		    uTransport &= T_PLAY;
+			uTransport &= T_PLAY;
 			uTransport |= T_RECORD;
 			Midi.SendMmcCommand(uTransport & T_PLAY ? MMC_CMD_RECORD_STROBE : MMC_CMD_RECORD_PAUSE);
 		}
@@ -444,3 +460,181 @@ void Cus428State::MmcReset()
 	LocateSend();
 }
 
+Cus428StateMixxx::Cus428StateMixxx(struct us428ctls_sharedmem* Pus428ctls_sharedmem):Cus428State(Pus428ctls_sharedmem)
+{
+	focus = 0;
+	eq = 0;
+	LightSet(eL_Low, 1);
+	LightSet(eL_LowMid, 0);
+	LightSet(eL_HiMid, 0);
+	LightSet(eL_High, 0);
+	LightSend();
+}
+
+void Cus428StateMixxx::UserKnobChangedTo(eKnobs K, bool V)
+{
+	switch (K) {
+	case eK_BANK_L:
+		if (verbose > 1)
+			printf("Knob BANK_L now %i", V);
+		if (V) LightSet(eL_BankL, !LightIs(eL_BankL));
+		LightSend();
+		Midi.SendMidiNote(0, 51, V ? 127 : 0);
+		break;
+	case eK_BANK_R:
+		if (verbose > 1)
+			printf("Knob BANK_R now %i", V);
+		if (V) LightSet(eL_BankR, !LightIs(eL_BankR));
+		LightSend();
+		Midi.SendMidiNote(1, 51, V ? 127 : 0);
+		break;
+	case eK_REW:
+		if (verbose > 1)
+			printf("Knob REW now %i", V);
+		Midi.SendMidiNote(focus, 60, V ? 127 : 0);
+		break;
+	case eK_FFWD:
+		if (verbose > 1)
+			printf("Knob FFWD now %i", V);
+		Midi.SendMidiNote(focus, 61, V ? 127 : 0);
+		break;
+	case eK_STOP:
+		if (verbose > 1)
+			printf("Knob STOP now %i\n", V);
+		Midi.SendMidiNote(focus, 62, V ? 127 : 0);
+		break;
+	case eK_PLAY:
+		if (verbose > 1)
+			printf("Knob PLAY now %i", V);
+		Midi.SendMidiNote(focus, 63, V ? 127 : 0);
+		break;
+	case eK_RECORD:
+		if (verbose > 1)
+			printf("Knob RECORD now %i", V);
+		Midi.SendMidiNote(focus, 64, V ? 127 : 0);
+		break;
+	case eK_LOW:
+		if (verbose > 1)
+			printf("Knob LOW now %i", V);
+		if (V)
+			{
+				eq = 0;
+				LightSet(eL_Low, 1);
+				LightSet(eL_LowMid, 0);
+				LightSet(eL_HiMid, 0);
+				LightSet(eL_High, 0);
+				LightSend();
+			}
+		break;
+	case eK_LOWMID:
+		if (verbose > 1)
+			printf("Knob LOWMID now %i", V);
+		if (V)
+			{
+				eq = 1;
+				LightSet(eL_Low, 0);
+				LightSet(eL_LowMid, 1);
+				LightSet(eL_HiMid, 0);
+				LightSet(eL_High, 0);
+				LightSend();
+			}
+		break;
+	case eK_HIMID:
+		if (verbose > 1)
+			printf("Knob HIMID now %i", V);
+		if (V)
+			{
+				eq = 2;
+				LightSet(eL_Low, 0);
+				LightSet(eL_LowMid, 0);
+				LightSet(eL_HiMid, 1);
+				LightSet(eL_High, 0);
+				LightSend();
+			}
+		break;
+	case eK_HIGH:
+		if (verbose > 1)
+			printf("Knob HIGH now %i", V);
+		if (V)
+			{
+				eq = 3;
+				LightSet(eL_Low, 0);
+				LightSet(eL_LowMid, 0);
+				LightSet(eL_HiMid, 0);
+				LightSet(eL_High, 1);
+				LightSend();
+			}
+		break;
+	case eK_SET:
+		if (verbose > 1)
+			printf("Knob SET now %i", V);
+		Midi.SendMidiNote(focus, 65, V ? 127 : 0);
+		break;
+	case eK_LOCATE_L:
+		if (verbose > 1)
+			printf("Knob LOCATE_L now %i", V);
+		if (V) {
+			focus = 0;
+		}
+		break;
+	case eK_LOCATE_R:
+		if (verbose > 1)
+			printf("Knob LOCATE_R now %i", V);
+		if (V) {
+			focus = 1;
+		}
+		break;
+	default:
+		if (verbose > 1)
+			printf("Knob %i now %i\n", K, V);
+		if (K >= eK_Select0 && K <= eK_Select0 + 7) {
+			if (V) LightSet(eL_Select0 + (K - eK_Select0), !LightIs(eL_Select0 + (K - eK_Select0)));
+			LightSend();
+		} else if (K >= eK_Mute0 && K <= eK_Mute0 + 7) {
+			if (V) LightSet(eL_Mute0 + (K - eK_Mute0), !LightIs(eL_Mute0 + (K - eK_Mute0)));
+			LightSend();
+		}
+		Midi.SendMidiNote(0, K, V);
+	}
+}
+
+void Cus428StateMixxx::UserSliderChangedTo(int S, unsigned char New)
+{
+	//  if (verbose > 1)
+	//  printf("Slider : %d - %d - %d\n", S, New, ((unsigned char*)us428_ctls)[S]);
+	Midi.SendMidiControl(0, 0x40 + S, ((unsigned char*)us428_ctls)[S] / 2);
+}
+
+void Cus428StateMixxx::UserWheelChangedTo(E_In84 W, char Diff)
+{
+	char Param;
+	char Value;
+	char Channel;
+	//if (verbose > 1)
+	//  printf("Slider : %d - %d - %d\n", W, Diff, ((unsigned char *) us428_ctls)[W]);
+
+	Channel = 0;
+	switch (W) {
+	case eWheelGain:
+		Param = 0x48 + eq * 4;
+		break;
+	case eWheelFreq:
+		Param = 0x49 + eq * 4;
+		break;
+	case eWheelQ:
+		Param = 0x4A + eq * 4;
+		break;
+	case eWheelPan:
+		Param = 0x4B + eq * 4;
+		break;
+	case eWheel:
+		Param = 0x60;
+		Channel = focus;
+		// Update the absolute wheel position.
+		//WheelDelta((int) ((unsigned char *) us428_ctls)[W]);
+		break;
+	}
+	Value = 64 + Diff;
+	Midi.SendMidiControl(Channel, Param, Value);
+	//Midi.SendMidiControl(0, Param, ((unsigned char *) us428_ctls)[W]);
+}
diff -r 7f7a0bf510a4 us428control/Cus428State.h
--- a/us428control/Cus428State.h	Tue Sep 12 15:35:53 2006 +0200
+++ b/us428control/Cus428State.h	Thu Oct 05 14:27:54 2006 +0200
@@ -1,3 +1,4 @@
+/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
 /*
  * Controller for Tascam US-X2Y
  *
@@ -24,7 +25,7 @@
 #include "Cus428_ctls.h"
 
 class Cus428State: public us428_lights{
- public:
+public:
 	Cus428State(struct us428ctls_sharedmem* Pus428ctls_sharedmem)
 		:us428ctls_sharedmem(Pus428ctls_sharedmem)
 		,MuteInputMonitor(0)
@@ -39,12 +40,12 @@ class Cus428State: public us428_lights{
 		,bSetLocate(false)
 		,uTransport(0)
 		,aWheelSpeed(0)
-		{
-			init_us428_lights();
-			for (int v = 0; v < 5; ++v) {
-				Volume[v].init(v);
-			}
+	{
+		init_us428_lights();
+		for (int v = 0; v < 5; ++v) {
+			Volume[v].init(v);
 		}
+	}
 	enum eKnobs{
 		eK_RECORD =	72,
 		eK_PLAY,
@@ -84,10 +85,15 @@ class Cus428State: public us428_lights{
 		eK_F3,
 	};
 	void InitDevice(void);
+
 	void KnobChangedTo(eKnobs K, bool V);
 	void SliderChangedTo(int S, unsigned char New);
+	void WheelChangedTo(E_In84 W, char Diff);
+	virtual void UserSliderChangedTo(int S, unsigned char New);
+	virtual void UserWheelChangedTo(E_In84 W, char Diff);
+	virtual void UserKnobChangedTo(eKnobs K, bool V);
+
 	void SliderSend(int S);
-	void WheelChangedTo(E_In84 W, char Diff);
 	Cus428_ctls *Set_us428_ctls(Cus428_ctls *New) {
 		Cus428_ctls *Old = us428_ctls;
 		us428_ctls = New;
@@ -104,7 +110,7 @@ class Cus428State: public us428_lights{
 	void TransportSend();
 	// Reset internal MMC state.
 	void MmcReset();
- private:
+protected:
 	void SendVolume(usX2Y_volume &V);
 	struct us428ctls_sharedmem* us428ctls_sharedmem;
 	bool StateInputMonitor() {
@@ -121,9 +127,9 @@ class Cus428State: public us428_lights{
 
 	usX2Y_volume_t	Volume[5];
 	char		MuteInputMonitor,
-			Mute,
-			SelectInputMonitor,
-			Select;
+		Mute,
+		SelectInputMonitor,
+		Select;
 	Cus428_ctls	*us428_ctls;
 	// Differential wheel tracking.
 	int W0;
@@ -140,6 +146,18 @@ class Cus428State: public us428_lights{
 	int aWheelSpeed;
 };
 
+
+class Cus428StateMixxx: public Cus428State{
+public:
+	Cus428StateMixxx(struct us428ctls_sharedmem* Pus428ctls_sharedmem);
+	void UserKnobChangedTo(eKnobs K, bool V);
+	void UserSliderChangedTo(int S, unsigned char New);
+	void UserWheelChangedTo(E_In84 W, char Diff);
+protected:
+	int focus;
+	int eq;
+};
+
 extern Cus428State* OneState;
 
 #endif
diff -r 7f7a0bf510a4 us428control/Cus428_ctls.cc
--- a/us428control/Cus428_ctls.cc	Tue Sep 12 15:35:53 2006 +0200
+++ b/us428control/Cus428_ctls.cc	Thu Oct 05 14:25:18 2006 +0200
@@ -1,3 +1,4 @@
+/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
 /*
  * Controller for Tascam US-X2Y
  *
@@ -25,7 +26,7 @@
 
 Cus428State* OneState;
 
-void 
+void
 Cus428_ctls::dump(int n)
 {
 	for (int m = 0; m < n; m++)
@@ -35,7 +36,7 @@ Cus428_ctls::dump(int n)
 	printf("\n");
 }
 
-void 
+void
 Cus428_ctls::analyse(Cus428_ctls *Previous, unsigned n)
 {
 	Cus428_ctls *PreviousL = Previous ? Previous : new Cus428_ctls();
@@ -43,7 +44,7 @@ Cus428_ctls::analyse(Cus428_ctls *Previo
 	for (; n < 9; n++) {			//Sliders
 		char Diff = DiffValAt(PreviousL, n);
 		if (Diff)
-			OneState->SliderChangedTo(n, ValAt(n));		
+			OneState->SliderChangedTo(n, ValAt(n));
 	}
 	for (; n < 16; n++) {			//Knobs
 		unsigned char Diff = DiffBitAt(PreviousL, n);
@@ -57,7 +58,7 @@ Cus428_ctls::analyse(Cus428_ctls *Previo
 	for (; n < sizeof(*this); n++) {	//wheels
 		char Diff = DiffValAt(PreviousL, n);
 		if (Diff)
-			OneState->WheelChangedTo((E_In84)n, Diff);				
+			OneState->WheelChangedTo((E_In84)n, Diff);
 	}
 	if (0 == Previous)
 		delete PreviousL;
diff -r 7f7a0bf510a4 us428control/Cus428_ctls.h
--- a/us428control/Cus428_ctls.h	Tue Sep 12 15:35:53 2006 +0200
+++ b/us428control/Cus428_ctls.h	Thu Oct 05 14:28:25 2006 +0200
@@ -1,3 +1,4 @@
+/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
 /*
  * Controller for Tascam US-X2Y
  *
@@ -24,7 +25,7 @@
 
 
 class Cus428_ctls: public us428_ctls{
- public:
+public:
 	Cus428_ctls() {
 		memset(this, 0, sizeof(*this));
 	}
@@ -33,7 +34,7 @@ class Cus428_ctls: public us428_ctls{
 	bool Knob( int K) {
 		return ((char*)this)[K / 8] & (1 << K % 8);
 	}
- protected:
+protected:
 	unsigned char ValAt(int i) {
 		return ((unsigned char*)this)[i];
 	}
diff -r 7f7a0bf510a4 us428control/us428control.cc
--- a/us428control/us428control.cc	Tue Sep 12 15:35:53 2006 +0200
+++ b/us428control/us428control.cc	Thu Oct 05 14:28:34 2006 +0200
@@ -1,3 +1,4 @@
+/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
 /*
  * Controller for Tascam US-X2Y
  *
@@ -61,7 +62,8 @@ static void usage(void)
 {
 	printf("Tascam US-428 Control\n");
 	printf("version %s\n", VERSION);
-	printf("usage: "PROGNAME" [-v verbosity_level 0..2] [-c card] [-D device] [-u usb-device]\n");
+	printf("usage: "PROGNAME" [-v verbosity_level 0..2] [-c card] [-D device] [-u usb-device] [-m mode]\n");
+	printf("mode is one of (native, mixxx)\n");
 }
 /*
  * check the name id of the given hwdep handle
@@ -76,14 +78,14 @@ static int check_hwinfo(snd_hwdep_t *hw,
 		return err;
 	if (strcmp(snd_hwdep_info_get_id(info), id))
 		return -ENODEV;
-	if (usb_dev_name) 
+	if (usb_dev_name)
 		if (strcmp(snd_hwdep_info_get_name(info), usb_dev_name))
 			return -ENODEV;
 
 	return 0; /* ok */
 }
 
-int US428Control(const char* DevName)
+int US428Control(const char* DevName, int mode)
 {
 	snd_hwdep_t		*hw;
 	int			err;
@@ -117,7 +119,11 @@ int US428Control(const char* DevName)
 		return -ENOMEM;
 	}
 	us428ctls_sharedmem->CtlSnapShotRed = us428ctls_sharedmem->CtlSnapShotLast;
-	OneState = new Cus428State(us428ctls_sharedmem);
+	if (mode == 1)
+		OneState = new Cus428StateMixxx(us428ctls_sharedmem);
+	else
+		OneState = new Cus428State(us428ctls_sharedmem);
+
 	OneState->InitDevice();
 
 	while ((pollrc = poll(pfds, npfd, 60000)) >= 0) {
@@ -152,12 +158,13 @@ int main (int argc, char *argv[])
 int main (int argc, char *argv[])
 {
 	int c;
+	int mode = 0;
 	int card = -1;
 	char	*device_name = NULL,
 		*usb_device_name = getenv("DEVICE");
 	char name[64];
 
-	while ((c = getopt(argc, argv, "c:D:u:v:")) != -1) {
+	while ((c = getopt(argc, argv, "c:D:u:v:m:")) != -1) {
 		switch (c) {
 		case 'c':
 			card = atoi(optarg);
@@ -170,6 +177,10 @@ int main (int argc, char *argv[])
 			break;
 		case 'v':
 			verbose = atoi(optarg);
+			break;
+		case 'm':
+			if (!strcmp(optarg, "mixxx"))
+				mode = 1;
 			break;
 		default:
 			usage();
@@ -190,18 +201,18 @@ int main (int argc, char *argv[])
 		}
 	}
 	if (device_name) {
-		return US428Control(device_name) != 0;
+		return US428Control(device_name, mode) != 0;
 	}
 	if (card >= 0) {
 		sprintf(name, "hw:%d", card);
-		return US428Control(name) != 0;
+		return US428Control(name, mode) != 0;
 	}
 
 	/* probe the all cards */
 	for (c = 0; c < SND_CARDS; c++) {
-	//	verbose--;
+		//	verbose--;
 		sprintf(name, "hw:%d", c);
-		if (! US428Control(name))
+		if (!US428Control(name, mode))
 			card = c;
 	}
 	if (card < 0) {
diff -r 7f7a0bf510a4 us428control/usbus428ctldefs.h
--- a/us428control/usbus428ctldefs.h	Tue Sep 12 15:35:53 2006 +0200
+++ b/us428control/usbus428ctldefs.h	Thu Oct 05 14:29:28 2006 +0200
@@ -1,3 +1,4 @@
+/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
 /*
  *
  * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@xxxxxxxx>
@@ -64,7 +65,7 @@ struct us428_ctls{
 	unsigned char 	Select;
 	unsigned char   Mute;
 	unsigned char   UNKNOWN;
-	unsigned char   Switch;	     
+	unsigned char   Switch;
 	unsigned char   Wheel[5];
 };
 
@@ -82,15 +83,15 @@ enum {
 
 typedef struct usX2Y_volume {
 	unsigned char	Channel,
-			LH,
-			LL,
-			RH,
-			RL;
+		LH,
+		LL,
+		RH,
+		RL;
 	unsigned char	Slider;
 	char		Pan,
-			Mute;
-#ifdef __cplusplus
-	public:
+		Mute;
+#ifdef __cplusplus
+public:
 	void init(unsigned char _Channel) {
 		memset(this, 0, sizeof(*this));
 		Channel = _Channel;
@@ -119,7 +120,7 @@ typedef struct usX2Y_volume {
 		if (Grob) {
 			static int GrobVals[] = {-128, -64, 0, 64, 127};
 			int i = 4;
-			while (i >= 0 && GrobVals[i] > Pan) 
+			while (i >= 0 && GrobVals[i] > Pan)
 				i--;
 			if (GrobVals[i] != Pan  &&  RawValue < 0)
 				i++;
@@ -145,7 +146,7 @@ struct us428_lights{
 struct us428_lights{
 	us428_setByte_t Light[7];
 #ifdef __cplusplus
-	public:
+public:
 	enum eLight{
 		eL_Select0 = 0,
 		eL_Rec0 = 8,
@@ -158,7 +159,12 @@ struct us428_lights{
 		eL_FFwd = 29,
 		eL_Play = 30,
 		eL_Record = 31,
-		eL_Null
+		eL_AnalogDigital = 32,
+		eL_Null = 34,
+		eL_Low = 36,
+		eL_LowMid = 37,
+		eL_HiMid = 38,
+		eL_High = 39
 	};
 	bool LightIs(int L){
 		return Light[L / 8].Value & (1 << (L % 8));
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux