include/devices/cd.h

[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]
#ifndef DEVICES_CD_H
#define DEVICES_CD_H
/*
**	$VER: cd.h 1.11 (12.8.1993)
**	Includes Release 44.1
**
**	cd.device include file
**
**	(C) Copyright 1992-1999 Amiga, Inc.
**	 All Rights Reserved
*/
#include <exec/types.h>
#include <exec/nodes.h>
/**************************************************************************
 *									 *
 * CD Commands							 *
 *									 *
 **************************************************************************/
#define CD_RESET	 1
#define CD_READ	 2
#define CD_WRITE	 3
#define CD_UPDATE	 4
#define CD_CLEAR	 5
#define CD_STOP	 6
#define CD_START	 7
#define CD_FLUSH	 8
#define CD_MOTOR	 9
#define CD_SEEK	 10
#define CD_FORMAT	 11
#define CD_REMOVE	 12
#define CD_CHANGENUM	 13
#define CD_CHANGESTATE	 14
#define CD_PROTSTATUS	 15
#define CD_GETDRIVETYPE 18
#define CD_GETNUMTRACKS 19
#define CD_ADDCHANGEINT 20
#define CD_REMCHANGEINT 21
#define CD_GETGEOMETRY	 22
#define CD_EJECT	 23
#define CD_INFO	 32
#define CD_CONFIG	 33
#define CD_TOCMSF	 34
#define CD_TOCLSN	 35
#define CD_READXL	 36
#define CD_PLAYTRACK	 37
#define CD_PLAYMSF	 38
#define CD_PLAYLSN	 39
#define CD_PAUSE	 40
#define CD_SEARCH	 41
#define CD_QCODEMSF	 42
#define CD_QCODELSN	 43
#define CD_ATTENUATE	 44
#define CD_ADDFRAMEINT	 45
#define CD_REMFRAMEINT	 46
/**************************************************************************
 *									 *
 * Device Driver Error Codes						 *
 *									 *
 **************************************************************************/
#define CDERR_OPENFAIL	 (-1) /* device/unit failed to open	 */
#define CDERR_ABORTED	 (-2) /* request terminated early		 */
#define CDERR_NOCMD	 (-3) /* command not supported by device	 */
#define CDERR_BADLENGTH (-4) /* invalid length (IO_LENGTH/IO_OFFSET) */
#define CDERR_BADADDRESS (-5) /* invalid address (IO_DATA misaligned) */
#define CDERR_UNITBUSY	 (-6) /* device opens ok, but unit is busy	 */
#define CDERR_SELFTEST	 (-7) /* hardware failed self-test		 */
#define CDERR_NotSpecified 20 /* general catchall			 */
#define CDERR_NoSecHdr	 21 /* couldn't even find a sector	 */
#define CDERR_BadSecPreamble 22 /* sector looked wrong		 */
#define CDERR_BadSecID	 23 /* ditto				 */
#define CDERR_BadHdrSum 24 /* header had incorrect checksum	 */
#define CDERR_BadSecSum 25 /* data had incorrect checksum	 */
#define CDERR_TooFewSecs 26 /* couldn't find enough sectors	 */
#define CDERR_BadSecHdr 27 /* another "sector looked wrong"	 */
#define CDERR_WriteProt 28 /* can't write to a protected disk	 */
#define CDERR_NoDisk	 29 /* no disk in the drive		 */
#define CDERR_SeekError 30 /* couldn't find track 0		 */
#define CDERR_NoMem	 31 /* ran out of memory			 */
#define CDERR_BadUnitNum 32 /* asked for a unit > NUMUNITS	 */
#define CDERR_BadDriveType 33 /* not a drive cd.device understands	 */
#define CDERR_DriveInUse 34 /* someone else allocated the drive	 */
#define CDERR_PostReset 35 /* user hit reset; awaiting doom	 */
#define CDERR_BadDataType 36 /* data on disk is wrong type	 */
#define CDERR_InvalidState 37 /* invalid cmd under current conditions */
#define CDERR_Phase	 42 /* illegal or unexpected SCSI phase	 */
#define CDERR_NoBoard	 50 /* open failed for non-existant board */
/**************************************************************************
 *									 *
 * Configuration							 *
 *									 *
 *	 The drive is configured by TagList items defined as follows:	 *
 *									 *
 **************************************************************************/
#define TAGCD_PLAYSPEED	0x0001
#define TAGCD_READSPEED	0x0002
#define TAGCD_READXLSPEED	0x0003
#define TAGCD_SECTORSIZE	0x0004
#define TAGCD_XLECC		0x0005
#define TAGCD_EJECTRESET	0x0006
/**************************************************************************
 *									 *
 * Information								 *
 *									 *
 *	Information/Status structure describes current speed settings	 *
 *	for read and play commands, sector size, audio attenuation	 *
 *	precision, and drive status.					 *
 *									 *
 **************************************************************************/
struct CDInfo {
			 /*				 Default	 */
 UWORD PlaySpeed;	 /* Audio play speed	 (75)	 */
 UWORD ReadSpeed;	 /* Data-rate of CD_READ command (Max)	 */
 UWORD ReadXLSpeed; /* Data-rate of CD_READXL command (75)	 */
 UWORD SectorSize; /* Number of bytes per sector (2048)	 */
 UWORD XLECC;	 /* CDXL ECC enabled/disabled		 */
 UWORD EjectReset; /* Reset on eject enabled/disabled		 */
 UWORD Reserved1[4]; /* Reserved for future expansion		 */
 UWORD MaxSpeed;	 /* Maximum speed drive can handle (75, 150) */
 UWORD AudioPrecision; /* 0 = no attenuator, 1 = mute only,	 */
			 /* other = (# levels - 1)			 */
 UWORD Status;	 /* See flags below				 */
 UWORD Reserved2[4]; /* Reserved for future expansion		 */
 };
/* Flags for Status */
#define CDSTSB_CLOSED	 0 /* Drive door is closed			 */
#define CDSTSB_DISK	 1 /* A disk has been detected			 */
#define CDSTSB_SPIN	 2 /* Disk is spinning (motor is on)		 */
#define CDSTSB_TOC	 3 /* Table of contents read. Disk is valid.	 */
#define CDSTSB_CDROM	 4 /* Track 1 contains CD-ROM data		 */
#define CDSTSB_PLAYING	 5 /* Audio is playing				 */
#define CDSTSB_PAUSED	 6 /* Pause mode (pauses on play command)	 */
#define CDSTSB_SEARCH	 7 /* Search mode (Fast Forward/Fast Reverse)	 */
#define CDSTSB_DIRECTION 8 /* Search direction (0 = Forward, 1 = Reverse) */
#define CDSTSF_CLOSED	 0x0001
#define CDSTSF_DISK	 0x0002
#define CDSTSF_SPIN	 0x0004
#define CDSTSF_TOC	 0x0008
#define CDSTSF_CDROM	 0x0010
#define CDSTSF_PLAYING	 0x0020
#define CDSTSF_PAUSED	 0x0040
#define CDSTSF_SEARCH	 0x0080
#define CDSTSF_DIRECTION 0x0100
/* Modes for CD_SEARCH */
#define CDMODE_NORMAL	0	 /* Normal play at current play speed	 */
#define CDMODE_FFWD	1	 /* Fast forward play (skip-play forward)*/
#define CDMODE_FREV	2	 /* Fast reverse play (skip-play reverse)*/
/**************************************************************************
 *									 *
 * Position Information						 *
 *									 *
 *	Position information can be described in two forms: MSF and LSN *
 *	form. MSF (Minutes, Seconds, Frames) form is a time encoding.	 *
 *	LSN (Logical Sector Number) form is frame (sector) count.	 *
 *	The desired form is selected using the io_Flags field of the	 *
 *	IOStdReq structure. The flags and the union are described	 *
 *	below.								 *
 *									 *
 **************************************************************************/
struct RMSF {
 UBYTE Reserved;	 /* Reserved (always zero) */
 UBYTE Minute;	 /* Minutes (0-72ish) */
 UBYTE Second;	 /* Seconds (0-59)	 */
 UBYTE Frame;	 /* Frame (0-74)	 */
 };
union LSNMSF {
 struct RMSF MSF;	 /* Minute, Second, Frame */
 ULONG LSN;	 /* Logical Sector Number */
 };
/**************************************************************************
 *									 *
 * CD Transfer Lists							 *
 *									 *
 *	A CDXL node is a double link node; however only single linkage	 *
 *	is used by the device driver. If you wish to construct a	 *
 *	transfer list manually, it is only neccessary to define the	 *
 *	mln_Succ pointer of the MinNode. You may also use the Exec	 *
 *	list functions by defining a List or MinList structure and by	 *
 *	using the AddHead/AddTail functions to create the list. This	 *
 *	will create a double-linked list. Although a double-linked	 *
 *	list is not required by the device driver, you may wish use it	 *
 *	for your own purposes.	Don't forget to initialize the		 *
 *	the List/MinList before using it!				 *
 *									 *
 **************************************************************************/
struct	CDXL {
 struct MinNode Node;	 /* double linkage		 */
 char	 *Buffer;	 /* data destination (word aligned) */
 LONG	 Length;	 /* must be even # bytes		 */
 LONG	 Actual;	 /* bytes transferred		 */
 APTR	 IntData;	 /* interrupt server data segment */
 VOID	 (*IntCode)(); /* interrupt server code entry	 */
 };
/**************************************************************************
 *									 *
 * CD Table of Contents						 *
 *									 *
 *	The CD_TOC command returns an array of CDTOC entries.		 *
 *	Entry zero contains summary information describing how many	 *
 *	tracks the disk has and the play-time of the disk.		 *
 *	Entries 1 through N (N = Number of tracks on disk) contain	 *
 *	information about the track.					 *
 *									 *
 **************************************************************************/
struct TOCSummary {
 UBYTE	 FirstTrack; /* First track on disk (always 1)		 */
 UBYTE	 LastTrack; /* Last track on disk			 */
 union LSNMSF LeadOut; /* Beginning of lead-out track (end of disk) */
 };
struct TOCEntry {
 UBYTE	 CtlAdr; /* Q-Code info		 */
 UBYTE	 Track; /* Track number		 */
 union LSNMSF Position; /* Start position of this track */
 };
union CDTOC {
 struct TOCSummary Summary;	/* First entry (0) is summary information */
 struct TOCEntry Entry;	/* Entries 1-N are track entries	 */
 };
/**************************************************************************
 *									 *
 * Q-Code Packets							 *
 *									 *
 *	Q-Code packets are only returned when audio is playing.	 *
 *	Currently, only position packets are returned (ADR_POSITION)	 *
 *	The other ADR_ types are almost never encoded on the disk	 *
 *	and are of little use anyway. To avoid making the QCode	 *
 *	structure a union, these other ADR_ structures are not defined. *
 *									 *
 **************************************************************************/
struct QCode {
 UBYTE	 CtlAdr;	/* Data type / QCode type	 */
 UBYTE	 Track;	/* Track number		 */
 UBYTE	 Index;	/* Track subindex number	 */
 UBYTE	 Zero;		/* The "Zero" byte of Q-Code packet */
 union LSNMSF TrackPosition; /* Position from start of track */
 union LSNMSF DiskPosition;	/* Position from start of disk	 */
 };
#define CTLADR_CTLMASK 0xF0 /* Control field */
#define CTL_CTLMASK 0xD0 /* To be ANDed with CtlAdr before compared */
#define CTL_2AUD 0x00 /* 2 audio channels without preemphasis	 */
#define CTL_2AUDEMPH 0x10 /* 2 audio channels with preemphasis	 */
#define CTL_4AUD 0x80 /* 4 audio channels without preemphasis	 */
#define CTL_4AUDEMPH 0x90 /* 4 audio channels with preemphasis	 */
#define CTL_DATA 0x40 /* CD-ROM Data				 */
#define CTL_COPYMASK 0x20 /* To be ANDed with CtlAdr before compared */
#define CTL_COPY 0x20 /* When true, this audio/data can be copied */
#define CTLADR_ADRMASK 0x0F /* Address field				 */
#define ADR_POSITION 0x01 /* Q-Code is position information	 */
#define ADR_UPC 0x02 /* Q-Code is UPC information (not used)	 */
#define ADR_ISRC 0x03 /* Q-Code is ISRC (not used)		 */
#define ADR_HYBRID 0x05 /* This disk is a hybrid disk		 */
#endif

[Back to Amiga Developer Docs]

AltStyle によって変換されたページ (->オリジナル) /