home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 13 / AACD13.ISO / AACD / Utilities / ACDPlay / src / V1.6 / asmlib / CD-ROM.h < prev    next >
C/C++ Source or Header  |  1997-11-25  |  10KB  |  229 lines

  1. /*
  2. **      $VER: CD-ROM.h 0.17 (28.7.97)
  3. **      ACDPlay Release 1.49 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 CDxTOC {
  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 read-only und werden von den
  61.  * 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.     CDxTOC     *cdx_TOCData;            /* Zeiger auf ein CDxTOC 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 oder NULL*/
  106.     MsgPort    *cdx_IOPort;
  107.     IOStdReq   *cdx_IORequest;
  108.     MsgPort    *cdx_CDPlayPort;         /* für 2. IORequest, da das "cd.device" */
  109.     IOStdReq   *cdx_CDPlayIORequest;    /* kein asynchrones abspielen beherrscht */
  110.     Library    *cdx_SysBase;            /* ExecBase, um Chip-RAM-Zugriffe zu vermeiden... */
  111.     APTR        cdx_MemStart;
  112.     APTR        cdx_SCSIDataStart;
  113.  
  114.     /* Diese Zeiger können genutzt werden (kann manchmal ganz interessant sein :-)
  115.     *  Achtung: Vorher auf NULL testen (wegen cd-/scsi.device).
  116.     */
  117.     SCSICmd    *cdx_Cmd;
  118.     CDInfo     *cdx_Info;
  119.     QCode      *cdx_QCode;
  120.  
  121.     /* Das hier wird nur beim Öffnen initialisiert.
  122.     */
  123.     char       *cdx_Vendor;             /* Hersteller (z.B. "Toshiba Japan") */
  124.     char        cdx_VendorID[9];        /* Hersteller ID (z.B. "TOSHIBA") */
  125.     char        cdx_Product[17];        /* Produktname */
  126.     char        cdx_Revision[5];        /* Herstellerspezifische Revision */
  127.     char        cdx_Specific[21];       /* 20 Bytes herstellerabhängiges Zeugs (auch ASCII) */
  128. };
  129.  
  130.  
  131. /* Diese Macros dürften bekannt sein ;-)
  132. */
  133. #define base2sec(val) (((val)/75)%60)
  134. #define base2min(val) ((val)/75/60)
  135. #define base2frm(val) (val%75)
  136.  
  137.  
  138. /* Flags für AudioAttr-Struktur
  139. */
  140. #define AUDIOB_SOTC     0
  141. #define AUDIOB_IMMED    1
  142. #define AUDIOF_SOTC     (1<<AUDIOB_SOTC)
  143. #define AUDIOF_IMMED    (1<<AUDIOB_IMMED)
  144.  
  145.  
  146. /* cdx_Flags
  147. */
  148. #define SPECIALB_ATAPI          6   /* "cd.device" wird benutzt */
  149. #define SPECIALF_ATAPI          (1<<SPECIALB_ATAPI)
  150.  
  151. #define SPECIALB_JUSTCLOSED     5   /* für automatisches Open/Close */
  152. #define SPECIALF_JUSTCLOSED     (1<<SPECIALB_JUSTCLOSED)
  153.  
  154. #define SPECIALB_LOCKED         4   /* ob die Schublade verschlossen ist */
  155. #define SPECIALF_LOCKED         (1<<SPECIALB_LOCKED)
  156.  
  157.  
  158. /* Audio Status Codes
  159. */
  160. #define AUDIO_STAT_NOT_VALID    0x00    /* Audio status byte not supported or not valid */
  161. #define AUDIO_STAT_NO_DISK      0x10    /* Medium not present */
  162. #define AUDIO_STAT_PLAYING      0x11    /* Audio play operation in progress */
  163. #define AUDIO_STAT_PAUSED       0x12    /* Audio play operation paused */
  164. #define AUDIO_STAT_COMPLETED    0x13    /* Audio play operation successfully completed
  165.                                          * This value is returned only once! */
  166. #define AUDIO_STAT_STOPPED      0x14    /* Audio play operation stopped due to error
  167.                                          * This value is returned only once! */
  168. #define AUDIO_STAT_NONE         0x15    /* No current audio status to return */
  169.  
  170.  
  171. /* Device Types
  172. */
  173. #define DEVTYPE_DIR_ACCESS      0x00    /* Direct-access device (e.g., magnetic disk) */
  174. #define DEVTYPE_SEQ_ACCESS      0x01    /* Sequential-access device (e.g., magnetic tape) */
  175. #define DEVTYPE_PRINTER         0x02    /* Printer device */
  176. #define DEVTYPE_PROCESSOR       0x03    /* Processor device */
  177. #define DEVTYPE_WRITE_ONCE      0x04    /* Write-once read-multiple device (e.g., some optical disks) */
  178. #define DEVTYPE_CDROM           0x05    /* CD-ROM device */
  179. #define DEVTYPE_SCANNER         0x06    /* Scanner device */
  180. #define DEVTYPE_OPTICAL         0x07    /* Optical memory device (e.g., some optical disks) */
  181. #define DEVTYPE_CHANGER         0x08    /* Medium Changer device (e.g., jukeboxes) */
  182. #define DEVTYPE_COMM            0x09    /* Communications device */
  183. #define DEVTYPE_GFX_1           0x0A    /* Defined by ASC IT8 */
  184. #define DEVTYPE_GFX_2           0x0B    /* (Graphics Pre-Press Devices) */
  185. #define DEVTYPE_RESERVED1       0x0C    /* Reserved */
  186. #define DEVTYPE_RESERVED2       0x0D
  187. #define DEVTYPE_RESERVED3       0x0E
  188. #define DEVTYPE_UNKNOWN         0x1F    /* Unknown or no device type */
  189.  
  190.  
  191. /* Prototypes
  192. */
  193. extern struct CDxRequest *CDOpenDeviceA(register __a0 char *devicename, register __d0 ULONG unitnumber, register __d1 ULONG lun);
  194. extern BOOL CDCloseDeviceA(register __a0 struct CDxRequest *cdx);
  195. extern BOOL CDChangeDeviceA(register __a0 struct CDxRequest *cdx, register __d0 ULONG unitnumber, register __d1 ULONG lun);
  196.  
  197. extern LONG CDTestUnitA(register __a0 struct CDxRequest *cdx);
  198. extern LONG CDUpdateA(register __a0 struct CDxRequest *cdx);
  199. extern LONG CDReadTOCA(register __a0 struct CDxRequest *cdx);
  200. extern LONG CDDoSCSIA(register __a0 struct CDxRequest *cdx, register __a1 APTR Command, register __d0 UWORD Cmdlen, register __d1 LONG Flags);
  201.  
  202. extern LONG CDPauseA(register __a0 struct CDxRequest *cdx, register __d0 BOOL pause);
  203. extern LONG CDEjectA(register __a0 struct CDxRequest *cdx, register __d0 BOOL eject);
  204. extern LONG CDLockA(register __a0 struct CDxRequest *cdx, register __d0 BOOL lock);
  205. extern LONG CDPlayA(register __a0 struct CDxRequest *cdx, register __d0 UBYTE starttrack, register __d1 UBYTE startindex);
  206. extern LONG CDStopA(register __a0 struct CDxRequest *cdx);
  207. extern LONG CDPrevA(register __a0 struct CDxRequest *cdx);
  208. extern LONG CDNextA(register __a0 struct CDxRequest *cdx);
  209. extern LONG CDJumpA(register __a0 struct CDxRequest *cdx, register __d0 LONG address, register __d1 BYTE jumpmode);
  210. extern LONG CDFastModeA(register __a0 struct CDxRequest *cdx, register __d0 UBYTE mode, register __d1 UBYTE vendor);
  211. extern LONG CDVolumeA(register __a0 struct CDxRequest *cdx, register __d0 UBYTE mode);
  212.  
  213.  
  214. /* CDJumpA() kennt folgende Modi:
  215. */
  216. #define JUMPMODE_SEEK_ABS   0   /* seeks to an absolute logical block address */
  217. #define JUMPMODE_SEEK_REL   1   /* seeks relative to current position */
  218. #define JUMPMODE_PLAY_ABS   2   /* starts playing from an absolute logical block address */
  219. #define JUMPMODE_PLAY_REL   3   /* starts playing relative to current position */
  220.  
  221. /* Modi für CDFastModeA():
  222. */
  223. #define FASTMODE_OFF        0
  224. #define FASTMODE_FORWARD    1
  225. #define FASTMODE_BACKWARD   2
  226.  
  227. #define GET_VOLUME  0
  228. #define SET_VOLUME  1
  229.