cdda.h

Go to the documentation of this file.
00001 /*
00002   $Id: cdda_8h-source.html,v 1.9 2006/10/27 11:16:41 rocky Exp $
00003 
00004   Copyright (C) 2004, 2005, 2006 Rocky Bernstein <rocky@gnu.org>
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 */
00022 
00030 #ifndef _CDDA_INTERFACE_H_
00031 #define _CDDA_INTERFACE_H_
00032 
00033 #include <cdio/cdio.h>
00034 
00035 #ifdef __cplusplus
00036 extern "C" {
00037 #endif /* __cplusplus */
00038 
00042   typedef struct cdrom_paranoia_s cdrom_paranoia_t;
00043   typedef struct cdrom_drive_s   cdrom_drive_t;
00044   
00056   typedef enum {
00057     CDDA_MESSAGE_FORGETIT = 0,
00058     CDDA_MESSAGE_PRINTIT  = 1,
00059     CDDA_MESSAGE_LOGIT    = 2,
00060     CD_FRAMESAMPLES       = CDIO_CD_FRAMESIZE_RAW / 4,
00061     MAXTRK                = (CDIO_CD_MAX_TRACKS+1)
00062   } paranoia_cdda_enums_t;
00063   
00064 
00065 #include <signal.h>
00066 
00070 #define MAXTRK (CDIO_CD_MAX_TRACKS+1)
00071 
00073 typedef struct TOC_s {  
00074   unsigned char bTrack;
00075   int32_t       dwStartSector;
00076 } TOC_t;
00077 
00079 #define TOC TOC_t
00080 
00082 struct cdrom_drive_s {
00083 
00084   CdIo_t *p_cdio;
00085   int opened; 
00087   char *cdda_device_name;
00088 
00089   char *drive_model;
00090   int drive_type;
00091   int bigendianp; 
00095   int nsectors;   
00099   int cd_extra;   
00105   bool b_swap_bytes;  
00108   track_t tracks;
00109   TOC_t disc_toc[MAXTRK]; 
00114   lsn_t audio_first_sector;
00115   lsn_t audio_last_sector;
00116 
00117   int errordest;
00118   int messagedest;
00119   char *errorbuf;
00120   char *messagebuf;
00121 
00122   /* functions specific to particular drives/interfaces */
00123 
00124   int  (*enable_cdda)  (cdrom_drive_t *d, int onoff);
00125   int  (*read_toc)     (cdrom_drive_t *d);
00126   long (*read_audio)   (cdrom_drive_t *d, void *p, lsn_t begin, 
00127                        long sectors);
00128   int  (*set_speed)    (cdrom_drive_t *d, int speed);
00129   int error_retry;
00130   int report_all;
00131 
00132   int is_atapi;
00133   int is_mmc;
00134 
00135   int i_test_flags; 
00140 };
00141 
00142 
00151   typedef enum {
00152     CDDA_TEST_JITTER_SMALL   = 1,
00153     CDDA_TEST_JITTER_LARGE   = 2,
00154     CDDA_TEST_JITTER_MASSIVE = 3,
00155     CDDA_TEST_FRAG_SMALL     = (1<<3),
00156     CDDA_TEST_FRAG_LARGE     = (2<<3),
00157     CDDA_TEST_FRAG_MASSIVE   = (3<<3),
00158     CDDA_TEST_UNDERRUN       = 64 
00159   } paranoia_jitter_t;
00160   
00170 #define CDDA_TEST_ALWAYS_JITTER     4 
00171 
00173 #define CDDA_TEST_FRAG_SMALL   (1<<3)
00174 #define CDDA_TEST_FRAG_LARGE   (2<<3)
00175 #define CDDA_TEST_FRAG_MASSIVE (3<<3)
00176 
00178 #define CDDA_TEST_UNDERRUN         64 
00179 
00180 #if TESTING_IS_FINISHED
00181 
00183 #define CDDA_TEST_SCRATCH         128
00184 #undef  CDDA_TEST_BOGUS_BYTES     256
00185 #undef  CDDA_TEST_DROPDUPE_BYTES  512
00186 #endif /* TESTING_IS_FINISHED */
00187 
00194 extern cdrom_drive_t *cdio_cddap_find_a_cdrom(int messagedest, 
00195                                               char **ppsz_message);
00196 
00201 extern cdrom_drive_t *cdio_cddap_identify(const char *psz_device, 
00202                                           int messagedest, 
00203                                           char **ppsz_message);
00204 
00211 cdrom_drive_t *cdio_cddap_identify_cdio(CdIo_t *p_cdio, 
00212                                         int messagedest, char **ppsz_messages);
00213 
00216 extern int     cdio_cddap_speed_set(cdrom_drive_t *d, int speed);
00217 extern void    cdio_cddap_verbose_set(cdrom_drive_t *d, int err_action, 
00218                                       int mes_action);
00219 extern char   *cdio_cddap_messages(cdrom_drive_t *d);
00220 extern char   *cdio_cddap_errors(cdrom_drive_t *d);
00221 
00232 bool cdio_cddap_close_no_free_cdio(cdrom_drive_t *d);
00233 
00244 extern int     cdio_cddap_close(cdrom_drive_t *d);
00245 
00246 extern int     cdio_cddap_open(cdrom_drive_t *d);
00247 
00248 extern long    cdio_cddap_read(cdrom_drive_t *d, void *p_buffer,
00249                                lsn_t beginsector, long sectors);
00250 
00252 extern lsn_t   cdio_cddap_track_firstsector(cdrom_drive_t *d, 
00253                                       track_t i_track);
00254 
00257 extern lsn_t   cdio_cddap_track_lastsector(cdrom_drive_t *d, track_t i_track);
00258 
00260 extern track_t cdio_cddap_tracks(cdrom_drive_t *d);
00261 
00267 extern int     cdio_cddap_sector_gettrack(cdrom_drive_t *d, lsn_t lsn);
00268 
00273 extern int     cdio_cddap_track_channels(cdrom_drive_t *d, track_t i_track);
00274 
00276 extern int     cdio_cddap_track_audiop(cdrom_drive_t *d, track_t i_track);
00277 
00279 extern int     cdio_cddap_track_copyp(cdrom_drive_t *d, track_t i_track);
00280 
00284 extern int     cdio_cddap_track_preemp(cdrom_drive_t *d, track_t i_track);
00285 
00287 extern lsn_t   cdio_cddap_disc_firstsector(cdrom_drive_t *d);
00288 
00292 extern lsn_t   cdio_cddap_disc_lastsector(cdrom_drive_t *d);
00293 
00308 extern int data_bigendianp(cdrom_drive_t *d);
00309 
00312 typedef enum {
00313   TR_OK =            0,
00314   TR_EWRITE =        1  ,
00315   TR_EREAD =         2  ,
00316   TR_UNDERRUN =      3  ,
00317   TR_OVERRUN =       4  ,
00318   TR_ILLEGAL =       5  ,
00319   TR_MEDIUM =        6  ,
00320   TR_BUSY =          7  ,
00321   TR_NOTREADY =      8  ,
00322   TR_FAULT =         9  ,
00323   TR_UNKNOWN =      10  ,
00324   TR_STREAMING =    11  ,
00325 } transport_error_t;
00326   
00327 
00328 #ifdef NEED_STRERROR_TR
00329 const char *strerror_tr[]={
00330   "Success",
00331   "Error writing packet command to device",
00332   "Error reading command from device",
00333   "SCSI packet data underrun (too little data)",
00334   "SCSI packet data overrun (too much data)",
00335   "Illegal SCSI request (rejected by target)",
00336   "Medium reading data from medium",
00337   "Device busy",
00338   "Device not ready",
00339   "Target hardware fault",
00340   "Unspecified error",
00341   "Drive lost streaming"
00342 };
00343 #endif /*NEED_STERROR_TR*/
00344 
00374 #ifndef DO_NOT_WANT_PARANOIA_COMPATIBILITY
00375 
00376 #define cdda_find_a_cdrom       cdio_cddap_find_a_cdrom
00377 #define cdda_identify           cdio_cddap_identify
00378 #define cdda_speed_set          cdio_cddap_speed_set
00379 #define cdda_verbose_set        cdio_cddap_verbose_set
00380 #define cdda_messages           cdio_cddap_messages
00381 #define cdda_errors             cdio_cddap_errors
00382 #define cdda_close              cdio_cddap_close
00383 #define cdda_open               cdio_cddap_open
00384 #define cdda_read               cdio_cddap_read
00385 #define cdda_track_firstsector  cdio_cddap_track_firstsector 
00386 #define cdda_track_lastsector   cdio_cddap_track_lastsector 
00387 #define cdda_tracks             cdio_cddap_tracks 
00388 #define cdda_sector_gettrack    cdio_cddap_sector_gettrack  
00389 #define cdda_track_channels     cdio_cddap_track_channels
00390 #define cdda_track_audiop       cdio_cddap_track_audiop
00391 #define cdda_track_copyp        cdio_cddap_track_copyp
00392 #define cdda_track_preemp       cdio_cddap_track_preemp
00393 #define cdda_disc_firstsector   cdio_cddap_disc_firstsector
00394 #define cdda_disc_lastsector    cdio_cddap_disc_lastsector
00395 #define cdrom_drive             cdrom_drive_t
00396 
00397 #endif /*DO_NOT_WANT_PARANOIA_COMPATIBILITY*/
00398 
00399 #ifdef __cplusplus
00400 }
00401 #endif /* __cplusplus */
00402 
00409 extern paranoia_jitter_t     debug_paranoia_jitter;
00410 extern paranoia_cdda_enums_t debug_paranoia_cdda_enums;
00411 
00412 #endif /*_CDDA_INTERFACE_H_*/
00413 

Generated on Fri Oct 27 06:38:08 2006 for libcdio by  doxygen 1.4.6