     /*******************************************************/
    /* Header file for use of the Xetec cdx.device         */
   /*                                                     */
  /*   Revised 6 Feb 91 for release 1.3 of cdx.device    */
 /*    Marty Flickinger          Copyright © 1992 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	/* NEW! */
#define	CD_REMCHANGEINT		21	/* NEW! */
#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	/* NEW! */
#define	CD_PLAYSYNCLSN		47	/* NEW! */


/* ---- Values returned by CD_STATUS ---- */

#define	STS_NODISC	0
#define	STS_STOPPED	1
#define	STS_PLAYING	2
#define	STS_PAUSED	3

/* ---- Values returned by CD_GETDRIVETYPE ---- */

#define TYPE_UNKNOWN	0
#define TYPE_CHINON	1
#define TYPE_SONY	2
#define TYPE_TOSHIBA	3
#define TYPE_NEC	4

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

#define ROUTE_NONE	0
#define ROUTE_LEFT	1
#define	ROUTE_RIGHT	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 */
   UBYTE Index;		/* Index number */
   ULONG DiskPosition;	/* 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

/* ---- 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"
