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
00047 extern enum paranoia_cdda_enums {
00048 CDDA_MESSAGE_FORGETIT = 0,
00049 CDDA_MESSAGE_PRINTIT = 1,
00050 CDDA_MESSAGE_LOGIT = 2,
00051 CD_FRAMESAMPLES = CDIO_CD_FRAMESIZE_RAW / 4,
00052 MAXTRK = (CDIO_CD_MAX_TRACKS+1)
00053 } paranoia_cdda_enums;
00054
00055 #define CD_FRAMESAMPLES (CDIO_CD_FRAMESIZE_RAW / 4)
00056
00057 #include <signal.h>
00058
00062 #define MAXTRK (CDIO_CD_MAX_TRACKS+1)
00063
00065 typedef struct TOC_s {
00066 unsigned char bTrack;
00067 int32_t dwStartSector;
00068 } TOC_t;
00069
00071 #define TOC TOC_t
00072
00073 #define CDDA_MESSAGE_FORGETIT 0
00074 #define CDDA_MESSAGE_PRINTIT 1
00075 #define CDDA_MESSAGE_LOGIT 2
00076
00078 struct cdrom_drive_s {
00079
00080 CdIo_t *p_cdio;
00081 int opened;
00083 char *cdda_device_name;
00084
00085 char *drive_model;
00086 int drive_type;
00087 int bigendianp;
00091 int nsectors;
00092
00093 int cd_extra;
00099 bool b_swap_bytes;
00102 track_t tracks;
00103 TOC_t disc_toc[MAXTRK];
00108 lsn_t audio_first_sector;
00109 lsn_t audio_last_sector;
00110
00111 int errordest;
00112 int messagedest;
00113 char *errorbuf;
00114 char *messagebuf;
00115
00116
00117
00118 int (*enable_cdda) (cdrom_drive_t *d, int onoff);
00119 int (*read_toc) (cdrom_drive_t *d);
00120 long (*read_audio) (cdrom_drive_t *d, void *p, lsn_t begin,
00121 long sectors);
00122 int (*set_speed) (cdrom_drive_t *d, int speed);
00123 int error_retry;
00124 int report_all;
00125
00126 int is_atapi;
00127 int is_mmc;
00128
00129 int i_test_flags;
00134 };
00135
00136
00142 extern enum paranoia_jitter_enums {
00143 CDDA_TEST_JITTER_SMALL = 1,
00144 CDDA_TEST_JITTER_LARGE = 2,
00145 CDDA_TEST_JITTER_MASSIVE = 3,
00146 CDDA_TEST_FRAG_SMALL = (1<<3),
00147 CDDA_TEST_FRAG_LARGE = (2<<3),
00148 CDDA_TEST_FRAG_MASSIVE = (3<<3),
00149 CDDA_TEST_UNDERRUN = 64
00150 } paranoia_jitter_enums;
00151
00156 #define CDDA_TEST_JITTER_SMALL 1
00157 #define CDDA_TEST_JITTER_LARGE 2
00158 #define CDDA_TEST_JITTER_MASSIVE 3
00159
00165 #define CDDA_TEST_ALWAYS_JITTER 4
00166
00168 #define CDDA_TEST_FRAG_SMALL (1<<3)
00169 #define CDDA_TEST_FRAG_LARGE (2<<3)
00170 #define CDDA_TEST_FRAG_MASSIVE (3<<3)
00171
00173 #define CDDA_TEST_UNDERRUN 64
00174
00175 #if TESTING_IS_FINISHED
00176
00178 #define CDDA_TEST_SCRATCH 128
00179 #undef CDDA_TEST_BOGUS_BYTES 256
00180 #undef CDDA_TEST_DROPDUPE_BYTES 512
00181 #endif
00182
00189 extern cdrom_drive_t *cdio_cddap_find_a_cdrom(int messagedest,
00190 char **ppsz_message);
00191
00196 extern cdrom_drive_t *cdio_cddap_identify(const char *psz_device,
00197 int messagedest,
00198 char **ppsz_message);
00199
00206 cdrom_drive_t *cdio_cddap_identify_cdio(CdIo_t *p_cdio,
00207 int messagedest, char **ppsz_messages);
00208
00211 extern int cdio_cddap_speed_set(cdrom_drive_t *d, int speed);
00212 extern void cdio_cddap_verbose_set(cdrom_drive_t *d, int err_action,
00213 int mes_action);
00214 extern char *cdio_cddap_messages(cdrom_drive_t *d);
00215 extern char *cdio_cddap_errors(cdrom_drive_t *d);
00216
00227 bool cdio_cddap_close_no_free_cdio(cdrom_drive_t *d);
00228
00239 extern int cdio_cddap_close(cdrom_drive_t *d);
00240
00241 extern int cdio_cddap_open(cdrom_drive_t *d);
00242
00243 extern long cdio_cddap_read(cdrom_drive_t *d, void *p_buffer,
00244 lsn_t beginsector, long sectors);
00245
00247 extern lsn_t cdio_cddap_track_firstsector(cdrom_drive_t *d,
00248 track_t i_track);
00249
00252 extern lsn_t cdio_cddap_track_lastsector(cdrom_drive_t *d, track_t i_track);
00253
00255 extern track_t cdio_cddap_tracks(cdrom_drive_t *d);
00256
00262 extern int cdio_cddap_sector_gettrack(cdrom_drive_t *d, lsn_t lsn);
00263
00268 extern int cdio_cddap_track_channels(cdrom_drive_t *d, track_t i_track);
00269
00271 extern int cdio_cddap_track_audiop(cdrom_drive_t *d, track_t i_track);
00272
00274 extern int cdio_cddap_track_copyp(cdrom_drive_t *d, track_t i_track);
00275
00279 extern int cdio_cddap_track_preemp(cdrom_drive_t *d, track_t i_track);
00280
00282 extern lsn_t cdio_cddap_disc_firstsector(cdrom_drive_t *d);
00283
00287 extern lsn_t cdio_cddap_disc_lastsector(cdrom_drive_t *d);
00288
00303 extern int data_bigendianp(cdrom_drive_t *d);
00304
00307 typedef enum {
00308 TR_OK = 0,
00309 TR_EWRITE = 1 ,
00310 TR_EREAD = 2 ,
00311 TR_UNDERRUN = 3 ,
00312 TR_OVERRUN = 4 ,
00313 TR_ILLEGAL = 5 ,
00314 TR_MEDIUM = 6 ,
00315 TR_BUSY = 7 ,
00316 TR_NOTREADY = 8 ,
00317 TR_FAULT = 9 ,
00318 TR_UNKNOWN = 10 ,
00319 TR_STREAMING = 11 ,
00320 } transport_error_t;
00321
00322
00323 #ifdef NEED_STRERROR_TR
00324 const char *strerror_tr[]={
00325 "Success",
00326 "Error writing packet command to device",
00327 "Error reading command from device",
00328 "SCSI packet data underrun (too little data)",
00329 "SCSI packet data overrun (too much data)",
00330 "Illegal SCSI request (rejected by target)",
00331 "Medium reading data from medium",
00332 "Device busy",
00333 "Device not ready",
00334 "Target hardware fault",
00335 "Unspecified error",
00336 "Drive lost streaming"
00337 };
00338 #endif
00339
00367 #ifndef DO_NOT_WANT_PARANOIA_COMPATIBILITY
00368
00369 #define cdda_find_a_cdrom cdio_cddap_find_a_cdrom
00370 #define cdda_identify cdio_cddap_identify
00371 #define cdda_speed_set cdio_cddap_speed_set
00372 #define cdda_verbose_set cdio_cddap_verbose_set
00373 #define cdda_messages cdio_cddap_messages
00374 #define cdda_errors cdio_cddap_errors
00375 #define cdda_close cdio_cddap_close
00376 #define cdda_open cdio_cddap_open
00377 #define cdda_read cdio_cddap_read
00378 #define cdda_track_firstsector cdio_cddap_track_firstsector
00379 #define cdda_track_lastsector cdio_cddap_track_lastsector
00380 #define cdda_tracks cdio_cddap_tracks
00381 #define cdda_sector_gettrack cdio_cddap_sector_gettrack
00382 #define cdda_track_channels cdio_cddap_track_channels
00383 #define cdda_track_audiop cdio_cddap_track_audiop
00384 #define cdda_track_copyp cdio_cddap_track_copyp
00385 #define cdda_track_preemp cdio_cddap_track_preemp
00386 #define cdda_disc_firstsector cdio_cddap_disc_firstsector
00387 #define cdda_disc_lastsector cdio_cddap_disc_lastsector
00388 #define cdrom_drive cdrom_drive_t
00389
00390 #endif
00391
00392 #ifdef __cplusplus
00393 }
00394 #endif
00395
00396 #endif
00397