00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
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
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
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
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
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
00390
00391 #ifdef __cplusplus
00392 }
00393 #endif
00394
00395 #endif
00396