libcdio
0.82
|
00001 /* -*- c -*- 00002 $Id: device.h,v 1.39 2008/03/28 01:28:50 rocky Exp $ 00003 00004 Copyright (C) 2005, 2006, 2008, 2009 Rocky Bernstein <rocky@gnu.org> 00005 00006 This program is free software: you can redistribute it and/or modify 00007 it under the terms of the GNU General Public License as published by 00008 the Free Software Foundation, either version 3 of the License, or 00009 (at your option) any later version. 00010 00011 This program is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 GNU General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with this program. If not, see <http://www.gnu.org/licenses/>. 00018 */ 00019 00025 #ifndef __CDIO_DEVICE_H__ 00026 #define __CDIO_DEVICE_H__ 00027 00028 #ifdef __cplusplus 00029 extern "C" { 00030 #endif /* __cplusplus */ 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 /*in/out*/ 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 (/*in/out*/ 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 (/*in*/ char *ppsz_search_devices[], 00354 cdio_fs_anal_t capabilities, bool b_any); 00355 00362 char ** cdio_get_devices_with_cap_ret (/*in*/ char* ppsz_search_devices[], 00363 cdio_fs_anal_t capabilities, 00364 bool b_any, 00365 /*out*/ driver_id_t *p_driver_id); 00366 00374 char ** cdio_get_devices_ret (/*in/out*/ 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 /*out*/ cdio_hwinfo_t *p_hw_info ); 00430 00431 00438 driver_return_code_t cdio_get_last_session (CdIo_t *p_cdio, 00439 /*out*/ 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 Free any resources associated with p_cdio. Call this when done using p_cdio 00457 and using CD reading/control operations. 00458 00459 @param p_cdio the CD object to eliminated. 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 /* __cplusplus */ 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 /* __CDIO_DEVICE_H__ */