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 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 
00151   typedef enum  {
00152     DRIVER_UNKNOWN, 
00154     DRIVER_AIX,     
00155     DRIVER_BSDI,    
00156     DRIVER_FREEBSD, 
00157     DRIVER_LINUX,   
00158     DRIVER_SOLARIS, 
00159     DRIVER_OSX,     
00160     DRIVER_WIN32,   
00162     DRIVER_NETBSD,  
00163     DRIVER_CDRDAO,  
00166     DRIVER_BINCUE,  
00169     DRIVER_NRG,     
00170     DRIVER_DEVICE   
00171   } driver_id_t;
00172 
00178   extern const driver_id_t cdio_os_driver;
00179   
00180 
00185 #define CDIO_MIN_DRIVER        DRIVER_AIX
00186 #define CDIO_MIN_DEVICE_DRIVER CDIO_MIN_DRIVER
00187 #define CDIO_MAX_DRIVER        DRIVER_NRG
00188 #define CDIO_MAX_DEVICE_DRIVER DRIVER_NETBSD
00189 
00201   typedef enum  {
00202     DRIVER_OP_SUCCESS = 0,       
00206     DRIVER_OP_ERROR = -1,        
00207     DRIVER_OP_UNSUPPORTED = -2,  
00212     DRIVER_OP_UNINIT = -3,       
00216     DRIVER_OP_NOT_PERMITTED = -4, 
00220     DRIVER_OP_BAD_PARAMETER = -5, 
00221     DRIVER_OP_BAD_POINTER =   -6, 
00222     DRIVER_OP_NO_DRIVER  =    -7, 
00224   } driver_return_code_t;
00225 
00235   driver_return_code_t cdio_close_tray (const char *psz_drive, 
00236                                         /*in/out*/ driver_id_t *p_driver_id);
00237 
00242   const char *cdio_driver_errmsg(driver_return_code_t drc);
00243   
00250   driver_return_code_t cdio_eject_media (CdIo_t **p_cdio);
00251 
00258   driver_return_code_t cdio_eject_media_drive (const char *psz_drive);
00259 
00270   void cdio_free_device_list (char * device_list[]);
00271 
00285   char * cdio_get_default_device (const CdIo_t *p_cdio);
00286 
00294   char * cdio_get_default_device_driver (/*in/out*/ driver_id_t *p_driver_id);
00295 
00307   char ** cdio_get_devices (driver_id_t driver_id);
00308 
00345   char ** cdio_get_devices_with_cap (/*in*/ char *ppsz_search_devices[],
00346                                      cdio_fs_anal_t capabilities, bool b_any);
00347 
00354   char ** cdio_get_devices_with_cap_ret (/*in*/ char* ppsz_search_devices[],
00355                                          cdio_fs_anal_t capabilities, 
00356                                          bool b_any,
00357                                          /*out*/ driver_id_t *p_driver_id);
00358 
00366   char ** cdio_get_devices_ret (/*in/out*/ driver_id_t *p_driver_id);
00367 
00380   void cdio_get_drive_cap (const CdIo_t *p_cdio,
00381                            cdio_drive_read_cap_t  *p_read_cap,
00382                            cdio_drive_write_cap_t *p_write_cap,
00383                            cdio_drive_misc_cap_t  *p_misc_cap);
00384   
00394   void cdio_get_drive_cap_dev (const char *device,
00395                                cdio_drive_read_cap_t  *p_read_cap,
00396                                cdio_drive_write_cap_t *p_write_cap,
00397                                cdio_drive_misc_cap_t  *p_misc_cap);
00398 
00405   const char * cdio_get_driver_name (const CdIo_t *p_cdio);
00406 
00414   driver_id_t cdio_get_driver_id (const CdIo_t *p_cdio);
00415 
00420   bool cdio_get_hwinfo ( const CdIo_t *p_cdio, 
00421                          /*out*/ cdio_hwinfo_t *p_hw_info );
00422 
00423 
00430   driver_return_code_t cdio_get_last_session (CdIo_t *p_cdio,
00431                                               /*out*/ lsn_t *i_last_session);
00432 
00439   int cdio_get_media_changed(CdIo_t *p_cdio);
00440 
00442   bool_3way_t cdio_have_atapi (CdIo_t *p_cdio);
00443 
00445   bool cdio_have_driver (driver_id_t driver_id);
00446   
00447   /*
00448     Free any resources associated with p_cdio. Call this when done using p_cdio
00449     and using CD reading/control operations.
00450 
00451     @param p_cdio the CD object to eliminated.
00452    */
00453   void cdio_destroy (CdIo_t *p_cdio);
00454 
00461   const char *cdio_driver_describe (driver_id_t driver_id);
00462   
00472   CdIo_t * cdio_open (const char *psz_source, driver_id_t driver_id);
00473 
00484   CdIo_t * cdio_open_am (const char *psz_source, 
00485                          driver_id_t driver_id, const char *psz_access_mode);
00486 
00492   CdIo_t * cdio_open_bincue (const char *psz_cue_name);
00493   
00499   CdIo_t * cdio_open_am_bincue (const char *psz_cue_name, 
00500                                 const char *psz_access_mode);
00501   
00506   CdIo_t * cdio_open_cdrdao (const char *psz_toc_name);
00507   
00512   CdIo_t * cdio_open_am_cdrdao (const char *psz_toc_name, 
00513                                 const char *psz_access_mode);
00514   
00520   char * cdio_get_default_device_bincue(void);
00521 
00522   char **cdio_get_devices_bincue(void);
00523 
00528   char * cdio_get_default_device_cdrdao(void);
00529 
00530   char **cdio_get_devices_cdrdao(void);
00531 
00538   CdIo_t * cdio_open_cd (const char *device_name);
00539 
00546   CdIo_t * cdio_open_am_cd (const char *psz_device,
00547                             const char *psz_access_mode);
00548 
00554   CdIo_t * cdio_open_cue (const char *cue_name);
00555 
00564   CdIo_t * cdio_open_am_aix (const char *psz_source,
00565                              const char *psz_access_mode);
00566   
00575   CdIo_t * cdio_open_aix (const char *psz_source);
00576   
00585   char * cdio_get_default_device_aix(void);
00586 
00594   char **cdio_get_devices_aix(void);
00595   
00605   CdIo_t * cdio_open_bsdi (const char *psz_source);
00606   
00615   CdIo_t * cdio_open_am_bsdi (const char *psz_source,
00616                               const char *psz_access_mode);
00617   
00626   char * cdio_get_default_device_bsdi(void);
00627 
00635   char **cdio_get_devices_bsdi(void);
00636   
00644   CdIo_t * cdio_open_freebsd (const char *paz_psz_source);
00645   
00653   CdIo_t * cdio_open_am_freebsd (const char *psz_source,
00654                                  const char *psz_access_mode);
00655   
00661   char * cdio_get_default_device_freebsd(void);
00662 
00666   char **cdio_get_devices_freebsd(void);
00667   
00678   CdIo_t * cdio_open_linux (const char *psz_source);
00679 
00686   CdIo_t * cdio_open_am_linux (const char *psz_source,
00687                                const char *access_mode);
00688 
00701   char * cdio_get_default_device_linux(void);
00702 
00706   char **cdio_get_devices_linux(void);
00707   
00714   CdIo_t * cdio_open_solaris (const char *psz_source);
00715   
00722   CdIo_t * cdio_open_am_solaris (const char *psz_source, 
00723                                  const char *psz_access_mode);
00724   
00737   char * cdio_get_default_device_solaris(void);
00738   
00742   char **cdio_get_devices_solaris(void);
00743   
00755   CdIo_t * cdio_open_osx (const char *psz_source);
00756 
00764   CdIo_t * cdio_open_am_osx (const char *psz_source,
00765                              const char *psz_access_mode);
00766 
00775   char * cdio_get_default_device_osx(void);
00776   
00780   char **cdio_get_devices_osx(void);
00781   
00789   CdIo_t * cdio_open_win32 (const char *psz_source);
00790   
00796   CdIo_t * cdio_open_am_win32 (const char *psz_source,
00797                                const char *psz_access_mode);
00798   
00809   char * cdio_get_default_device_win32(void);
00810 
00811   char **cdio_get_devices_win32(void);
00812   
00818   CdIo_t * cdio_open_nrg (const char *psz_source);
00819   
00825   CdIo_t * cdio_open_am_nrg (const char *psz_source,
00826                              const char *psz_access_mode);
00827   
00835   char * cdio_get_default_device_nrg(void);
00836 
00837   char **cdio_get_devices_nrg(void);
00838 
00847   char *cdio_is_binfile(const char *bin_name);
00848   
00855   char *cdio_is_cuefile(const char *cue_name);
00856   
00864   bool cdio_is_nrg(const char *psz_nrg);
00865   
00873   bool cdio_is_tocfile(const char *psz_toc);
00874   
00884   bool cdio_is_device(const char *psz_source, driver_id_t driver_id);
00885 
00889   driver_return_code_t cdio_set_blocksize ( const CdIo_t *p_cdio, 
00890                                             int i_blocksize );
00891 
00906   driver_return_code_t cdio_set_speed ( const CdIo_t *p_cdio, 
00907                                         int i_drive_speed );
00908 
00917   const char * cdio_get_arg (const CdIo_t *p_cdio,  const char key[]);
00918 
00926   driver_return_code_t cdio_set_arg (CdIo_t *p_cdio, const char key[], 
00927                                      const char value[]);
00928   
00932   bool cdio_init(void);
00933   
00934 #ifdef __cplusplus
00935 }
00936 #endif /* __cplusplus */
00937 
00943 extern cdio_drive_cap_misc_t          debug_cdio_drive_cap_misc;
00944 extern cdio_drive_cap_read_t          debug_cdio_drive_cap_read_t;
00945 extern cdio_drive_cap_write_t         debug_drive_cap_write_t;
00946 extern cdio_mmc_hw_len_t              debug_cdio_mmc_hw_len;
00947 extern cdio_src_category_mask_t       debug_cdio_src_category_mask;
00948 
00949 #endif /* __CDIO_DEVICE_H__ */

Generated for libcdio by doxygen 1.4.7