/*
**      Maestix Library References  -  V38
**
**      © 1995 Richard Körber
*/

#ifndef LIBRARIES_MAESTIX_H
#define LIBRARIES_MAESTIX_H	(1)

#ifndef EXEC_TYPES_H
#include 'exec/types.h'
#endif

#ifndef UTILITY_TAGITEM_H
#include 'utility/tagitem.h'
#endif

#ifndef EXEC_PORTS_H
#include 'exec/ports.h'
#endif

#ifndef EXEC_LISTS_H
#include 'exec/lists.h'
#endif

#ifndef EXEC_LIBRARIES_H
#include 'exec/libraries.h'
#endif


/* ------------------------------------------------------------------------ */
/*  Generic library informations */


#define MAESTIXVERSION	(39)

struct MaestixBase {
	struct	Library mxb_LibNode;
};


/* ------------------------------------------------------------------------ */
/*  MaestroBase structure */

struct MaestroBase {
	WORD	maba_Dummy;	/* PRIVATE */
};


/* ------------------------------------------------------------------------ */
/*  DataMessage */

struct DataMessage {
	struct	Message dmn_Message;	/* struct Message */
	APTR	dmn_BufPtr;	/* pointer to public buffer memory */
	ULONG	dmn_BufLen;	/* length of buffer memory (bytes) */
};


/* ------------------------------------------------------------------------ */
/*  Tag definitions */

#define _MSTXTAG	(0xCD414553)	/* Maestix tag base ("MAES") */

/*  SetMaestro() tags */

#define MTAG_Input	(_MSTXTAG+0x00)	/* Input? Def. INPUT_STD */
#define MTAG_Output	(_MSTXTAG+0x01)	/* Output? Def. OUTPUT_BYPASS */
#define MTAG_SetCSB	(_MSTXTAG+0x02)	/* Direct CSB access */
#define MTAG_SetUDB	(_MSTXTAG+0x03)	/* Direct UDB access */
#define MTAG_Studio	(_MSTXTAG+0x04)	/* Studio mode? (TRUE/FALSE) */
#define MTAG_CopyProh	(_MSTXTAG+0x05)	/* Copy protection? */
#define MTAG_Emphasis	(_MSTXTAG+0x06)	/* Emphasis */
#define MTAG_Source	(_MSTXTAG+0x07)	/* Source category code */
#define MTAG_Rate	(_MSTXTAG+0x08)	/* Output rate */
#define MTAG_Validity	(_MSTXTAG+0x09)	/* Validity flag (TRUE/FALSE) */
#define MTAG_ResetUDB	(_MSTXTAG+0x0A)	/* Reset UDB */
#define MTAG_ResetLSA	(_MSTXTAG+0x0C)	/* Reset Local Sample Address */

/*  StartRealtime() tags */

#define MTAG_Effect	(_MSTXTAG+0x0D)	/* effect number (see below) */
#define MTAG_A0	(_MSTXTAG+0x0E)	/* parameter -> A0 */
#define MTAG_A1	(_MSTXTAG+0x0F)	/* parameter -> A1 */
#define MTAG_D2	(_MSTXTAG+0x10)	/* parameter -> D2 */
#define MTAG_D3	(_MSTXTAG+0x11)	/* parameter -> D3 */
#define MTAG_CustomCall	(_MSTXTAG+0x12)	/* pointer to custom call */


/* ------------------------------------------------------------------------ */
/*  Tag values for MTAG_Input */

#define INPUT_STD	(0)	/* User selected input */
#define INPUT_OPTICAL	(1)	/* optical input */
#define INPUT_COAXIAL	(2)	/* coaxial input */
#define INPUT_SRC48K	(3)	/* 48kHz internal source */


/* ------------------------------------------------------------------------ */
/*  Tag values for MTAG_Output */

#define OUTPUT_BYPASS	(0)	/* Bypass */
#define OUTPUT_INPUT	(1)	/* from input */
#define OUTPUT_FIFO	(2)	/* from FIFO */


/* ------------------------------------------------------------------------ */
/*  Tag values for MTAG_CopyProh */

#define CPROH_OFF	(0)	/* No protection requested */
#define CPROH_ON	(1)	/* Copy protection requested */
#define CPROH_PROHIBIT	(2)	/* Copy prohibited */
#define CPROH_INPUT	(3)	/* As input */


/* ------------------------------------------------------------------------ */
/*  Tag values for MTAG_Emphasis */

#define EMPH_OFF	(0)	/* no emphasis */
#define EMPH_50us	(1)	/* 50/15µs */
#define EMPH_CCITT	(2)	/* CCITT J.17 (studio only) */
#define EMPH_MANUAL	(3)	/* Manuell (studio only) */
#define EMPH_INPUT	(4)	/* As input */
#define EMPH_ON	(EMPH_50us)


/* ------------------------------------------------------------------------ */
/*  Tag values for MTAG_Source */

#define SRC_INPUT	(0)	/* As input */
#define SRC_CD	(0x01)	/* CD */
#define SRC_DAT	(0x03)	/* DAT */
#define SRC_DSR	(0x0C)	/* DSR */
#define SRC_ADCONV	(0x06)	/* ADC */
#define SRC_INSTR	(0x05)	/* Instrument */


/* ------------------------------------------------------------------------ */
/*  Tag values for MTAG_Rate */

#define RATE_32000	(0)	/* Rate 32000 Hz */
#define RATE_44100	(1)	/* Rate 44100 Hz */
#define RATE_48000	(2)	/* Rate 48000 Hz */
#define RATE_48000MANU	(3)	/* Rate 48000 Hz Manual */
#define RATE_INPUT	(4)	/* As input */


/* ------------------------------------------------------------------------ */
/*  Realtime FX codes */

#define RFX_Muting	(0)	/* mute incoming signal */
#define RFX_Bypass	(1)	/* no manipulation (default) */
#define RFX_ChannelSwap	(2)	/* swap left and right */
#define RFX_LeftOnly	(3)	/* mute right channel */
#define RFX_RightOnly	(4)	/* mute left channel */
#define RFX_Mono	(5)	/* mono */
#define RFX_Surround	(6)	/* surround */
#define RFX_Volume	(7)	/* volume */
				/* MTAG_D2: left volume (0..256) */
				/* MTAG_D3: right volume (0..256) */
#define RFX_Karaoke	(8)	/* filters out the singer */
#define RFX_Foregnd	(9)	/* filters out the surround info */
#define RFX_Spatial	(10)	/* virtual shifting of the speakers */
				/* MTAG_D2: shift factor (0..256) */
				/*          optimum: about 64 */
#define RFX_Echo	(11)	/* echo effect */
				/* MTAG_D2: entry volume (0..256) */
				/* MTAG_D3: decay volume (0..256) */
				/* MTAG_A0: pointer to MRTorus structure */
#define RFX_Mask	(12)	/* mask/quantisize */
				/* MTAG_D2: left mask word */
				/* MTAG_D3: right mask word */
#define RFX_Offset	(13)
				/* MTAG_D2: left offset (32767..-32768) */
				/* MTAG_D3: right offset (32767..-32768) */

/* ------------------------------------------------------------------------ */
/*  Torus structure for RFX_Echo */

struct MRTorus {
	APTR	mrtor_PointerL;	/* Pointer to left data buffer */
	APTR	mrtor_PointerR;	/* Pointer to right data buffer */
	ULONG	mrtor_Size;	/* Size of these buffers (bytes) */
	ULONG	mrtor_Offset;	/* current offset (init with NULL) */
};

/* ------------------------------------------------------------------------ */
/*  GetStatus() values */

#define MSTAT_TFIFO	(0)	/* Transmit FIFO Status    (s.b.) */
#define MSTAT_RFIFO	(1)	/* Receive FIFO Status     (s.b.) */
#define MSTAT_Signal	(2)	/* Signal on input?        (BOOL) */
#define MSTAT_Emphasis	(3)	/* Signal uses emphasis?   (BOOL) */
#define MSTAT_DATsrc	(4)	/* DAT-Source?             (BOOL) */
#define MSTAT_CopyProh	(5)	/* Copy protection?        (BOOL) */
#define MSTAT_Rate	(6)	/* Rate                    (ULONG) */
#define MSTAT_UDB	(7)	/* get current UDB         (UBYTE) */

/*  Values for TFIFO & RFIFO */

#define FIFO_Off	(0)	/* FIFO ist aus */
#define FIFO_Running	(1)	/* FIFO läuft */
#define FIFO_Error	(2)	/* FIFO lief über */

#endif

