00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
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
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
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
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
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
00398
00399 #ifdef __cplusplus
00400 }
00401 #endif
00402
00409 extern paranoia_jitter_t debug_paranoia_jitter;
00410 extern paranoia_cdda_enums_t debug_paranoia_cdda_enums;
00411
00412 #endif
00413