|
Packit Service |
b98cfc |
/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
|
|
Packit Service |
b98cfc |
/*
|
|
Packit Service |
b98cfc |
* Controller for Tascam US-X2Y
|
|
Packit Service |
b98cfc |
*
|
|
Packit Service |
b98cfc |
* Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
|
|
Packit Service |
b98cfc |
* Copyright (c) 2004-2007 by Rui Nuno Capela <rncbc@rncbc.org>
|
|
Packit Service |
b98cfc |
*
|
|
Packit Service |
b98cfc |
* This program is free software; you can redistribute it and/or modify
|
|
Packit Service |
b98cfc |
* it under the terms of the GNU General Public License as published by
|
|
Packit Service |
b98cfc |
* the Free Software Foundation; either version 2 of the License, or
|
|
Packit Service |
b98cfc |
* (at your option) any later version.
|
|
Packit Service |
b98cfc |
*
|
|
Packit Service |
b98cfc |
* This program is distributed in the hope that it will be useful,
|
|
Packit Service |
b98cfc |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
b98cfc |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit Service |
b98cfc |
* GNU General Public License for more details.
|
|
Packit Service |
b98cfc |
*
|
|
Packit Service |
b98cfc |
* You should have received a copy of the GNU General Public License
|
|
Packit Service |
b98cfc |
* along with this program; if not, write to the Free Software
|
|
Packit Service |
b98cfc |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
Packit Service |
b98cfc |
*/
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
#ifndef Cus428State_h
|
|
Packit Service |
b98cfc |
#define Cus428State_h
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
#include "Cus428_ctls.h"
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
class Cus428State: public us428_lights
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
public:
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// Constructor.
|
|
Packit Service |
b98cfc |
Cus428State(struct us428ctls_sharedmem* Pus428ctls_sharedmem, int y = 8)
|
|
Packit Service |
b98cfc |
:us428ctls_sharedmem(Pus428ctls_sharedmem),Y(y)
|
|
Packit Service |
b98cfc |
,us428_ctls(0)
|
|
Packit Service |
b98cfc |
,MuteInputMonitor(0)
|
|
Packit Service |
b98cfc |
,SoloInputMonitor(0)
|
|
Packit Service |
b98cfc |
,RecInputMonitor(0)
|
|
Packit Service |
b98cfc |
,SelectInputMonitor(0)
|
|
Packit Service |
b98cfc |
,aBank(0)
|
|
Packit Service |
b98cfc |
,cBanks(32 / y)
|
|
Packit Service |
b98cfc |
,W0(0)
|
|
Packit Service |
b98cfc |
,aWheel(0)
|
|
Packit Service |
b98cfc |
,aWheel_L(0)
|
|
Packit Service |
b98cfc |
,aWheel_R(0)
|
|
Packit Service |
b98cfc |
,bSetLocate(false)
|
|
Packit Service |
b98cfc |
,bSetRecord(false)
|
|
Packit Service |
b98cfc |
,uTransport(0)
|
|
Packit Service |
b98cfc |
,aWheelSpeed(0)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
Mute = new unsigned char [cBanks];
|
|
Packit Service |
b98cfc |
Solo = new unsigned char [cBanks];
|
|
Packit Service |
b98cfc |
Rec = new unsigned char [cBanks];
|
|
Packit Service |
b98cfc |
Select = new unsigned char [cBanks];
|
|
Packit Service |
b98cfc |
for (int i = 0; i < cBanks; ++i)
|
|
Packit Service |
b98cfc |
Mute[i] = Solo[i] = Rec[i] = Select[i] = 0;
|
|
Packit Service |
b98cfc |
init_us428_lights();
|
|
Packit Service |
b98cfc |
for (int v = 0; v < 5; ++v) {
|
|
Packit Service |
b98cfc |
Volume[v].init(v);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// Destructor.
|
|
Packit Service |
b98cfc |
virtual ~Cus428State() {
|
|
Packit Service |
b98cfc |
delete Select;
|
|
Packit Service |
b98cfc |
delete Rec;
|
|
Packit Service |
b98cfc |
delete Solo;
|
|
Packit Service |
b98cfc |
delete Mute;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
enum eKnobs {
|
|
Packit Service |
b98cfc |
eK_RECORD = 72,
|
|
Packit Service |
b98cfc |
eK_PLAY,
|
|
Packit Service |
b98cfc |
eK_STOP,
|
|
Packit Service |
b98cfc |
eK_FFWD,
|
|
Packit Service |
b98cfc |
eK_REW,
|
|
Packit Service |
b98cfc |
eK_SOLO,
|
|
Packit Service |
b98cfc |
eK_REC,
|
|
Packit Service |
b98cfc |
eK_NULL,
|
|
Packit Service |
b98cfc |
eK_InputMonitor, // = 80
|
|
Packit Service |
b98cfc |
eK_BANK_L,
|
|
Packit Service |
b98cfc |
eK_BANK_R,
|
|
Packit Service |
b98cfc |
eK_LOCATE_L,
|
|
Packit Service |
b98cfc |
eK_LOCATE_R,
|
|
Packit Service |
b98cfc |
eK_SET = 85,
|
|
Packit Service |
b98cfc |
eK_INPUTCD = 87,
|
|
Packit Service |
b98cfc |
eK_HIGH = 90,
|
|
Packit Service |
b98cfc |
eK_HIMID,
|
|
Packit Service |
b98cfc |
eK_LOWMID,
|
|
Packit Service |
b98cfc |
eK_LOW,
|
|
Packit Service |
b98cfc |
eK_Select0 = 96,
|
|
Packit Service |
b98cfc |
eK_Mute0 = 104,
|
|
Packit Service |
b98cfc |
eK_Mute1,
|
|
Packit Service |
b98cfc |
eK_Mute2,
|
|
Packit Service |
b98cfc |
eK_Mute3,
|
|
Packit Service |
b98cfc |
eK_Mute4,
|
|
Packit Service |
b98cfc |
eK_Mute5,
|
|
Packit Service |
b98cfc |
eK_Mute6,
|
|
Packit Service |
b98cfc |
eK_Mute7,
|
|
Packit Service |
b98cfc |
eK_AUX1 = 120,
|
|
Packit Service |
b98cfc |
eK_AUX2,
|
|
Packit Service |
b98cfc |
eK_AUX3,
|
|
Packit Service |
b98cfc |
eK_AUX4,
|
|
Packit Service |
b98cfc |
eK_ASGN,
|
|
Packit Service |
b98cfc |
eK_F1,
|
|
Packit Service |
b98cfc |
eK_F2,
|
|
Packit Service |
b98cfc |
eK_F3,
|
|
Packit Service |
b98cfc |
};
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
void InitDevice(void);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
void KnobChangedTo(eKnobs K, bool V);
|
|
Packit Service |
b98cfc |
void SliderChangedTo(int S, unsigned char New);
|
|
Packit Service |
b98cfc |
void WheelChangedTo(E_In84 W, char Diff);
|
|
Packit Service |
b98cfc |
virtual void UserSliderChangedTo(int S, unsigned char New);
|
|
Packit Service |
b98cfc |
virtual void UserWheelChangedTo(E_In84 W, char Diff);
|
|
Packit Service |
b98cfc |
virtual void UserKnobChangedTo(eKnobs K, bool V);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
void SliderSend(int S);
|
|
Packit Service |
b98cfc |
Cus428_ctls *Set_us428_ctls(Cus428_ctls *New) {
|
|
Packit Service |
b98cfc |
Cus428_ctls *Old = us428_ctls;
|
|
Packit Service |
b98cfc |
us428_ctls = New;
|
|
Packit Service |
b98cfc |
return Old;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
// Update the LED lights state.
|
|
Packit Service |
b98cfc |
int LightSend();
|
|
Packit Service |
b98cfc |
// Time-code (hh:mm:ss:ff:fr) to/from absolute wheel position converters.
|
|
Packit Service |
b98cfc |
void LocateWheel(unsigned char *tc);
|
|
Packit Service |
b98cfc |
void LocateSend();
|
|
Packit Service |
b98cfc |
// Set basic application transport state.
|
|
Packit Service |
b98cfc |
void TransportToggle(unsigned char T);
|
|
Packit Service |
b98cfc |
void TransportSet(unsigned char T, bool V);
|
|
Packit Service |
b98cfc |
void TransportSend();
|
|
Packit Service |
b98cfc |
// Set bank layer state.
|
|
Packit Service |
b98cfc |
void BankSet(int B);
|
|
Packit Service |
b98cfc |
void BankSend();
|
|
Packit Service |
b98cfc |
// Process masked-write sub-command.
|
|
Packit Service |
b98cfc |
void MaskedWrite(unsigned char *data);
|
|
Packit Service |
b98cfc |
// Reset internal MMC state.
|
|
Packit Service |
b98cfc |
void MmcReset();
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
protected:
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
void SendVolume(usX2Y_volume &V);
|
|
Packit Service |
b98cfc |
struct us428ctls_sharedmem* us428ctls_sharedmem;
|
|
Packit Service |
b98cfc |
bool StateInputMonitor() {
|
|
Packit Service |
b98cfc |
return LightIs(eL_InputMonitor);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
// Set the wheel differential.
|
|
Packit Service |
b98cfc |
void WheelDelta(int W);
|
|
Packit Service |
b98cfc |
// Set the wheel differential.
|
|
Packit Service |
b98cfc |
void WheelStep(int dW);
|
|
Packit Service |
b98cfc |
// Set the wheel shuttle speed.
|
|
Packit Service |
b98cfc |
void WheelShuttle(int dW);
|
|
Packit Service |
b98cfc |
// Get the curent wheel timecode.
|
|
Packit Service |
b98cfc |
void LocateTimecode(unsigned char *tc);
|
|
Packit Service |
b98cfc |
// Send own MMC masked-write subcommand.
|
|
Packit Service |
b98cfc |
void SendMaskedWrite(unsigned char scmd, int track, bool V);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
usX2Y_volume_t Volume[5];
|
|
Packit Service |
b98cfc |
Cus428_ctls *us428_ctls;
|
|
Packit Service |
b98cfc |
// To hold channel light-mode states.
|
|
Packit Service |
b98cfc |
unsigned char
|
|
Packit Service |
b98cfc |
MuteInputMonitor, *Mute,
|
|
Packit Service |
b98cfc |
SoloInputMonitor, *Solo,
|
|
Packit Service |
b98cfc |
RecInputMonitor, *Rec,
|
|
Packit Service |
b98cfc |
SelectInputMonitor, *Select;
|
|
Packit Service |
b98cfc |
// The current selected bank, maximum number of bank/layers.
|
|
Packit Service |
b98cfc |
int aBank, cBanks;
|
|
Packit Service |
b98cfc |
// Differential wheel tracking.
|
|
Packit Service |
b98cfc |
int W0;
|
|
Packit Service |
b98cfc |
// Some way to convert wheel (absolute) position into hh:mm:ss:ff:fr
|
|
Packit Service |
b98cfc |
int aWheel;
|
|
Packit Service |
b98cfc |
// SET L/R points.
|
|
Packit Service |
b98cfc |
int aWheel_L;
|
|
Packit Service |
b98cfc |
int aWheel_R;
|
|
Packit Service |
b98cfc |
// SET knob state.
|
|
Packit Service |
b98cfc |
bool bSetLocate;
|
|
Packit Service |
b98cfc |
// REC knob state.
|
|
Packit Service |
b98cfc |
bool bSetRecord;
|
|
Packit Service |
b98cfc |
// Last/current transport state.
|
|
Packit Service |
b98cfc |
unsigned char uTransport;
|
|
Packit Service |
b98cfc |
// Shuttle wheel absolute speed.
|
|
Packit Service |
b98cfc |
int aWheelSpeed;
|
|
Packit Service |
b98cfc |
// The official number of faders (channels per bank)
|
|
Packit Service |
b98cfc |
int Y;
|
|
Packit Service |
b98cfc |
};
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
class Cus428StateMixxx: public Cus428State{
|
|
Packit Service |
b98cfc |
public:
|
|
Packit Service |
b98cfc |
Cus428StateMixxx(struct us428ctls_sharedmem* Pus428ctls_sharedmem, int y);
|
|
Packit Service |
b98cfc |
void UserKnobChangedTo(eKnobs K, bool V);
|
|
Packit Service |
b98cfc |
void UserSliderChangedTo(int S, unsigned char New);
|
|
Packit Service |
b98cfc |
void UserWheelChangedTo(E_In84 W, char Diff);
|
|
Packit Service |
b98cfc |
protected:
|
|
Packit Service |
b98cfc |
int focus;
|
|
Packit Service |
b98cfc |
int eq;
|
|
Packit Service |
b98cfc |
};
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
extern Cus428State* OneState;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
#endif
|