cdda.h

Go to the documentation of this file.
00001 /*
00002   $Id: cdda.h,v 1.23 2005/09/21 01:41:32 rocky Exp $
00003 
00004   Copyright (C) 2004, 2005 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 
00046 extern enum paranoia_cdda_enums {
00047   CDDA_MESSAGE_FORGETIT = 0,
00048   CDDA_MESSAGE_PRINTIT  = 1,
00049   CDDA_MESSAGE_LOGIT    = 2,
00050   CD_FRAMESAMPLES       = CDIO_CD_FRAMESIZE_RAW / 4,
00051   MAXTRK                = (CDIO_CD_MAX_TRACKS+1)
00052 } paranoia_cdda_enums;
00053   
00054 #define CD_FRAMESAMPLES (CDIO_CD_FRAMESIZE_RAW / 4)
00055 
00056 #include <signal.h>
00057 
00061 #define MAXTRK (CDIO_CD_MAX_TRACKS+1)
00062 
00064 typedef struct TOC_s {  
00065   unsigned char bTrack;
00066   int32_t       dwStartSector;
00067 } TOC_t;
00068 
00070 #define TOC TOC_t
00071 
00072 #define CDDA_MESSAGE_FORGETIT 0
00073 #define CDDA_MESSAGE_PRINTIT 1
00074 #define CDDA_MESSAGE_LOGIT 2
00075 
00077 struct cdrom_drive_s {
00078 
00079   CdIo_t *p_cdio;
00080   int opened; 
00082   char *cdda_device_name;
00083 
00084   char *drive_model;
00085   int drive_type;
00086   int bigendianp; 
00090   int nsectors;
00091 
00092   int cd_extra;   
00098   bool b_swap_bytes;  
00101   track_t tracks;
00102   TOC_t disc_toc[MAXTRK]; 
00107   lsn_t audio_first_sector;
00108   lsn_t audio_last_sector;
00109 
00110   int errordest;
00111   int messagedest;
00112   char *errorbuf;
00113   char *messagebuf;
00114 
00115   /* functions specific to particular drives/interfaces */
00116 
00117   int  (*enable_cdda)  (cdrom_drive_t *d, int onoff);
00118   int  (*read_toc)     (cdrom_drive_t *d);
00119   long (*read_audio)   (cdrom_drive_t *d, void *p, lsn_t begin, 
00120                        long sectors);
00121   int  (*set_speed)    (cdrom_drive_t *d, int speed);
00122   int error_retry;
00123   int report_all;
00124 
00125   int is_atapi;
00126   int is_mmc;
00127 
00128   int i_test_flags; 
00133 };
00134 
00135 
00141 extern enum paranoia_jitter_enums {
00142   CDDA_TEST_JITTER_SMALL   = 1,
00143   CDDA_TEST_JITTER_LARGE   = 2,
00144   CDDA_TEST_JITTER_MASSIVE = 3,
00145   CDDA_TEST_FRAG_SMALL     = (1<<3),
00146   CDDA_TEST_FRAG_LARGE     = (2<<3),
00147   CDDA_TEST_FRAG_MASSIVE   = (3<<3),
00148   CDDA_TEST_UNDERRUN       = 64 
00149 } paranoia_jitter_enums;
00150   
00155 #define CDDA_TEST_JITTER_SMALL      1 
00156 #define CDDA_TEST_JITTER_LARGE      2 
00157 #define CDDA_TEST_JITTER_MASSIVE    3 
00158 
00164 #define CDDA_TEST_ALWAYS_JITTER     4 
00165 
00167 #define CDDA_TEST_FRAG_SMALL   (1<<3)
00168 #define CDDA_TEST_FRAG_LARGE   (2<<3)
00169 #define CDDA_TEST_FRAG_MASSIVE (3<<3)
00170 
00172 #define CDDA_TEST_UNDERRUN         64 
00173 
00174 #if TESTING_IS_FINISHED
00175 
00177 #define CDDA_TEST_SCRATCH         128
00178 #undef  CDDA_TEST_BOGUS_BYTES     256
00179 #undef  CDDA_TEST_DROPDUPE_BYTES  512
00180 #endif /* TESTING_IS_FINISHED */
00181 
00188 extern cdrom_drive_t *cdio_cddap_find_a_cdrom(int messagedest, 
00189                                               char **ppsz_message);
00190 
00195 extern cdrom_drive_t *cdio_cddap_identify(const char *psz_device, 
00196                                           int messagedest, 
00197                                           char **ppsz_message);
00198 
00205 cdrom_drive_t *cdio_cddap_identify_cdio(CdIo_t *p_cdio, 
00206                                         int messagedest, char **ppsz_messages);
00207 
00210 extern int     cdio_cddap_speed_set(cdrom_drive_t *d, int speed);
00211 extern void    cdio_cddap_verbose_set(cdrom_drive_t *d, int err_action, 
00212                                       int mes_action);
00213 extern char   *cdio_cddap_messages(cdrom_drive_t *d);
00214 extern char   *cdio_cddap_errors(cdrom_drive_t *d);
00215 
00226 bool cdio_cddap_close_no_free_cdio(cdrom_drive_t *d);
00227 
00238 extern int     cdio_cddap_close(cdrom_drive_t *d);
00239 
00240 extern int     cdio_cddap_open(cdrom_drive_t *d);
00241 
00242 extern long    cdio_cddap_read(cdrom_drive_t *d, void *p_buffer,
00243                                lsn_t beginsector, long sectors);
00244 
00246 extern lsn_t   cdio_cddap_track_firstsector(cdrom_drive_t *d, 
00247                                       track_t i_track);
00248 
00251 extern lsn_t   cdio_cddap_track_lastsector(cdrom_drive_t *d, track_t i_track);
00252 
00254 extern track_t cdio_cddap_tracks(cdrom_drive_t *d);
00255 
00261 extern int     cdio_cddap_sector_gettrack(cdrom_drive_t *d, lsn_t lsn);
00262 
00267 extern int     cdio_cddap_track_channels(cdrom_drive_t *d, track_t i_track);
00268 
00270 extern int     cdio_cddap_track_audiop(cdrom_drive_t *d, track_t i_track);
00271 
00273 extern int     cdio_cddap_track_copyp(cdrom_drive_t *d, track_t i_track);
00274 
00278 extern int     cdio_cddap_track_preemp(cdrom_drive_t *d, track_t i_track);
00279 
00281 extern lsn_t   cdio_cddap_disc_firstsector(cdrom_drive_t *d);
00282 
00286 extern lsn_t   cdio_cddap_disc_lastsector(cdrom_drive_t *d);
00287 
00302 extern int data_bigendianp(cdrom_drive_t *d);
00303 
00306 typedef enum {
00307   TR_OK =            0,
00308   TR_EWRITE =        1  ,
00309   TR_EREAD =         2  ,
00310   TR_UNDERRUN =      3  ,
00311   TR_OVERRUN =       4  ,
00312   TR_ILLEGAL =       5  ,
00313   TR_MEDIUM =        6  ,
00314   TR_BUSY =          7  ,
00315   TR_NOTREADY =      8  ,
00316   TR_FAULT =         9  ,
00317   TR_UNKNOWN =      10  ,
00318   TR_STREAMING =    11  ,
00319 } transport_error_t;
00320   
00321 
00322 #ifdef NEED_STRERROR_TR
00323 const char *strerror_tr[]={
00324   "Success",
00325   "Error writing packet command to device",
00326   "Error reading command from device",
00327   "SCSI packet data underrun (too little data)",
00328   "SCSI packet data overrun (too much data)",
00329   "Illegal SCSI request (rejected by target)",
00330   "Medium reading data from medium",
00331   "Device busy",
00332   "Device not ready",
00333   "Target hardware fault",
00334   "Unspecified error",
00335   "Drive lost streaming"
00336 };
00337 #endif /*NEED_STERROR_TR*/
00338 
00366 #ifndef DO_NOT_WANT_PARANOIA_COMPATIBILITY
00367 
00368 #define cdda_find_a_cdrom       cdio_cddap_find_a_cdrom
00369 #define cdda_identify           cdio_cddap_identify
00370 #define cdda_speed_set          cdio_cddap_speed_set
00371 #define cdda_verbose_set        cdio_cddap_verbose_set
00372 #define cdda_messages           cdio_cddap_messages
00373 #define cdda_errors             cdio_cddap_errors
00374 #define cdda_close              cdio_cddap_close
00375 #define cdda_open               cdio_cddap_open
00376 #define cdda_read               cdio_cddap_read
00377 #define cdda_track_firstsector  cdio_cddap_track_firstsector 
00378 #define cdda_track_lastsector   cdio_cddap_track_lastsector 
00379 #define cdda_tracks             cdio_cddap_tracks 
00380 #define cdda_sector_gettrack    cdio_cddap_sector_gettrack  
00381 #define cdda_track_channels     cdio_cddap_track_channels
00382 #define cdda_track_audiop       cdio_cddap_track_audiop
00383 #define cdda_track_copyp        cdio_cddap_track_copyp
00384 #define cdda_track_preemp       cdio_cddap_track_preemp
00385 #define cdda_disc_firstsector   cdio_cddap_disc_firstsector
00386 #define cdda_disc_lastsector    cdio_cddap_disc_lastsector
00387 #define cdrom_drive              cdrom_drive_t
00388 
00389 #endif /*DO_NOT_WANT_PARANOIA_COMPATIBILITY*/
00390 
00391 #ifdef __cplusplus
00392 }
00393 #endif /* __cplusplus */
00394 
00395 #endif /*_CDDA_INTERFACE_H_*/
00396 

Generated on Sun Sep 23 08:22:07 2007 for libcdio by  doxygen 1.4.7