cdda.h

Go to the documentation of this file.
00001 /*
00002   $Id: cdda.h,v 1.26 2006/02/16 20:09:27 rocky Exp $
00003 
00004   Copyright (C) 2004, 2005, 2006 Rocky Bernstein <rocky@panix.com>
00005   Copyright (C) 2001 Xiph.org
00006   and Heiko Eissfeldt heiko@escape.colossus.de
00007 
00008   This program is free software; you can redistribute it and/or modify
00009   it under the terms of the GNU General Public License as published by
00010   the Free Software Foundation; either version 2 of the License, or
00011   (at your option) any later version.
00012   
00013   This program is distributed in the hope that it will be useful,
00014   but WITHOUT ANY WARRANTY; without even the implied warranty of
00015   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016   GNU General Public License for more details.
00017   
00018   You should have received a copy of the GNU General Public License
00019   along with this program; if not, write to the Free Software
00020   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00021 */
00029 #ifndef _CDDA_INTERFACE_H_
00030 #define _CDDA_INTERFACE_H_
00031 
00032 #include <cdio/cdio.h>
00033 
00034 #ifdef __cplusplus
00035 extern "C" {
00036 #endif /* __cplusplus */
00037 
00041 typedef struct cdrom_paranoia_s cdrom_paranoia_t;
00042 typedef struct cdrom_drive_s   cdrom_drive_t;
00043 
00047 extern enum paranoia_cdda_enums {
00048   CDDA_MESSAGE_FORGETIT = 0,
00049   CDDA_MESSAGE_PRINTIT  = 1,
00050   CDDA_MESSAGE_LOGIT    = 2,
00051   CD_FRAMESAMPLES       = CDIO_CD_FRAMESIZE_RAW / 4,
00052   MAXTRK                = (CDIO_CD_MAX_TRACKS+1)
00053 } paranoia_cdda_enums;
00054   
00055 #define CD_FRAMESAMPLES (CDIO_CD_FRAMESIZE_RAW / 4)
00056 
00057 #include <signal.h>
00058 
00062 #define MAXTRK (CDIO_CD_MAX_TRACKS+1)
00063 
00065 typedef struct TOC_s {  
00066   unsigned char bTrack;
00067   int32_t       dwStartSector;
00068 } TOC_t;
00069 
00071 #define TOC TOC_t
00072 
00073 #define CDDA_MESSAGE_FORGETIT 0
00074 #define CDDA_MESSAGE_PRINTIT 1
00075 #define CDDA_MESSAGE_LOGIT 2
00076 
00078 struct cdrom_drive_s {
00079 
00080   CdIo_t *p_cdio;
00081   int opened; 
00083   char *cdda_device_name;
00084 
00085   char *drive_model;
00086   int drive_type;
00087   int bigendianp; 
00091   int nsectors;
00092 
00093   int cd_extra;   
00099   bool b_swap_bytes;  
00102   track_t tracks;
00103   TOC_t disc_toc[MAXTRK]; 
00108   lsn_t audio_first_sector;
00109   lsn_t audio_last_sector;
00110 
00111   int errordest;
00112   int messagedest;
00113   char *errorbuf;
00114   char *messagebuf;
00115 
00116   /* functions specific to particular drives/interfaces */
00117 
00118   int  (*enable_cdda)  (cdrom_drive_t *d, int onoff);
00119   int  (*read_toc)     (cdrom_drive_t *d);
00120   long (*read_audio)   (cdrom_drive_t *d, void *p, lsn_t begin, 
00121                        long sectors);
00122   int  (*set_speed)    (cdrom_drive_t *d, int speed);
00123   int error_retry;
00124   int report_all;
00125 
00126   int is_atapi;
00127   int is_mmc;
00128 
00129   int i_test_flags; 
00134 };
00135 
00136 
00142 extern enum paranoia_jitter_enums {
00143   CDDA_TEST_JITTER_SMALL   = 1,
00144   CDDA_TEST_JITTER_LARGE   = 2,
00145   CDDA_TEST_JITTER_MASSIVE = 3,
00146   CDDA_TEST_FRAG_SMALL     = (1<<3),
00147   CDDA_TEST_FRAG_LARGE     = (2<<3),
00148   CDDA_TEST_FRAG_MASSIVE   = (3<<3),
00149   CDDA_TEST_UNDERRUN       = 64 
00150 } paranoia_jitter_enums;
00151   
00156 #define CDDA_TEST_JITTER_SMALL      1 
00157 #define CDDA_TEST_JITTER_LARGE      2 
00158 #define CDDA_TEST_JITTER_MASSIVE    3 
00159 
00165 #define CDDA_TEST_ALWAYS_JITTER     4 
00166 
00168 #define CDDA_TEST_FRAG_SMALL   (1<<3)
00169 #define CDDA_TEST_FRAG_LARGE   (2<<3)
00170 #define CDDA_TEST_FRAG_MASSIVE (3<<3)
00171 
00173 #define CDDA_TEST_UNDERRUN         64 
00174 
00175 #if TESTING_IS_FINISHED
00176 
00178 #define CDDA_TEST_SCRATCH         128
00179 #undef  CDDA_TEST_BOGUS_BYTES     256
00180 #undef  CDDA_TEST_DROPDUPE_BYTES  512
00181 #endif /* TESTING_IS_FINISHED */
00182 
00189 extern cdrom_drive_t *cdio_cddap_find_a_cdrom(int messagedest, 
00190                                               char **ppsz_message);
00191 
00196 extern cdrom_drive_t *cdio_cddap_identify(const char *psz_device, 
00197                                           int messagedest, 
00198                                           char **ppsz_message);
00199 
00206 cdrom_drive_t *cdio_cddap_identify_cdio(CdIo_t *p_cdio, 
00207                                         int messagedest, char **ppsz_messages);
00208 
00211 extern int     cdio_cddap_speed_set(cdrom_drive_t *d, int speed);
00212 extern void    cdio_cddap_verbose_set(cdrom_drive_t *d, int err_action, 
00213                                       int mes_action);
00214 extern char   *cdio_cddap_messages(cdrom_drive_t *d);
00215 extern char   *cdio_cddap_errors(cdrom_drive_t *d);
00216 
00227 bool cdio_cddap_close_no_free_cdio(cdrom_drive_t *d);
00228 
00239 extern int     cdio_cddap_close(cdrom_drive_t *d);
00240 
00241 extern int     cdio_cddap_open(cdrom_drive_t *d);
00242 
00243 extern long    cdio_cddap_read(cdrom_drive_t *d, void *p_buffer,
00244                                lsn_t beginsector, long sectors);
00245 
00247 extern lsn_t   cdio_cddap_track_firstsector(cdrom_drive_t *d, 
00248                                       track_t i_track);
00249 
00252 extern lsn_t   cdio_cddap_track_lastsector(cdrom_drive_t *d, track_t i_track);
00253 
00255 extern track_t cdio_cddap_tracks(cdrom_drive_t *d);
00256 
00262 extern int     cdio_cddap_sector_gettrack(cdrom_drive_t *d, lsn_t lsn);
00263 
00268 extern int     cdio_cddap_track_channels(cdrom_drive_t *d, track_t i_track);
00269 
00271 extern int     cdio_cddap_track_audiop(cdrom_drive_t *d, track_t i_track);
00272 
00274 extern int     cdio_cddap_track_copyp(cdrom_drive_t *d, track_t i_track);
00275 
00279 extern int     cdio_cddap_track_preemp(cdrom_drive_t *d, track_t i_track);
00280 
00282 extern lsn_t   cdio_cddap_disc_firstsector(cdrom_drive_t *d);
00283 
00287 extern lsn_t   cdio_cddap_disc_lastsector(cdrom_drive_t *d);
00288 
00303 extern int data_bigendianp(cdrom_drive_t *d);
00304 
00307 typedef enum {
00308   TR_OK =            0,
00309   TR_EWRITE =        1  ,
00310   TR_EREAD =         2  ,
00311   TR_UNDERRUN =      3  ,
00312   TR_OVERRUN =       4  ,
00313   TR_ILLEGAL =       5  ,
00314   TR_MEDIUM =        6  ,
00315   TR_BUSY =          7  ,
00316   TR_NOTREADY =      8  ,
00317   TR_FAULT =         9  ,
00318   TR_UNKNOWN =      10  ,
00319   TR_STREAMING =    11  ,
00320 } transport_error_t;
00321   
00322 
00323 #ifdef NEED_STRERROR_TR
00324 const char *strerror_tr[]={
00325   "Success",
00326   "Error writing packet command to device",
00327   "Error reading command from device",
00328   "SCSI packet data underrun (too little data)",
00329   "SCSI packet data overrun (too much data)",
00330   "Illegal SCSI request (rejected by target)",
00331   "Medium reading data from medium",
00332   "Device busy",
00333   "Device not ready",
00334   "Target hardware fault",
00335   "Unspecified error",
00336   "Drive lost streaming"
00337 };
00338 #endif /*NEED_STERROR_TR*/
00339 
00367 #ifndef DO_NOT_WANT_PARANOIA_COMPATIBILITY
00368 
00369 #define cdda_find_a_cdrom       cdio_cddap_find_a_cdrom
00370 #define cdda_identify           cdio_cddap_identify
00371 #define cdda_speed_set          cdio_cddap_speed_set
00372 #define cdda_verbose_set        cdio_cddap_verbose_set
00373 #define cdda_messages           cdio_cddap_messages
00374 #define cdda_errors             cdio_cddap_errors
00375 #define cdda_close              cdio_cddap_close
00376 #define cdda_open               cdio_cddap_open
00377 #define cdda_read               cdio_cddap_read
00378 #define cdda_track_firstsector  cdio_cddap_track_firstsector 
00379 #define cdda_track_lastsector   cdio_cddap_track_lastsector 
00380 #define cdda_tracks             cdio_cddap_tracks 
00381 #define cdda_sector_gettrack    cdio_cddap_sector_gettrack  
00382 #define cdda_track_channels     cdio_cddap_track_channels
00383 #define cdda_track_audiop       cdio_cddap_track_audiop
00384 #define cdda_track_copyp        cdio_cddap_track_copyp
00385 #define cdda_track_preemp       cdio_cddap_track_preemp
00386 #define cdda_disc_firstsector   cdio_cddap_disc_firstsector
00387 #define cdda_disc_lastsector    cdio_cddap_disc_lastsector
00388 #define cdrom_drive              cdrom_drive_t
00389 
00390 #endif /*DO_NOT_WANT_PARANOIA_COMPATIBILITY*/
00391 
00392 #ifdef __cplusplus
00393 }
00394 #endif /* __cplusplus */
00395 
00396 #endif /*_CDDA_INTERFACE_H_*/
00397 

Generated on Fri Sep 14 20:54:14 2007 for libcdio by  doxygen 1.5.1