Blame us428control/usbus428ctldefs.h

Packit Service b98cfc
/* -*- mode:C++; indent-tabs-mode:t; tab-width:8; c-basic-offset: 8 -*- */
Packit Service b98cfc
/*
Packit Service b98cfc
 *
Packit Service b98cfc
 * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
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
#ifdef __cplusplus
Packit Service b98cfc
#include <string.h>
Packit Service b98cfc
extern int verbose;
Packit Service b98cfc
#endif
Packit Service b98cfc
Packit Service b98cfc
enum E_In84 {
Packit Service b98cfc
	eFader0 = 0,
Packit Service b98cfc
	eFader1,
Packit Service b98cfc
	eFader2,
Packit Service b98cfc
	eFader3,
Packit Service b98cfc
	eFader4,
Packit Service b98cfc
	eFader5,
Packit Service b98cfc
	eFader6,
Packit Service b98cfc
	eFader7,
Packit Service b98cfc
	eFaderM,
Packit Service b98cfc
	eTransport,
Packit Service b98cfc
	eModifier = 10,
Packit Service b98cfc
	eFilterSelect,
Packit Service b98cfc
	eSelect,
Packit Service b98cfc
	eMute,
Packit Service b98cfc
Packit Service b98cfc
	eSwitch   = 15,
Packit Service b98cfc
	eWheelGain,
Packit Service b98cfc
	eWheelFreq,
Packit Service b98cfc
	eWheelQ,
Packit Service b98cfc
	eWheelPan,
Packit Service b98cfc
	eWheel    = 20
Packit Service b98cfc
};
Packit Service b98cfc
Packit Service b98cfc
#define T_RECORD   1
Packit Service b98cfc
#define T_PLAY     2
Packit Service b98cfc
#define T_STOP     4
Packit Service b98cfc
#define T_F_FWD    8
Packit Service b98cfc
#define T_REW   0x10
Packit Service b98cfc
#define T_SOLO  0x20
Packit Service b98cfc
#define T_REC   0x40
Packit Service b98cfc
#define T_NULL  0x80
Packit Service b98cfc
Packit Service b98cfc
Packit Service b98cfc
struct us428_ctls{
Packit Service b98cfc
	unsigned char   Fader[9];
Packit Service b98cfc
	unsigned char 	Transport;
Packit Service b98cfc
	unsigned char 	Modifier;
Packit Service b98cfc
	unsigned char 	FilterSelect;
Packit Service b98cfc
	unsigned char 	Select;
Packit Service b98cfc
	unsigned char   Mute;
Packit Service b98cfc
	unsigned char   UNKNOWN;
Packit Service b98cfc
	unsigned char   Switch;
Packit Service b98cfc
	unsigned char   Wheel[5];
Packit Service b98cfc
};
Packit Service b98cfc
Packit Service b98cfc
typedef struct us428_ctls us428_ctls_t;
Packit Service b98cfc
Packit Service b98cfc
typedef struct us428_setByte{
Packit Service b98cfc
	unsigned char Offset,
Packit Service b98cfc
		Value;
Packit Service b98cfc
}us428_setByte_t;
Packit Service b98cfc
Packit Service b98cfc
enum {
Packit Service b98cfc
	eLT_Volume = 0,
Packit Service b98cfc
	eLT_Light
Packit Service b98cfc
};
Packit Service b98cfc
Packit Service b98cfc
typedef struct usX2Y_volume {
Packit Service b98cfc
	unsigned char	Channel,
Packit Service b98cfc
		LH,
Packit Service b98cfc
		LL,
Packit Service b98cfc
		RH,
Packit Service b98cfc
		RL;
Packit Service b98cfc
	unsigned char	Slider;
Packit Service b98cfc
	char		Pan,
Packit Service b98cfc
		Mute;
Packit Service b98cfc
#ifdef __cplusplus
Packit Service b98cfc
public:
Packit Service b98cfc
	void init(unsigned char _Channel) {
Packit Service b98cfc
		memset(this, 0, sizeof(*this));
Packit Service b98cfc
		Channel = _Channel;
Packit Service b98cfc
	}
Packit Service b98cfc
	int Scale(){return 0x40;}
Packit Service b98cfc
Packit Service b98cfc
	void calculate() {
Packit Service b98cfc
		int lPan = (int)Pan * Slider / 0x80;
Packit Service b98cfc
		int ValL = (Slider - lPan) * Scale();
Packit Service b98cfc
		LH = ValL >> 8;
Packit Service b98cfc
		LL = ValL;
Packit Service b98cfc
		int ValR = (Slider + lPan) * Scale();
Packit Service b98cfc
		RH = ValR >> 8;
Packit Service b98cfc
		RL = ValR;
Packit Service b98cfc
		if (2 < verbose)
Packit Service b98cfc
			printf("S=% 3i, P=% 3i, lP=% 3i, VL=%05i, VR=%05i\n", (int)Slider, (int)Pan, (int)lPan, ValL, ValR);
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	void SetTo(unsigned char _Channel, int RawValue){
Packit Service b98cfc
		Slider = RawValue;
Packit Service b98cfc
		Channel = eFaderM == _Channel ? 4 : _Channel;
Packit Service b98cfc
		calculate();
Packit Service b98cfc
	}
Packit Service b98cfc
	void PanTo(int RawValue, bool Grob) {
Packit Service b98cfc
		int NewPan;
Packit Service b98cfc
		if (Grob) {
Packit Service b98cfc
			static int GrobVals[] = {-128, -64, 0, 64, 127};
Packit Service b98cfc
			int i = 4;
Packit Service b98cfc
			while (i >= 0 && GrobVals[i] > Pan)
Packit Service b98cfc
				i--;
Packit Service b98cfc
			if (GrobVals[i] != Pan  &&  RawValue < 0)
Packit Service b98cfc
				i++;
Packit Service b98cfc
Packit Service b98cfc
			if (i >= 0) {
Packit Service b98cfc
				if ((i += RawValue) >= 0  &&  i < 5)
Packit Service b98cfc
					NewPan = GrobVals[i];
Packit Service b98cfc
				else
Packit Service b98cfc
					return;
Packit Service b98cfc
			}
Packit Service b98cfc
Packit Service b98cfc
		} else {
Packit Service b98cfc
			NewPan = Pan + RawValue;
Packit Service b98cfc
		}
Packit Service b98cfc
		if (NewPan < -128  ||  NewPan > 127)
Packit Service b98cfc
			return;
Packit Service b98cfc
		Pan = NewPan;
Packit Service b98cfc
		calculate();
Packit Service b98cfc
	}
Packit Service b98cfc
#endif
Packit Service b98cfc
} usX2Y_volume_t;
Packit Service b98cfc
Packit Service b98cfc
struct us428_lights{
Packit Service b98cfc
	us428_setByte_t Light[7];
Packit Service b98cfc
#ifdef __cplusplus
Packit Service b98cfc
public:
Packit Service b98cfc
	enum eLight{
Packit Service b98cfc
		eL_Select0 = 0,
Packit Service b98cfc
		eL_Rec0 = 8,
Packit Service b98cfc
		eL_Mute0 = 16,
Packit Service b98cfc
		eL_Solo = 24,
Packit Service b98cfc
		eL_InputMonitor = 25,
Packit Service b98cfc
		eL_BankL = 26,
Packit Service b98cfc
		eL_BankR = 27,
Packit Service b98cfc
		eL_Rew = 28,
Packit Service b98cfc
		eL_FFwd = 29,
Packit Service b98cfc
		eL_Play = 30,
Packit Service b98cfc
		eL_Record = 31,
Packit Service b98cfc
		eL_AnalogDigital = 32,
Packit Service b98cfc
		eL_Null = 34,
Packit Service b98cfc
		eL_Low = 36,
Packit Service b98cfc
		eL_LowMid = 37,
Packit Service b98cfc
		eL_HiMid = 38,
Packit Service b98cfc
		eL_High = 39
Packit Service b98cfc
	};
Packit Service b98cfc
	bool LightIs(int L){
Packit Service b98cfc
		return Light[L / 8].Value & (1 << (L % 8));
Packit Service b98cfc
	}
Packit Service b98cfc
	void LightSet(int L, bool Value){
Packit Service b98cfc
		if (Value)
Packit Service b98cfc
			Light[L / 8].Value |= (1 << (L % 8));
Packit Service b98cfc
		else
Packit Service b98cfc
			Light[L / 8].Value &= ~(1 << (L % 8));
Packit Service b98cfc
	}
Packit Service b98cfc
	void init_us428_lights();
Packit Service b98cfc
#endif
Packit Service b98cfc
};
Packit Service b98cfc
typedef struct us428_lights us428_lights_t;
Packit Service b98cfc
Packit Service b98cfc
typedef struct {
Packit Service b98cfc
	char type;
Packit Service b98cfc
	union {
Packit Service b98cfc
		usX2Y_volume_t	vol;
Packit Service b98cfc
		us428_lights_t  lights;
Packit Service b98cfc
	};
Packit Service b98cfc
} us428_p4out_t;
Packit Service b98cfc
Packit Service b98cfc
#define N_us428_ctl_BUFS 16
Packit Service b98cfc
#define N_us428_p4out_BUFS 16
Packit Service b98cfc
struct us428ctls_sharedmem{
Packit Service b98cfc
	us428_ctls_t	CtlSnapShot[N_us428_ctl_BUFS];
Packit Service b98cfc
	int		CtlSnapShotDiffersAt[N_us428_ctl_BUFS];
Packit Service b98cfc
	int		CtlSnapShotLast, CtlSnapShotRed;
Packit Service b98cfc
	us428_p4out_t	p4out[N_us428_p4out_BUFS];
Packit Service b98cfc
	int		p4outLast, p4outSent;
Packit Service b98cfc
};
Packit Service b98cfc
typedef struct us428ctls_sharedmem us428ctls_sharedmem_t;