device.h

Go to the documentation of this file.
00001 /* -*- c -*-
00002     $Id: device.h,v 1.32 2006/02/02 04:37:29 rocky Exp $
00003 
00004     Copyright (C) 2005, 2006 Rocky Bernstein <rocky@panix.com>
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 2 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, write to the Free Software
00018     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019 */
00020 
00026 #ifndef __CDIO_DEVICE_H__
00027 #define __CDIO_DEVICE_H__
00028 
00029 #ifdef __cplusplus
00030 extern "C" {
00031 #endif /* __cplusplus */
00032 
00034   typedef uint32_t cdio_drive_read_cap_t;
00035   typedef uint32_t cdio_drive_write_cap_t;
00036   typedef uint32_t cdio_drive_misc_cap_t;
00037   
00044   typedef enum {
00045     CDIO_DRIVE_CAP_ERROR             = 0x40000, 
00046     CDIO_DRIVE_CAP_UNKNOWN           = 0x80000, 
00050     CDIO_DRIVE_CAP_MISC_CLOSE_TRAY   = 0x00001, 
00052     CDIO_DRIVE_CAP_MISC_EJECT        = 0x00002, 
00053     CDIO_DRIVE_CAP_MISC_LOCK         = 0x00004, 
00054     CDIO_DRIVE_CAP_MISC_SELECT_SPEED = 0x00008, 
00055     CDIO_DRIVE_CAP_MISC_SELECT_DISC  = 0x00010, 
00057     CDIO_DRIVE_CAP_MISC_MULTI_SESSION= 0x00020, 
00058     CDIO_DRIVE_CAP_MISC_MEDIA_CHANGED= 0x00080, 
00059     CDIO_DRIVE_CAP_MISC_RESET        = 0x00100, 
00060     CDIO_DRIVE_CAP_MISC_FILE         = 0x20000 
00062   } cdio_drive_cap_misc_t;
00063 
00065   typedef enum {
00066     CDIO_DRIVE_CAP_READ_AUDIO        = 0x00001, 
00067     CDIO_DRIVE_CAP_READ_CD_DA        = 0x00002, 
00068     CDIO_DRIVE_CAP_READ_CD_G         = 0x00004, 
00069     CDIO_DRIVE_CAP_READ_CD_R         = 0x00008, 
00070     CDIO_DRIVE_CAP_READ_CD_RW        = 0x00010, 
00071     CDIO_DRIVE_CAP_READ_DVD_R        = 0x00020, 
00072     CDIO_DRIVE_CAP_READ_DVD_PR       = 0x00040, 
00073     CDIO_DRIVE_CAP_READ_DVD_RAM      = 0x00080, 
00074     CDIO_DRIVE_CAP_READ_DVD_ROM      = 0x00100, 
00075     CDIO_DRIVE_CAP_READ_DVD_RW       = 0x00200, 
00076     CDIO_DRIVE_CAP_READ_DVD_RPW      = 0x00400, 
00077     CDIO_DRIVE_CAP_READ_C2_ERRS      = 0x00800, 
00078     CDIO_DRIVE_CAP_READ_MODE2_FORM1  = 0x01000, 
00079     CDIO_DRIVE_CAP_READ_MODE2_FORM2  = 0x02000, 
00080     CDIO_DRIVE_CAP_READ_MCN          = 0x04000, 
00081     CDIO_DRIVE_CAP_READ_ISRC         = 0x08000 
00082   } cdio_drive_cap_read_t;
00083 
00085   typedef enum {
00086     CDIO_DRIVE_CAP_WRITE_CD_R        = 0x00001, 
00087     CDIO_DRIVE_CAP_WRITE_CD_RW       = 0x00002, 
00088     CDIO_DRIVE_CAP_WRITE_DVD_R       = 0x00004, 
00089     CDIO_DRIVE_CAP_WRITE_DVD_PR      = 0x00008, 
00090     CDIO_DRIVE_CAP_WRITE_DVD_RAM     = 0x00010, 
00091     CDIO_DRIVE_CAP_WRITE_DVD_RW      = 0x00020, 
00092     CDIO_DRIVE_CAP_WRITE_DVD_RPW     = 0x00040, 
00093     CDIO_DRIVE_CAP_WRITE_MT_RAINIER  = 0x00080, 
00094     CDIO_DRIVE_CAP_WRITE_BURN_PROOF  = 0x00100, 
00095     CDIO_DRIVE_CAP_WRITE_CD =
00096     (CDIO_DRIVE_CAP_WRITE_CD_R | CDIO_DRIVE_CAP_WRITE_CD_RW),
00099     CDIO_DRIVE_CAP_WRITE_DVD = 
00100     (CDIO_DRIVE_CAP_WRITE_DVD_R | CDIO_DRIVE_CAP_WRITE_DVD_PR 
00101      | CDIO_DRIVE_CAP_WRITE_DVD_RAM | CDIO_DRIVE_CAP_WRITE_DVD_RW 
00102      | CDIO_DRIVE_CAP_WRITE_DVD_RPW ),
00105     CDIO_DRIVE_CAP_WRITE = 
00106     (CDIO_DRIVE_CAP_WRITE_CD | CDIO_DRIVE_CAP_WRITE_DVD)
00108   } cdio_drive_cap_write_t;
00109     
00111   typedef enum {
00112     CDIO_MMC_HW_VENDOR_LEN   =  8, 
00113     CDIO_MMC_HW_MODEL_LEN    = 16, 
00114     CDIO_MMC_HW_REVISION_LEN =  4  
00115   } cdio_mmc_hw_len_t;
00116     
00117 
00120   typedef struct cdio_hwinfo 
00121   {
00122     char psz_vendor  [CDIO_MMC_HW_VENDOR_LEN+1];
00123     char psz_model   [CDIO_MMC_HW_MODEL_LEN+1];
00124     char psz_revision[CDIO_MMC_HW_REVISION_LEN+1];
00125   } cdio_hwinfo_t;
00126 
00127 
00129   typedef enum {
00130     CDIO_SRC_IS_DISK_IMAGE_MASK = 0x0001, 
00131     CDIO_SRC_IS_DEVICE_MASK     = 0x0002, 
00132     CDIO_SRC_IS_SCSI_MASK       = 0x0004, 
00133     CDIO_SRC_IS_NATIVE_MASK     = 0x0008
00134   } cdio_src_category_mask_t;
00135     
00136 
00152   typedef enum  {
00153     DRIVER_UNKNOWN, 
00155     DRIVER_AIX,     
00156     DRIVER_BSDI,    
00157     DRIVER_FREEBSD, 
00158     DRIVER_LINUX,   
00159     DRIVER_SOLARIS, 
00160     DRIVER_OSX,     
00161     DRIVER_WIN32,   
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_WIN32
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 
00326   char ** cdio_get_devices_with_cap (/*in*/ char *ppsz_search_devices[],
00327                                      cdio_fs_anal_t capabilities, bool b_any);
00328 
00335   char ** cdio_get_devices_with_cap_ret (/*in*/ char* ppsz_search_devices[],
00336                                          cdio_fs_anal_t capabilities, 
00337                                          bool b_any,
00338                                          /*out*/ driver_id_t *p_driver_id);
00339 
00347   char ** cdio_get_devices_ret (/*in/out*/ driver_id_t *p_driver_id);
00348 
00361   void cdio_get_drive_cap (const CdIo_t *p_cdio,
00362                            cdio_drive_read_cap_t  *p_read_cap,
00363                            cdio_drive_write_cap_t *p_write_cap,
00364                            cdio_drive_misc_cap_t  *p_misc_cap);
00365   
00375   void cdio_get_drive_cap_dev (const char *device,
00376                                cdio_drive_read_cap_t  *p_read_cap,
00377                                cdio_drive_write_cap_t *p_write_cap,
00378                                cdio_drive_misc_cap_t  *p_misc_cap);
00379 
00386   const char * cdio_get_driver_name (const CdIo_t *p_cdio);
00387 
00395   driver_id_t cdio_get_driver_id (const CdIo_t *p_cdio);
00396 
00401   bool cdio_get_hwinfo ( const CdIo_t *p_cdio, 
00402                          /*out*/ cdio_hwinfo_t *p_hw_info );
00403 
00404 
00411   driver_return_code_t cdio_get_last_session (CdIo_t *p_cdio,
00412                                               /*out*/ lsn_t *i_last_session);
00413 
00420   int cdio_get_media_changed(CdIo_t *p_cdio);
00421 
00423   bool_3way_t cdio_have_atapi (CdIo_t *p_cdio);
00424 
00426   bool cdio_have_aix    (void);
00427 
00429   bool cdio_have_bsdi    (void);
00430 
00432   bool cdio_have_freebsd (void);
00433 
00435   bool cdio_have_linux   (void);
00436 
00438   bool cdio_have_solaris (void);
00439 
00441   bool cdio_have_osx     (void);
00442 
00444   bool cdio_have_win32   (void);
00445 
00447   bool cdio_have_nrg     (void);
00448 
00450   bool cdio_have_bincue  (void);
00451 
00453   bool cdio_have_cdrdao  (void);
00454 
00456   bool cdio_have_driver (driver_id_t driver_id);
00457   
00458   /*
00459     Free any resources associated with p_cdio. Call this when done using p_cdio
00460     and using CD reading/control operations.
00461 
00462     @param p_cdio the CD object to eliminated.
00463    */
00464   void cdio_destroy (CdIo_t *p_cdio);
00465 
00472   const char *cdio_driver_describe (driver_id_t driver_id);
00473   
00483   CdIo_t * cdio_open (const char *psz_source, driver_id_t driver_id);
00484 
00495   CdIo_t * cdio_open_am (const char *psz_source, 
00496                          driver_id_t driver_id, const char *psz_access_mode);
00497 
00503   CdIo_t * cdio_open_bincue (const char *psz_cue_name);
00504   
00510   CdIo_t * cdio_open_am_bincue (const char *psz_cue_name, 
00511                                 const char *psz_access_mode);
00512   
00517   CdIo_t * cdio_open_cdrdao (const char *psz_toc_name);
00518   
00523   CdIo_t * cdio_open_am_cdrdao (const char *psz_toc_name, 
00524                                 const char *psz_access_mode);
00525   
00531   char * cdio_get_default_device_bincue(void);
00532 
00533   char **cdio_get_devices_bincue(void);
00534 
00539   char * cdio_get_default_device_cdrdao(void);
00540 
00541   char **cdio_get_devices_cdrdao(void);
00542 
00549   CdIo_t * cdio_open_cd (const char *device_name);
00550 
00557   CdIo_t * cdio_open_am_cd (const char *psz_device,
00558                             const char *psz_access_mode);
00559 
00565   CdIo_t * cdio_open_cue (const char *cue_name);
00566 
00575   CdIo_t * cdio_open_am_aix (const char *psz_source,
00576                              const char *psz_access_mode);
00577   
00586   CdIo_t * cdio_open_aix (const char *psz_source);
00587   
00596   char * cdio_get_default_device_aix(void);
00597 
00605   char **cdio_get_devices_aix(void);
00606   
00616   CdIo_t * cdio_open_bsdi (const char *psz_source);
00617   
00626   CdIo_t * cdio_open_am_bsdi (const char *psz_source,
00627                               const char *psz_access_mode);
00628   
00637   char * cdio_get_default_device_bsdi(void);
00638 
00646   char **cdio_get_devices_bsdi(void);
00647   
00655   CdIo_t * cdio_open_freebsd (const char *paz_psz_source);
00656   
00664   CdIo_t * cdio_open_am_freebsd (const char *psz_source,
00665                                  const char *psz_access_mode);
00666   
00672   char * cdio_get_default_device_freebsd(void);
00673 
00677   char **cdio_get_devices_freebsd(void);
00678   
00689   CdIo_t * cdio_open_linux (const char *psz_source);
00690 
00697   CdIo_t * cdio_open_am_linux (const char *psz_source,
00698                                const char *access_mode);
00699 
00712   char * cdio_get_default_device_linux(void);
00713 
00717   char **cdio_get_devices_linux(void);
00718   
00725   CdIo_t * cdio_open_solaris (const char *psz_source);
00726   
00733   CdIo_t * cdio_open_am_solaris (const char *psz_source, 
00734                                  const char *psz_access_mode);
00735   
00748   char * cdio_get_default_device_solaris(void);
00749   
00753   char **cdio_get_devices_solaris(void);
00754   
00766   CdIo_t * cdio_open_osx (const char *psz_source);
00767 
00775   CdIo_t * cdio_open_am_osx (const char *psz_source,
00776                              const char *psz_access_mode);
00777 
00786   char * cdio_get_default_device_osx(void);
00787   
00791   char **cdio_get_devices_osx(void);
00792   
00800   CdIo_t * cdio_open_win32 (const char *psz_source);
00801   
00807   CdIo_t * cdio_open_am_win32 (const char *psz_source,
00808                                const char *psz_access_mode);
00809   
00820   char * cdio_get_default_device_win32(void);
00821 
00822   char **cdio_get_devices_win32(void);
00823   
00829   CdIo_t * cdio_open_nrg (const char *psz_source);
00830   
00836   CdIo_t * cdio_open_am_nrg (const char *psz_source,
00837                              const char *psz_access_mode);
00838   
00846   char * cdio_get_default_device_nrg(void);
00847 
00848   char **cdio_get_devices_nrg(void);
00849 
00858   char *cdio_is_binfile(const char *bin_name);
00859   
00866   char *cdio_is_cuefile(const char *cue_name);
00867   
00875   bool cdio_is_nrg(const char *psz_nrg);
00876   
00884   bool cdio_is_tocfile(const char *psz_toc);
00885   
00895   bool cdio_is_device(const char *psz_source, driver_id_t driver_id);
00896 
00900   driver_return_code_t cdio_set_blocksize ( const CdIo_t *p_cdio, 
00901                                             int i_blocksize );
00902 
00906   driver_return_code_t cdio_set_speed ( const CdIo_t *p_cdio, int i_speed );
00907 
00916   const char * cdio_get_arg (const CdIo_t *p_cdio,  const char key[]);
00917 
00925   driver_return_code_t cdio_set_arg (CdIo_t *p_cdio, const char key[], 
00926                                      const char value[]);
00927   
00931   bool cdio_init(void);
00932   
00933 #ifdef __cplusplus
00934 }
00935 #endif /* __cplusplus */
00936 
00942 extern cdio_drive_cap_misc_t          debug_cdio_drive_cap_misc;
00943 extern cdio_drive_cap_read_t          debug_cdio_drive_cap_read_t;
00944 extern cdio_drive_cap_write_t         debug_drive_cap_write_t;
00945 extern cdio_mmc_hw_len_t              debug_cdio_mmc_hw_len;
00946 extern cdio_src_category_mask_t       debug_cdio_src_category_mask;
00947 
00948 #endif /* __CDIO_DEVICE_H__ */

Generated on Fri Sep 14 20:54:15 2007 for libcdio by  doxygen 1.5.1