Blame us428control/usbus428ctldefs.h

Packit 427e91
/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
Packit 427e91
/*
Packit 427e91
 *
Packit 427e91
 * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
Packit 427e91
 *
Packit 427e91
 *   This program is free software; you can redistribute it and/or modify
Packit 427e91
 *   it under the terms of the GNU General Public License as published by
Packit 427e91
 *   the Free Software Foundation; either version 2 of the License, or
Packit 427e91
 *   (at your option) any later version.
Packit 427e91
 *
Packit 427e91
 *   This program is distributed in the hope that it will be useful,
Packit 427e91
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 427e91
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 427e91
 *   GNU General Public License for more details.
Packit 427e91
 *
Packit 427e91
 *   You should have received a copy of the GNU General Public License
Packit 427e91
 *   along with this program; if not, write to the Free Software
Packit 427e91
 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit 427e91
 */
Packit 427e91
Packit 427e91
#ifdef __cplusplus
Packit 427e91
#include <string.h>
Packit 427e91
extern int verbose;
Packit 427e91
#endif
Packit 427e91
Packit 427e91
enum E_In84 {
Packit 427e91
	eFader0 = 0,
Packit 427e91
	eFader1,
Packit 427e91
	eFader2,
Packit 427e91
	eFader3,
Packit 427e91
	eFader4,
Packit 427e91
	eFader5,
Packit 427e91
	eFader6,
Packit 427e91
	eFader7,
Packit 427e91
	eFaderM,
Packit 427e91
	eTransport,
Packit 427e91
	eModifier = 10,
Packit 427e91
	eFilterSelect,
Packit 427e91
	eSelect,
Packit 427e91
	eMute,
Packit 427e91
Packit 427e91
	eSwitch   = 15,
Packit 427e91
	eWheelGain,
Packit 427e91
	eWheelFreq,
Packit 427e91
	eWheelQ,
Packit 427e91
	eWheelPan,
Packit 427e91
	eWheel    = 20
Packit 427e91
};
Packit 427e91
Packit 427e91
#define T_RECORD   1
Packit 427e91
#define T_PLAY     2
Packit 427e91
#define T_STOP     4
Packit 427e91
#define T_F_FWD    8
Packit 427e91
#define T_REW   0x10
Packit 427e91
#define T_SOLO  0x20
Packit 427e91
#define T_REC   0x40
Packit 427e91
#define T_NULL  0x80
Packit 427e91
Packit 427e91
Packit 427e91
struct us428_ctls{
Packit 427e91
	unsigned char   Fader[9];
Packit 427e91
	unsigned char 	Transport;
Packit 427e91
	unsigned char 	Modifier;
Packit 427e91
	unsigned char 	FilterSelect;
Packit 427e91
	unsigned char 	Select;
Packit 427e91
	unsigned char   Mute;
Packit 427e91
	unsigned char   UNKNOWN;
Packit 427e91
	unsigned char   Switch;
Packit 427e91
	unsigned char   Wheel[5];
Packit 427e91
};
Packit 427e91
Packit 427e91
typedef struct us428_ctls us428_ctls_t;
Packit 427e91
Packit 427e91
typedef struct us428_setByte{
Packit 427e91
	unsigned char Offset,
Packit 427e91
		Value;
Packit 427e91
}us428_setByte_t;
Packit 427e91
Packit 427e91
enum {
Packit 427e91
	eLT_Volume = 0,
Packit 427e91
	eLT_Light
Packit 427e91
};
Packit 427e91
Packit 427e91
typedef struct usX2Y_volume {
Packit 427e91
	unsigned char	Channel,
Packit 427e91
		LH,
Packit 427e91
		LL,
Packit 427e91
		RH,
Packit 427e91
		RL;
Packit 427e91
	unsigned char	Slider;
Packit 427e91
	char		Pan,
Packit 427e91
		Mute;
Packit 427e91
#ifdef __cplusplus
Packit 427e91
public:
Packit 427e91
	void init(unsigned char _Channel) {
Packit 427e91
		memset(this, 0, sizeof(*this));
Packit 427e91
		Channel = _Channel;
Packit 427e91
	}
Packit 427e91
	int Scale(){return 0x40;}
Packit 427e91
Packit 427e91
	void calculate() {
Packit 427e91
		int lPan = (int)Pan * Slider / 0x80;
Packit 427e91
		int ValL = (Slider - lPan) * Scale();
Packit 427e91
		LH = ValL >> 8;
Packit 427e91
		LL = ValL;
Packit 427e91
		int ValR = (Slider + lPan) * Scale();
Packit 427e91
		RH = ValR >> 8;
Packit 427e91
		RL = ValR;
Packit 427e91
		if (2 < verbose)
Packit 427e91
			printf("S=% 3i, P=% 3i, lP=% 3i, VL=%05i, VR=%05i\n", (int)Slider, (int)Pan, (int)lPan, ValL, ValR);
Packit 427e91
	}
Packit 427e91
Packit 427e91
	void SetTo(unsigned char _Channel, int RawValue){
Packit 427e91
		Slider = RawValue;
Packit 427e91
		Channel = eFaderM == _Channel ? 4 : _Channel;
Packit 427e91
		calculate();
Packit 427e91
	}
Packit 427e91
	void PanTo(int RawValue, bool Grob) {
Packit 427e91
		int NewPan;
Packit 427e91
		if (Grob) {
Packit 427e91
			static int GrobVals[] = {-128, -64, 0, 64, 127};
Packit 427e91
			int i = 4;
Packit 427e91
			while (i >= 0 && GrobVals[i] > Pan)
Packit 427e91
				i--;
Packit 427e91
			if (GrobVals[i] != Pan  &&  RawValue < 0)
Packit 427e91
				i++;
Packit 427e91
Packit 427e91
			if (i >= 0) {
Packit 427e91
				if ((i += RawValue) >= 0  &&  i < 5)
Packit 427e91
					NewPan = GrobVals[i];
Packit 427e91
				else
Packit 427e91
					return;
Packit 427e91
			}
Packit 427e91
Packit 427e91
		} else {
Packit 427e91
			NewPan = Pan + RawValue;
Packit 427e91
		}
Packit 427e91
		if (NewPan < -128  ||  NewPan > 127)
Packit 427e91
			return;
Packit 427e91
		Pan = NewPan;
Packit 427e91
		calculate();
Packit 427e91
	}
Packit 427e91
#endif
Packit 427e91
} usX2Y_volume_t;
Packit 427e91
Packit 427e91
struct us428_lights{
Packit 427e91
	us428_setByte_t Light[7];
Packit 427e91
#ifdef __cplusplus
Packit 427e91
public:
Packit 427e91
	enum eLight{
Packit 427e91
		eL_Select0 = 0,
Packit 427e91
		eL_Rec0 = 8,
Packit 427e91
		eL_Mute0 = 16,
Packit 427e91
		eL_Solo = 24,
Packit 427e91
		eL_InputMonitor = 25,
Packit 427e91
		eL_BankL = 26,
Packit 427e91
		eL_BankR = 27,
Packit 427e91
		eL_Rew = 28,
Packit 427e91
		eL_FFwd = 29,
Packit 427e91
		eL_Play = 30,
Packit 427e91
		eL_Record = 31,
Packit 427e91
		eL_AnalogDigital = 32,
Packit 427e91
		eL_Null = 34,
Packit 427e91
		eL_Low = 36,
Packit 427e91
		eL_LowMid = 37,
Packit 427e91
		eL_HiMid = 38,
Packit 427e91
		eL_High = 39
Packit 427e91
	};
Packit 427e91
	bool LightIs(int L){
Packit 427e91
		return Light[L / 8].Value & (1 << (L % 8));
Packit 427e91
	}
Packit 427e91
	void LightSet(int L, bool Value){
Packit 427e91
		if (Value)
Packit 427e91
			Light[L / 8].Value |= (1 << (L % 8));
Packit 427e91
		else
Packit 427e91
			Light[L / 8].Value &= ~(1 << (L % 8));
Packit 427e91
	}
Packit 427e91
	void init_us428_lights();
Packit 427e91
#endif
Packit 427e91
};
Packit 427e91
typedef struct us428_lights us428_lights_t;
Packit 427e91
Packit 427e91
typedef struct {
Packit 427e91
	char type;
Packit 427e91
	union {
Packit 427e91
		usX2Y_volume_t	vol;
Packit 427e91
		us428_lights_t  lights;
Packit 427e91
	};
Packit 427e91
} us428_p4out_t;
Packit 427e91
Packit 427e91
#define N_us428_ctl_BUFS 16
Packit 427e91
#define N_us428_p4out_BUFS 16
Packit 427e91
struct us428ctls_sharedmem{
Packit 427e91
	us428_ctls_t	CtlSnapShot[N_us428_ctl_BUFS];
Packit 427e91
	int		CtlSnapShotDiffersAt[N_us428_ctl_BUFS];
Packit 427e91
	int		CtlSnapShotLast, CtlSnapShotRed;
Packit 427e91
	us428_p4out_t	p4out[N_us428_p4out_BUFS];
Packit 427e91
	int		p4outLast, p4outSent;
Packit 427e91
};
Packit 427e91
typedef struct us428ctls_sharedmem us428ctls_sharedmem_t;