|
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 |
}
|