00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00025 #ifndef __CDIO_DEVICE_H__
00026 #define __CDIO_DEVICE_H__
00027
00028 #ifdef __cplusplus
00029 extern "C" {
00030 #endif
00031
00033 typedef uint32_t cdio_drive_read_cap_t;
00034 typedef uint32_t cdio_drive_write_cap_t;
00035 typedef uint32_t cdio_drive_misc_cap_t;
00036
00043 typedef enum {
00044 CDIO_DRIVE_CAP_ERROR = 0x40000,
00045 CDIO_DRIVE_CAP_UNKNOWN = 0x80000,
00049 CDIO_DRIVE_CAP_MISC_CLOSE_TRAY = 0x00001,
00051 CDIO_DRIVE_CAP_MISC_EJECT = 0x00002,
00052 CDIO_DRIVE_CAP_MISC_LOCK = 0x00004,
00053 CDIO_DRIVE_CAP_MISC_SELECT_SPEED = 0x00008,
00054 CDIO_DRIVE_CAP_MISC_SELECT_DISC = 0x00010,
00056 CDIO_DRIVE_CAP_MISC_MULTI_SESSION= 0x00020,
00057 CDIO_DRIVE_CAP_MISC_MEDIA_CHANGED= 0x00080,
00058 CDIO_DRIVE_CAP_MISC_RESET = 0x00100,
00059 CDIO_DRIVE_CAP_MISC_FILE = 0x20000
00061 } cdio_drive_cap_misc_t;
00062
00064 typedef enum {
00065 CDIO_DRIVE_CAP_READ_AUDIO = 0x00001,
00066 CDIO_DRIVE_CAP_READ_CD_DA = 0x00002,
00067 CDIO_DRIVE_CAP_READ_CD_G = 0x00004,
00068 CDIO_DRIVE_CAP_READ_CD_R = 0x00008,
00069 CDIO_DRIVE_CAP_READ_CD_RW = 0x00010,
00070 CDIO_DRIVE_CAP_READ_DVD_R = 0x00020,
00071 CDIO_DRIVE_CAP_READ_DVD_PR = 0x00040,
00072 CDIO_DRIVE_CAP_READ_DVD_RAM = 0x00080,
00073 CDIO_DRIVE_CAP_READ_DVD_ROM = 0x00100,
00074 CDIO_DRIVE_CAP_READ_DVD_RW = 0x00200,
00075 CDIO_DRIVE_CAP_READ_DVD_RPW = 0x00400,
00076 CDIO_DRIVE_CAP_READ_C2_ERRS = 0x00800,
00077 CDIO_DRIVE_CAP_READ_MODE2_FORM1 = 0x01000,
00078 CDIO_DRIVE_CAP_READ_MODE2_FORM2 = 0x02000,
00079 CDIO_DRIVE_CAP_READ_MCN = 0x04000,
00080 CDIO_DRIVE_CAP_READ_ISRC = 0x08000
00081 } cdio_drive_cap_read_t;
00082
00084 typedef enum {
00085 CDIO_DRIVE_CAP_WRITE_CD_R = 0x00001,
00086 CDIO_DRIVE_CAP_WRITE_CD_RW = 0x00002,
00087 CDIO_DRIVE_CAP_WRITE_DVD_R = 0x00004,
00088 CDIO_DRIVE_CAP_WRITE_DVD_PR = 0x00008,
00089 CDIO_DRIVE_CAP_WRITE_DVD_RAM = 0x00010,
00090 CDIO_DRIVE_CAP_WRITE_DVD_RW = 0x00020,
00091 CDIO_DRIVE_CAP_WRITE_DVD_RPW = 0x00040,
00092 CDIO_DRIVE_CAP_WRITE_MT_RAINIER = 0x00080,
00093 CDIO_DRIVE_CAP_WRITE_BURN_PROOF = 0x00100,
00094 CDIO_DRIVE_CAP_WRITE_CD =
00095 (CDIO_DRIVE_CAP_WRITE_CD_R | CDIO_DRIVE_CAP_WRITE_CD_RW),
00098 CDIO_DRIVE_CAP_WRITE_DVD =
00099 (CDIO_DRIVE_CAP_WRITE_DVD_R | CDIO_DRIVE_CAP_WRITE_DVD_PR
00100 | CDIO_DRIVE_CAP_WRITE_DVD_RAM | CDIO_DRIVE_CAP_WRITE_DVD_RW
00101 | CDIO_DRIVE_CAP_WRITE_DVD_RPW ),
00104 CDIO_DRIVE_CAP_WRITE =
00105 (CDIO_DRIVE_CAP_WRITE_CD | CDIO_DRIVE_CAP_WRITE_DVD)
00107 } cdio_drive_cap_write_t;
00108
00110 typedef enum {
00111 CDIO_MMC_HW_VENDOR_LEN = 8,
00112 CDIO_MMC_HW_MODEL_LEN = 16,
00113 CDIO_MMC_HW_REVISION_LEN = 4
00114 } cdio_mmc_hw_len_t;
00115
00116
00119 typedef struct cdio_hwinfo
00120 {
00121 char psz_vendor [CDIO_MMC_HW_VENDOR_LEN+1];
00122 char psz_model [CDIO_MMC_HW_MODEL_LEN+1];
00123 char psz_revision[CDIO_MMC_HW_REVISION_LEN+1];
00124 } cdio_hwinfo_t;
00125
00126
00128 typedef enum {
00129 CDIO_SRC_IS_DISK_IMAGE_MASK = 0x0001,
00130 CDIO_SRC_IS_DEVICE_MASK = 0x0002,
00131 CDIO_SRC_IS_SCSI_MASK = 0x0004,
00132 CDIO_SRC_IS_NATIVE_MASK = 0x0008
00133 } cdio_src_category_mask_t;
00134
00135
00147 typedef enum {
00148 DRIVER_UNKNOWN,
00150 DRIVER_AIX,
00151 DRIVER_BSDI,
00152 DRIVER_FREEBSD,
00153 DRIVER_NETBSD,
00154 DRIVER_LINUX,
00155 DRIVER_SOLARIS,
00156 DRIVER_OS2,
00157 DRIVER_OSX,
00158 DRIVER_WIN32,
00160 DRIVER_CDRDAO,
00163 DRIVER_BINCUE,
00166 DRIVER_NRG,
00167 DRIVER_DEVICE
00168 } driver_id_t;
00169
00173 extern const driver_id_t cdio_drivers[];
00177 extern const driver_id_t cdio_device_drivers[];
00178
00184 extern const driver_id_t cdio_os_driver;
00185
00186
00193 #define CDIO_MIN_DRIVER DRIVER_AIX
00194 #define CDIO_MIN_DEVICE_DRIVER CDIO_MIN_DRIVER
00195 #define CDIO_MAX_DRIVER DRIVER_NRG
00196 #define CDIO_MAX_DEVICE_DRIVER DRIVER_WIN32
00197
00209 typedef enum {
00210 DRIVER_OP_SUCCESS = 0,
00214 DRIVER_OP_ERROR = -1,
00215 DRIVER_OP_UNSUPPORTED = -2,
00220 DRIVER_OP_UNINIT = -3,
00224 DRIVER_OP_NOT_PERMITTED = -4,
00228 DRIVER_OP_BAD_PARAMETER = -5,
00229 DRIVER_OP_BAD_POINTER = -6,
00230 DRIVER_OP_NO_DRIVER = -7,
00232 } driver_return_code_t;
00233
00243 driver_return_code_t cdio_close_tray (const char *psz_drive,
00244 driver_id_t *p_driver_id);
00245
00250 const char *cdio_driver_errmsg(driver_return_code_t drc);
00251
00258 driver_return_code_t cdio_eject_media (CdIo_t **p_cdio);
00259
00266 driver_return_code_t cdio_eject_media_drive (const char *psz_drive);
00267
00278 void cdio_free_device_list (char * device_list[]);
00279
00293 char * cdio_get_default_device (const CdIo_t *p_cdio);
00294
00302 char * cdio_get_default_device_driver ( driver_id_t *p_driver_id);
00303
00315 char ** cdio_get_devices (driver_id_t driver_id);
00316
00353 char ** cdio_get_devices_with_cap ( char *ppsz_search_devices[],
00354 cdio_fs_anal_t capabilities, bool b_any);
00355
00362 char ** cdio_get_devices_with_cap_ret ( char* ppsz_search_devices[],
00363 cdio_fs_anal_t capabilities,
00364 bool b_any,
00365 driver_id_t *p_driver_id);
00366
00374 char ** cdio_get_devices_ret ( driver_id_t *p_driver_id);
00375
00388 void cdio_get_drive_cap (const CdIo_t *p_cdio,
00389 cdio_drive_read_cap_t *p_read_cap,
00390 cdio_drive_write_cap_t *p_write_cap,
00391 cdio_drive_misc_cap_t *p_misc_cap);
00392
00402 void cdio_get_drive_cap_dev (const char *device,
00403 cdio_drive_read_cap_t *p_read_cap,
00404 cdio_drive_write_cap_t *p_write_cap,
00405 cdio_drive_misc_cap_t *p_misc_cap);
00406
00413 const char * cdio_get_driver_name (const CdIo_t *p_cdio);
00414
00422 driver_id_t cdio_get_driver_id (const CdIo_t *p_cdio);
00423
00428 bool cdio_get_hwinfo ( const CdIo_t *p_cdio,
00429 cdio_hwinfo_t *p_hw_info );
00430
00431
00438 driver_return_code_t cdio_get_last_session (CdIo_t *p_cdio,
00439 lsn_t *i_last_session);
00440
00447 int cdio_get_media_changed(CdIo_t *p_cdio);
00448
00450 bool_3way_t cdio_have_atapi (CdIo_t *p_cdio);
00451
00453 bool cdio_have_driver (driver_id_t driver_id);
00454
00455
00456
00457
00458
00459
00460
00461 void cdio_destroy (CdIo_t *p_cdio);
00462
00469 const char *cdio_driver_describe (driver_id_t driver_id);
00470
00480 CdIo_t * cdio_open (const char *psz_source, driver_id_t driver_id);
00481
00492 CdIo_t * cdio_open_am (const char *psz_source,
00493 driver_id_t driver_id, const char *psz_access_mode);
00494
00500 CdIo_t * cdio_open_bincue (const char *psz_cue_name);
00501
00507 CdIo_t * cdio_open_am_bincue (const char *psz_cue_name,
00508 const char *psz_access_mode);
00509
00514 CdIo_t * cdio_open_cdrdao (const char *psz_toc_name);
00515
00520 CdIo_t * cdio_open_am_cdrdao (const char *psz_toc_name,
00521 const char *psz_access_mode);
00522
00528 char * cdio_get_default_device_bincue(void);
00529
00530 char **cdio_get_devices_bincue(void);
00531
00536 char * cdio_get_default_device_cdrdao(void);
00537
00538 char **cdio_get_devices_cdrdao(void);
00539
00546 CdIo_t * cdio_open_cd (const char *device_name);
00547
00554 CdIo_t * cdio_open_am_cd (const char *psz_device,
00555 const char *psz_access_mode);
00556
00562 CdIo_t * cdio_open_cue (const char *cue_name);
00563
00572 CdIo_t * cdio_open_am_aix (const char *psz_source,
00573 const char *psz_access_mode);
00574
00583 CdIo_t * cdio_open_aix (const char *psz_source);
00584
00593 char * cdio_get_default_device_aix(void);
00594
00602 char **cdio_get_devices_aix(void);
00603
00613 CdIo_t * cdio_open_bsdi (const char *psz_source);
00614
00623 CdIo_t * cdio_open_am_bsdi (const char *psz_source,
00624 const char *psz_access_mode);
00625
00634 char * cdio_get_default_device_bsdi(void);
00635
00643 char **cdio_get_devices_bsdi(void);
00644
00652 CdIo_t * cdio_open_freebsd (const char *paz_psz_source);
00653
00661 CdIo_t * cdio_open_am_freebsd (const char *psz_source,
00662 const char *psz_access_mode);
00663
00669 char * cdio_get_default_device_freebsd(void);
00670
00674 char **cdio_get_devices_freebsd(void);
00675
00686 CdIo_t * cdio_open_linux (const char *psz_source);
00687
00694 CdIo_t * cdio_open_am_linux (const char *psz_source,
00695 const char *access_mode);
00696
00709 char * cdio_get_default_device_linux(void);
00710
00714 char **cdio_get_devices_linux(void);
00715
00722 CdIo_t * cdio_open_solaris (const char *psz_source);
00723
00730 CdIo_t * cdio_open_am_solaris (const char *psz_source,
00731 const char *psz_access_mode);
00732
00745 char * cdio_get_default_device_solaris(void);
00746
00750 char **cdio_get_devices_solaris(void);
00751
00763 CdIo_t * cdio_open_osx (const char *psz_source);
00764
00772 CdIo_t * cdio_open_am_osx (const char *psz_source,
00773 const char *psz_access_mode);
00774
00783 char * cdio_get_default_device_osx(void);
00784
00788 char **cdio_get_devices_osx(void);
00789
00797 CdIo_t * cdio_open_win32 (const char *psz_source);
00798
00804 CdIo_t * cdio_open_am_win32 (const char *psz_source,
00805 const char *psz_access_mode);
00806
00817 char * cdio_get_default_device_win32(void);
00818
00819 char **cdio_get_devices_win32(void);
00820
00832 CdIo_t * cdio_open_os2 (const char *psz_source);
00833
00841 CdIo_t * cdio_open_am_os2 (const char *psz_source,
00842 const char *psz_access_mode);
00843
00852 char * cdio_get_default_device_os2(void);
00853
00857 char **cdio_get_devices_os2(void);
00858
00864 CdIo_t * cdio_open_nrg (const char *psz_source);
00865
00871 CdIo_t * cdio_open_am_nrg (const char *psz_source,
00872 const char *psz_access_mode);
00873
00881 char * cdio_get_default_device_nrg(void);
00882
00883 char **cdio_get_devices_nrg(void);
00884
00893 char *cdio_is_binfile(const char *bin_name);
00894
00901 char *cdio_is_cuefile(const char *cue_name);
00902
00910 bool cdio_is_nrg(const char *psz_nrg);
00911
00919 bool cdio_is_tocfile(const char *psz_toc);
00920
00930 bool cdio_is_device(const char *psz_source, driver_id_t driver_id);
00931
00935 driver_return_code_t cdio_set_blocksize ( const CdIo_t *p_cdio,
00936 int i_blocksize );
00937
00952 driver_return_code_t cdio_set_speed ( const CdIo_t *p_cdio,
00953 int i_drive_speed );
00954
00963 const char * cdio_get_arg (const CdIo_t *p_cdio, const char key[]);
00964
00972 driver_return_code_t cdio_set_arg (CdIo_t *p_cdio, const char key[],
00973 const char value[]);
00974
00978 bool cdio_init(void);
00979
00980 #ifdef __cplusplus
00981 }
00982 #endif
00983
00989 extern cdio_drive_cap_misc_t debug_cdio_drive_cap_misc;
00990 extern cdio_drive_cap_read_t debug_cdio_drive_cap_read_t;
00991 extern cdio_drive_cap_write_t debug_drive_cap_write_t;
00992 extern cdio_mmc_hw_len_t debug_cdio_mmc_hw_len;
00993 extern cdio_src_category_mask_t debug_cdio_src_category_mask;
00994
00995 #endif