Blame include/cdio++/device.hpp

Packit dd8086
/*
Packit dd8086
    Copyright (C) 2005, 2006, 2008, 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
/** \file device.hpp
Packit dd8086
 *
Packit dd8086
 *  \brief C++ header for driver- or device-related libcdio calls.  
Packit dd8086
 *         ("device" includes CD-image reading devices.)
Packit dd8086
 */
Packit dd8086
Packit dd8086
/*! 
Packit dd8086
  Free resources associated with CD-ROM Device/Image. After this we 
Packit dd8086
  must do another open before any more reading.
Packit dd8086
*/
Packit dd8086
bool 
Packit dd8086
close()
Packit dd8086
{
Packit dd8086
  cdio_destroy(p_cdio);
Packit dd8086
  p_cdio = (CdIo_t *) NULL;
Packit dd8086
  return true;
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Eject media in CD drive if there is a routine to do so. 
Packit dd8086
  
Packit dd8086
  If the CD is ejected, object is destroyed.
Packit dd8086
*/
Packit dd8086
void
Packit dd8086
ejectMedia () 
Packit dd8086
{
Packit dd8086
  driver_return_code_t drc = cdio_eject_media(&p_cdio);
Packit dd8086
  possible_throw_device_exception(drc);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Free device list returned by GetDevices
Packit dd8086
  
Packit dd8086
  @param device_list list returned by GetDevices
Packit dd8086
  
Packit dd8086
  @see GetDevices
Packit dd8086
  
Packit dd8086
*/
Packit dd8086
void 
Packit dd8086
freeDeviceList (char * device_list[]) 
Packit dd8086
{
Packit dd8086
  cdio_free_device_list(device_list);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
    Get the value associatied with key. 
Packit dd8086
    
Packit dd8086
    @param key the key to retrieve
Packit dd8086
    @return the value associatd with "key" or NULL if p_cdio is NULL
Packit dd8086
    or "key" does not exist.
Packit dd8086
  */
Packit dd8086
const char * 
Packit dd8086
getArg (const char key[]) 
Packit dd8086
{
Packit dd8086
  return cdio_get_arg (p_cdio, key);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!  
Packit dd8086
  Return an opaque CdIo_t pointer for the given track object.
Packit dd8086
*/
Packit dd8086
CdIo_t *getCdIo()
Packit dd8086
{
Packit dd8086
  return p_cdio;
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Get the CD device name for the object.
Packit dd8086
  
Packit dd8086
  @return a string containing the CD device for this object or NULL is
Packit dd8086
  if we couldn't get a device anme.
Packit dd8086
  
Packit dd8086
  In some situations of drivers or OS's we can't find a CD device if
Packit dd8086
  there is no media in it and it is possible for this routine to return
Packit dd8086
  NULL even though there may be a hardware CD-ROM.
Packit dd8086
*/
Packit dd8086
char *
Packit dd8086
getDevice () 
Packit dd8086
{
Packit dd8086
  return cdio_get_default_device(p_cdio);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Get the what kind of device we've got.
Packit dd8086
  
Packit dd8086
  @param p_read_cap pointer to return read capabilities
Packit dd8086
  @param p_write_cap pointer to return write capabilities
Packit dd8086
  @param p_misc_cap pointer to return miscellaneous other capabilities
Packit dd8086
  
Packit dd8086
  In some situations of drivers or OS's we can't find a CD device if
Packit dd8086
  there is no media in it and it is possible for this routine to return
Packit dd8086
  NULL even though there may be a hardware CD-ROM.
Packit dd8086
*/
Packit dd8086
void 
Packit dd8086
getDriveCap (cdio_drive_read_cap_t  &read_cap,
Packit dd8086
             cdio_drive_write_cap_t &write_cap,
Packit dd8086
             cdio_drive_misc_cap_t  &misc_cap) 
Packit dd8086
{
Packit dd8086
  cdio_get_drive_cap(p_cdio, &read_cap, &write_cap, &misc_cap);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Get a string containing the name of the driver in use.
Packit dd8086
  
Packit dd8086
  @return a string with driver name or NULL if CdIo_t is NULL (we
Packit dd8086
  haven't initialized a specific device.
Packit dd8086
*/
Packit dd8086
const char *
Packit dd8086
getDriverName () 
Packit dd8086
{
Packit dd8086
  return cdio_get_driver_name(p_cdio);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Get the driver id. 
Packit dd8086
  if CdIo_t is NULL (we haven't initialized a specific device driver), 
Packit dd8086
  then return DRIVER_UNKNOWN.
Packit dd8086
  
Packit dd8086
  @return the driver id..
Packit dd8086
*/
Packit dd8086
driver_id_t 
Packit dd8086
getDriverId () 
Packit dd8086
{
Packit dd8086
  return cdio_get_driver_id(p_cdio);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*! 
Packit dd8086
  Get the CD-ROM hardware info via a SCSI MMC INQUIRY command.
Packit dd8086
  False is returned if we had an error getting the information.
Packit dd8086
*/
Packit dd8086
bool 
Packit dd8086
getHWinfo ( /*out*/ cdio_hwinfo_t &hw_info ) 
Packit dd8086
{
Packit dd8086
  return cdio_get_hwinfo(p_cdio, &hw_info);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*! Get the LSN of the first track of the last session of
Packit dd8086
  on the CD.
Packit dd8086
  
Packit dd8086
  @param i_last_session pointer to the session number to be returned.
Packit dd8086
*/
Packit dd8086
void
Packit dd8086
getLastSession (/*out*/ lsn_t &i_last_session) 
Packit dd8086
{
Packit dd8086
  driver_return_code_t drc = cdio_get_last_session(p_cdio, &i_last_session);
Packit dd8086
  possible_throw_device_exception(drc);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*! 
Packit dd8086
  Find out if media has changed since the last call.
Packit dd8086
  @return 1 if media has changed since last call, 0 if not. Error
Packit dd8086
  return codes are the same as driver_return_code_t
Packit dd8086
*/
Packit dd8086
int 
Packit dd8086
getMediaChanged() 
Packit dd8086
{
Packit dd8086
  return cdio_get_media_changed(p_cdio);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*! True if CD-ROM understand ATAPI commands. */
Packit dd8086
bool_3way_t 
Packit dd8086
haveATAPI ()
Packit dd8086
{
Packit dd8086
  return cdio_have_atapi(p_cdio);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*! 
Packit dd8086
Packit dd8086
  Sets up to read from the device specified by psz_source.  An open
Packit dd8086
  routine should be called before using any read routine. If device
Packit dd8086
  object was previously opened it is closed first.
Packit dd8086
  
Packit dd8086
  @return true if open succeeded or false if error.
Packit dd8086
Packit dd8086
*/
Packit dd8086
bool 
Packit dd8086
open(const char *psz_source)
Packit dd8086
{
Packit dd8086
  if (p_cdio) cdio_destroy(p_cdio);
Packit dd8086
  p_cdio = cdio_open_cd(psz_source);
Packit dd8086
  return NULL != p_cdio ;
Packit dd8086
}
Packit dd8086
Packit dd8086
/*! 
Packit dd8086
Packit dd8086
  Sets up to read from the device specified by psz_source and access
Packit dd8086
  mode.  An open routine should be called before using any read
Packit dd8086
  routine. If device object was previously opened it is "closed".
Packit dd8086
  
Packit dd8086
  @return true if open succeeded or false if error.
Packit dd8086
*/
Packit dd8086
bool 
Packit dd8086
open (const char *psz_source, driver_id_t driver_id, 
Packit dd8086
      const char *psz_access_mode = (const char *) NULL) 
Packit dd8086
{
Packit dd8086
  if (p_cdio) cdio_destroy(p_cdio);
Packit dd8086
  if (psz_access_mode)
Packit dd8086
    p_cdio = cdio_open_am(psz_source, driver_id, psz_access_mode);
Packit dd8086
  else 
Packit dd8086
    p_cdio = cdio_open(psz_source, driver_id);
Packit dd8086
  return NULL != p_cdio ;
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Set the blocksize for subsequent reads. 
Packit dd8086
*/
Packit dd8086
void
Packit dd8086
setBlocksize ( int i_blocksize )
Packit dd8086
{
Packit dd8086
  driver_return_code_t drc = cdio_set_blocksize ( p_cdio, i_blocksize );
Packit dd8086
  possible_throw_device_exception(drc);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
    Set the drive speed. 
Packit dd8086
*/
Packit dd8086
void
Packit dd8086
setSpeed ( int i_speed ) 
Packit dd8086
{
Packit dd8086
  driver_return_code_t drc = cdio_set_speed ( p_cdio, i_speed );
Packit dd8086
  possible_throw_device_exception(drc);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
    Set the arg "key" with "value" in "p_cdio".
Packit dd8086
    
Packit dd8086
    @param key the key to set
Packit dd8086
    @param value the value to assocaiate with key
Packit dd8086
*/
Packit dd8086
void
Packit dd8086
setArg (const char key[], const char value[]) 
Packit dd8086
{
Packit dd8086
  driver_return_code_t drc = cdio_set_arg (p_cdio, key, value);
Packit dd8086
  possible_throw_device_exception(drc);
Packit dd8086
}