mirror of
https://github.com/alsa-project/alsa-tools.git
synced 2026-03-08 05:33:49 -04:00
us428control support for mixxx
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 Signed-off-by: Cedric GESTES <goctaf@gmail.com>
This commit is contained in:
parent
b956edf51f
commit
b715a9637d
8 changed files with 395 additions and 153 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
|
/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
|
* Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
|
||||||
|
|
@ -78,7 +79,7 @@ char Cus428Midi::KnobParam[] = {
|
||||||
0x35,
|
0x35,
|
||||||
0x36,
|
0x36,
|
||||||
0x37,
|
0x37,
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int verbose;
|
extern int verbose;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
|
* Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
|
||||||
|
|
@ -62,7 +63,7 @@
|
||||||
|
|
||||||
|
|
||||||
class Cus428Midi {
|
class Cus428Midi {
|
||||||
public:
|
public:
|
||||||
Cus428Midi():
|
Cus428Midi():
|
||||||
Seq(0){}
|
Seq(0){}
|
||||||
|
|
||||||
|
|
@ -87,14 +88,23 @@ class Cus428Midi {
|
||||||
return Err;
|
return Err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SendMidiControl(char Param, char Val){
|
int SendMidiControl(char Channel, char Param, char Val){
|
||||||
snd_seq_ev_set_controller(&Ev, 15, Param, Val & 0x7F);
|
snd_seq_ev_set_controller(&Ev, Channel, Param, Val & 0x7F);
|
||||||
SubMitEvent();
|
SubMitEvent();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SendMidiControl(Cus428State::eKnobs K, bool Down){
|
int SendMidiNote(char Channel, char Note, char Val){
|
||||||
return SendMidiControl(KnobParam[K - Cus428State::eK_RECORD], Down ? 0x7F : 0);
|
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.
|
// To parse and dispatch input MIDI events.
|
||||||
|
|
@ -106,7 +116,7 @@ class Cus428Midi {
|
||||||
// Made public for friendliness.
|
// Made public for friendliness.
|
||||||
snd_seq_t *Seq;
|
snd_seq_t *Seq;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int Port;
|
int Port;
|
||||||
snd_seq_event_t Ev;
|
snd_seq_event_t Ev;
|
||||||
int SubMitEvent(){
|
int SubMitEvent(){
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
|
||||||
/*
|
/*
|
||||||
* Controller for Tascam US-X2Y
|
* Controller for Tascam US-X2Y
|
||||||
*
|
*
|
||||||
|
|
@ -46,7 +47,6 @@ void Cus428State::InitDevice(void)
|
||||||
SliderChangedTo(eFaderM, ((unsigned char*)(us428ctls_sharedmem->CtlSnapShot + us428ctls_sharedmem->CtlSnapShotLast))[eFaderM]);
|
SliderChangedTo(eFaderM, ((unsigned char*)(us428ctls_sharedmem->CtlSnapShot + us428ctls_sharedmem->CtlSnapShotLast))[eFaderM]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int Cus428State::LightSend()
|
int Cus428State::LightSend()
|
||||||
{
|
{
|
||||||
int Next = us428ctls_sharedmem->p4outLast + 1;
|
int Next = us428ctls_sharedmem->p4outLast + 1;
|
||||||
|
|
@ -57,6 +57,11 @@ int Cus428State::LightSend()
|
||||||
return us428ctls_sharedmem->p4outLast = Next;
|
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)
|
void Cus428State::SendVolume(usX2Y_volume &V)
|
||||||
{
|
{
|
||||||
int Next = us428ctls_sharedmem->p4outLast + 1;
|
int Next = us428ctls_sharedmem->p4outLast + 1;
|
||||||
|
|
@ -67,23 +72,101 @@ void Cus428State::SendVolume(usX2Y_volume &V)
|
||||||
us428ctls_sharedmem->p4outLast = Next;
|
us428ctls_sharedmem->p4outLast = Next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Cus428State::UserSliderChangedTo(int S, unsigned char New)
|
||||||
|
{
|
||||||
|
SliderSend(S);
|
||||||
|
}
|
||||||
|
|
||||||
void Cus428State::SliderChangedTo(int S, unsigned char New)
|
void Cus428State::SliderChangedTo(int S, unsigned char New)
|
||||||
{
|
{
|
||||||
if (StateInputMonitor() && S <= eFader3
|
if (StateInputMonitor() && S <= eFader3 || S == eFaderM) {
|
||||||
|| S == eFaderM) {
|
|
||||||
usX2Y_volume &V = Volume[S >= eFader4 ? eFader4 : S];
|
usX2Y_volume &V = Volume[S >= eFader4 ? eFader4 : S];
|
||||||
V.SetTo(S, New);
|
V.SetTo(S, New);
|
||||||
if (S == eFaderM || !LightIs(eL_Mute0 + S))
|
if (S == eFaderM || !LightIs(eL_Mute0 + S))
|
||||||
SendVolume(V);
|
SendVolume(V);
|
||||||
}
|
}
|
||||||
else SliderSend(S);
|
else
|
||||||
|
UserSliderChangedTo(S, New);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Cus428State::SliderSend(int S)
|
void Cus428State::UserKnobChangedTo(eKnobs K, bool V)
|
||||||
{
|
{
|
||||||
Midi.SendMidiControl(0x40 + S, ((unsigned char*)us428_ctls)[S] / 2);
|
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)
|
void Cus428State::KnobChangedTo(eKnobs K, bool V)
|
||||||
{
|
{
|
||||||
switch (K & ~(StateInputMonitor() ? 3 : -1)) {
|
switch (K & ~(StateInputMonitor() ? 3 : -1)) {
|
||||||
|
|
@ -109,75 +192,7 @@ void Cus428State::KnobChangedTo(eKnobs K, bool V)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
switch (K) {
|
if (K == eK_InputMonitor) {
|
||||||
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 (verbose > 1)
|
if (verbose > 1)
|
||||||
printf("Knob InputMonitor now %i", V);
|
printf("Knob InputMonitor now %i", V);
|
||||||
if (V) {
|
if (V) {
|
||||||
|
|
@ -195,22 +210,40 @@ void Cus428State::KnobChangedTo(eKnobs K, bool V)
|
||||||
}
|
}
|
||||||
if (verbose > 1)
|
if (verbose > 1)
|
||||||
printf(" Light is %i\n", LightIs(eL_InputMonitor));
|
printf(" Light is %i\n", LightIs(eL_InputMonitor));
|
||||||
break;
|
} else
|
||||||
default:
|
UserKnobChangedTo(K, V);
|
||||||
if (verbose > 1)
|
|
||||||
printf("Knob %i now %i\n", K, V);
|
|
||||||
Midi.SendMidiControl(K, V);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Cus428State::UserWheelChangedTo(E_In84 W, char Diff)
|
||||||
void Cus428State::WheelChangedTo(E_In84 W, char Diff)
|
|
||||||
{
|
{
|
||||||
char Param;
|
char Param;
|
||||||
switch (W) {
|
switch (W) {
|
||||||
case eWheelPan:
|
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;
|
int index = 0;
|
||||||
|
|
||||||
while( index < 4 && (1 << index) != Light[0].Value)
|
while( index < 4 && (1 << index) != Light[0].Value)
|
||||||
|
|
@ -224,24 +257,7 @@ void Cus428State::WheelChangedTo(E_In84 W, char Diff)
|
||||||
SendVolume(Volume[index]);
|
SendVolume(Volume[index]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Param = 0x4D;
|
UserWheelChangedTo(W, Diff);
|
||||||
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]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -249,9 +265,9 @@ void Cus428State::WheelChangedTo(E_In84 W, char Diff)
|
||||||
void Cus428State::LocateWheel ( unsigned char *tc )
|
void Cus428State::LocateWheel ( unsigned char *tc )
|
||||||
{
|
{
|
||||||
aWheel = (60 * 60 * 30) * (int) tc[0] // hh - hours [0..23]
|
aWheel = (60 * 60 * 30) * (int) tc[0] // hh - hours [0..23]
|
||||||
+ ( 60 * 30) * (int) tc[1] // mm - minutes [0..59]
|
+ ( 60 * 30) * (int) tc[1] // mm - minutes [0..59]
|
||||||
+ ( 30) * (int) tc[2] // ss - seconds [0..59]
|
+ ( 30) * (int) tc[2] // ss - seconds [0..59]
|
||||||
+ (int) tc[3]; // ff - frames [0..29]
|
+ (int) tc[3]; // ff - frames [0..29]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -276,8 +292,8 @@ void Cus428State::WheelDelta ( int W )
|
||||||
if (dW > 0 && dW > +W_DELTA_MIN)
|
if (dW > 0 && dW > +W_DELTA_MIN)
|
||||||
dW -= W_DELTA_MAX;
|
dW -= W_DELTA_MAX;
|
||||||
else
|
else
|
||||||
if (dW < 0 && dW < -W_DELTA_MIN)
|
if (dW < 0 && dW < -W_DELTA_MIN)
|
||||||
dW += W_DELTA_MAX;
|
dW += W_DELTA_MAX;
|
||||||
|
|
||||||
W0 = W;
|
W0 = W;
|
||||||
aWheel += dW;
|
aWheel += dW;
|
||||||
|
|
@ -356,7 +372,7 @@ void Cus428State::TransportToggle ( unsigned char T )
|
||||||
uTransport = T_STOP;
|
uTransport = T_STOP;
|
||||||
Midi.SendMmcCommand(MMC_CMD_STOP);
|
Midi.SendMmcCommand(MMC_CMD_STOP);
|
||||||
} else {
|
} else {
|
||||||
uTransport &= T_RECORD;
|
uTransport &= T_RECORD;
|
||||||
uTransport |= T_PLAY;
|
uTransport |= T_PLAY;
|
||||||
Midi.SendMmcCommand(MMC_CMD_PLAY);
|
Midi.SendMmcCommand(MMC_CMD_PLAY);
|
||||||
}
|
}
|
||||||
|
|
@ -366,7 +382,7 @@ void Cus428State::TransportToggle ( unsigned char T )
|
||||||
uTransport &= ~T_RECORD;
|
uTransport &= ~T_RECORD;
|
||||||
Midi.SendMmcCommand(MMC_CMD_RECORD_EXIT);
|
Midi.SendMmcCommand(MMC_CMD_RECORD_EXIT);
|
||||||
} else {
|
} else {
|
||||||
uTransport &= T_PLAY;
|
uTransport &= T_PLAY;
|
||||||
uTransport |= T_RECORD;
|
uTransport |= T_RECORD;
|
||||||
Midi.SendMmcCommand(uTransport & T_PLAY ? MMC_CMD_RECORD_STROBE : MMC_CMD_RECORD_PAUSE);
|
Midi.SendMmcCommand(uTransport & T_PLAY ? MMC_CMD_RECORD_STROBE : MMC_CMD_RECORD_PAUSE);
|
||||||
}
|
}
|
||||||
|
|
@ -444,3 +460,181 @@ void Cus428State::MmcReset()
|
||||||
LocateSend();
|
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]);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
|
||||||
/*
|
/*
|
||||||
* Controller for Tascam US-X2Y
|
* Controller for Tascam US-X2Y
|
||||||
*
|
*
|
||||||
|
|
@ -24,7 +25,7 @@
|
||||||
#include "Cus428_ctls.h"
|
#include "Cus428_ctls.h"
|
||||||
|
|
||||||
class Cus428State: public us428_lights{
|
class Cus428State: public us428_lights{
|
||||||
public:
|
public:
|
||||||
Cus428State(struct us428ctls_sharedmem* Pus428ctls_sharedmem)
|
Cus428State(struct us428ctls_sharedmem* Pus428ctls_sharedmem)
|
||||||
:us428ctls_sharedmem(Pus428ctls_sharedmem)
|
:us428ctls_sharedmem(Pus428ctls_sharedmem)
|
||||||
,MuteInputMonitor(0)
|
,MuteInputMonitor(0)
|
||||||
|
|
@ -39,12 +40,12 @@ class Cus428State: public us428_lights{
|
||||||
,bSetLocate(false)
|
,bSetLocate(false)
|
||||||
,uTransport(0)
|
,uTransport(0)
|
||||||
,aWheelSpeed(0)
|
,aWheelSpeed(0)
|
||||||
{
|
{
|
||||||
init_us428_lights();
|
init_us428_lights();
|
||||||
for (int v = 0; v < 5; ++v) {
|
for (int v = 0; v < 5; ++v) {
|
||||||
Volume[v].init(v);
|
Volume[v].init(v);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
enum eKnobs{
|
enum eKnobs{
|
||||||
eK_RECORD = 72,
|
eK_RECORD = 72,
|
||||||
eK_PLAY,
|
eK_PLAY,
|
||||||
|
|
@ -84,10 +85,15 @@ class Cus428State: public us428_lights{
|
||||||
eK_F3,
|
eK_F3,
|
||||||
};
|
};
|
||||||
void InitDevice(void);
|
void InitDevice(void);
|
||||||
|
|
||||||
void KnobChangedTo(eKnobs K, bool V);
|
void KnobChangedTo(eKnobs K, bool V);
|
||||||
void SliderChangedTo(int S, unsigned char New);
|
void SliderChangedTo(int S, unsigned char New);
|
||||||
void SliderSend(int S);
|
|
||||||
void WheelChangedTo(E_In84 W, char Diff);
|
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);
|
||||||
Cus428_ctls *Set_us428_ctls(Cus428_ctls *New) {
|
Cus428_ctls *Set_us428_ctls(Cus428_ctls *New) {
|
||||||
Cus428_ctls *Old = us428_ctls;
|
Cus428_ctls *Old = us428_ctls;
|
||||||
us428_ctls = New;
|
us428_ctls = New;
|
||||||
|
|
@ -104,7 +110,7 @@ class Cus428State: public us428_lights{
|
||||||
void TransportSend();
|
void TransportSend();
|
||||||
// Reset internal MMC state.
|
// Reset internal MMC state.
|
||||||
void MmcReset();
|
void MmcReset();
|
||||||
private:
|
protected:
|
||||||
void SendVolume(usX2Y_volume &V);
|
void SendVolume(usX2Y_volume &V);
|
||||||
struct us428ctls_sharedmem* us428ctls_sharedmem;
|
struct us428ctls_sharedmem* us428ctls_sharedmem;
|
||||||
bool StateInputMonitor() {
|
bool StateInputMonitor() {
|
||||||
|
|
@ -121,9 +127,9 @@ class Cus428State: public us428_lights{
|
||||||
|
|
||||||
usX2Y_volume_t Volume[5];
|
usX2Y_volume_t Volume[5];
|
||||||
char MuteInputMonitor,
|
char MuteInputMonitor,
|
||||||
Mute,
|
Mute,
|
||||||
SelectInputMonitor,
|
SelectInputMonitor,
|
||||||
Select;
|
Select;
|
||||||
Cus428_ctls *us428_ctls;
|
Cus428_ctls *us428_ctls;
|
||||||
// Differential wheel tracking.
|
// Differential wheel tracking.
|
||||||
int W0;
|
int W0;
|
||||||
|
|
@ -140,6 +146,18 @@ class Cus428State: public us428_lights{
|
||||||
int aWheelSpeed;
|
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;
|
extern Cus428State* OneState;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
|
||||||
/*
|
/*
|
||||||
* Controller for Tascam US-X2Y
|
* Controller for Tascam US-X2Y
|
||||||
*
|
*
|
||||||
|
|
@ -25,7 +26,7 @@
|
||||||
|
|
||||||
Cus428State* OneState;
|
Cus428State* OneState;
|
||||||
|
|
||||||
void
|
void
|
||||||
Cus428_ctls::dump(int n)
|
Cus428_ctls::dump(int n)
|
||||||
{
|
{
|
||||||
for (int m = 0; m < n; m++)
|
for (int m = 0; m < n; m++)
|
||||||
|
|
@ -35,7 +36,7 @@ Cus428_ctls::dump(int n)
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Cus428_ctls::analyse(Cus428_ctls *Previous, unsigned n)
|
Cus428_ctls::analyse(Cus428_ctls *Previous, unsigned n)
|
||||||
{
|
{
|
||||||
Cus428_ctls *PreviousL = Previous ? Previous : new Cus428_ctls();
|
Cus428_ctls *PreviousL = Previous ? Previous : new Cus428_ctls();
|
||||||
|
|
@ -43,7 +44,7 @@ Cus428_ctls::analyse(Cus428_ctls *Previous, unsigned n)
|
||||||
for (; n < 9; n++) { //Sliders
|
for (; n < 9; n++) { //Sliders
|
||||||
char Diff = DiffValAt(PreviousL, n);
|
char Diff = DiffValAt(PreviousL, n);
|
||||||
if (Diff)
|
if (Diff)
|
||||||
OneState->SliderChangedTo(n, ValAt(n));
|
OneState->SliderChangedTo(n, ValAt(n));
|
||||||
}
|
}
|
||||||
for (; n < 16; n++) { //Knobs
|
for (; n < 16; n++) { //Knobs
|
||||||
unsigned char Diff = DiffBitAt(PreviousL, n);
|
unsigned char Diff = DiffBitAt(PreviousL, n);
|
||||||
|
|
@ -57,7 +58,7 @@ Cus428_ctls::analyse(Cus428_ctls *Previous, unsigned n)
|
||||||
for (; n < sizeof(*this); n++) { //wheels
|
for (; n < sizeof(*this); n++) { //wheels
|
||||||
char Diff = DiffValAt(PreviousL, n);
|
char Diff = DiffValAt(PreviousL, n);
|
||||||
if (Diff)
|
if (Diff)
|
||||||
OneState->WheelChangedTo((E_In84)n, Diff);
|
OneState->WheelChangedTo((E_In84)n, Diff);
|
||||||
}
|
}
|
||||||
if (0 == Previous)
|
if (0 == Previous)
|
||||||
delete PreviousL;
|
delete PreviousL;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
|
||||||
/*
|
/*
|
||||||
* Controller for Tascam US-X2Y
|
* Controller for Tascam US-X2Y
|
||||||
*
|
*
|
||||||
|
|
@ -24,7 +25,7 @@
|
||||||
|
|
||||||
|
|
||||||
class Cus428_ctls: public us428_ctls{
|
class Cus428_ctls: public us428_ctls{
|
||||||
public:
|
public:
|
||||||
Cus428_ctls() {
|
Cus428_ctls() {
|
||||||
memset(this, 0, sizeof(*this));
|
memset(this, 0, sizeof(*this));
|
||||||
}
|
}
|
||||||
|
|
@ -33,7 +34,7 @@ class Cus428_ctls: public us428_ctls{
|
||||||
bool Knob( int K) {
|
bool Knob( int K) {
|
||||||
return ((char*)this)[K / 8] & (1 << K % 8);
|
return ((char*)this)[K / 8] & (1 << K % 8);
|
||||||
}
|
}
|
||||||
protected:
|
protected:
|
||||||
unsigned char ValAt(int i) {
|
unsigned char ValAt(int i) {
|
||||||
return ((unsigned char*)this)[i];
|
return ((unsigned char*)this)[i];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
|
||||||
/*
|
/*
|
||||||
* Controller for Tascam US-X2Y
|
* Controller for Tascam US-X2Y
|
||||||
*
|
*
|
||||||
|
|
@ -61,7 +62,8 @@ static void usage(void)
|
||||||
{
|
{
|
||||||
printf("Tascam US-428 Control\n");
|
printf("Tascam US-428 Control\n");
|
||||||
printf("version %s\n", VERSION);
|
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
|
* check the name id of the given hwdep handle
|
||||||
|
|
@ -76,14 +78,14 @@ static int check_hwinfo(snd_hwdep_t *hw, const char *id, const char* usb_dev_nam
|
||||||
return err;
|
return err;
|
||||||
if (strcmp(snd_hwdep_info_get_id(info), id))
|
if (strcmp(snd_hwdep_info_get_id(info), id))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
if (usb_dev_name)
|
if (usb_dev_name)
|
||||||
if (strcmp(snd_hwdep_info_get_name(info), usb_dev_name))
|
if (strcmp(snd_hwdep_info_get_name(info), usb_dev_name))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
return 0; /* ok */
|
return 0; /* ok */
|
||||||
}
|
}
|
||||||
|
|
||||||
int US428Control(const char* DevName)
|
int US428Control(const char* DevName, int mode)
|
||||||
{
|
{
|
||||||
snd_hwdep_t *hw;
|
snd_hwdep_t *hw;
|
||||||
int err;
|
int err;
|
||||||
|
|
@ -117,7 +119,11 @@ int US428Control(const char* DevName)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
us428ctls_sharedmem->CtlSnapShotRed = us428ctls_sharedmem->CtlSnapShotLast;
|
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();
|
OneState->InitDevice();
|
||||||
|
|
||||||
while ((pollrc = poll(pfds, npfd, 60000)) >= 0) {
|
while ((pollrc = poll(pfds, npfd, 60000)) >= 0) {
|
||||||
|
|
@ -152,12 +158,13 @@ int US428Control(const char* DevName)
|
||||||
int main (int argc, char *argv[])
|
int main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
int mode = 0;
|
||||||
int card = -1;
|
int card = -1;
|
||||||
char *device_name = NULL,
|
char *device_name = NULL,
|
||||||
*usb_device_name = getenv("DEVICE");
|
*usb_device_name = getenv("DEVICE");
|
||||||
char name[64];
|
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) {
|
switch (c) {
|
||||||
case 'c':
|
case 'c':
|
||||||
card = atoi(optarg);
|
card = atoi(optarg);
|
||||||
|
|
@ -171,6 +178,10 @@ int main (int argc, char *argv[])
|
||||||
case 'v':
|
case 'v':
|
||||||
verbose = atoi(optarg);
|
verbose = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
case 'm':
|
||||||
|
if (!strcmp(optarg, "mixxx"))
|
||||||
|
mode = 1;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -190,18 +201,18 @@ int main (int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (device_name) {
|
if (device_name) {
|
||||||
return US428Control(device_name) != 0;
|
return US428Control(device_name, mode) != 0;
|
||||||
}
|
}
|
||||||
if (card >= 0) {
|
if (card >= 0) {
|
||||||
sprintf(name, "hw:%d", card);
|
sprintf(name, "hw:%d", card);
|
||||||
return US428Control(name) != 0;
|
return US428Control(name, mode) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* probe the all cards */
|
/* probe the all cards */
|
||||||
for (c = 0; c < SND_CARDS; c++) {
|
for (c = 0; c < SND_CARDS; c++) {
|
||||||
// verbose--;
|
// verbose--;
|
||||||
sprintf(name, "hw:%d", c);
|
sprintf(name, "hw:%d", c);
|
||||||
if (! US428Control(name))
|
if (!US428Control(name, mode))
|
||||||
card = c;
|
card = c;
|
||||||
}
|
}
|
||||||
if (card < 0) {
|
if (card < 0) {
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
|
* Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
|
||||||
|
|
@ -64,7 +65,7 @@ struct us428_ctls{
|
||||||
unsigned char Select;
|
unsigned char Select;
|
||||||
unsigned char Mute;
|
unsigned char Mute;
|
||||||
unsigned char UNKNOWN;
|
unsigned char UNKNOWN;
|
||||||
unsigned char Switch;
|
unsigned char Switch;
|
||||||
unsigned char Wheel[5];
|
unsigned char Wheel[5];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -82,15 +83,15 @@ enum {
|
||||||
|
|
||||||
typedef struct usX2Y_volume {
|
typedef struct usX2Y_volume {
|
||||||
unsigned char Channel,
|
unsigned char Channel,
|
||||||
LH,
|
LH,
|
||||||
LL,
|
LL,
|
||||||
RH,
|
RH,
|
||||||
RL;
|
RL;
|
||||||
unsigned char Slider;
|
unsigned char Slider;
|
||||||
char Pan,
|
char Pan,
|
||||||
Mute;
|
Mute;
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
public:
|
public:
|
||||||
void init(unsigned char _Channel) {
|
void init(unsigned char _Channel) {
|
||||||
memset(this, 0, sizeof(*this));
|
memset(this, 0, sizeof(*this));
|
||||||
Channel = _Channel;
|
Channel = _Channel;
|
||||||
|
|
@ -119,7 +120,7 @@ typedef struct usX2Y_volume {
|
||||||
if (Grob) {
|
if (Grob) {
|
||||||
static int GrobVals[] = {-128, -64, 0, 64, 127};
|
static int GrobVals[] = {-128, -64, 0, 64, 127};
|
||||||
int i = 4;
|
int i = 4;
|
||||||
while (i >= 0 && GrobVals[i] > Pan)
|
while (i >= 0 && GrobVals[i] > Pan)
|
||||||
i--;
|
i--;
|
||||||
if (GrobVals[i] != Pan && RawValue < 0)
|
if (GrobVals[i] != Pan && RawValue < 0)
|
||||||
i++;
|
i++;
|
||||||
|
|
@ -145,7 +146,7 @@ typedef struct usX2Y_volume {
|
||||||
struct us428_lights{
|
struct us428_lights{
|
||||||
us428_setByte_t Light[7];
|
us428_setByte_t Light[7];
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
public:
|
public:
|
||||||
enum eLight{
|
enum eLight{
|
||||||
eL_Select0 = 0,
|
eL_Select0 = 0,
|
||||||
eL_Rec0 = 8,
|
eL_Rec0 = 8,
|
||||||
|
|
@ -158,7 +159,12 @@ struct us428_lights{
|
||||||
eL_FFwd = 29,
|
eL_FFwd = 29,
|
||||||
eL_Play = 30,
|
eL_Play = 30,
|
||||||
eL_Record = 31,
|
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){
|
bool LightIs(int L){
|
||||||
return Light[L / 8].Value & (1 << (L % 8));
|
return Light[L / 8].Value & (1 << (L % 8));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue