Blame us428control/Cus428State.h

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