     /*******************************************************/
    /* Header file for use of the Xetec cdx.device         */
   /*                                                     */
  /*   Revised   1 Jun 93 for release 1.9 of cdx.device  */
 /*    Marty Flickinger          Copyright © 1993 Xetec */
/*******************************************************/


/* ---- Useful Device Commands ---- */

#define	CD_READ			2
#define	CD_SEEK			10
#define	CD_CHANGENUM		13
#define	CD_CHANGESTATE		14
#define	CD_PROTSTATUS		15
#define	CD_TRACKLOCMSF		16
#define	CD_TRACKLOCLSN		17
#define	CD_GETDRIVETYPE		18
#define	CD_NUMTRACKS		19
#define	CD_ADDCHANGEINT		20
#define	CD_REMCHANGEINT		21
#define	CD_CHECKLOCMSF		22
#define	CD_CHECKLOCLSN		23
#define	CD_NUMSECTORS		24
#define	CD_LEADOUT		25
#define	CD_SECTORSIZE		26
#define	CD_ROUTECHANNELS	27
#define	CD_GETROUTE		28
#define	CD_DIRECT		29
#define	CD_ISROM		30
#define	CD_ALLOCATE		31
#define	CD_FREE			32
#define	CD_CURRENTLOCMSF	33
#define	CD_CURRENTLOCLSN	34
#define	CD_STATUS		35
#define	CD_PLAYTRACKS		36
#define	CD_PLAYSEGMSF		37
#define	CD_PLAYSEGLSN		38
#define	CD_PAUSE		39
#define	CD_RESUME		40
#define	CD_STOPAUDIO		41
#define	CD_SKIPFWD		42
#define	CD_SKIPRVS		43
#define	CD_EJECTBUTTON		44
#define	CD_EJECT		45
#define	CD_PLAYSYNCMSF		46
#define	CD_PLAYSYNCLSN		47
#define	CD_SETVOLUME		48
#define	CD_GETVOLUME		49
#define	CD_ADDCHANGER		50
#define	CD_REMCHANGER		51
#define	CD_DISCCHANGE		52
#define	CD_PRIVATE1		53 /* For internal use only! */
#define	CD_PRIVATE2		54 /* For internal use only! */
#define	CD_PRIVATE3		55 /* For internal use only! */
#define	CD_SELECTDISC		56
#define	CD_SETBLOCKSIZE		57

/* ---- Drive States -- returned by CD_STATUS ---- */

#define	STS_NODISC	0
#define	STS_STOPPED	1
#define	STS_PLAYING	2
#define	STS_PAUSED	3
#define	STS_ENDED	4	/* CDTV only */
#define	STS_BADDISC	5

/* ---- Audio drive classes -- returned by CD_GETDRIVETYPE ---- */

#define TYPE_UNKNOWN		0		/* No audio support */
#define TYPE_CHINON		1
#define TYPE_SONY1		2
#define TYPE_SONY2		3
#define TYPE_TOSHIBA		4
#define TYPE_NEC		5
#define TYPE_PIONEER		6
#define TYPE_TEXEL		7
#define TYPE_TOSHIBA2		8
#define TYPE_SCSI2		9
#define TYPE_SONY3		10		/* Added release 1.63 */
#define TYPE_PHILIPS		11
#define TYPE_MATSUSHITA		12
#define TYPE_NEC2		13
#define TYPE_DENON		14
#define TYPE_HITACHI		15
#define TYPE_LMS		16

#define NUMDRIVETYPES		17

/* ---- Values used by CD_GETROUTE & CD_ROUTECHANNELS ---- */

#define ROUTE_NONE	0
#define ROUTE_LEFT	1
#define ROUTE_RIGHT	2

/* ---- Values used by CD_ADDCHANGER ---- */

#define DCI_INSERTIONS	1
#define DCI_REMOVALS	2

/* ---- Disc "Table Of Contents" Structure ---- */

struct   CDTOC {
   UBYTE AddrCtrl;	/* SubQ info */
   UBYTE Track;		/* Track # (or 1st track) */
   ULONG Position;	/* MSF or LSN */
};


/* ---- Disc Position/Info (SubQ) Structure ---- */

struct   SubQ {
   UBYTE Status;	/* Drive status */
   UBYTE AddrCtrl;	/* SubQ flags -- see below */
   UBYTE Track;		/* Track number (hex) */
   UBYTE Index;		/* Index number (hex) */
   ULONG DiscPosition;	/* Position from start of disc */
   ULONG TrackPosition;	/* Position from start of track */
   UBYTE UPCcode[10];	/* UPC code in BCD (all FF's if none) */
};


/* ---- AddrCtrl Flags ---- */

#define	PREEMPH		0x01
#define	COPYOK		0x02
#define	DATATRK		0x04
#define	FOURCHAN	0x08


/* ---- Error Codes ---- */

#define	CDERR_NoDrive		44
#define	CDERR_Failed		45
#define	CDERR_ForeignDrive	70
#define	CDERR_InUse		71
#define	CDERR_NoDisc		72
#define	CDERR_Illegal		73
#define	CDERR_Stopped		74
#define	CDERR_BadTrackNum	75
#define	CDERR_DataTrack		76
#define	CDERR_BadLocation	77
#define	CDERR_BadLength		78
#define	CDERR_DiscUnreadable	79
#define	CDERR_MSFformat		80
#define	CDERR_NoData		81
#define	CDERR_NotSupported	82

/* ---- Macros to Deal with MSF Time Values ---- */

#define	MSF_MIN(x)	((x>>16) & 0xFF)
#define	MSF_SEC(x)	((x>>8) & 0xFF)
#define	MSF_FRM(x)	(x & 0xFF)


#define	CDXNAME		"cdx.device"
