Blame include/cdio/mmc_util.h

Packit dd8086
/*
Packit dd8086
    Copyright (C) 2010, 2012 Rocky Bernstein <rocky@gnu.org>
Packit dd8086
Packit dd8086
    This program is free software: you can redistribute it and/or modify
Packit dd8086
    it under the terms of the GNU General Public License as published by
Packit dd8086
    the Free Software Foundation, either version 3 of the License, or
Packit dd8086
    (at your option) any later version.
Packit dd8086
Packit dd8086
    This program is distributed in the hope that it will be useful,
Packit dd8086
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd8086
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd8086
    GNU General Public License for more details.
Packit dd8086
Packit dd8086
    You should have received a copy of the GNU General Public License
Packit dd8086
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit dd8086
*/
Packit dd8086
Packit dd8086
/**
Packit dd8086
   \file mmc_util.h 
Packit dd8086
   
Packit dd8086
   \brief Multimedia Command (MMC) "helper" routines that don't depend
Packit dd8086
   on anything other than headers.
Packit dd8086
*/
Packit dd8086
Packit dd8086
#ifndef CDIO_MMC_UTIL_H_
Packit dd8086
#define CDIO_MMC_UTIL_H_
Packit dd8086
Packit dd8086
#include <cdio/device.h>
Packit dd8086
Packit dd8086
#ifdef __cplusplus
Packit dd8086
extern "C" {
Packit dd8086
#endif /* __cplusplus */
Packit dd8086
Packit dd8086
    /**
Packit dd8086
       Profile profile codes used in GET_CONFIGURATION - PROFILE LIST. */
Packit dd8086
    typedef enum {
Packit dd8086
        CDIO_MMC_FEATURE_PROF_NON_REMOVABLE = 0x0001, /**< Re-writable disc, capable
Packit dd8086
                                                         of changing behavior */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_REMOVABLE     = 0x0002, /**< disk Re-writable; with 
Packit dd8086
                                                         removable  media */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_MO_ERASABLE   = 0x0003, /**< Erasable Magneto-Optical
Packit dd8086
                                                         disk with sector erase
Packit dd8086
                                                         capability */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_MO_WRITE_ONCE = 0x0004, /**< Write Once Magneto-Optical
Packit dd8086
                                                         write once */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_AS_MO         = 0x0005, /**< Advance Storage
Packit dd8086
                                                         Magneto-Optical */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_CD_ROM        = 0x0008, /**< Read only Compact Disc
Packit dd8086
                                                         capable */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_CD_R          = 0x0009, /**< Write once Compact Disc
Packit dd8086
                                                         capable */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_CD_RW         = 0x000A, /**< CD-RW Re-writable
Packit dd8086
                                                         Compact Disc capable */
Packit dd8086
        
Packit dd8086
        CDIO_MMC_FEATURE_PROF_DVD_ROM       = 0x0010, /**< Read only DVD */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_DVD_R_SEQ     = 0x0011, /**< Re-recordable DVD using
Packit dd8086
                                                         Sequential recording */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_DVD_RAM       = 0x0012, /**< Re-writable DVD */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_DVD_RW_RO     = 0x0013, /**< Re-recordable DVD using
Packit dd8086
                                                         Restricted Overwrite */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_DVD_RW_SEQ    = 0x0014, /**< Re-recordable DVD using
Packit dd8086
                                                         Sequential recording */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_DVD_R_DL_SEQ  = 0x0015, /**< DVD-R/DL sequential
Packit dd8086
                                                         recording */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_DVD_R_DL_JR   = 0x0016, /**< DVD-R/DL layer jump 
Packit dd8086
                                                         recording */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_DVD_PRW       = 0x001A, /**< DVD+RW - DVD ReWritable */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_DVD_PR        = 0x001B, /**< DVD+R - DVD Recordable */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_DDCD_ROM      = 0x0020, /**< Read only  DDCD */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_DDCD_R        = 0x0021, /**< DDCD-R Write only DDCD */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_DDCD_RW       = 0x0022, /**< Re-Write only DDCD */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_DVD_PRW_DL    = 0x002A, /**< "DVD+RW/DL */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_DVD_PR_DL     = 0x002B, /**< DVD+R - DVD Recordable 
Packit dd8086
                                                         double layer */
Packit dd8086
        
Packit dd8086
        CDIO_MMC_FEATURE_PROF_BD_ROM        = 0x0040, /**< BD-ROM */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_BD_SEQ        = 0x0041, /**< BD-R sequential 
Packit dd8086
                                                         recording */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_BD_R_RANDOM   = 0x0042, /**< BD-R random recording */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_BD_RE         = 0x0043, /**< BD-RE */
Packit dd8086
        
Packit dd8086
        CDIO_MMC_FEATURE_PROF_HD_DVD_ROM    = 0x0050, /**< HD-DVD-ROM */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_HD_DVD_R      = 0x0051, /**< HD-DVD-R */
Packit dd8086
        CDIO_MMC_FEATURE_PROF_HD_DVD_RAM    = 0x0052, /**<"HD-DVD-RAM */
Packit dd8086
        
Packit dd8086
        CDIO_MMC_FEATURE_PROF_NON_CONFORM   = 0xFFFF, /**< The Logical Unit does not
Packit dd8086
                                                         conform to any Profile. */
Packit dd8086
    } cdio_mmc_feature_profile_t;
Packit dd8086
  
Packit dd8086
    /**
Packit dd8086
       @param i_feature MMC feature number
Packit dd8086
       @return string containing the name of the given feature
Packit dd8086
    */
Packit dd8086
    const char *mmc_feature2str( int i_feature );
Packit dd8086
    
Packit dd8086
    /**
Packit dd8086
       Get drive capabilities for a device.
Packit dd8086
       @param p_cdio the CD object to be acted upon.
Packit dd8086
       @param p_read_cap  list of read capabilities that are set on return
Packit dd8086
       @param p_write_cap list of write capabilities that are set on return
Packit dd8086
       @param p_misc_cap  list of miscellaneous capabilities (that are neither
Packit dd8086
       read nor write related) that are set on return
Packit dd8086
    */
Packit dd8086
    void mmc_get_drive_cap ( CdIo_t *p_cdio,
Packit dd8086
                             /*out*/ cdio_drive_read_cap_t  *p_read_cap,
Packit dd8086
                             /*out*/ cdio_drive_write_cap_t *p_write_cap,
Packit dd8086
                             /*out*/ cdio_drive_misc_cap_t  *p_misc_cap);
Packit dd8086
    
Packit dd8086
    /**
Packit dd8086
       Return a string containing the name of the given feature
Packit dd8086
    */
Packit dd8086
    const char *mmc_feature_profile2str( int i_feature_profile );
Packit dd8086
Packit dd8086
    bool mmc_is_disctype_bd(cdio_mmc_feature_profile_t disctype);
Packit dd8086
    bool mmc_is_disctype_cdrom(cdio_mmc_feature_profile_t disctype);
Packit dd8086
    bool mmc_is_disctype_dvd(cdio_mmc_feature_profile_t disctype);
Packit dd8086
    bool mmc_is_disctype_hd_dvd (cdio_mmc_feature_profile_t disctype);
Packit dd8086
    bool mmc_is_disctype_overwritable (cdio_mmc_feature_profile_t disctype);
Packit dd8086
    bool mmc_is_disctype_rewritable(cdio_mmc_feature_profile_t disctype);
Packit dd8086
    
Packit dd8086
    /** The default read timeout is 3 minutes. */
Packit dd8086
#define MMC_READ_TIMEOUT_DEFAULT 3*60*1000
Packit dd8086
    
Packit dd8086
    /**
Packit dd8086
       Set this to the maximum value in milliseconds that we will
Packit dd8086
       wait on an MMC read command.  
Packit dd8086
    */
Packit dd8086
    extern uint32_t mmc_read_timeout_ms;
Packit dd8086
    
Packit dd8086
    /**
Packit dd8086
       Maps a mmc_sense_key_t into a string name.
Packit dd8086
    */
Packit dd8086
    extern const char mmc_sense_key2str[16][40];
Packit dd8086
Packit dd8086
    /**
Packit dd8086
       The default timeout (non-read) is 6 seconds. 
Packit dd8086
    */
Packit dd8086
#define MMC_TIMEOUT_DEFAULT 6000
Packit dd8086
Packit dd8086
    /**
Packit dd8086
       Set this to the maximum value in milliseconds that we will
Packit dd8086
       wait on an MMC command.  
Packit dd8086
    */
Packit dd8086
    extern uint32_t mmc_timeout_ms; 
Packit dd8086
Packit dd8086
#ifdef __cplusplus
Packit dd8086
}
Packit dd8086
#endif /* __cplusplus */
Packit dd8086
Packit dd8086
#endif /* CDIO_MMC_UTIL_H_ */
Packit dd8086
/* 
Packit dd8086
 * Local variables:
Packit dd8086
 *  c-file-style: "gnu"
Packit dd8086
 *  tab-width: 8
Packit dd8086
 *  indent-tabs-mode: nil
Packit dd8086
 * End:
Packit dd8086
 */