00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00028 #ifndef _CDDA_INTERFACE_H_
00029 #define _CDDA_INTERFACE_H_
00030
00031 #include <cdio/cdio.h>
00032
00033 #ifdef __cplusplus
00034 extern "C" {
00035 #endif
00036
00040 typedef struct cdrom_paranoia_s cdrom_paranoia_t;
00041 typedef struct cdrom_drive_s cdrom_drive_t;
00042
00054 typedef enum {
00055 CDDA_MESSAGE_FORGETIT = 0,
00056 CDDA_MESSAGE_PRINTIT = 1,
00057 CDDA_MESSAGE_LOGIT = 2,
00058 CD_FRAMESAMPLES = CDIO_CD_FRAMESIZE_RAW / 4,
00059 MAXTRK = (CDIO_CD_MAX_TRACKS+1)
00060 } paranoia_cdda_enums_t;
00061
00062
00063 #include <signal.h>
00064
00068 #define MAXTRK (CDIO_CD_MAX_TRACKS+1)
00069
00071 typedef struct TOC_s {
00072 unsigned char bTrack;
00073 int32_t dwStartSector;
00074 } TOC_t;
00075
00077 #define TOC TOC_t
00078
00080 struct cdrom_drive_s {
00081
00082 CdIo_t *p_cdio;
00083 int opened;
00085 char *cdda_device_name;
00086
00087 char *drive_model;
00088 int drive_type;
00089 int bigendianp;
00093 int nsectors;
00097 int cd_extra;
00103 bool b_swap_bytes;
00106 track_t tracks;
00107 TOC_t disc_toc[MAXTRK];
00112 lsn_t audio_first_sector;
00113 lsn_t audio_last_sector;
00114
00115 int errordest;
00116 int messagedest;
00117 char *errorbuf;
00118 char *messagebuf;
00119
00120
00121
00122 int (*enable_cdda) (cdrom_drive_t *d, int onoff);
00123 int (*read_toc) (cdrom_drive_t *d);
00124 long (*read_audio) (cdrom_drive_t *d, void *p, lsn_t begin,
00125 long sectors);
00126 int (*set_speed) (cdrom_drive_t *d, int speed);
00127 int error_retry;
00128 int report_all;
00129
00130 int is_atapi;
00131 int is_mmc;
00132
00133 int i_test_flags;
00138 };
00139
00140
00149 typedef enum {
00150 CDDA_TEST_JITTER_SMALL = 1,
00151 CDDA_TEST_JITTER_LARGE = 2,
00152 CDDA_TEST_JITTER_MASSIVE = 3,
00153 CDDA_TEST_FRAG_SMALL = (1<<3),
00154 CDDA_TEST_FRAG_LARGE = (2<<3),
00155 CDDA_TEST_FRAG_MASSIVE = (3<<3),
00156 CDDA_TEST_UNDERRUN = 64
00157 } paranoia_jitter_t;
00158
00168 #define CDDA_TEST_ALWAYS_JITTER 4
00169
00171 #define CDDA_TEST_FRAG_SMALL (1<<3)
00172 #define CDDA_TEST_FRAG_LARGE (2<<3)
00173 #define CDDA_TEST_FRAG_MASSIVE (3<<3)
00174
00176 #define CDDA_TEST_UNDERRUN 64
00177
00178 #if TESTING_IS_FINISHED
00179
00181 #define CDDA_TEST_SCRATCH 128
00182 #undef CDDA_TEST_BOGUS_BYTES 256
00183 #undef CDDA_TEST_DROPDUPE_BYTES 512
00184 #endif
00185
00192 extern cdrom_drive_t *cdio_cddap_find_a_cdrom(int messagedest,
00193 char **ppsz_message);
00194
00199 extern cdrom_drive_t *cdio_cddap_identify(const char *psz_device,
00200 int messagedest,
00201 char **ppsz_message);
00202
00209 cdrom_drive_t *cdio_cddap_identify_cdio(CdIo_t *p_cdio,
00210 int messagedest, char **ppsz_messages);
00211
00214 extern int cdio_cddap_speed_set(cdrom_drive_t *d, int speed);
00215 extern void cdio_cddap_verbose_set(cdrom_drive_t *d, int err_action,
00216 int mes_action);
00217 extern char *cdio_cddap_messages(cdrom_drive_t *d);
00218 extern char *cdio_cddap_errors(cdrom_drive_t *d);
00219
00230 bool cdio_cddap_close_no_free_cdio(cdrom_drive_t *d);
00231
00242 extern int cdio_cddap_close(cdrom_drive_t *d);
00243
00244 extern int cdio_cddap_open(cdrom_drive_t *d);
00245
00246 extern long cdio_cddap_read(cdrom_drive_t *d, void *p_buffer,
00247 lsn_t beginsector, long sectors);
00248
00250 extern lsn_t cdio_cddap_track_firstsector(cdrom_drive_t *d,
00251 track_t i_track);
00252
00255 extern lsn_t cdio_cddap_track_lastsector(cdrom_drive_t *d, track_t i_track);
00256
00258 extern track_t cdio_cddap_tracks(cdrom_drive_t *d);
00259
00265 extern int cdio_cddap_sector_gettrack(cdrom_drive_t *d, lsn_t lsn);
00266
00271 extern int cdio_cddap_track_channels(cdrom_drive_t *d, track_t i_track);
00272
00274 extern int cdio_cddap_track_audiop(cdrom_drive_t *d, track_t i_track);
00275
00277 extern int cdio_cddap_track_copyp(cdrom_drive_t *d, track_t i_track);
00278
00282 extern int cdio_cddap_track_preemp(cdrom_drive_t *d, track_t i_track);
00283
00285 extern lsn_t cdio_cddap_disc_firstsector(cdrom_drive_t *d);
00286
00290 extern lsn_t cdio_cddap_disc_lastsector(cdrom_drive_t *d);
00291
00306 extern int data_bigendianp(cdrom_drive_t *d);
00307
00310 typedef enum {
00311 TR_OK = 0,
00312 TR_EWRITE = 1 ,
00313 TR_EREAD = 2 ,
00314 TR_UNDERRUN = 3 ,
00315 TR_OVERRUN = 4 ,
00316 TR_ILLEGAL = 5 ,
00317 TR_MEDIUM = 6 ,
00318 TR_BUSY = 7 ,
00319 TR_NOTREADY = 8 ,
00320 TR_FAULT = 9 ,
00321 TR_UNKNOWN = 10 ,
00322 TR_STREAMING = 11 ,
00323 } transport_error_t;
00324
00325
00326 #ifdef NEED_STRERROR_TR
00327 const char *strerror_tr[]={
00328 "Success",
00329 "Error writing packet command to device",
00330 "Error reading command from device",
00331 "SCSI packet data underrun (too little data)",
00332 "SCSI packet data overrun (too much data)",
00333 "Illegal SCSI request (rejected by target)",
00334 "Medium reading data from medium",
00335 "Device busy",
00336 "Device not ready",
00337 "Target hardware fault",
00338 "Unspecified error",
00339 "Drive lost streaming"
00340 };
00341 #endif
00342
00372 #ifndef DO_NOT_WANT_PARANOIA_COMPATIBILITY
00373
00374 #define cdda_find_a_cdrom cdio_cddap_find_a_cdrom
00375 #define cdda_identify cdio_cddap_identify
00376 #define cdda_speed_set cdio_cddap_speed_set
00377 #define cdda_verbose_set cdio_cddap_verbose_set
00378 #define cdda_messages cdio_cddap_messages
00379 #define cdda_errors cdio_cddap_errors
00380 #define cdda_close cdio_cddap_close
00381 #define cdda_open cdio_cddap_open
00382 #define cdda_read cdio_cddap_read
00383 #define cdda_track_firstsector cdio_cddap_track_firstsector
00384 #define cdda_track_lastsector cdio_cddap_track_lastsector
00385 #define cdda_tracks cdio_cddap_tracks
00386 #define cdda_sector_gettrack cdio_cddap_sector_gettrack
00387 #define cdda_track_channels cdio_cddap_track_channels
00388 #define cdda_track_audiop cdio_cddap_track_audiop
00389 #define cdda_track_copyp cdio_cddap_track_copyp
00390 #define cdda_track_preemp cdio_cddap_track_preemp
00391 #define cdda_disc_firstsector cdio_cddap_disc_firstsector
00392 #define cdda_disc_lastsector cdio_cddap_disc_lastsector
00393 #define cdrom_drive cdrom_drive_t
00394
00395 #endif
00396
00397 #ifdef __cplusplus
00398 }
00399 #endif
00400
00407 extern paranoia_jitter_t debug_paranoia_jitter;
00408 extern paranoia_cdda_enums_t debug_paranoia_cdda_enums;
00409
00410 #endif
00411