home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 13 / AACD13.ISO / AACD / Utilities / ACDPlay / src / V1.6 / pickcdid / CD-ROM.h next >
C/C++ Source or Header  |  1997-04-03  |  9KB  |  215 lines

  1. /*
  2. **      $VER: CD-ROM.h 0.14 (29.3.97)
  3. **      ACDPlay Release 1.43 beta
  4. **
  5. **      Definitions and prototypes for the CD-ROM module for ACDPlay
  6. **
  7. **      (C) Copyright 1997 Martin Kresse and Marc Altmann
  8. **                  All Rights Reserved
  9. */
  10.  
  11.  
  12. /* Eintrag für jeden Track der CD. Entry[0] und Entry[LastTrack+1] haben
  13.  * die Tracknummer 0xAA und beinhalten die Daten der lead-out area, einem
  14.  * Bereich, der hinter dem letzten Track liegt und nicht mehr lesbar ist.
  15.  * Die Bits des CtlAdr-Bytes haben folgende Bedeutung:
  16.  *
  17.  *  Bit           equals zero                   equals one
  18.  * ------------------------------------------------------------------
  19.  *
  20.  *   0       Audio without pre-emphasis    Audio with pre-emphasis
  21.  *   1       Digital copy prohibited       Digital copy permitted
  22.  *   2       Audio track                   Data track
  23.  *   3       Two channel audio             Four channel audio
  24.  *
  25.  */
  26. struct CDTOCEntry {
  27.         UBYTE           reserved1;
  28.         UBYTE           CtlAdr;         /* Sub-channel Q Kontroll Bits */
  29.         UBYTE           Track;          /* Tracknummer */
  30.         UBYTE           reserved2;
  31.         LONG            Address;        /* Adresse vom ersten Blocks dieses Tracks */
  32. };
  33.  
  34. #define QCONTROLB_PREEMPHASIS   0
  35. #define QCONTROLB_COPYSTATUS    1
  36. #define QCONTROLB_DATA          2
  37. #define QCONTROLB_FOURCHANNEL   3
  38.  
  39. #define QCONTROLF_PREEMPHASIS   (1<<QCONTROLB_PREEMPHASIS)
  40. #define QCONTROLF_COPYSTATUS    (1<<QCONTROLB_COPYSTATUS)
  41. #define QCONTROLF_DATA          (1<<QCONTROLB_DATA)
  42. #define QCONTROLF_FOURCHANNEL   (1<<QCONTROLB_FOURCHANNEL)
  43.  
  44.  
  45. /* Diese Struktur wird von CDReadTOCA() gefüllt, und, wenn CDUpdateA()
  46.  * einen Disc-Wechsel mitbekommt
  47.  */
  48. struct CDTOC {
  49.         UBYTE           FirstTrack;         /* Erster Track, muß nicht 1 sein! */
  50.         UBYTE           LastTrack;          /* Letzter Track, max. 99 */
  51.         UBYTE           TrackNum;           /* Anzahl der Tracks */
  52.         UBYTE           FirstAudioTrack;    /* Erster Audiotrack auf der CD oder 0 */
  53.         ULONG           FirstAudioAddress;  /* Adresse des ersten Audiotracks */
  54.         CDTOCEntry      Entry[101];         /* für jeden Track ein Eintrag plus 2xlead-out */
  55.         UBYTE           CDID[20];           /* ID für Diskfiles */
  56. };
  57.  
  58. /* CDxRequest wird von CDOpenDeviceA() zurückgegeben und enthält alle wichtigen
  59.  * Daten über das CD-ROM Laufwerk, Zeiger auf CD-spezifische Strukturen und
  60.  * diverse private Zeiger. ALLE Felder sind eigentlich read-only und werden
  61.  * von den zuständigen Funktionen verändert.
  62.  */
  63. struct CDxRequest {
  64.  
  65.     /* Diese Felder werden von CDUpdateA() aktualisiert
  66.     */
  67.     UBYTE       cdx_CurrentTrack;       /* Aktuelle Tracknummer */
  68.     UBYTE       cdx_CurrentIndex;       /* Aktueller Index im aktuellen Track */
  69.     LONG        cdx_CurrentAbsAddr;     /* Aktuelle Position relativ zum Anfang des Mediums als logical block address */
  70.     LONG        cdx_CurrentRelAddr;     /* Aktuelle Position relativ zum Anfang des aktuellen Tracks als logical block address*/
  71.                                         /* Dieser Wert kann innerhalb einer pre-gap area negativ sein. */
  72.     LONG        cdx_RelRemainBlocks;    /* Verbleibende Blöcke des aktuellen Tracks */
  73.     LONG        cdx_AbsRemainBlocks;    /* Verbleibende Blöcke der ganzen CD */
  74.     ULONG       cdx_TrackLength;        /* Länge des Tracks in Blöcken */
  75.     UBYTE       cdx_AudioStatus;        /* Audio Status Byte */
  76.     UBYTE       cdx_Active;             /* Simplifiziertes Audio Status Byte zwecks CDPlayLib Kompatibilität*/
  77.  
  78.     /* CDGetVolumeA()
  79.     */
  80.     UBYTE       cdx_Volume[4];          /* Lautstärke (0-255) des jeweiligen Kanals */
  81.  
  82.     /* CDOpenDeviceA()
  83.     */
  84.     UBYTE       cdx_DeviceType;         /* Device Type */
  85.     UBYTE       cdx_Unit;               /* Unit */
  86.     UBYTE       cdx_LUN;                /* LUN */
  87.     UBYTE       cdx_reserved1;
  88.     char       *cdx_DeviceName;         /* Devicename */
  89.     UBYTE       cdx_Flags;              /* spezielle, hauptsächlich intern genutzte Flags */
  90.  
  91.     /* Wird von jedem mißglücktem SCSI-Kommando gesetzt.
  92.     */
  93.     UBYTE       cdx_SenseKey;
  94.     UBYTE       cdx_AddSenseCode;
  95.     UBYTE       cdx_AddSenseCodeQual;
  96.  
  97.     /* CDReadTOCA()
  98.     */
  99.     CDTOC      *cdx_TOCData;            /* Zeiger auf ein CDTOC Struktur */
  100.  
  101.     /* Die folgenden Felder sind eigentlich privat... ;-)
  102.     */
  103.     APTR       *cdx_ValidAudioPage;     /* welche Werte der Mode Audio Page verändert werden dürfen */
  104.     UBYTE      *cdx_SCSIData;           /* Datenpuffer */
  105.     UBYTE      *cdx_SCSISense;          /* Mode Sense-Puffer */
  106.     MsgPort    *cdx_IOPort;
  107.     IOStdReq   *cdx_IORequest;
  108.  
  109.     /* Dieser Zeiger kann genutzt werden (kann manchmal ganz interessant sein :-)
  110.     *  Achtung: vorher auf NULL testen (wegen cd.device).
  111.     */
  112.     SCSICmd    *cdx_Cmd;
  113.  
  114.     /* Das hier wird nur beim Öffnen initialisiert.
  115.     */
  116.     char       *cdx_Vendor;             /* Hersteller */
  117.     char        cdx_Product[17];        /* Produktname */
  118.     char        cdx_Revision[5];        /* Herstellerspezifische Revision */
  119.     char        cdx_Specific[21];       /* 20 Bytes herstellerabhängiges Zeugs (auch ASCII) */
  120.     BYTE        cdx_pad;
  121. };
  122.  
  123.  
  124. /* Diese Macros dürften bekannt sein ;-)
  125. */
  126. #define base2sec(val) (((val)/75)%60)
  127. #define base2min(val) ((val)/75/60)
  128. #define base2frm(val) (val%75)
  129.  
  130.  
  131. /* Flags für AudioAttr-Struktur
  132. */
  133. #define AUDIOB_SOTC     0
  134. #define AUDIOB_IMMED    1
  135. #define AUDIOF_SOTC     (1<<AUDIOB_SOTC)
  136. #define AUDIOF_IMMED    (1<<AUDIOB_IMMED)
  137.  
  138.  
  139. /* cdx_Flags
  140. */
  141. #define SPECIALB_JUSTCLOSED     5
  142. #define SPECIALF_JUSTCLOSED     (1<<SPECIALB_JUSTCLOSED)
  143.  
  144.  
  145. /* Audio Status Codes
  146. */
  147. #define AUDIO_STAT_NOT_VALID    0x00    /* Audio status byte not supported or not valid */
  148. #define AUDIO_STAT_NO_DISK      0x10    /* Medium not present */
  149. #define AUDIO_STAT_PLAYING      0x11    /* Audio play operation in progress */
  150. #define AUDIO_STAT_PAUSED       0x12    /* Audio play operation paused */
  151. #define AUDIO_STAT_COMPLETED    0x13    /* Audio play operation successfully completed
  152.                                          * This value is returned only once! */
  153. #define AUDIO_STAT_STOPPED      0x14    /* Audio play operation stopped due to error
  154.                                          * This value is returned only once! */
  155. #define AUDIO_STAT_NONE         0x15    /* No current audio status to return */
  156.  
  157.  
  158. /* Device Types
  159. */
  160. #define DEVTYPE_DIR_ACCESS      0x00    /* Direct-access device (e.g., magnetic disk) */
  161. #define DEVTYPE_SEQ_ACCESS      0x01    /* Sequential-access device (e.g., magnetic tape) */
  162. #define DEVTYPE_PRINTER         0x02    /* Printer device */
  163. #define DEVTYPE_PROCESSOR       0x03    /* Processor device */
  164. #define DEVTYPE_WRITE_ONCE      0x04    /* Write-once read-multiple device (e.g., some optical disks) */
  165. #define DEVTYPE_CDROM           0x05    /* CD-ROM device */
  166. #define DEVTYPE_SCANNER         0x06    /* Scanner device */
  167. #define DEVTYPE_OPTICAL         0x07    /* Optical memory device (e.g., some optical disks) */
  168. #define DEVTYPE_CHANGER         0x08    /* Medium Changer device (e.g., jukeboxes) */
  169. #define DEVTYPE_COMM            0x09    /* Communications device */
  170. #define DEVTYPE_GFX_1           0x0A    /* Defined by ASC IT8 */
  171. #define DEVTYPE_GFX_2           0x0B    /* (Graphics Pre-Press Devices) */
  172. #define DEVTYPE_RESERVED1       0x0C    /* Reserved */
  173. #define DEVTYPE_RESERVED2       0x0D
  174. #define DEVTYPE_RESERVED3       0x0E
  175. #define DEVTYPE_UNKNOWN         0x1F    /* Unknown or no device type */
  176.  
  177.  
  178. /* Prototypes
  179. */
  180. extern struct CDxRequest *CDOpenDeviceA(register __a0 char *devicename, register __d0 ULONG unitnumber, register __d1 ULONG lun);
  181. extern BOOL CDCloseDeviceA(register __a0 struct CDxRequest *cdx);
  182. extern BOOL CDChangeDeviceA(register __a0 struct CDxRequest *cdx, register __d0 ULONG unitnumber, register __d1 ULONG lun);
  183.  
  184. extern LONG CDTestUnitA(register __a0 struct CDxRequest *cdx);
  185. extern LONG CDUpdateA(register __a0 struct CDxRequest *cdx);
  186. extern LONG CDReadTOCA(register __a0 struct CDxRequest *cdx);
  187.  
  188. extern LONG CDPauseA(register __a0 struct CDxRequest *cdx, register __d0 BOOL pause);
  189. extern LONG CDEjectA(register __a0 struct CDxRequest *cdx, register __d0 BOOL eject);
  190. extern LONG CDLockA(register __a0 struct CDxRequest *cdx, register __d0 BOOL lock);
  191. extern LONG CDPlayA(register __a0 struct CDxRequest *cdx, register __d0 UBYTE starttrack, register __d1 UBYTE startindex);
  192. extern LONG CDStopA(register __a0 struct CDxRequest *cdx);
  193. extern LONG CDPrevA(register __a0 struct CDxRequest *cdx);
  194. extern LONG CDNextA(register __a0 struct CDxRequest *cdx);
  195. extern LONG CDJumpA(register __a0 struct CDxRequest *cdx, register __d0 LONG address, register __d1 BYTE jumpmode);
  196. extern LONG CDFastModeA(register __a0 struct CDxRequest *cdx, register __d0 UBYTE mode, register __d1 UBYTE vendor);
  197. extern LONG CDVolumeA(register __a0 struct CDxRequest *cdx, register __d0 UBYTE mode);
  198.  
  199.  
  200. /* CDJumpA() kennt folgende Modi:
  201. */
  202. #define JUMPMODE_SEEK_ABS   0   /* seeks to an absolute logical block address */
  203. #define JUMPMODE_SEEK_REL   1   /* seeks relative to current position */
  204. #define JUMPMODE_PLAY_ABS   2   /* starts playing from an absolute logical block address */
  205. #define JUMPMODE_PLAY_REL   3   /* starts playing relative to current position */
  206.  
  207. /* Modi für CDFastModeA():
  208. */
  209. #define FASTMODE_OFF        0
  210. #define FASTMODE_FORWARD    1
  211. #define FASTMODE_BACKWARD   2
  212.  
  213. #define GET_VOLUME  0
  214. #define SET_VOLUME  1
  215.