libcdio  0.82
device.h
Go to the documentation of this file.
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__ */

Generated for libcdio by doxygen 1.7.6.1