mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	* [iso] add ISO support part 5 (cleanup)
* remove unneeded headers
This commit is contained in:
		
							parent
							
								
									be9956aaee
								
							
						
					
					
						commit
						e4d621d088
					
				
					 10 changed files with 96 additions and 2519 deletions
				
			
		|  | @ -1,146 +0,0 @@ | ||||||
| /* -*- c -*-
 |  | ||||||
|     Copyright (C) 2005, 2007, 2008 Rocky Bernstein <rocky@gnu.org> |  | ||||||
| 
 |  | ||||||
|     This program is free software: you can redistribute it and/or modify |  | ||||||
|     it under the terms of the GNU General Public License as published by |  | ||||||
|     the Free Software Foundation, either version 3 of the License, or |  | ||||||
|     (at your option) any later version. |  | ||||||
| 
 |  | ||||||
|     This program is distributed in the hope that it will be useful, |  | ||||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|     GNU General Public License for more details. |  | ||||||
| 
 |  | ||||||
|     You should have received a copy of the GNU General Public License |  | ||||||
|     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| /** \file audio.h 
 |  | ||||||
|  * |  | ||||||
|  *  \brief The top-level header for CD audio-related libcdio |  | ||||||
|  *         calls.  These control playing of the CD-ROM through its  |  | ||||||
|  *         line-out jack. |  | ||||||
|  */ |  | ||||||
| #ifndef __CDIO_AUDIO_H__ |  | ||||||
| #define __CDIO_AUDIO_H__ |  | ||||||
| 
 |  | ||||||
| #include <cdio/types.h> |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
|   /*! This struct is used by the cdio_audio_read_subchannel */ |  | ||||||
|   typedef struct cdio_subchannel_s  |  | ||||||
|   { |  | ||||||
|     uint8_t format; |  | ||||||
|     uint8_t audio_status; |  | ||||||
|     uint8_t address:	4; |  | ||||||
|     uint8_t control:	4; |  | ||||||
|     uint8_t track; |  | ||||||
|     uint8_t index; |  | ||||||
|     msf_t   abs_addr; |  | ||||||
|     msf_t   rel_addr; |  | ||||||
|   } cdio_subchannel_t; |  | ||||||
|    |  | ||||||
|   /*! This struct is used by cdio_audio_get_volume and cdio_audio_set_volume */ |  | ||||||
|   typedef struct cdio_audio_volume_s |  | ||||||
|   { |  | ||||||
|     uint8_t level[4]; |  | ||||||
|   } cdio_audio_volume_t; |  | ||||||
|    |  | ||||||
| 
 |  | ||||||
|   /*! This struct is used by the CDROMPLAYTRKIND ioctl */ |  | ||||||
|   typedef struct cdio_track_index_s |  | ||||||
|   { |  | ||||||
|     uint8_t	i_start_track;	/**< start track */ |  | ||||||
|     uint8_t	i_start_index;	/**< start index */ |  | ||||||
|     uint8_t	i_end_track;	/**< end track */ |  | ||||||
|     uint8_t	i_end_index;	/**< end index */ |  | ||||||
|   } cdio_track_index_t; |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Get volume of an audio CD. |  | ||||||
|      |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
|     @param p_volume place to put the list of volume outputs levels |  | ||||||
| 
 |  | ||||||
|     p_volume can be NULL in which case we return only whether the driver |  | ||||||
|     has the ability to get the volume or not. |  | ||||||
| 
 |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t cdio_audio_get_volume (CdIo_t *p_cdio,  /*out*/ |  | ||||||
| 					      cdio_audio_volume_t *p_volume); |  | ||||||
| 
 |  | ||||||
|   /*! 
 |  | ||||||
|     Return the number of seconds (discarding frame portion) of an MSF  |  | ||||||
|   */ |  | ||||||
|   uint32_t cdio_audio_get_msf_seconds(msf_t *p_msf); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Pause playing CD through analog output |  | ||||||
| 
 |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t cdio_audio_pause (CdIo_t *p_cdio); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Playing CD through analog output at the given MSF. |  | ||||||
| 
 |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
|     @param p_start_msf pointer to staring MSF |  | ||||||
|     @param p_end_msf pointer to ending MSF |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t cdio_audio_play_msf (CdIo_t *p_cdio,  |  | ||||||
| 					    /*in*/msf_t *p_start_msf, |  | ||||||
| 					    /*in*/ msf_t *p_end_msf); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Playing CD through analog output at the desired track and index |  | ||||||
| 
 |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
|     @param p_track_index location to start/end. |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t cdio_audio_play_track_index  |  | ||||||
|   ( CdIo_t *p_cdio,  cdio_track_index_t *p_track_index); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Get subchannel information. |  | ||||||
| 
 |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
|     @param p_subchannel place for returned subchannel information |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t cdio_audio_read_subchannel (CdIo_t *p_cdio,  |  | ||||||
| 						   /*out*/ cdio_subchannel_t *p_subchannel); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Resume playing an audio CD. |  | ||||||
|      |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
| 
 |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t cdio_audio_resume (CdIo_t *p_cdio); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Set volume of an audio CD. |  | ||||||
|      |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
|     @param p_volume place for returned volume-level information |  | ||||||
| 
 |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t cdio_audio_set_volume (CdIo_t *p_cdio, /*out*/ |  | ||||||
| 					      cdio_audio_volume_t *p_volume); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Stop playing an audio CD. |  | ||||||
|      |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
| 
 |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t cdio_audio_stop (CdIo_t *p_cdio); |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
| #endif /* __CDIO_AUDIO_H__ */ |  | ||||||
|  | @ -61,7 +61,6 @@ extern "C" { | ||||||
| /* Drive(r)/Device-related functions. Perhaps we should break out 
 | /* Drive(r)/Device-related functions. Perhaps we should break out 
 | ||||||
|    Driver from device? |    Driver from device? | ||||||
| */ | */ | ||||||
| // TODO: die die die
 |  | ||||||
| #include <cdio/device.h> | #include <cdio/device.h> | ||||||
| 
 | 
 | ||||||
| /* Disc-related functions. */ | /* Disc-related functions. */ | ||||||
|  | @ -73,11 +72,9 @@ extern "C" { | ||||||
| #include <cdio/read.h> | #include <cdio/read.h> | ||||||
| 
 | 
 | ||||||
| /* CD-Text-related functions. */ | /* CD-Text-related functions. */ | ||||||
| // TODO: die die die
 | //#include <cdio/cdtext.h>
 | ||||||
| #include <cdio/cdtext.h> |  | ||||||
| 
 | 
 | ||||||
| /* Track-related functions. */ | /* Track-related functions. */ | ||||||
| // TODO: die die die
 | //#include <cdio/track.h>
 | ||||||
| #include <cdio/track.h> |  | ||||||
| 
 | 
 | ||||||
| #endif /* __CDIO_H__ */ | #endif /* __CDIO_H__ */ | ||||||
|  |  | ||||||
|  | @ -1,177 +0,0 @@ | ||||||
| /*
 |  | ||||||
|     $Id: cdtext.h,v 1.14 2008/03/25 15:59:08 karl Exp $ |  | ||||||
| 
 |  | ||||||
|     Copyright (C) 2004, 2005, 2008 Rocky Bernstein <rocky@gnu.org> |  | ||||||
|     adapted from cuetools |  | ||||||
|     Copyright (C) 2003 Svend Sanjay Sorensen <ssorensen@fastmail.fm> |  | ||||||
| 
 |  | ||||||
|     This program is free software: you can redistribute it and/or modify |  | ||||||
|     it under the terms of the GNU General Public License as published by |  | ||||||
|     the Free Software Foundation, either version 3 of the License, or |  | ||||||
|     (at your option) any later version. |  | ||||||
| 
 |  | ||||||
|     This program is distributed in the hope that it will be useful, |  | ||||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|     GNU General Public License for more details. |  | ||||||
| 
 |  | ||||||
|     You should have received a copy of the GNU General Public License |  | ||||||
|     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 |  | ||||||
| */ |  | ||||||
| /*!
 |  | ||||||
|  * \file cdtext.h  |  | ||||||
|  * |  | ||||||
|  * \brief The top-level header for CD-Text information. Applications |  | ||||||
|  *  include this for CD-Text access. |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
| #ifndef __CDIO_CDTEXT_H__ |  | ||||||
| #define __CDIO_CDTEXT_H__ |  | ||||||
| 
 |  | ||||||
| #include <cdio/cdio.h> |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
| #define MAX_CDTEXT_FIELDS 13 |  | ||||||
| #define MIN_CDTEXT_FIELD  0 |  | ||||||
| #define MAX_CDTEXT_DATA_LENGTH 5000 |  | ||||||
| #define MAX_CDTEXT_GENRE_CODE 28 |  | ||||||
| 
 |  | ||||||
|    |  | ||||||
|   /*! \brief structure for holding CD-Text information
 |  | ||||||
| 
 |  | ||||||
|   @see cdtext_init, cdtext_destroy, cdtext_get, and cdtext_set. |  | ||||||
|   */ |  | ||||||
|   struct cdtext { |  | ||||||
|     char *field[MAX_CDTEXT_FIELDS]; |  | ||||||
|   }; |  | ||||||
|   typedef struct cdtext cdtext_track_t; |  | ||||||
| 
 |  | ||||||
|   struct cdtext_s { |  | ||||||
|     cdtext_track_t track[100];  /* cdtext for track 1..99. 0 represents cd-text of disc */ |  | ||||||
|     uint16_t genre_code;        /* genre code */ |  | ||||||
|     uint8_t  block; |  | ||||||
|     char encoding[16];          /* encoding of character strings */ |  | ||||||
|     char language[3];           /* ISO 639-1 (2 letter) language code */ |  | ||||||
|   }; |  | ||||||
|    |  | ||||||
|   /*! \brief A list of all of the CD-Text fields. Because
 |  | ||||||
|     the interval has no gaps, we can use ++ to iterate over fields. |  | ||||||
|    */ |  | ||||||
|   typedef enum { |  | ||||||
|     CDTEXT_ARRANGER   =  0,   /**< name(s) of the arranger(s) */ |  | ||||||
|     CDTEXT_COMPOSER   =  1,   /**< name(s) of the composer(s) */ |  | ||||||
|     CDTEXT_DISCID     =  2,   /**< disc identification information */ |  | ||||||
|     CDTEXT_GENRE      =  3,   /**< genre identification and genre information */ |  | ||||||
|     CDTEXT_MESSAGE    =  4,   /**< ISRC code of each track */ |  | ||||||
|     CDTEXT_ISRC       =  5,   /**< message(s) from the content provider or artist */ |  | ||||||
|     CDTEXT_PERFORMER  =  6,   /**< name(s) of the performer(s) */ |  | ||||||
|     CDTEXT_SIZE_INFO  =  7,   /**< size information of the block */ |  | ||||||
|     CDTEXT_SONGWRITER =  8,   /**< name(s) of the songwriter(s) */ |  | ||||||
|     CDTEXT_TITLE      =  9,   /**< title of album name or track titles */ |  | ||||||
|     CDTEXT_TOC_INFO   = 10,   /**< table of contents information */ |  | ||||||
|     CDTEXT_TOC_INFO2  = 11,   /**< second table of contents information */ |  | ||||||
|     CDTEXT_UPC_EAN    = 12, |  | ||||||
|     CDTEXT_INVALID    = MAX_CDTEXT_FIELDS |  | ||||||
|   } cdtext_field_t; |  | ||||||
| 
 |  | ||||||
|   /*! Return string representation of the enum values above */ |  | ||||||
|   const char *cdtext_field2str (cdtext_field_t i); |  | ||||||
| 
 |  | ||||||
|   /*! CD-Text genre codes */ |  | ||||||
|   typedef enum { |  | ||||||
|     CDIO_CDTEXT_GENRE_UNUSED         =  0,        /**< not used  */ |  | ||||||
|     CDIO_CDTEXT_GENRE_UNDEFINED      =  1,        /**< not defined */ |  | ||||||
|     CDIO_CDTEXT_GENRE_ADULT_CONTEMP  =  2,        /**< Adult Contemporary       */ |  | ||||||
|     CDIO_CDTEXT_GENRE_ALT_ROCK       =  3,        /**< Alternative Rock         */ |  | ||||||
|     CDIO_CDTEXT_GENRE_CHILDRENS      =  4,        /**< Childrens Music          */ |  | ||||||
|     CDIO_CDTEXT_GENRE_CLASSIC        =  5,        /**< Classical                */ |  | ||||||
|     CDIO_CDTEXT_GENRE_CHRIST_CONTEMP =  6,        /**< Contemporary Christian   */ |  | ||||||
|     CDIO_CDTEXT_GENRE_COUNTRY        =  7,        /**< Country                  */ |  | ||||||
|     CDIO_CDTEXT_GENRE_DANCE          =  8,        /**< Dance                    */ |  | ||||||
|     CDIO_CDTEXT_GENRE_EASY_LISTENING =  9,        /**< Easy Listening           */ |  | ||||||
|     CDIO_CDTEXT_GENRE_EROTIC         = 10,        /**< Erotic                   */ |  | ||||||
|     CDIO_CDTEXT_GENRE_FOLK           = 11,        /**< Folk                     */ |  | ||||||
|     CDIO_CDTEXT_GENRE_GOSPEL         = 12,        /**< Gospel                   */ |  | ||||||
|     CDIO_CDTEXT_GENRE_HIPHOP         = 13,        /**< Hip Hop                  */ |  | ||||||
|     CDIO_CDTEXT_GENRE_JAZZ           = 14,        /**< Jazz                     */ |  | ||||||
|     CDIO_CDTEXT_GENRE_LATIN          = 15,        /**< Latin                    */ |  | ||||||
|     CDIO_CDTEXT_GENRE_MUSICAL        = 16,        /**< Musical                  */ |  | ||||||
|     CDIO_CDTEXT_GENRE_NEWAGE         = 17,        /**< New Age                  */ |  | ||||||
|     CDIO_CDTEXT_GENRE_OPERA          = 18,        /**< Opera                    */ |  | ||||||
|     CDIO_CDTEXT_GENRE_OPERETTA       = 19,        /**< Operetta                 */ |  | ||||||
|     CDIO_CDTEXT_GENRE_POP            = 20,        /**< Pop Music                */ |  | ||||||
|     CDIO_CDTEXT_GENRE_RAP            = 21,        /**< RAP                      */ |  | ||||||
|     CDIO_CDTEXT_GENRE_REGGAE         = 22,        /**< Reggae                   */ |  | ||||||
|     CDIO_CDTEXT_GENRE_ROCK           = 23,        /**< Rock Music               */ |  | ||||||
|     CDIO_CDTEXT_GENRE_RYTHMANDBLUES  = 24,        /**< Rhythm & Blues           */ |  | ||||||
|     CDIO_CDTEXT_GENRE_SOUNDEFFECTS   = 25,        /**< Sound Effects            */ |  | ||||||
|     CDIO_CDTEXT_GENRE_SOUNDTRACK     = 26,        /**< Soundtrack               */ |  | ||||||
|     CDIO_CDTEXT_GENRE_SPOKEN_WORD    = 27,        /**< Spoken Word              */ |  | ||||||
|     CDIO_CDTEXT_GENRE_WORLD_MUSIC    = 28         /**< World Music              */ |  | ||||||
|   } cdtext_genre_t; |  | ||||||
|    |  | ||||||
|   /*! Return string representation of the given genre code */ |  | ||||||
|   const char *cdtext_genre2str (cdtext_genre_t i); |  | ||||||
|    |  | ||||||
|   /*! Initialize a new cdtext structure.
 |  | ||||||
|     When the structure is no longer needed, release the  |  | ||||||
|     resources using cdtext_delete. |  | ||||||
|   */ |  | ||||||
|   void cdtext_init (cdtext_t *cdtext); |  | ||||||
| 
 |  | ||||||
|   /*! Parse raw CD-Text data into cdtext structure */  |  | ||||||
|   bool cdtext_data_init(cdtext_t *cdtext, uint8_t *wdata, size_t length); |  | ||||||
|    |  | ||||||
|   /*! Free memory assocated with cdtext*/ |  | ||||||
|   void cdtext_destroy (cdtext_t *cdtext); |  | ||||||
|    |  | ||||||
|   /*! returns an allocated string associated with the given field.  NULL is
 |  | ||||||
|     returned if key is CDTEXT_INVALID or the field is not set. |  | ||||||
| 
 |  | ||||||
|     The user needs to free the string when done with it. |  | ||||||
| 
 |  | ||||||
|     @see cdio_get_const to retrieve a constant string that doesn't |  | ||||||
|     have to be freed. |  | ||||||
|   */ |  | ||||||
|   char *cdtext_get (cdtext_field_t key, track_t track, const cdtext_t *cdtext); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|   /*! returns a const string associated with the given field.  NULL is
 |  | ||||||
|     returned if key is CDTEXT_INVALID or the field is not set. |  | ||||||
| 
 |  | ||||||
|     Don't use the string when the cdtext object (i.e. the CdIo_t object |  | ||||||
|     you got it from) is no longer valid. |  | ||||||
| 
 |  | ||||||
|     @see cdio_get to retrieve an allocated string that persists past |  | ||||||
|     the cdtext object. |  | ||||||
|   */ |  | ||||||
|   const char *cdtext_get_const (cdtext_field_t key, track_t track, const cdtext_t *cdtext); |  | ||||||
|    |  | ||||||
|   /*!
 |  | ||||||
|     returns enum of keyword if key is a CD-Text keyword,  |  | ||||||
|     returns MAX_CDTEXT_FIELDS non-zero otherwise. |  | ||||||
|   */ |  | ||||||
|   cdtext_field_t cdtext_is_keyword (const char *key); |  | ||||||
|    |  | ||||||
|   /*! 
 |  | ||||||
|     sets cdtext's keyword entry to field  |  | ||||||
|   */ |  | ||||||
|   void cdtext_set (cdtext_field_t key, track_t track, const char *value, cdtext_t *cdtext); |  | ||||||
|    |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
| #endif /* __CDIO_CDTEXT_H__ */ |  | ||||||
|  |  | ||||||
| /* 
 |  | ||||||
|  * Local variables: |  | ||||||
|  *  c-file-style: "gnu" |  | ||||||
|  *  tab-width: 8 |  | ||||||
|  *  indent-tabs-mode: nil |  | ||||||
|  * End: |  | ||||||
|  */ |  | ||||||
|  | @ -1,811 +0,0 @@ | ||||||
| /*
 |  | ||||||
|     Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 |  | ||||||
|                   Rocky Bernstein <rocky@gnu.org> |  | ||||||
| 
 |  | ||||||
|     This program is free software: you can redistribute it and/or modify |  | ||||||
|     it under the terms of the GNU General Public License as published by |  | ||||||
|     the Free Software Foundation, either version 3 of the License, or |  | ||||||
|     (at your option) any later version. |  | ||||||
| 
 |  | ||||||
|     This program is distributed in the hope that it will be useful, |  | ||||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|     GNU General Public License for more details. |  | ||||||
| 
 |  | ||||||
|     You should have received a copy of the GNU General Public License |  | ||||||
|     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| /**
 |  | ||||||
|    \file mmc.h  |  | ||||||
|     |  | ||||||
|    \brief Common definitions for MMC (Multimedia Commands). Applications |  | ||||||
|    include this for direct MMC access. |  | ||||||
| 
 |  | ||||||
|    The documents we make use of are described in several |  | ||||||
|    specifications made by the SCSI committee T10 |  | ||||||
|    http://www.t10.org. In particular, SCSI Primary Commands (SPC),
 |  | ||||||
|    SCSI Block Commands (SBC), and Multi-Media Commands (MMC). These |  | ||||||
|    documents generally have a numeric level number appended. For |  | ||||||
|    example SPC-3 refers to ``SCSI Primary Commands - 3'. |  | ||||||
| 
 |  | ||||||
|    In year 2010 the current versions were SPC-3, SBC-2, MMC-5. |  | ||||||
| 
 |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| #ifndef __CDIO_MMC_H__ |  | ||||||
| #define __CDIO_MMC_H__ |  | ||||||
| 
 |  | ||||||
| #include <cdio/cdio.h> |  | ||||||
| #include <cdio/types.h> |  | ||||||
| #include <cdio/dvd.h> |  | ||||||
| #include <cdio/audio.h> |  | ||||||
| #include <cdio/mmc_util.h> |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
| /* On GNU/Linux see <linux/byteorder/big_endian.h> and 
 |  | ||||||
|    <linux/byteorder/little_endian.h> |  | ||||||
| */ |  | ||||||
| #ifdef WORDS_BIGENDIAN |  | ||||||
| #  if !defined(__LITTLE_ENDIAN_BITFIELD) && !defined(__BIG_ENDIAN_BITFIELD) |  | ||||||
| #  define __MMC_BIG_ENDIAN_BITFIELD |  | ||||||
| #  endif |  | ||||||
| #else  |  | ||||||
| #  if !defined(__LITTLE_ENDIAN_BITFIELD) && !defined(__BIG_ENDIAN_BITFIELD) |  | ||||||
| #  define __MMC_LITTLE_ENDIAN_BITFIELD |  | ||||||
| #  endif |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
|    /**
 |  | ||||||
|       Structure of a SCSI/MMC sense reply. |  | ||||||
|       |  | ||||||
|       This has been adapted from GNU/Linux request_sense of <linux/cdrom.h> |  | ||||||
|       include this for direct MMC access. |  | ||||||
|       See SCSI Primary Commands-2 (SPC-3) table 26 page 38. |  | ||||||
|     */ |  | ||||||
|     typedef struct cdio_mmc_request_sense { |  | ||||||
| #if defined(__MMC_BIG_ENDIAN_BITFIELD) |  | ||||||
| 	uint8_t valid		: 1;  /**< valid bit is 1 if info is valid */ |  | ||||||
| 	uint8_t error_code	: 7; |  | ||||||
| #else |  | ||||||
| 	uint8_t error_code	: 7; |  | ||||||
| 	uint8_t valid		: 1;  /**< valid bit is 1 if info is valid */ |  | ||||||
| #endif |  | ||||||
| 	uint8_t segment_number; |  | ||||||
| #if defined(__MMC_BIG_ENDIAN_BITFIELD) |  | ||||||
| 	uint8_t filemark	: 1; /**< manditory in sequential
 |  | ||||||
|                                       * access devices */ |  | ||||||
| 	uint8_t eom	        : 1; /**< end of medium. manditory in
 |  | ||||||
|                                       * sequential access and |  | ||||||
|                                       * printer devices */ |  | ||||||
| 	uint8_t ili		: 1; /**< incorrect length indicator */ |  | ||||||
| 	uint8_t reserved1	: 1; |  | ||||||
| 	uint8_t sense_key	: 4; |  | ||||||
| #else |  | ||||||
| 	uint8_t sense_key	: 4; |  | ||||||
| 	uint8_t reserved1	: 1; |  | ||||||
| 	uint8_t ili		: 1; /**< incorrect length indicator */ |  | ||||||
| 	uint8_t eom	        : 1; /**< end of medium. manditory in
 |  | ||||||
|                                       * sequential access and |  | ||||||
|                                       * printer devices */ |  | ||||||
| 	uint8_t filemark	: 1; /**< manditory in sequential
 |  | ||||||
|                                       * access devices */ |  | ||||||
| #endif |  | ||||||
| 	uint8_t information[4]; |  | ||||||
| 	uint8_t additional_sense_len; /**< Additional sense length (n-7) */ |  | ||||||
| 	uint8_t command_info[4];      /**< Command-specific information */ |  | ||||||
| 	uint8_t asc;                  /**< Additional sense code */ |  | ||||||
| 	uint8_t ascq;                 /**< Additional sense code qualifier */ |  | ||||||
| 	uint8_t fruc;                 /**< Field replaceable unit code */ |  | ||||||
| 	uint8_t sks[3];               /**< Sense-key specific */ |  | ||||||
| 	uint8_t asb[46];              /**< Additional sense bytes */ |  | ||||||
|     } cdio_mmc_request_sense_t; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     /**
 |  | ||||||
|        Meanings of the values of mmc_request_sense.sense_key |  | ||||||
|      */ |  | ||||||
|     typedef enum { |  | ||||||
|         CDIO_MMC_SENSE_KEY_NO_SENSE        =  0, |  | ||||||
|         CDIO_MMC_SENSE_KEY_RECOVERED_ERROR =  1, |  | ||||||
|         CDIO_MMC_SENSE_KEY_NOT_READY       =  2, |  | ||||||
|         CDIO_MMC_SENSE_KEY_MEDIUM_ERROR    =  3, |  | ||||||
|         CDIO_MMC_SENSE_KEY_HARDWARE_ERROR  =  4, |  | ||||||
|         CDIO_MMC_SENSE_KEY_ILLEGAL_REQUEST =  5, |  | ||||||
|         CDIO_MMC_SENSE_KEY_UNIT_ATTENTION  =  6, |  | ||||||
|         CDIO_MMC_SENSE_KEY_DATA_PROTECT    =  7, |  | ||||||
|         CDIO_MMC_SENSE_KEY_BLANK_CHECK     =  8, |  | ||||||
|         CDIO_MMC_SENSE_KEY_VENDOR_SPECIFIC =  9, |  | ||||||
|         CDIO_MMC_SENSE_KEY_COPY_ABORTED    = 10, |  | ||||||
|         CDIO_MMC_SENSE_KEY_ABORTED_COMMAND = 11, |  | ||||||
|         CDIO_MMC_SENSE_KEY_OBSOLETE        = 12, |  | ||||||
|     } cdio_mmc_sense_key_t; |  | ||||||
| 
 |  | ||||||
|     /**
 |  | ||||||
|        \brief The opcode-portion (generic packet commands) of an MMC command. |  | ||||||
|         |  | ||||||
|        In general, those opcodes that end in 6 take a 6-byte command |  | ||||||
|        descriptor, those that end in 10 take a 10-byte |  | ||||||
|        descriptor and those that in in 12 take a 12-byte descriptor.  |  | ||||||
|         |  | ||||||
|        (Not that you need to know that, but it seems to be a |  | ||||||
|        big deal in the MMC specification.) |  | ||||||
|         |  | ||||||
|     */ |  | ||||||
|     typedef enum { |  | ||||||
|   CDIO_MMC_GPCMD_TEST_UNIT_READY        = 0x00, /**< test if drive ready. */ |  | ||||||
|   CDIO_MMC_GPCMD_INQUIRY                = 0x12, /**< Request drive 
 |  | ||||||
|                                                    information. */ |  | ||||||
|   CDIO_MMC_GPCMD_MODE_SELECT_6          = 0x15, /**< Select medium 
 |  | ||||||
|                                                    (6 bytes). */ |  | ||||||
|   CDIO_MMC_GPCMD_MODE_SENSE_6           = 0x1a, /**< Get medium or device
 |  | ||||||
|                                                  information. Should be issued |  | ||||||
|                                                  before MODE SELECT to get |  | ||||||
|                                                  mode support or save current |  | ||||||
|                                                  settings. (6 bytes). */ |  | ||||||
|   CDIO_MMC_GPCMD_START_STOP_UNIT        = 0x1b, /**< Enable/disable Disc
 |  | ||||||
|                                                      operations. (6 bytes). */ |  | ||||||
|   CDIO_MMC_GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL  |  | ||||||
|                                         = 0x1e, /**< Enable/disable Disc 
 |  | ||||||
|                                                    removal. (6 bytes). */ |  | ||||||
| 
 |  | ||||||
|   /**
 |  | ||||||
|       Group 2 Commands (CDB's here are 10-bytes)    |  | ||||||
|   */ |  | ||||||
|   CDIO_MMC_GPCMD_READ_10                = 0x28, /**< Read data from drive 
 |  | ||||||
|                                                    (10 bytes). */ |  | ||||||
|   CDIO_MMC_GPCMD_READ_SUBCHANNEL        = 0x42, /**< Read Sub-Channel data.
 |  | ||||||
|                                                    (10 bytes). */ |  | ||||||
|   CDIO_MMC_GPCMD_READ_TOC               = 0x43, /**< READ TOC/PMA/ATIP. 
 |  | ||||||
|                                                    (10 bytes). */ |  | ||||||
|   CDIO_MMC_GPCMD_READ_HEADER            = 0x44, |  | ||||||
|   CDIO_MMC_GPCMD_PLAY_AUDIO_10          = 0x45, /**< Begin audio playing at
 |  | ||||||
|                                                    current position |  | ||||||
|                                                    (10 bytes). */ |  | ||||||
|   CDIO_MMC_GPCMD_GET_CONFIGURATION      = 0x46, /**< Get drive Capabilities 
 |  | ||||||
|                                                    (10 bytes) */ |  | ||||||
|   CDIO_MMC_GPCMD_PLAY_AUDIO_MSF         = 0x47, /**< Begin audio playing at
 |  | ||||||
|                                                    specified MSF (10 |  | ||||||
|                                                    bytes). */ |  | ||||||
|   CDIO_MMC_GPCMD_PLAY_AUDIO_TI          = 0x48, |  | ||||||
|   CDIO_MMC_GPCMD_PLAY_TRACK_REL_10      = 0x49, /**< Play audio at the track
 |  | ||||||
|                                                    relative LBA. (10 bytes). |  | ||||||
|                                                    Doesn't seem to be part |  | ||||||
|                                                    of MMC standards but is |  | ||||||
|                                                    handled by Plextor drives. |  | ||||||
|                                                 */ |  | ||||||
|                                                     |  | ||||||
|   CDIO_MMC_GPCMD_GET_EVENT_STATUS       = 0x4a, /**< Report events and 
 |  | ||||||
|                                                    Status. */ |  | ||||||
|   CDIO_MMC_GPCMD_PAUSE_RESUME           = 0x4b, /**< Stop or restart audio 
 |  | ||||||
|                                                    playback. (10 bytes).  |  | ||||||
|                                                    Used with a PLAY command. */ |  | ||||||
| 
 |  | ||||||
|   CDIO_MMC_GPCMD_READ_DISC_INFO         = 0x51, /**< Get CD information.
 |  | ||||||
|                                                    (10 bytes). */ |  | ||||||
|   CDIO_MMC_GPCMD_READ_TRACK_INFORMATION = 0x52, /**< Information about a 
 |  | ||||||
|                                                    logical track. */ |  | ||||||
|   CDIO_MMC_GPCMD_MODE_SELECT_10         = 0x55, /**< Select medium 
 |  | ||||||
|                                                    (10-bytes). */ |  | ||||||
|   CDIO_MMC_GPCMD_MODE_SENSE_10          = 0x5a, /**< Get medium or device
 |  | ||||||
|                                                  information. Should be issued |  | ||||||
|                                                  before MODE SELECT to get |  | ||||||
|                                                  mode support or save current |  | ||||||
|                                                  settings. (6 bytes). */ |  | ||||||
| 
 |  | ||||||
|   /**
 |  | ||||||
|       Group 5 Commands (CDB's here are 12-bytes)  |  | ||||||
|   */ |  | ||||||
|   CDIO_MMC_GPCMD_PLAY_AUDIO_12          = 0xa5, /**< Begin audio playing at
 |  | ||||||
|                                                    current position |  | ||||||
|                                                  (12 bytes) */ |  | ||||||
|   CDIO_MMC_GPCMD_LOAD_UNLOAD            = 0xa6, /**< Load/unload a Disc
 |  | ||||||
|                                                  (12 bytes) */ |  | ||||||
|   CDIO_MMC_GPCMD_READ_12                = 0xa8, /**< Read data from drive 
 |  | ||||||
|                                                    (12 bytes). */ |  | ||||||
|   CDIO_MMC_GPCMD_PLAY_TRACK_REL_12      = 0xa9, /**< Play audio at the track
 |  | ||||||
|                                                    relative LBA. (12 bytes). |  | ||||||
|                                                    Doesn't seem to be part |  | ||||||
|                                                    of MMC standards but is |  | ||||||
|                                                    handled by Plextor drives. |  | ||||||
|                                                 */ |  | ||||||
|   CDIO_MMC_GPCMD_READ_DVD_STRUCTURE     = 0xad, /**< Get DVD structure info
 |  | ||||||
|                                                    from media (12 bytes). */ |  | ||||||
|   CDIO_MMC_GPCMD_READ_MSF               = 0xb9, /**< Read almost any field 
 |  | ||||||
|                                                    of a CD sector at specified |  | ||||||
|                                                    MSF. (12 bytes). */ |  | ||||||
|   CDIO_MMC_GPCMD_SET_SPEED              = 0xbb, /**< Set drive speed 
 |  | ||||||
|                                                    (12 bytes). This is listed  |  | ||||||
|                                                    as optional in ATAPI 2.6,  |  | ||||||
|                                                    but is (curiously) |  | ||||||
|                                                    missing from Mt. Fuji,  |  | ||||||
|                                                    Table 57. It is mentioned |  | ||||||
|                                                    in Mt. Fuji Table 377 as an  |  | ||||||
|                                                    MMC command for SCSI |  | ||||||
|                                                    devices though...  Most |  | ||||||
|                                                    ATAPI drives support it. */ |  | ||||||
|   CDIO_MMC_GPCMD_READ_CD                = 0xbe, /**< Read almost any field 
 |  | ||||||
|                                                    of a CD sector at current |  | ||||||
|                                                    location. (12 bytes). */ |  | ||||||
|   /**
 |  | ||||||
|       Vendor-unique Commands   |  | ||||||
|   */ |  | ||||||
|   CDIO_MMC_GPCMD_CD_PLAYBACK_STATUS  = 0xc4 /**< SONY unique  = command */, |  | ||||||
|   CDIO_MMC_GPCMD_PLAYBACK_CONTROL    = 0xc9 /**< SONY unique  = command */, |  | ||||||
|   CDIO_MMC_GPCMD_READ_CDDA           = 0xd8 /**< Vendor unique  = command */, |  | ||||||
|   CDIO_MMC_GPCMD_READ_CDXA           = 0xdb /**< Vendor unique  = command */, |  | ||||||
|   CDIO_MMC_GPCMD_READ_ALL_SUBCODES   = 0xdf /**< Vendor unique  = command */ |  | ||||||
|   } cdio_mmc_gpcmd_t; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|   /**
 |  | ||||||
|       Read Subchannel states  |  | ||||||
|   */ |  | ||||||
|   typedef enum { |  | ||||||
|     CDIO_MMC_READ_SUB_ST_INVALID   = 0x00, /**< audio status not supported */ |  | ||||||
|     CDIO_MMC_READ_SUB_ST_PLAY      = 0x11, /**< audio play operation in 
 |  | ||||||
|                                               progress */ |  | ||||||
|     CDIO_MMC_READ_SUB_ST_PAUSED    = 0x12, /**< audio play operation paused */ |  | ||||||
|     CDIO_MMC_READ_SUB_ST_COMPLETED = 0x13, /**< audio play successfully 
 |  | ||||||
|                                               completed */ |  | ||||||
|     CDIO_MMC_READ_SUB_ST_ERROR     = 0x14, /**< audio play stopped due to 
 |  | ||||||
|                                               error */ |  | ||||||
|     CDIO_MMC_READ_SUB_ST_NO_STATUS = 0x15, /**< no current audio status to
 |  | ||||||
|                                               return */ |  | ||||||
|   } cdio_mmc_read_sub_state_t; |  | ||||||
| 
 |  | ||||||
|   /** Level values that can go into READ_CD */ |  | ||||||
|   typedef enum { |  | ||||||
|     CDIO_MMC_READ_TYPE_ANY  =  0,  /**< All types */ |  | ||||||
|     CDIO_MMC_READ_TYPE_CDDA =  1,  /**< Only CD-DA sectors */ |  | ||||||
|     CDIO_MMC_READ_TYPE_MODE1 = 2,  /**< mode1 sectors (user data = 2048) */ |  | ||||||
|     CDIO_MMC_READ_TYPE_MODE2 = 3,  /**< mode2 sectors form1 or form2 */ |  | ||||||
|     CDIO_MMC_READ_TYPE_M2F1 =  4,  /**< mode2 sectors form1 */ |  | ||||||
|     CDIO_MMC_READ_TYPE_M2F2 =  5   /**< mode2 sectors form2 */ |  | ||||||
|   } cdio_mmc_read_cd_type_t; |  | ||||||
| 
 |  | ||||||
|   /**
 |  | ||||||
|       Format values for READ_TOC  |  | ||||||
|   */ |  | ||||||
|   typedef enum { |  | ||||||
|     CDIO_MMC_READTOC_FMT_TOC     =  0, |  | ||||||
|     CDIO_MMC_READTOC_FMT_SESSION =  1,   |  | ||||||
|     CDIO_MMC_READTOC_FMT_FULTOC  =  2, |  | ||||||
|     CDIO_MMC_READTOC_FMT_PMA     =  3,  /**< Q subcode data */ |  | ||||||
|     CDIO_MMC_READTOC_FMT_ATIP    =  4,  /**< includes media type */ |  | ||||||
|     CDIO_MMC_READTOC_FMT_CDTEXT  =  5   /**< CD-TEXT info  */ |  | ||||||
|   } cdio_mmc_readtoc_t; |  | ||||||
|      |  | ||||||
|   /**
 |  | ||||||
|      Page codes for MODE SENSE and MODE SET.  |  | ||||||
|   */ |  | ||||||
|   typedef enum { |  | ||||||
|       CDIO_MMC_R_W_ERROR_PAGE     = 0x01, |  | ||||||
|       CDIO_MMC_WRITE_PARMS_PAGE   = 0x05, |  | ||||||
|       CDIO_MMC_CDR_PARMS_PAGE     = 0x0d, |  | ||||||
|       CDIO_MMC_AUDIO_CTL_PAGE     = 0x0e, |  | ||||||
|       CDIO_MMC_POWER_PAGE         = 0x1a, |  | ||||||
|       CDIO_MMC_FAULT_FAIL_PAGE    = 0x1c, |  | ||||||
|       CDIO_MMC_TO_PROTECT_PAGE    = 0x1d, |  | ||||||
|       CDIO_MMC_CAPABILITIES_PAGE  = 0x2a, |  | ||||||
|       CDIO_MMC_ALL_PAGES          = 0x3f, |  | ||||||
|   } cdio_mmc_mode_page_t; |  | ||||||
| 
 |  | ||||||
|  /**
 |  | ||||||
|     READ DISC INFORMATION Data Types |  | ||||||
|  */ |  | ||||||
|   typedef enum { |  | ||||||
|       CDIO_MMC_READ_DISC_INFO_STANDARD   = 0x0, |  | ||||||
|       CDIO_MMC_READ_DISC_INFO_TRACK      = 0x1, |  | ||||||
|       CDIO_MMC_READ_DISC_INFO_POW        = 0x2, |  | ||||||
|   } cdio_mmc_read_disc_info_datatype_t; |  | ||||||
|          |  | ||||||
| 
 |  | ||||||
| PRAGMA_BEGIN_PACKED |  | ||||||
|   struct mmc_audio_volume_entry_s  |  | ||||||
|   { |  | ||||||
|     uint8_t  selection; /* Only the lower 4 bits are used. */ |  | ||||||
|     uint8_t  volume; |  | ||||||
|   } GNUC_PACKED; |  | ||||||
| 
 |  | ||||||
|   typedef struct mmc_audio_volume_entry_s mmc_audio_volume_entry_t; |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|       This struct is used by cdio_audio_get_volume and cdio_audio_set_volume  |  | ||||||
|   */ |  | ||||||
|   struct mmc_audio_volume_s |  | ||||||
|   { |  | ||||||
|     mmc_audio_volume_entry_t port[4]; |  | ||||||
|   } GNUC_PACKED; |  | ||||||
| 
 |  | ||||||
|   typedef struct mmc_audio_volume_s mmc_audio_volume_t; |  | ||||||
|    |  | ||||||
| PRAGMA_END_PACKED |  | ||||||
|    |  | ||||||
| 
 |  | ||||||
| /**
 |  | ||||||
|     Return type codes for GET_CONFIGURATION.  |  | ||||||
| */ |  | ||||||
| typedef enum { |  | ||||||
|   CDIO_MMC_GET_CONF_ALL_FEATURES     = 0,  /**< all features without regard
 |  | ||||||
|                                               to currency. */ |  | ||||||
|   CDIO_MMC_GET_CONF_CURRENT_FEATURES = 1,  /**< features which are currently
 |  | ||||||
|                                               in effect (e.g. based on |  | ||||||
|                                               medium inserted). */ |  | ||||||
|   CDIO_MMC_GET_CONF_NAMED_FEATURE    = 2   /**< just the feature named in
 |  | ||||||
|                                               the GET_CONFIGURATION cdb. */ |  | ||||||
| } cdio_mmc_get_conf_t; |  | ||||||
|    |  | ||||||
| 
 |  | ||||||
| /**
 |  | ||||||
|     FEATURE codes used in GET CONFIGURATION.  |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| typedef enum { |  | ||||||
|   CDIO_MMC_FEATURE_PROFILE_LIST     = 0x000, /**< Profile List Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_CORE             = 0x001,  |  | ||||||
|   CDIO_MMC_FEATURE_MORPHING         = 0x002, /**< Report/prevent operational
 |  | ||||||
|                                                   changes  */ |  | ||||||
|   CDIO_MMC_FEATURE_REMOVABLE_MEDIUM = 0x003, /**< Removable Medium Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_WRITE_PROTECT    = 0x004, /**< Write Protect Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_RANDOM_READABLE  = 0x010, /**< Random Readable Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_MULTI_READ       = 0x01D, /**< Multi-Read Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_CD_READ          = 0x01E, /**< CD Read Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_DVD_READ         = 0x01F, /**< DVD Read Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_RANDOM_WRITABLE  = 0x020, /**< Random Writable Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_INCR_WRITE       = 0x021, /**< Incremental Streaming 
 |  | ||||||
|                                                 Writable Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_SECTOR_ERASE     = 0x022, /**< Sector Erasable Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_FORMATABLE       = 0x023, /**< Formattable Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_DEFECT_MGMT      = 0x024, /**< Management Ability of the 
 |  | ||||||
|                                                 Logical Unit/media system to |  | ||||||
|                                                 provide an apparently  |  | ||||||
|                                                 defect-free space.*/ |  | ||||||
|   CDIO_MMC_FEATURE_WRITE_ONCE       = 0x025, /**< Write Once
 |  | ||||||
|                                                    Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_RESTRICT_OVERW   = 0x026, /**< Restricted Overwrite
 |  | ||||||
|                                                 Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_CD_RW_CAV        = 0x027, /**< CD-RW CAV Write Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_MRW              = 0x028, /**< MRW Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_ENHANCED_DEFECT  = 0x029, /**< Enhanced Defect Reporting */ |  | ||||||
|   CDIO_MMC_FEATURE_DVD_PRW          = 0x02A, /**< DVD+RW Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_DVD_PR           = 0x02B, /**< DVD+R Feature */ |  | ||||||
|   CDIO_MMC_FEATURE_RIGID_RES_OVERW  = 0x02C, /**< Rigid Restricted Overwrite */ |  | ||||||
|   CDIO_MMC_FEATURE_CD_TAO           = 0x02D, /**< CD Track at Once */  |  | ||||||
|   CDIO_MMC_FEATURE_CD_SAO           = 0x02E, /**< CD Mastering (Session at 
 |  | ||||||
|                                                 Once) */ |  | ||||||
|   CDIO_MMC_FEATURE_DVD_R_RW_WRITE   = 0x02F, /**< DVD-R/RW Write */ |  | ||||||
|   CDIO_MMC_FEATURE_CD_RW_MEDIA_WRITE= 0x037, /**< CD-RW Media Write Support */ |  | ||||||
|   CDIO_MMC_FEATURE_DVD_PR_2_LAYER   = 0x03B, /**< DVD+R Double Layer */ |  | ||||||
|   CDIO_MMC_FEATURE_POWER_MGMT       = 0x100, /**< Initiator and device directed
 |  | ||||||
|                                                 power management */ |  | ||||||
|   CDIO_MMC_FEATURE_CDDA_EXT_PLAY    = 0x103, /**< Ability to play audio CDs 
 |  | ||||||
|                                                 via the Logical Unit's own |  | ||||||
|                                                 analog output */ |  | ||||||
|   CDIO_MMC_FEATURE_MCODE_UPGRADE    = 0x104, /* Ability for the device to 
 |  | ||||||
|                                                 accept  new microcode via |  | ||||||
|                                                 the interface */ |  | ||||||
|   CDIO_MMC_FEATURE_TIME_OUT         = 0x105, /**< Ability to respond to all
 |  | ||||||
|                                                 commands within a specific  |  | ||||||
|                                                 time */ |  | ||||||
|   CDIO_MMC_FEATURE_DVD_CSS          = 0x106, /**< Ability to perform DVD
 |  | ||||||
|                                                 CSS/CPPM authentication and |  | ||||||
|                                                 RPC */ |  | ||||||
|   CDIO_MMC_FEATURE_RT_STREAMING     = 0x107, /**< Ability to read and write 
 |  | ||||||
|                                                 using Initiator requested |  | ||||||
|                                                 performance parameters   */ |  | ||||||
|   CDIO_MMC_FEATURE_LU_SN            = 0x108, /**< The Logical Unit has a unique
 |  | ||||||
|                                                 identifier. */ |  | ||||||
|   CDIO_MMC_FEATURE_FIRMWARE_DATE    = 0x1FF, /**< Firmware creation date 
 |  | ||||||
|                                                 report */ |  | ||||||
| } cdio_mmc_feature_t; |  | ||||||
|                                  |  | ||||||
| typedef enum { |  | ||||||
|   CDIO_MMC_FEATURE_INTERFACE_UNSPECIFIED = 0, |  | ||||||
|   CDIO_MMC_FEATURE_INTERFACE_SCSI        = 1, |  | ||||||
|   CDIO_MMC_FEATURE_INTERFACE_ATAPI       = 2, |  | ||||||
|   CDIO_MMC_FEATURE_INTERFACE_IEEE_1394   = 3, |  | ||||||
|   CDIO_MMC_FEATURE_INTERFACE_IEEE_1394A  = 4, |  | ||||||
|   CDIO_MMC_FEATURE_INTERFACE_FIBRE_CH    = 5 |  | ||||||
| } cdio_mmc_feature_interface_t; |  | ||||||
|    |  | ||||||
| 
 |  | ||||||
| /**
 |  | ||||||
|     The largest Command Descriptor Block (CDB) size. |  | ||||||
|     The possible sizes are 6, 10, and 12 bytes. |  | ||||||
| */ |  | ||||||
| #define MAX_CDB_LEN 12 |  | ||||||
| 
 |  | ||||||
| /**
 |  | ||||||
|     \brief A Command Descriptor Block (CDB) used in sending MMC  |  | ||||||
|     commands. |  | ||||||
|  */ |  | ||||||
| typedef struct mmc_cdb_s { |  | ||||||
|   uint8_t field[MAX_CDB_LEN]; |  | ||||||
| } mmc_cdb_t; |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|       \brief Format of header block in data returned from an MMC |  | ||||||
|     GET_CONFIGURATION command. |  | ||||||
|   */ |  | ||||||
|   typedef struct mmc_feature_list_header_s { |  | ||||||
|     unsigned char length_msb; |  | ||||||
|     unsigned char length_1sb; |  | ||||||
|     unsigned char length_2sb; |  | ||||||
|     unsigned char length_lsb; |  | ||||||
|     unsigned char reserved1; |  | ||||||
|     unsigned char reserved2; |  | ||||||
|     unsigned char profile_msb; |  | ||||||
|     unsigned char profile_lsb; |  | ||||||
|   } cdio_mmc_feature_list_header_t; |  | ||||||
| 
 |  | ||||||
|   /**
 |  | ||||||
|       An enumeration indicating whether an MMC command is sending |  | ||||||
|       data, or getting data, or does none of both. |  | ||||||
|   */ |  | ||||||
|   typedef enum mmc_direction_s { |  | ||||||
|     SCSI_MMC_DATA_READ, |  | ||||||
|     SCSI_MMC_DATA_WRITE, |  | ||||||
|     SCSI_MMC_DATA_NONE |  | ||||||
|   } cdio_mmc_direction_t; |  | ||||||
|   /**
 |  | ||||||
|      Indicate to applications that SCSI_MMC_DATA_NONE is available. |  | ||||||
|      It has been added after version 0.82 and should be used with commands |  | ||||||
|      that neither read nor write payload bytes. (At least on Linux such |  | ||||||
|      commands did work with SCSI_MMC_DATA_READ or SCSI_MMC_DATA_WRITE, too.) |  | ||||||
|   */ |  | ||||||
| #define SCSI_MMC_HAS_DIR_NONE 1 |  | ||||||
|    |  | ||||||
|   typedef struct mmc_subchannel_s |  | ||||||
|   { |  | ||||||
|     uint8_t       reserved; |  | ||||||
|     uint8_t       audio_status; |  | ||||||
|     uint16_t      data_length; /**< Really ISO 9660 7.2.2 */ |  | ||||||
|     uint8_t       format; |  | ||||||
|     uint8_t       address:      4; |  | ||||||
|     uint8_t       control:      4; |  | ||||||
|     uint8_t       track; |  | ||||||
|     uint8_t       index; |  | ||||||
|     uint8_t       abs_addr[4]; |  | ||||||
|     uint8_t       rel_addr[4]; |  | ||||||
|   } cdio_mmc_subchannel_t; |  | ||||||
|    |  | ||||||
| #define CDIO_MMC_SET_COMMAND(cdb, command)      \ |  | ||||||
|   cdb[0] = command |  | ||||||
|    |  | ||||||
| #define CDIO_MMC_SET_READ_TYPE(cdb, sector_type) \ |  | ||||||
|   cdb[1] = (sector_type << 2) |  | ||||||
|    |  | ||||||
| #define CDIO_MMC_GETPOS_LEN16(p, pos)           \ |  | ||||||
|   (p[pos]<<8) + p[pos+1] |  | ||||||
|    |  | ||||||
| #define CDIO_MMC_GET_LEN16(p)                   \ |  | ||||||
|   (p[0]<<8) + p[1] |  | ||||||
|    |  | ||||||
| #define CDIO_MMC_GET_LEN32(p) \ |  | ||||||
|   (p[0] << 24) + (p[1] << 16) + (p[2] << 8) + p[3]; |  | ||||||
|    |  | ||||||
| #define CDIO_MMC_SET_LEN16(cdb, pos, len)       \ |  | ||||||
|   cdb[pos  ] = (len >>  8) & 0xff;              \ |  | ||||||
|   cdb[pos+1] = (len      ) & 0xff |  | ||||||
| 
 |  | ||||||
| #define CDIO_MMC_SET_READ_LBA(cdb, lba)         \ |  | ||||||
|   cdb[2] = (lba >> 24) & 0xff; \ |  | ||||||
|   cdb[3] = (lba >> 16) & 0xff; \ |  | ||||||
|   cdb[4] = (lba >>  8) & 0xff; \ |  | ||||||
|   cdb[5] = (lba      ) & 0xff |  | ||||||
| 
 |  | ||||||
| #define CDIO_MMC_SET_START_TRACK(cdb, command) \ |  | ||||||
|   cdb[6] = command |  | ||||||
| 
 |  | ||||||
| #define CDIO_MMC_SET_READ_LENGTH24(cdb, len) \ |  | ||||||
|   cdb[6] = (len >> 16) & 0xff; \ |  | ||||||
|   cdb[7] = (len >>  8) & 0xff; \ |  | ||||||
|   cdb[8] = (len      ) & 0xff |  | ||||||
| 
 |  | ||||||
| #define CDIO_MMC_SET_READ_LENGTH16(cdb, len) \ |  | ||||||
|   CDIO_MMC_SET_LEN16(cdb, 7, len) |  | ||||||
| 
 |  | ||||||
| #define CDIO_MMC_SET_READ_LENGTH8(cdb, len) \ |  | ||||||
|   cdb[8] = (len      ) & 0xff |  | ||||||
| 
 |  | ||||||
| #define CDIO_MMC_MCSB_ALL_HEADERS 0xf |  | ||||||
| 
 |  | ||||||
| #define CDIO_MMC_SET_MAIN_CHANNEL_SELECTION_BITS(cdb, val) \ |  | ||||||
|   cdb[9] = val << 3; |  | ||||||
| 
 |  | ||||||
| /**
 |  | ||||||
|    Get the output port volumes and port selections used on AUDIO PLAY |  | ||||||
|    commands via a MMC MODE SENSE command using the CD Audio Control |  | ||||||
|    Page. |  | ||||||
|    @param p_cdio the CD object to be acted upon. |  | ||||||
|    @param p_volume volume parameters retrieved |  | ||||||
|    @return DRIVER_OP_SUCCESS if we ran the command ok. |  | ||||||
| */ |  | ||||||
| driver_return_code_t mmc_audio_get_volume (CdIo_t *p_cdio,  /*out*/ |  | ||||||
|                                            mmc_audio_volume_t *p_volume); |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|      Read Audio Subchannel information |  | ||||||
|       |  | ||||||
|      @param p_cdio the CD object to be acted upon. |  | ||||||
|      @param p_subchannel place for returned subchannel information |  | ||||||
|   */ |  | ||||||
|     driver_return_code_t |  | ||||||
|     mmc_audio_read_subchannel (CdIo_t *p_cdio,  |  | ||||||
|                            /*out*/ cdio_subchannel_t *p_subchannel); |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|      Read ISRC Subchannel information. Contributed by |  | ||||||
|      Scot C. Bontrager (scot@indievisible.org)  |  | ||||||
|      May 15, 2011 - |  | ||||||
|       |  | ||||||
|      @param p_cdio the CD object to be acted upon. |  | ||||||
|      @param track the track you to get ISRC info |  | ||||||
|      @param p_isrc place to put ISRC info |  | ||||||
|   */ |  | ||||||
|     driver_return_code_t |  | ||||||
|     mmc_isrc_track_read_subchannel (CdIo_t *p_cdio,  /*in*/ const track_t track, |  | ||||||
|                                     /*out*/ char *p_isrc); |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|     Return a string containing the name of the audio state as returned from |  | ||||||
|     the Q_SUBCHANNEL. |  | ||||||
|   */ |  | ||||||
|   const char *mmc_audio_state2str( uint8_t i_audio_state ); |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|      Get the block size used in read requests, via MMC (e.g. READ_10,  |  | ||||||
|      READ_MSF, ...) |  | ||||||
|      @param p_cdio the CD object to be acted upon. |  | ||||||
|      @return the blocksize if > 0; error if <= 0 |  | ||||||
|   */ |  | ||||||
|   int mmc_get_blocksize ( CdIo_t *p_cdio ); |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|     Return the length in bytes of the Command Descriptor |  | ||||||
|     Buffer (CDB) for a given MMC command. The length will be  |  | ||||||
|     either 6, 10, or 12.  |  | ||||||
|   */ |  | ||||||
|   uint8_t mmc_get_cmd_len(uint8_t mmc_cmd); |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|     Get the lsn of the end of the CD |  | ||||||
|      |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
|     @return the lsn. On error return CDIO_INVALID_LSN. |  | ||||||
|   */ |  | ||||||
|   lsn_t mmc_get_disc_last_lsn( const CdIo_t *p_cdio ); |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|     Return the discmode as reported by the MMC Read (FULL) TOC |  | ||||||
|     command. |  | ||||||
|      |  | ||||||
|     Information was obtained from Section 5.1.13 (Read TOC/PMA/ATIP) |  | ||||||
|     pages 56-62 from the MMC draft specification, revision 10a |  | ||||||
|     at http://www.t10.org/ftp/t10/drafts/mmc/mmc-r10a.pdf See
 |  | ||||||
|     especially tables 72, 73 and 75. |  | ||||||
|   */ |  | ||||||
|   discmode_t mmc_get_discmode( const CdIo_t *p_cdio ); |  | ||||||
|    |  | ||||||
|    |  | ||||||
|   typedef enum { |  | ||||||
|     CDIO_MMC_LEVEL_WEIRD, |  | ||||||
|     CDIO_MMC_LEVEL_1, |  | ||||||
|     CDIO_MMC_LEVEL_2, |  | ||||||
|     CDIO_MMC_LEVEL_3, |  | ||||||
|     CDIO_MMC_LEVEL_NONE |  | ||||||
|   } cdio_mmc_level_t; |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|     Get the MMC level supported by the device. |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
|     @return MMC level supported by the device. |  | ||||||
|   */ |  | ||||||
|   cdio_mmc_level_t mmc_get_drive_mmc_cap(CdIo_t *p_cdio); |  | ||||||
|    |  | ||||||
| 
 |  | ||||||
|   /**
 |  | ||||||
|     Get the DVD type associated with cd object. |  | ||||||
|      |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
|     @param s location to store DVD information. |  | ||||||
|     @return the DVD discmode. |  | ||||||
|   */ |  | ||||||
|   discmode_t mmc_get_dvd_struct_physical ( const CdIo_t *p_cdio,  |  | ||||||
|                                            cdio_dvd_struct_t *s); |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|     Find out if media tray is open or closed. |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
|     @return 1 if media is open, 0 if closed. Error |  | ||||||
|     return codes are the same as driver_return_code_t |  | ||||||
|   */ |  | ||||||
|   int mmc_get_tray_status ( const CdIo_t *p_cdio ); |  | ||||||
| 
 |  | ||||||
|   /**
 |  | ||||||
|     Get the CD-ROM hardware info via an MMC INQUIRY command. |  | ||||||
|      |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
|     @param p_hw_info place to store hardware information retrieved |  | ||||||
|     @return true if we were able to get hardware info, false if we had |  | ||||||
|     an error. |  | ||||||
|   */ |  | ||||||
|   bool mmc_get_hwinfo ( const CdIo_t *p_cdio,  |  | ||||||
|                         /* out*/ cdio_hwinfo_t *p_hw_info ); |  | ||||||
|    |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|     Find out if media has changed since the last call. |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
|     @return 1 if media has changed since last call, 0 if not. Error |  | ||||||
|     return codes are the same as driver_return_code_t |  | ||||||
|   */ |  | ||||||
|   int mmc_get_media_changed(const CdIo_t *p_cdio); |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|     Get the media catalog number (MCN) from the CD via MMC. |  | ||||||
|      |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
|     @return the media catalog number r NULL if there is none or we |  | ||||||
|     don't have the ability to get it. |  | ||||||
|      |  | ||||||
|     Note: string is malloc'd so caller has to free() the returned |  | ||||||
|     string when done with it. |  | ||||||
|      |  | ||||||
|   */ |  | ||||||
|   char * mmc_get_mcn(const CdIo_t *p_cdio); |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|     Report if CD-ROM has a particular kind of interface (ATAPI, SCSCI, ...) |  | ||||||
|     Is it possible for an interface to have several? If not this  |  | ||||||
|     routine could probably return the single mmc_feature_interface_t. |  | ||||||
|     @param p_cdio the CD object to be acted upon. |  | ||||||
|     @param e_interface  |  | ||||||
|     @return true if we have the interface and false if not. |  | ||||||
|   */ |  | ||||||
|   bool_3way_t mmc_have_interface(CdIo_t *p_cdio,  |  | ||||||
|                                  cdio_mmc_feature_interface_t e_interface ); |  | ||||||
|    |  | ||||||
| 
 |  | ||||||
|   /**
 |  | ||||||
|       Read just the user data part of some sort of data sector (via  |  | ||||||
|       mmc_read_cd).  |  | ||||||
|      |  | ||||||
|       @param p_cdio object to read from |  | ||||||
| 
 |  | ||||||
|       @param p_buf place to read data into.  The caller should make |  | ||||||
|              sure this location can store at least CDIO_CD_FRAMESIZE, |  | ||||||
|              M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE depending on the |  | ||||||
|              kind of sector getting read. If you don't know whether |  | ||||||
|              you have a Mode 1/2, Form 1/ Form 2/Formless sector best |  | ||||||
|              to reserve space for the maximum, M2RAW_SECTOR_SIZE. |  | ||||||
| 
 |  | ||||||
|       @param i_lsn sector to read |  | ||||||
|       @param i_blocksize size of each block |  | ||||||
|       @param i_blocks number of blocks to read |  | ||||||
| 
 |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t mmc_read_data_sectors ( CdIo_t *p_cdio, void *p_buf,  |  | ||||||
|                                                lsn_t i_lsn,  |  | ||||||
|                                                uint16_t i_blocksize, |  | ||||||
|                                                uint32_t i_blocks ); |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|       Read sectors using SCSI-MMC GPCMD_READ_CD.  |  | ||||||
|       Can read only up to 25 blocks. |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t mmc_read_sectors ( const CdIo_t *p_cdio, void *p_buf,  |  | ||||||
|                                           lsn_t i_lsn,  int read_sector_type,  |  | ||||||
|                                           uint32_t i_blocks); |  | ||||||
|    |  | ||||||
|   /**
 |  | ||||||
|     Run a Multimedia command (MMC).  |  | ||||||
|      |  | ||||||
|     @param p_cdio        CD structure set by cdio_open(). |  | ||||||
|     @param i_timeout_ms  time in milliseconds we will wait for the command |  | ||||||
|                          to complete.  |  | ||||||
|     @param p_cdb         CDB bytes. All values that are needed should be set  |  | ||||||
|                          on input. We'll figure out what the right CDB length  |  | ||||||
|                          should be. |  | ||||||
|     @param e_direction   direction the transfer is to go. |  | ||||||
|     @param i_buf         Size of buffer |  | ||||||
|     @param p_buf         Buffer for data, both sending and receiving. |  | ||||||
| 
 |  | ||||||
|     @return 0 if command completed successfully. |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t |  | ||||||
|   mmc_run_cmd( const CdIo_t *p_cdio, unsigned int i_timeout_ms, |  | ||||||
|                const mmc_cdb_t *p_cdb, |  | ||||||
|                cdio_mmc_direction_t e_direction, unsigned int i_buf,  |  | ||||||
|                /*in/out*/ void *p_buf ); |  | ||||||
| 
 |  | ||||||
|   /**
 |  | ||||||
|     Run a Multimedia command (MMC) specifying the CDB length. |  | ||||||
|     The motivation here is for example ot use in is an undocumented  |  | ||||||
|     debug command for LG drives (namely E7), whose length is being  |  | ||||||
|     miscalculated by mmc_get_cmd_len(); it doesn't follow the usual  |  | ||||||
|     code number to length conventions. Patch supplied by SukkoPera. |  | ||||||
| 
 |  | ||||||
|     @param p_cdio        CD structure set by cdio_open(). |  | ||||||
|     @param i_timeout_ms  time in milliseconds we will wait for the command |  | ||||||
|                          to complete.  |  | ||||||
|     @param p_cdb         CDB bytes. All values that are needed should be set  |  | ||||||
|                          on input.  |  | ||||||
|     @param i_cdb         number of CDB bytes.  |  | ||||||
|     @param e_direction   direction the transfer is to go. |  | ||||||
|     @param i_buf         Size of buffer |  | ||||||
|     @param p_buf         Buffer for data, both sending and receiving. |  | ||||||
| 
 |  | ||||||
|     @return 0 if command completed successfully. |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t |  | ||||||
|   mmc_run_cmd_len( const CdIo_t *p_cdio, unsigned int i_timeout_ms, |  | ||||||
|                    const mmc_cdb_t *p_cdb, unsigned int i_cdb, |  | ||||||
|                    cdio_mmc_direction_t e_direction, unsigned int i_buf, |  | ||||||
|                    /*in/out*/ void *p_buf ); |  | ||||||
| 
 |  | ||||||
|   /**
 |  | ||||||
|       Obtain the SCSI sense reply of the most-recently-performed MMC command. |  | ||||||
|       These bytes give an indication of possible problems which occured in |  | ||||||
|       the drive while the command was performed. With some commands they tell |  | ||||||
|       about the current state of the drive (e.g. 00h TEST UNIT READY). |  | ||||||
|       @param p_cdio CD structure set by cdio_open(). |  | ||||||
| 
 |  | ||||||
|       @param pp_sense returns the sense bytes received from the drive. |  | ||||||
|       This is allocated memory or NULL if no sense bytes are |  | ||||||
|       available. Dispose non-NULL pointers by free() when no longer |  | ||||||
|       needed.  See SPC-3 4.5.3 Fixed format sense data.  SCSI error |  | ||||||
|       codes as of SPC-3 Annex D, MMC-5 Annex F: sense[2]&15 = Key , |  | ||||||
|       sense[12] = ASC , sense[13] = ASCQ |  | ||||||
| 
 |  | ||||||
|       @return number of valid bytes in sense, 0 in case of no sense |  | ||||||
|               bytes available, <0 in case of internal error. |  | ||||||
|   */ |  | ||||||
|   int mmc_last_cmd_sense ( const CdIo_t *p_cdio,  |  | ||||||
|                            cdio_mmc_request_sense_t **pp_sense); |  | ||||||
| 
 |  | ||||||
|   /**
 |  | ||||||
|     Set the block size for subsequest read requests, via MMC. |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t mmc_set_blocksize ( const CdIo_t *p_cdio,  |  | ||||||
|                                            uint16_t i_blocksize); |  | ||||||
|    |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
| /**
 |  | ||||||
|     The below variables are trickery to force the above enum symbol |  | ||||||
|     values to be recorded in debug symbol tables. They are used to |  | ||||||
|     allow one to refer to the enumeration value names in the typedefs |  | ||||||
|     above in a debugger and debugger expressions |  | ||||||
| */ |  | ||||||
| extern cdio_mmc_feature_t           debug_cdio_mmc_feature; |  | ||||||
| extern cdio_mmc_feature_interface_t debug_cdio_mmc_feature_interface; |  | ||||||
| extern cdio_mmc_feature_profile_t   debug_cdio_mmc_feature_profile; |  | ||||||
| extern cdio_mmc_get_conf_t          debug_cdio_mmc_get_conf; |  | ||||||
| extern cdio_mmc_gpcmd_t             debug_cdio_mmc_gpcmd; |  | ||||||
| extern cdio_mmc_read_sub_state_t    debug_cdio_mmc_read_sub_state; |  | ||||||
| extern cdio_mmc_read_cd_type_t      debug_cdio_mmc_read_cd_type; |  | ||||||
| extern cdio_mmc_readtoc_t           debug_cdio_mmc_readtoc; |  | ||||||
| extern cdio_mmc_mode_page_t         debug_cdio_mmc_mode_page; |  | ||||||
|    |  | ||||||
| #ifndef DO_NOT_WANT_OLD_MMC_COMPATIBILITY |  | ||||||
| #define CDIO_MMC_GPCMD_START_STOP CDIO_MMC_GPCMD_START_STOP_UNIT  |  | ||||||
| #define CDIO_MMC_GPCMD_ALLOW_MEDIUM_REMOVAL  \ |  | ||||||
|     CDIO_MMC_GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL |  | ||||||
| #endif /*DO_NOT_WANT_PARANOIA_COMPATIBILITY*/ |  | ||||||
| 
 |  | ||||||
| #endif /* __MMC_H__ */ |  | ||||||
|  |  | ||||||
| /* 
 |  | ||||||
|  * Local variables: |  | ||||||
|  *  c-file-style: "ruby" |  | ||||||
|  *  tab-width: 8 |  | ||||||
|  *  indent-tabs-mode: nil |  | ||||||
|  * End: |  | ||||||
|  */ |  | ||||||
|  | @ -1,157 +0,0 @@ | ||||||
| /*
 |  | ||||||
|     Copyright (C) 2010 Rocky Bernstein <rocky@gnu.org> |  | ||||||
| 
 |  | ||||||
|     This program is free software: you can redistribute it and/or modify |  | ||||||
|     it under the terms of the GNU General Public License as published by |  | ||||||
|     the Free Software Foundation, either version 3 of the License, or |  | ||||||
|     (at your option) any later version. |  | ||||||
| 
 |  | ||||||
|     This program is distributed in the hope that it will be useful, |  | ||||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|     GNU General Public License for more details. |  | ||||||
| 
 |  | ||||||
|     You should have received a copy of the GNU General Public License |  | ||||||
|     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| /**
 |  | ||||||
|    \file mmc_util.h  |  | ||||||
|     |  | ||||||
|    \brief Multimedia Command (MMC) "helper" routines that don't depend |  | ||||||
|    on anything other than headers. |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| #ifndef __CDIO_MMC_UTIL_H__ |  | ||||||
| #define __CDIO_MMC_UTIL_H__ |  | ||||||
| 
 |  | ||||||
| #include <cdio/device.h> |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
|     /**
 |  | ||||||
|        Profile profile codes used in GET_CONFIGURATION - PROFILE LIST. */ |  | ||||||
|     typedef enum { |  | ||||||
|         CDIO_MMC_FEATURE_PROF_NON_REMOVABLE = 0x0001, /**< Re-writable disc, capable
 |  | ||||||
|                                                          of changing behavior */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_REMOVABLE     = 0x0002, /**< disk Re-writable; with 
 |  | ||||||
|                                                          removable  media */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_MO_ERASABLE   = 0x0003, /**< Erasable Magneto-Optical
 |  | ||||||
|                                                          disk with sector erase |  | ||||||
|                                                          capability */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_MO_WRITE_ONCE = 0x0004, /**< Write Once Magneto-Optical
 |  | ||||||
|                                                          write once */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_AS_MO         = 0x0005, /**< Advance Storage
 |  | ||||||
|                                                          Magneto-Optical */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_CD_ROM        = 0x0008, /**< Read only Compact Disc
 |  | ||||||
|                                                          capable */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_CD_R          = 0x0009, /**< Write once Compact Disc
 |  | ||||||
|                                                          capable */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_CD_RW         = 0x000A, /**< CD-RW Re-writable
 |  | ||||||
|                                                          Compact Disc capable */ |  | ||||||
|          |  | ||||||
|         CDIO_MMC_FEATURE_PROF_DVD_ROM       = 0x0010, /**< Read only DVD */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_DVD_R_SEQ     = 0x0011, /**< Re-recordable DVD using
 |  | ||||||
|                                                          Sequential recording */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_DVD_RAM       = 0x0012, /**< Re-writable DVD */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_DVD_RW_RO     = 0x0013, /**< Re-recordable DVD using
 |  | ||||||
|                                                          Restricted Overwrite */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_DVD_RW_SEQ    = 0x0014, /**< Re-recordable DVD using
 |  | ||||||
|                                                          Sequential recording */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_DVD_R_DL_SEQ  = 0x0015, /**< DVD-R/DL sequential
 |  | ||||||
|                                                          recording */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_DVD_R_DL_JR   = 0x0016, /**< DVD-R/DL layer jump 
 |  | ||||||
|                                                          recording */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_DVD_PRW       = 0x001A, /**< DVD+RW - DVD ReWritable */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_DVD_PR        = 0x001B, /**< DVD+R - DVD Recordable */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_DDCD_ROM      = 0x0020, /**< Read only  DDCD */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_DDCD_R        = 0x0021, /**< DDCD-R Write only DDCD */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_DDCD_RW       = 0x0022, /**< Re-Write only DDCD */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_DVD_PRW_DL    = 0x002A, /**< "DVD+RW/DL */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_DVD_PR_DL     = 0x002B, /**< DVD+R - DVD Recordable 
 |  | ||||||
|                                                          double layer */ |  | ||||||
|          |  | ||||||
|         CDIO_MMC_FEATURE_PROF_BD_ROM        = 0x0040, /**< BD-ROM */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_BD_SEQ        = 0x0041, /**< BD-R sequential 
 |  | ||||||
|                                                          recording */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_BD_R_RANDOM   = 0x0042, /**< BD-R random recording */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_BD_RE         = 0x0043, /**< BD-RE */ |  | ||||||
|          |  | ||||||
|         CDIO_MMC_FEATURE_PROF_HD_DVD_ROM    = 0x0050, /**< HD-DVD-ROM */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_HD_DVD_R      = 0x0051, /**< HD-DVD-R */ |  | ||||||
|         CDIO_MMC_FEATURE_PROF_HD_DVD_RAM    = 0x0052, /**<"HD-DVD-RAM */ |  | ||||||
|          |  | ||||||
|         CDIO_MMC_FEATURE_PROF_NON_CONFORM   = 0xFFFF, /**< The Logical Unit does not
 |  | ||||||
|                                                          conform to any Profile. */ |  | ||||||
|     } cdio_mmc_feature_profile_t; |  | ||||||
|    |  | ||||||
|     /**
 |  | ||||||
|        @param i_feature MMC feature number |  | ||||||
|        @return string containing the name of the given feature |  | ||||||
|     */ |  | ||||||
|     const char *mmc_feature2str( int i_feature ); |  | ||||||
|      |  | ||||||
|     /**
 |  | ||||||
|        Get drive capabilities for a device. |  | ||||||
|        @param p_cdio the CD object to be acted upon. |  | ||||||
|        @param p_read_cap  list of read capabilities that are set on return |  | ||||||
|        @param p_write_cap list of write capabilities that are set on return |  | ||||||
|        @param p_misc_cap  list of miscellaneous capabilities (that are neither |  | ||||||
|        read nor write related) that are set on return |  | ||||||
|     */ |  | ||||||
|     void mmc_get_drive_cap ( CdIo_t *p_cdio, |  | ||||||
|                              /*out*/ cdio_drive_read_cap_t  *p_read_cap, |  | ||||||
|                              /*out*/ cdio_drive_write_cap_t *p_write_cap, |  | ||||||
|                              /*out*/ cdio_drive_misc_cap_t  *p_misc_cap); |  | ||||||
|      |  | ||||||
|     /**
 |  | ||||||
|        Return a string containing the name of the given feature |  | ||||||
|     */ |  | ||||||
|     const char *mmc_feature_profile2str( int i_feature_profile ); |  | ||||||
| 
 |  | ||||||
|     bool mmc_is_disctype_bd(cdio_mmc_feature_profile_t disctype); |  | ||||||
|     bool mmc_is_disctype_cdrom(cdio_mmc_feature_profile_t disctype); |  | ||||||
|     bool mmc_is_disctype_dvd(cdio_mmc_feature_profile_t disctype); |  | ||||||
|     bool mmc_is_disctype_hd_dvd (cdio_mmc_feature_profile_t disctype); |  | ||||||
|     bool mmc_is_disctype_overwritable (cdio_mmc_feature_profile_t disctype); |  | ||||||
|     bool mmc_is_disctype_rewritable(cdio_mmc_feature_profile_t disctype); |  | ||||||
|      |  | ||||||
|     /** The default read timeout is 3 minutes. */ |  | ||||||
| #define MMC_READ_TIMEOUT_DEFAULT 3*60*1000 |  | ||||||
|      |  | ||||||
|     /**
 |  | ||||||
|        Set this to the maximum value in milliseconds that we will |  | ||||||
|        wait on an MMC read command.   |  | ||||||
|     */ |  | ||||||
|     extern uint32_t mmc_read_timeout_ms; |  | ||||||
|      |  | ||||||
|     /**
 |  | ||||||
|        Maps a mmc_sense_key_t into a string name. |  | ||||||
|     */ |  | ||||||
|     extern const char mmc_sense_key2str[16][40]; |  | ||||||
| 
 |  | ||||||
|     /**
 |  | ||||||
|        The default timeout (non-read) is 6 seconds.  |  | ||||||
|     */ |  | ||||||
| #define MMC_TIMEOUT_DEFAULT 6000 |  | ||||||
| 
 |  | ||||||
|     /**
 |  | ||||||
|        Set this to the maximum value in milliseconds that we will |  | ||||||
|        wait on an MMC command.   |  | ||||||
|     */ |  | ||||||
|     extern uint32_t mmc_timeout_ms;  |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
| #endif /* __MMC_UTIL_H__ */ |  | ||||||
| /* 
 |  | ||||||
|  * Local variables: |  | ||||||
|  *  c-file-style: "gnu" |  | ||||||
|  *  tab-width: 8 |  | ||||||
|  *  indent-tabs-mode: nil |  | ||||||
|  * End: |  | ||||||
|  */ |  | ||||||
|  | @ -1,256 +0,0 @@ | ||||||
| /*
 |  | ||||||
|     $Id: track.h,v 1.14 2008/03/25 15:59:09 karl Exp $ |  | ||||||
| 
 |  | ||||||
|     Copyright (C) 2005, 2006, 2008 Rocky Bernstein <rocky@gnu.org> |  | ||||||
| 
 |  | ||||||
|     This program is free software: you can redistribute it and/or modify |  | ||||||
|     it under the terms of the GNU General Public License as published by |  | ||||||
|     the Free Software Foundation, either version 3 of the License, or |  | ||||||
|     (at your option) any later version. |  | ||||||
| 
 |  | ||||||
|     This program is distributed in the hope that it will be useful, |  | ||||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|     GNU General Public License for more details. |  | ||||||
| 
 |  | ||||||
|     You should have received a copy of the GNU General Public License |  | ||||||
|     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| /** \file track.h 
 |  | ||||||
|  *  \brief  The top-level header for track-related libcdio calls. |  | ||||||
|  */ |  | ||||||
| #ifndef __CDIO_TRACK_H__ |  | ||||||
| #define __CDIO_TRACK_H__ |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
|   /*! Printable tags for track_format_t enumeration.  */ |  | ||||||
|   extern const char *track_format2str[6]; |  | ||||||
|    |  | ||||||
|   typedef enum  { |  | ||||||
|     TRACK_FORMAT_AUDIO,   /**< Audio track, e.g. CD-DA */ |  | ||||||
|     TRACK_FORMAT_CDI,     /**< CD-i. How this is different from DATA below? */ |  | ||||||
|     TRACK_FORMAT_XA,      /**< Mode2 of some sort */ |  | ||||||
|     TRACK_FORMAT_DATA,    /**< Mode1 of some sort */ |  | ||||||
|     TRACK_FORMAT_PSX,     /**< Playstation CD. Like audio but only 2336 bytes
 |  | ||||||
| 			   *   of user data. |  | ||||||
| 			   */ |  | ||||||
|     TRACK_FORMAT_ERROR    /**< Dunno what is, or some other error. */ |  | ||||||
|   } track_format_t; |  | ||||||
| 
 |  | ||||||
|   typedef enum { |  | ||||||
|     CDIO_TRACK_FLAG_FALSE,  |  | ||||||
|     CDIO_TRACK_FLAG_TRUE,  |  | ||||||
|     CDIO_TRACK_FLAG_ERROR,  |  | ||||||
|     CDIO_TRACK_FLAG_UNKNOWN |  | ||||||
|   } track_flag_t; |  | ||||||
| 
 |  | ||||||
|   /*! \brief Structure containing attributes associated with a track */ |  | ||||||
|   typedef struct { |  | ||||||
|     track_flag_t preemphasis; /**< Linear preemphasis on an audio track */ |  | ||||||
|     track_flag_t copy_permit; /**< Whether copying is permitted */ |  | ||||||
|     int channels;             /**< Number of audio channels, 2, 4. -2 if not
 |  | ||||||
| 				   implemented or -1 for error. |  | ||||||
| 			      */ |  | ||||||
|   } track_flags_t; |  | ||||||
|      |  | ||||||
|   /*! The leadout track is always 0xAA, regardless of # of tracks on
 |  | ||||||
|     disc, or what value may be used internally. For example although |  | ||||||
|     OS X uses a different value for the lead-out track internally than |  | ||||||
|     given below, programmers should use CDIO_CDROM_LEADOUT_TRACK and |  | ||||||
|     not worry about this. |  | ||||||
|   */ |  | ||||||
| 
 |  | ||||||
|   /*! An enumeration for some of the CDIO_CDROM_* \#defines below. This
 |  | ||||||
|     isn't really an enumeration one would really use in a program; it |  | ||||||
|     is to be helpful in debuggers where wants just to refer to the |  | ||||||
|     CDIO_CDROM_* names and get something. |  | ||||||
|   */ |  | ||||||
|   extern enum cdio_track_enums { |  | ||||||
|     CDIO_CDROM_LBA           = 0x01, /**< "logical block": first frame is #0 */ |  | ||||||
|     CDIO_CDROM_MSF           = 0x02, /**< "minute-second-frame": binary, not
 |  | ||||||
| 					BCD here! */ |  | ||||||
|     CDIO_CDROM_DATA_TRACK    = 0x04,  |  | ||||||
|     CDIO_CDROM_CDI_TRACK     = 0x10, |  | ||||||
|     CDIO_CDROM_XA_TRACK      = 0x20, |  | ||||||
|     CDIO_CD_MAX_TRACKS       =   99, /**< Largest CD track number */ |  | ||||||
|     CDIO_CDROM_LEADOUT_TRACK = 0xAA, /**< Lead-out track number */ |  | ||||||
|     CDIO_INVALID_TRACK       = 0xFF, /**<  Constant for invalid track number */ |  | ||||||
| 
 |  | ||||||
|    } cdio_track_enums; |  | ||||||
|    |  | ||||||
| #define CDIO_CD_MIN_TRACK_NO  1 /**< Smallest CD track number */ |  | ||||||
|    |  | ||||||
|   /*! track modes (Table 350) 
 |  | ||||||
|     reference: MMC-3 draft revsion - 10g |  | ||||||
|   */ |  | ||||||
|   typedef enum { |  | ||||||
|     AUDIO,			/**< 2352 byte block length */ |  | ||||||
|     MODE1,			/**< 2048 byte block length */ |  | ||||||
|     MODE1_RAW,			/**< 2352 byte block length */ |  | ||||||
|     MODE2,			/**< 2336 byte block length */ |  | ||||||
|     MODE2_FORM1,		/**< 2048 byte block length */ |  | ||||||
|     MODE2_FORM2,		/**< 2324 byte block length */ |  | ||||||
|     MODE2_FORM_MIX,		/**< 2336 byte block length */ |  | ||||||
|     MODE2_RAW			/**< 2352 byte block length */ |  | ||||||
|   } trackmode_t; |  | ||||||
|    |  | ||||||
|   /*!
 |  | ||||||
|     Get the number of the first track.  |  | ||||||
| 
 |  | ||||||
|     @return the track number or CDIO_INVALID_TRACK  |  | ||||||
|     on error. |  | ||||||
|   */ |  | ||||||
|   track_t cdio_get_first_track_num(const CdIo_t *p_cdio); |  | ||||||
|    |  | ||||||
|   /*!
 |  | ||||||
|     Return the last track number. |  | ||||||
|     CDIO_INVALID_TRACK is returned on error. |  | ||||||
|   */ |  | ||||||
|   track_t cdio_get_last_track_num (const CdIo_t *p_cdio); |  | ||||||
|    |  | ||||||
| 
 |  | ||||||
|   /*! Find the track which contains lsn.
 |  | ||||||
|     CDIO_INVALID_TRACK is returned if the lsn outside of the CD or |  | ||||||
|     if there was some error.  |  | ||||||
|      |  | ||||||
|     If the lsn is before the pregap of the first track 0 is returned. |  | ||||||
|     Otherwise we return the track that spans the lsn. |  | ||||||
|   */ |  | ||||||
|   track_t cdio_get_track(const CdIo_t *p_cdio, lsn_t lsn); |  | ||||||
| 
 |  | ||||||
|   /*! Return number of channels in track: 2 or 4; -2 if not
 |  | ||||||
|       implemented or -1 for error. |  | ||||||
|       Not meaningful if track is not an audio track. |  | ||||||
|   */ |  | ||||||
|   int cdio_get_track_channels(const CdIo_t *p_cdio, track_t i_track); |  | ||||||
|    |  | ||||||
|   /*! Return copy protection status on a track. Is this meaningful
 |  | ||||||
|       if not an audio track? |  | ||||||
|    */ |  | ||||||
|   track_flag_t cdio_get_track_copy_permit(const CdIo_t *p_cdio,  |  | ||||||
| 					  track_t i_track); |  | ||||||
|    |  | ||||||
|   /*!  
 |  | ||||||
|     Get the format (audio, mode2, mode1) of track.  |  | ||||||
|   */ |  | ||||||
|   track_format_t cdio_get_track_format(const CdIo_t *p_cdio, track_t i_track); |  | ||||||
|    |  | ||||||
|   /*!
 |  | ||||||
|     Return true if we have XA data (green, mode2 form1) or |  | ||||||
|     XA data (green, mode2 form2). That is track begins: |  | ||||||
|     sync - header - subheader |  | ||||||
|     12     4      -  8 |  | ||||||
|      |  | ||||||
|     FIXME: there's gotta be a better design for this and get_track_format? |  | ||||||
|   */ |  | ||||||
|   bool cdio_get_track_green(const CdIo_t *p_cdio, track_t i_track); |  | ||||||
|      |  | ||||||
|   /*!  
 |  | ||||||
|     Return the ending LSN for track number |  | ||||||
|     i_track in cdio.  CDIO_INVALID_LSN is returned on error. |  | ||||||
|   */ |  | ||||||
|   lsn_t cdio_get_track_last_lsn(const CdIo_t *p_cdio, track_t i_track); |  | ||||||
| 
 |  | ||||||
|   /*!  
 |  | ||||||
|     Get the starting LBA for track number |  | ||||||
|     i_track in p_cdio.  Track numbers usually start at something  |  | ||||||
|     greater than 0, usually 1. |  | ||||||
| 
 |  | ||||||
|     The "leadout" track is specified either by |  | ||||||
|     using i_track CDIO_CDROM_LEADOUT_TRACK or the total tracks+1. |  | ||||||
| 
 |  | ||||||
|     @param p_cdio object to get information from |  | ||||||
|     @param i_track  the track number we want the LSN for |  | ||||||
|     @return the starting LBA or CDIO_INVALID_LBA on error. |  | ||||||
|   */ |  | ||||||
|   lba_t cdio_get_track_lba(const CdIo_t *p_cdio, track_t i_track); |  | ||||||
|    |  | ||||||
|   /*!  
 |  | ||||||
|     Return the starting LSN for track number |  | ||||||
|     i_track in p_cdio.  Track numbers usually start at something  |  | ||||||
|     greater than 0, usually 1. |  | ||||||
| 
 |  | ||||||
|     The "leadout" track is specified either by |  | ||||||
|     using i_track CDIO_CDROM_LEADOUT_TRACK or the total tracks+1. |  | ||||||
| 
 |  | ||||||
|     @param p_cdio object to get information from |  | ||||||
|     @param i_track  the track number we want the LSN for |  | ||||||
|     @return the starting LSN or CDIO_INVALID_LSN on error. |  | ||||||
|   */ |  | ||||||
|   lsn_t cdio_get_track_lsn(const CdIo_t *p_cdio, track_t i_track); |  | ||||||
| 
 |  | ||||||
|   /*!  
 |  | ||||||
|     Return the starting LBA for the pregap for track number |  | ||||||
|     i_track in p_cdio.  Track numbers usually start at something  |  | ||||||
|     greater than 0, usually 1. |  | ||||||
| 
 |  | ||||||
|     @param p_cdio object to get information from |  | ||||||
|     @param i_track  the track number we want the LBA for |  | ||||||
|     @return the starting LBA or CDIO_INVALID_LBA on error. |  | ||||||
|   */ |  | ||||||
|   lba_t cdio_get_track_pregap_lba(const CdIo_t *p_cdio, track_t i_track); |  | ||||||
| 
 |  | ||||||
|   /*!  
 |  | ||||||
|     Return the starting LSN for the pregap for track number |  | ||||||
|     i_track in p_cdio.  Track numbers usually start at something  |  | ||||||
|     greater than 0, usually 1. |  | ||||||
| 
 |  | ||||||
|     @param p_cdio object to get information from |  | ||||||
|     @param i_track  the track number we want the LSN for |  | ||||||
|     @return the starting LSN or CDIO_INVALID_LSN on error. |  | ||||||
|   */ |  | ||||||
|   lsn_t cdio_get_track_pregap_lsn(const CdIo_t *p_cdio, track_t i_track); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Get the International Standard Recording Code (ISRC) for track number |  | ||||||
|     i_track in p_cdio.  Track numbers usually start at something |  | ||||||
|     greater than 0, usually 1. |  | ||||||
| 
 |  | ||||||
|     @return the International Standard Recording Code (ISRC) or NULL |  | ||||||
|     if there is none or we don't have the ability to get it. |  | ||||||
| 
 |  | ||||||
|     Note: string is malloc'd so caller has to free() the returned |  | ||||||
|     string when done with it. |  | ||||||
| 
 |  | ||||||
|   */ |  | ||||||
|   char * cdio_get_track_isrc (const CdIo_t *p_cdio, track_t i_track); |  | ||||||
|    |  | ||||||
|   /*!  
 |  | ||||||
|     Return the starting MSF (minutes/secs/frames) for track number |  | ||||||
|     i_track in p_cdio.  Track numbers usually start at something  |  | ||||||
|     greater than 0, usually 1. |  | ||||||
| 
 |  | ||||||
|     The "leadout" track is specified either by |  | ||||||
|     using i_track CDIO_CDROM_LEADOUT_TRACK or the total tracks+1. |  | ||||||
|      |  | ||||||
|     @return true if things worked or false if there is no track entry. |  | ||||||
|   */ |  | ||||||
|   bool cdio_get_track_msf(const CdIo_t *p_cdio, track_t i_track,  |  | ||||||
| 			  /*out*/ msf_t *msf); |  | ||||||
|    |  | ||||||
|   /*! Get linear preemphasis status on an audio track 
 |  | ||||||
|       This is not meaningful if not an audio track? |  | ||||||
|    */ |  | ||||||
|   track_flag_t cdio_get_track_preemphasis(const CdIo_t *p_cdio, |  | ||||||
| 					  track_t i_track); |  | ||||||
|    |  | ||||||
|   /*!  
 |  | ||||||
|     Get the number of sectors between this track an the next.  This |  | ||||||
|     includes any pregap sectors before the start of the next track. |  | ||||||
|     Track numbers usually start at something  |  | ||||||
|     greater than 0, usually 1. |  | ||||||
| 
 |  | ||||||
|     @return the number of sectors or 0 if there is an error. |  | ||||||
|   */ |  | ||||||
|   unsigned int cdio_get_track_sec_count(const CdIo_t *p_cdio, track_t i_track); |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
| #endif /* __CDIO_TRACK_H__ */ |  | ||||||
| 
 |  | ||||||
|  | @ -27,536 +27,62 @@ | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #include <cdio/cdio.h> | #include <cdio/cdio.h> | ||||||
| #include <cdio/audio.h> | #include <cdio/disc.h> | ||||||
| #include <cdio/cdtext.h> | #include <cdio/iso9660.h> | ||||||
| #include "mmc/mmc_private.h" |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
|   extern const char * cdio_dirname(const char *fname); |  | ||||||
|   extern const char *cdio_abspath(const char *cwd, const char *fname); |  | ||||||
| 
 |  | ||||||
|   /* Opaque type */ |  | ||||||
|   typedef struct _CdioDataSource CdioDataSource_t; |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
| #include "generic.h" |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|   typedef struct { |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Get volume of an audio CD. |  | ||||||
|        |  | ||||||
|       @param p_env the CD object to be acted upon. |  | ||||||
|        |  | ||||||
|     */ |  | ||||||
|     driver_return_code_t (*audio_get_volume)  |  | ||||||
| 	 (void *p_env,  /*out*/ cdio_audio_volume_t *p_volume); |  | ||||||
| 
 |  | ||||||
|     /*!
 |  | ||||||
|       Pause playing CD through analog output |  | ||||||
|        |  | ||||||
|       @param p_env the CD object to be acted upon. |  | ||||||
|     */ |  | ||||||
|     driver_return_code_t (*audio_pause) (void *p_env); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Playing CD through analog output |  | ||||||
|        |  | ||||||
|       @param p_env the CD object to be acted upon. |  | ||||||
|     */ |  | ||||||
|     driver_return_code_t (*audio_play_msf) ( void *p_env,  |  | ||||||
| 					     msf_t *p_start_msf, |  | ||||||
| 					     msf_t *p_end_msf ); |  | ||||||
| 
 |  | ||||||
|     /*!
 |  | ||||||
|       Playing CD through analog output |  | ||||||
|        |  | ||||||
|       @param p_env the CD object to be acted upon. |  | ||||||
|     */ |  | ||||||
|     driver_return_code_t (*audio_play_track_index)  |  | ||||||
| 	 ( void *p_env, cdio_track_index_t *p_track_index ); |  | ||||||
| 
 |  | ||||||
|     /*!
 |  | ||||||
|       Get subchannel information. |  | ||||||
|        |  | ||||||
|       @param p_env the CD object to be acted upon. |  | ||||||
|     */ |  | ||||||
|     driver_return_code_t (*audio_read_subchannel)  |  | ||||||
| 	 ( void *p_env, cdio_subchannel_t *subchannel ); |  | ||||||
| 
 |  | ||||||
|     /*!
 |  | ||||||
|       Resume playing an audio CD. |  | ||||||
|        |  | ||||||
|       @param p_env the CD object to be acted upon. |  | ||||||
|        |  | ||||||
|     */ |  | ||||||
|     driver_return_code_t (*audio_resume) ( void *p_env ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Set volume of an audio CD. |  | ||||||
|        |  | ||||||
|       @param p_env the CD object to be acted upon. |  | ||||||
|        |  | ||||||
|     */ |  | ||||||
|     driver_return_code_t (*audio_set_volume)  |  | ||||||
| 	 ( void *p_env,  cdio_audio_volume_t *p_volume ); |  | ||||||
| 
 |  | ||||||
|     /*!
 |  | ||||||
|       Stop playing an audio CD. |  | ||||||
|        |  | ||||||
|       @param p_env the CD object to be acted upon. |  | ||||||
|        |  | ||||||
|     */ |  | ||||||
|     driver_return_code_t (*audio_stop) ( void *p_env ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Eject media in CD drive. If successful, as a side effect we  |  | ||||||
|       also free p_env.  |  | ||||||
| 
 |  | ||||||
|       @param p_env the CD object to be acted upon. |  | ||||||
|       If the CD is ejected *p_env is freed and p_env set to NULL. |  | ||||||
|     */ |  | ||||||
|     driver_return_code_t (*eject_media) ( void *p_env ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Release and free resources associated with cd.  |  | ||||||
|     */ |  | ||||||
|     void (*free) (void *p_env); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Return the value associated with the key "arg". |  | ||||||
|     */ |  | ||||||
|     const char * (*get_arg) (void *p_env, const char key[]); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Get the block size for subsequest read requests, via a SCSI MMC  |  | ||||||
|       MODE_SENSE 6 command. |  | ||||||
|     */ |  | ||||||
|     int (*get_blocksize) ( void *p_env ); |  | ||||||
|      |  | ||||||
|     /*! 
 |  | ||||||
|       Get cdtext information for a CdIo object. |  | ||||||
|      |  | ||||||
|       @param obj the CD object that may contain CD-TEXT information. |  | ||||||
|       @return the CD-TEXT object or NULL if obj is NULL |  | ||||||
|       or CD-TEXT information does not exist. |  | ||||||
|     */ |  | ||||||
|     cdtext_t * (*get_cdtext) ( void *p_env ); |  | ||||||
| 
 |  | ||||||
|     /*!
 |  | ||||||
|       Get raw cdtext information as on the disc for a CdIo object |  | ||||||
| 
 |  | ||||||
|       @param obj the CD object that may contain CD-TEXT information. |  | ||||||
|       @return pointer to the raw CD-TEXT data or NULL if obj is NULL |  | ||||||
|       or no CD-TEXT information present on the disc. |  | ||||||
| 
 |  | ||||||
|       free when done and not NULL. |  | ||||||
|     */ |  | ||||||
|     uint8_t * (*get_cdtext_raw) ( void *p_env ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Return an array of device names. if CdIo is NULL (we haven't |  | ||||||
|       initialized a specific device driver), then find a suitable device  |  | ||||||
|       driver. |  | ||||||
|        |  | ||||||
|       NULL is returned if we couldn't return a list of devices. |  | ||||||
|     */ |  | ||||||
|     char ** (*get_devices) ( void ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Get the default CD device. |  | ||||||
| 
 |  | ||||||
|       @return a string containing the default CD device or NULL is |  | ||||||
|       if we couldn't get a default device. |  | ||||||
| 
 |  | ||||||
|       In some situations of drivers or OS's we can't find a CD device if |  | ||||||
|       there is no media in it and it is possible for this routine to return |  | ||||||
|       NULL even though there may be a hardware CD-ROM. |  | ||||||
|     */ |  | ||||||
|     char * (*get_default_device) ( void ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Return the size of the CD in logical block address (LBA) units. |  | ||||||
|       @return the lsn. On error 0 or CDIO_INVALD_LSN. |  | ||||||
|     */ |  | ||||||
|     lsn_t (*get_disc_last_lsn) ( void *p_env ); |  | ||||||
| 
 |  | ||||||
|     /*! 
 |  | ||||||
|       Get disc mode associated with cd_obj. |  | ||||||
|     */ |  | ||||||
|     discmode_t (*get_discmode) ( void *p_env ); |  | ||||||
| 
 |  | ||||||
|     /*!
 |  | ||||||
|       Return the what kind of device we've got. |  | ||||||
|        |  | ||||||
|       See cd_types.h for a list of bitmasks for the drive type; |  | ||||||
|     */ |  | ||||||
|     void (*get_drive_cap) (const void *p_env, |  | ||||||
| 			   cdio_drive_read_cap_t  *p_read_cap, |  | ||||||
| 			   cdio_drive_write_cap_t *p_write_cap, |  | ||||||
| 			   cdio_drive_misc_cap_t  *p_misc_cap); |  | ||||||
|     /*!
 |  | ||||||
|       Return the number of of the first track.  |  | ||||||
|       CDIO_INVALID_TRACK is returned on error. |  | ||||||
|     */ |  | ||||||
|     track_t (*get_first_track_num) ( void *p_env ); |  | ||||||
|      |  | ||||||
|     /*! 
 |  | ||||||
|       Get the CD-ROM hardware info via a SCSI MMC INQUIRY command. |  | ||||||
|       False is returned if we had an error getting the information. |  | ||||||
|     */ |  | ||||||
|     bool (*get_hwinfo)  |  | ||||||
| 	 ( const CdIo_t *p_cdio, /* out*/ cdio_hwinfo_t *p_hw_info ); |  | ||||||
| 
 |  | ||||||
|     /*! Get the LSN of the first track of the last session of
 |  | ||||||
|       on the CD. |  | ||||||
| 	    |  | ||||||
|        @param p_cdio the CD object to be acted upon. |  | ||||||
|        @param i_last_session pointer to the session number to be returned. |  | ||||||
|     */ |  | ||||||
|     driver_return_code_t (*get_last_session) |  | ||||||
| 	 ( void *p_env, /*out*/ lsn_t *i_last_session ); |  | ||||||
| 
 |  | ||||||
|     /*! 
 |  | ||||||
|       Find out if media has changed since the last call. |  | ||||||
|       @param p_env the CD object to be acted upon. |  | ||||||
|       @return 1 if media has changed since last call, 0 if not. Error |  | ||||||
|       return codes are the same as driver_return_code_t |  | ||||||
|     */ |  | ||||||
|     int (*get_media_changed) ( const void *p_env ); |  | ||||||
| 
 |  | ||||||
|     /*!  
 |  | ||||||
|       Return the media catalog number MCN from the CD or NULL if |  | ||||||
|       there is none or we don't have the ability to get it. |  | ||||||
|     */ |  | ||||||
|     char * (*get_mcn) ( const void *p_env ); |  | ||||||
| 
 |  | ||||||
|     /*! 
 |  | ||||||
|       Return the number of tracks in the current medium. |  | ||||||
|       CDIO_INVALID_TRACK is returned on error. |  | ||||||
|     */ |  | ||||||
|     track_t (*get_num_tracks) ( void *p_env ); |  | ||||||
|      |  | ||||||
|     /*! Return number of channels in track: 2 or 4; -2 if not
 |  | ||||||
|       implemented or -1 for error. |  | ||||||
|       Not meaningful if track is not an audio track. |  | ||||||
|     */ |  | ||||||
|     int (*get_track_channels) ( const void *p_env, track_t i_track ); |  | ||||||
|    |  | ||||||
|     /*! Return 0 if track is copy protected, 1 if not, or -1 for error
 |  | ||||||
|       or -2 if not implimented (yet). Is this meaningful if not an |  | ||||||
|       audio track? |  | ||||||
|     */ |  | ||||||
|     track_flag_t (*get_track_copy_permit) ( void *p_env, track_t i_track ); |  | ||||||
|    |  | ||||||
|     /*!  
 |  | ||||||
|       Return the starting LBA for track number |  | ||||||
|       i_track in p_env.  Tracks numbers start at 1. |  | ||||||
|       The "leadout" track is specified either by |  | ||||||
|       using track_num LEADOUT_TRACK or the total tracks+1. |  | ||||||
|       CDIO_INVALID_LBA is returned on error. |  | ||||||
|     */ |  | ||||||
|     lba_t (*get_track_lba) ( void *p_env, track_t i_track ); |  | ||||||
| 
 |  | ||||||
|     /*!  
 |  | ||||||
|       Return the starting LBA for the pregap for track number |  | ||||||
|       i_track in p_env.  Tracks numbers start at 1. |  | ||||||
|       CDIO_INVALID_LBA is returned on error. |  | ||||||
|     */ |  | ||||||
|     lba_t (*get_track_pregap_lba) ( const void *p_env, track_t i_track ); |  | ||||||
| 
 |  | ||||||
|     /*!
 |  | ||||||
|       Return the International Standard Recording Code (ISRC) for track number |  | ||||||
|       i_track in p_cdio.  Track numbers start at 1. |  | ||||||
| 
 |  | ||||||
|       Note: string is malloc'd so caller has to free() the returned |  | ||||||
|       string when done with it. |  | ||||||
|     */ |  | ||||||
|     char * (*get_track_isrc) ( const void *p_env, track_t i_track ); |  | ||||||
|      |  | ||||||
|     /*!  
 |  | ||||||
|       Get format of track.  |  | ||||||
|     */ |  | ||||||
|     track_format_t (*get_track_format) ( void *p_env, track_t i_track ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Return true if we have XA data (green, mode2 form1) or |  | ||||||
|       XA data (green, mode2 form2). That is track begins: |  | ||||||
|       sync - header - subheader |  | ||||||
|       12     4      -  8 |  | ||||||
|        |  | ||||||
|       FIXME: there's gotta be a better design for this and get_track_format? |  | ||||||
|     */ |  | ||||||
|     bool (*get_track_green) ( void *p_env, track_t i_track ); |  | ||||||
|      |  | ||||||
|     /*!  
 |  | ||||||
|       Return the starting MSF (minutes/secs/frames) for track number |  | ||||||
|       i_track in p_env.  Tracks numbers start at 1. |  | ||||||
|       The "leadout" track is specified either by |  | ||||||
|       using i_track LEADOUT_TRACK or the total tracks+1. |  | ||||||
|       False is returned on error. |  | ||||||
|     */ |  | ||||||
|     bool (*get_track_msf) ( void *p_env, track_t i_track, msf_t *p_msf ); |  | ||||||
|      |  | ||||||
|     /*! Return 1 if track has pre-emphasis, 0 if not, or -1 for error
 |  | ||||||
|       or -2 if not implimented (yet). Is this meaningful if not an |  | ||||||
|       audio track? |  | ||||||
|     */ |  | ||||||
|     track_flag_t (*get_track_preemphasis)  |  | ||||||
| 	 ( const void  *p_env, track_t i_track ); |  | ||||||
|    |  | ||||||
|     /*!
 |  | ||||||
|       lseek - reposition read/write file offset |  | ||||||
|       Returns (off_t) -1 on error.  |  | ||||||
|       Similar to libc's lseek() |  | ||||||
|     */ |  | ||||||
|     off_t (*lseek) ( void *p_env, off_t offset, int whence ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Reads into buf the next size bytes. |  | ||||||
|       Returns -1 on error.  |  | ||||||
|       Similar to libc's read() |  | ||||||
|     */ |  | ||||||
|     ssize_t (*read) ( void *p_env, void *p_buf, size_t i_size ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Reads a single mode2 sector from cd device into buf starting |  | ||||||
|       from lsn. Returns 0 if no error.  |  | ||||||
|     */ |  | ||||||
|     int (*read_audio_sectors) ( void *p_env, void *p_buf, lsn_t i_lsn, |  | ||||||
| 				unsigned int i_blocks ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Read a data sector |  | ||||||
|        |  | ||||||
|       @param p_env environment to read from |  | ||||||
| 
 |  | ||||||
|       @param p_buf place to read data into.  The caller should make sure |  | ||||||
|       this location can store at least CDIO_CD_FRAMESIZE,  |  | ||||||
|       M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE depending |  | ||||||
|       on the kind of sector getting read. If you don't  |  | ||||||
|       know whether you have a Mode 1/2, Form 1/ Form 2/Formless |  | ||||||
|       sector best to reserve space for the maximum,  |  | ||||||
|       M2RAW_SECTOR_SIZE. |  | ||||||
| 
 |  | ||||||
|       @param i_lsn sector to read |  | ||||||
|       @param i_blocksize size of block. Should be either CDIO_CD_FRAMESIZE,  |  | ||||||
|       M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE. See comment above under p_buf. |  | ||||||
|     */ |  | ||||||
|     driver_return_code_t (*read_data_sectors)  |  | ||||||
| 	 ( void *p_env, void *p_buf, lsn_t i_lsn, uint16_t i_blocksize, |  | ||||||
| 	   uint32_t i_blocks ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Reads a single mode2 sector from cd device into buf starting |  | ||||||
|       from lsn. Returns 0 if no error.  |  | ||||||
|     */ |  | ||||||
|     int (*read_mode2_sector)  |  | ||||||
| 	 ( void *p_env, void *p_buf, lsn_t i_lsn, bool b_mode2_form2 ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Reads i_blocks of mode2 sectors from cd device into data starting |  | ||||||
|       from lsn. |  | ||||||
|       Returns 0 if no error.  |  | ||||||
|     */ |  | ||||||
|     int (*read_mode2_sectors)  |  | ||||||
| 	 ( void *p_env, void *p_buf, lsn_t i_lsn, bool b_mode2_form2,  |  | ||||||
| 	   unsigned int i_blocks ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Reads a single mode1 sector from cd device into buf starting |  | ||||||
|       from lsn. Returns 0 if no error.  |  | ||||||
|     */ |  | ||||||
|     int (*read_mode1_sector)  |  | ||||||
| 	 ( void *p_env, void *p_buf, lsn_t i_lsn, bool mode1_form2 ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Reads i_blocks of mode1 sectors from cd device into data starting |  | ||||||
|       from lsn. |  | ||||||
|       Returns 0 if no error.  |  | ||||||
|     */ |  | ||||||
|     int (*read_mode1_sectors)  |  | ||||||
| 	 ( void *p_env, void *p_buf, lsn_t i_lsn, bool mode1_form2,  |  | ||||||
| 	   unsigned int i_blocks ); |  | ||||||
|      |  | ||||||
|     bool (*read_toc) ( void *p_env ) ; |  | ||||||
| 
 |  | ||||||
|     /*!
 |  | ||||||
|       Run a SCSI MMC command.  |  | ||||||
|        |  | ||||||
|       cdio	        CD structure set by cdio_open(). |  | ||||||
|       i_timeout_ms      time in milliseconds we will wait for the command |  | ||||||
|                         to complete.  |  | ||||||
|       cdb_len           number of bytes in cdb (6, 10, or 12). |  | ||||||
|       cdb	        CDB bytes. All values that are needed should be set on  |  | ||||||
|                         input.  |  | ||||||
|       b_return_data	TRUE if the command expects data to be returned in  |  | ||||||
|                         the buffer |  | ||||||
|       len	        Size of buffer |  | ||||||
|       buf	        Buffer for data, both sending and receiving |  | ||||||
|        |  | ||||||
|       Returns 0 if command completed successfully. |  | ||||||
|     */ |  | ||||||
|     mmc_run_cmd_fn_t run_mmc_cmd; |  | ||||||
| 
 |  | ||||||
|     /*!
 |  | ||||||
|       Set the arg "key" with "value" in the source device. |  | ||||||
|     */ |  | ||||||
|     int (*set_arg) ( void *p_env, const char key[], const char value[] ); |  | ||||||
|      |  | ||||||
|     /*!
 |  | ||||||
|       Set the blocksize for subsequent reads.  |  | ||||||
|     */ |  | ||||||
|     driver_return_code_t (*set_blocksize) ( void *p_env,  |  | ||||||
| 					    uint16_t i_blocksize ); |  | ||||||
| 
 |  | ||||||
|     /*!
 |  | ||||||
|       Set the drive speed.  |  | ||||||
|        |  | ||||||
|       @return 0 if everything went okay, -1 if we had an error. is -2 |  | ||||||
|       returned if this is not implemented for the current driver. |  | ||||||
|     */ |  | ||||||
|     int (*set_speed) ( void *p_env, int i_speed ); |  | ||||||
| 
 |  | ||||||
|   } cdio_funcs_t; |  | ||||||
| 
 | 
 | ||||||
|  | #define CdioDataSource_t int | ||||||
| 
 | 
 | ||||||
|   /*! Implementation of CdIo type */ |   /*! Implementation of CdIo type */ | ||||||
|   struct _CdIo { |   struct _CdIo { | ||||||
|     driver_id_t driver_id; /**< Particular driver opened. */ | //    driver_id_t driver_id; /**< Particular driver opened. */
 | ||||||
|     cdio_funcs_t op;       /**< driver-specific routines handling
 | //    cdio_funcs_t op;       /**< driver-specific routines handling
 | ||||||
| 			        implementation*/ | //			        implementation*/
 | ||||||
|     void *env;             /**< environment. Passed to routine above. */ |     void *env;             /**< environment. Passed to routine above. */ | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   /* This is used in drivers that must keep their own internal 
 |   typedef struct { | ||||||
|      position pointer for doing seeks. Stream-based drivers (like bincue, |     char *source_name;      /**< Name used in open. */ | ||||||
|      nrg, toc, network) would use this.  |     bool  init;             /**< True if structure has been initialized */ | ||||||
|  |     bool  toc_init;         /**< True if TOC read in */ | ||||||
|  |     bool  b_cdtext_error;   /**< True if trouble reading CD-Text */ | ||||||
|  |      | ||||||
|  |     int   ioctls_debugged;  /**< for debugging */ | ||||||
|  | 
 | ||||||
|  |     /* Only one of data_source or fd is used; fd  is for CD-ROM
 | ||||||
|  |        devices and the data_source for stream reading (bincue, nrg, toc, | ||||||
|  |        network). | ||||||
|      */ |      */ | ||||||
|   typedef struct  |     CdioDataSource_t *data_source; | ||||||
|   { |     int     fd;             /**< File descriptor of device */ | ||||||
|     off_t   buff_offset;      /* buffer offset in disk-image seeks. */ |     track_t i_first_track;  /**< The starting track number. */ | ||||||
|     track_t index;            /* Current track index in tocent. */ |     track_t i_tracks;       /**< The number of tracks. */ | ||||||
|     lba_t   lba;              /* Current LBA */ |  | ||||||
|   } internal_position_t; |  | ||||||
| 
 | 
 | ||||||
|   CdIo_t * cdio_new (generic_img_private_t *p_env, cdio_funcs_t *p_funcs); |     uint8_t i_joliet_level; /**< 0 = no Joliet extensions.
 | ||||||
|  | 			       1-3: Joliet level. */ | ||||||
|  |     iso9660_pvd_t pvd;       | ||||||
|  |     iso9660_svd_t svd;       | ||||||
|  |     CdIo_t   *cdio;         /**< a way to call general cdio routines. */ | ||||||
|  | //    cdtext_t *cdtext;       /**< CD-Text for disc. */
 | ||||||
|  | //    track_flags_t track_flags[CDIO_CD_MAX_TRACKS+1];
 | ||||||
| 
 | 
 | ||||||
|   /* The below structure describes a specific CD Input driver  */ |     /* Memorized sense reply of the most recent SCSI command.
 | ||||||
|   typedef struct  |        Recorded by driver implementations of cdio_funcs_t.run_mmc_cmd().  | ||||||
|   { |        Read by API function mmc_get_cmd_scsi_sense(). | ||||||
|     driver_id_t  id; |  | ||||||
|     unsigned int flags; |  | ||||||
|     const char  *name; |  | ||||||
|     const char  *describe; |  | ||||||
|     bool (*have_driver) (void);  |  | ||||||
|     CdIo_t *(*driver_open) (const char *psz_source_name);  |  | ||||||
|     CdIo_t *(*driver_open_am) (const char *psz_source_name,  |  | ||||||
| 			     const char *psz_access_mode);  |  | ||||||
|     char *(*get_default_device) (void);  |  | ||||||
|     bool (*is_device) (const char *psz_source_name); |  | ||||||
|     char **(*get_devices) (void); |  | ||||||
|     driver_return_code_t (*close_tray) (const char *psz_device); |  | ||||||
|   } CdIo_driver_t; |  | ||||||
| 
 |  | ||||||
|   /* The below array gives of the drivers that are currently available for 
 |  | ||||||
|      on a particular host. */ |  | ||||||
|   extern CdIo_driver_t CdIo_driver[]; |  | ||||||
| 
 |  | ||||||
|   /* The last valid entry of Cdio_driver. -1 means uninitialzed. -2 
 |  | ||||||
|      means some sort of error. |  | ||||||
|     */ |     */ | ||||||
|   extern int CdIo_last_driver;  | //    unsigned char  scsi_mmc_sense[263];   /* See SPC-3 4.5.3 : 252 bytes legal
 | ||||||
|  | //                                             but 263 bytes possible */
 | ||||||
|  | //    int            scsi_mmc_sense_valid;  /* Number of valid sense bytes */
 | ||||||
| 
 | 
 | ||||||
|   /* The below array gives all drivers that can possibly appear.
 |     /* Memorized eventual system specific SCSI address tuple text.
 | ||||||
|      on a particular host. */ |        Empty text means that there is no such text defined for the drive. | ||||||
|   extern CdIo_driver_t CdIo_all_drivers[]; |        NULL means that the driver does not support "scsi-tuple". | ||||||
| 
 |        To be read by cdio_get_arg("scsi-tuple"). | ||||||
|   /*! 
 |        System specific suffixes to the key may demand and eventually | ||||||
|     Add/allocate a drive to the end of drives.  |        guarantee a further specified format. | ||||||
|     Use cdio_free_device_list() to free this device_list. |        E.g. "scsi-tuple-linux" guarantees either "Bus,Host,Channel,Target,Lun", | ||||||
|  |                                or empty text, or NULL. No other forms. | ||||||
|     */ |     */ | ||||||
|   void cdio_add_device_list(char **device_list[], const char *psz_drive, |     char *scsi_tuple; | ||||||
| 			    unsigned int *i_drives); |   } generic_img_private_t; | ||||||
|    |    | ||||||
|   driver_return_code_t close_tray_bsdi    (const char *psz_drive); | #endif | ||||||
|   driver_return_code_t close_tray_freebsd (const char *psz_drive); |  | ||||||
|   driver_return_code_t close_tray_linux   (const char *psz_drive); |  | ||||||
|   driver_return_code_t close_tray_netbsd  (const char *psz_drive); |  | ||||||
|   driver_return_code_t close_tray_os2     (const char *psz_drive); |  | ||||||
|   driver_return_code_t close_tray_osx     (const char *psz_drive); |  | ||||||
|   driver_return_code_t close_tray_solaris (const char *psz_drive); |  | ||||||
|   driver_return_code_t close_tray_win32   (const char *psz_drive); |  | ||||||
| 
 |  | ||||||
|   bool cdio_have_netbsd(void); |  | ||||||
|   CdIo_t * cdio_open_netbsd (const char *psz_source); |  | ||||||
|   char * cdio_get_default_device_netbsd(void); |  | ||||||
|   char **cdio_get_devices_netbsd(void); |  | ||||||
|   /*! Set up CD-ROM for reading using the NetBSD driver. The device_name is
 |  | ||||||
|       the some sort of device name. |  | ||||||
| 
 |  | ||||||
|      NULL is returned on error or there is no FreeBSD driver. |  | ||||||
| 
 |  | ||||||
|      @see cdio_open_cd, cdio_open |  | ||||||
|    */ |  | ||||||
|   CdIo_t * cdio_open_am_netbsd (const char *psz_source, |  | ||||||
| 				const char *psz_access_mode); |  | ||||||
| 
 |  | ||||||
|   /*! DEPRICATED: use cdio_have_driver().
 |  | ||||||
|     True if AIX driver is available. */ |  | ||||||
|   bool cdio_have_aix    (void); |  | ||||||
| 
 |  | ||||||
|   /*! DEPRICATED: use cdio_have_driver().
 |  | ||||||
|     True if BSDI driver is available. */ |  | ||||||
|   bool cdio_have_bsdi    (void); |  | ||||||
| 
 |  | ||||||
|   /*! DEPRICATED: use cdio_have_driver().
 |  | ||||||
|     True if FreeBSD driver is available. */ |  | ||||||
|   bool cdio_have_freebsd (void); |  | ||||||
| 
 |  | ||||||
|   /*! DEPRICATED: use cdio_have_driver().
 |  | ||||||
|     True if GNU/Linux driver is available. */ |  | ||||||
|   bool cdio_have_linux   (void); |  | ||||||
| 
 |  | ||||||
|   /*! DEPRICATED: use cdio_have_driver().
 |  | ||||||
|     True if Sun Solaris driver is available. */ |  | ||||||
|   bool cdio_have_solaris (void); |  | ||||||
| 
 |  | ||||||
|   /*! DEPRICATED: use cdio_have_driver().
 |  | ||||||
|     True if IBM OS2 driver is available. */ |  | ||||||
|   bool cdio_have_os2     (void); |  | ||||||
| 
 |  | ||||||
|   /*! DEPRICATED: use cdio_have_driver().
 |  | ||||||
|     True if Apple OSX driver is available. */ |  | ||||||
|   bool cdio_have_osx     (void); |  | ||||||
| 
 |  | ||||||
|   /*! DEPRICATED: use cdio_have_driver().
 |  | ||||||
|     True if Microsoft Windows driver is available. */ |  | ||||||
|   bool cdio_have_win32   (void); |  | ||||||
| 
 |  | ||||||
|   /*! True if Nero driver is available. */ |  | ||||||
|   bool cdio_have_nrg     (void); |  | ||||||
| 
 |  | ||||||
|   /*! True if BIN/CUE driver is available. */ |  | ||||||
|   bool cdio_have_bincue  (void); |  | ||||||
| 
 |  | ||||||
|   /*! True if cdrdao CDRDAO driver is available. */ |  | ||||||
|   bool cdio_have_cdrdao  (void); |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
| #endif /* __CDIO_PRIVATE_H__ */ |  | ||||||
|  |  | ||||||
|  | @ -1,249 +0,0 @@ | ||||||
| /*
 |  | ||||||
|   Copyright (C) 2004, 2005, 2006, 2008, 2009 Rocky Bernstein <rocky@gnu.org> |  | ||||||
| 
 |  | ||||||
|   This program is free software: you can redistribute it and/or modify |  | ||||||
|   it under the terms of the GNU General Public License as published by |  | ||||||
|   the Free Software Foundation, either version 3 of the License, or |  | ||||||
|   (at your option) any later version. |  | ||||||
| 
 |  | ||||||
|   This program is distributed in the hope that it will be useful, |  | ||||||
|   but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|   GNU General Public License for more details. |  | ||||||
| 
 |  | ||||||
|   You should have received a copy of the GNU General Public License |  | ||||||
|   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| /* Internal routines for CD I/O drivers. */ |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
| #ifndef __CDIO_GENERIC_H__ |  | ||||||
| #define __CDIO_GENERIC_H__ |  | ||||||
| 
 |  | ||||||
| #if defined(HAVE_CONFIG_H) && !defined(LIBCDIO_CONFIG_H) |  | ||||||
| # include "config.h" |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #include <cdio/cdio.h> |  | ||||||
| #include <cdio/cdtext.h> |  | ||||||
| #include <cdio/iso9660.h> |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Things common to private device structures. Even though not all |  | ||||||
|     devices may have some of these fields, by listing common ones |  | ||||||
|     we facilitate writing generic routines and even cut-and-paste |  | ||||||
|     code. |  | ||||||
|    */ |  | ||||||
|   typedef struct { |  | ||||||
|     char *source_name;      /**< Name used in open. */ |  | ||||||
|     bool  init;             /**< True if structure has been initialized */ |  | ||||||
|     bool  toc_init;         /**< True if TOC read in */ |  | ||||||
|     bool  b_cdtext_error;   /**< True if trouble reading CD-Text */ |  | ||||||
|      |  | ||||||
|     int   ioctls_debugged;  /**< for debugging */ |  | ||||||
| 
 |  | ||||||
|     /* Only one of data_source or fd is used; fd  is for CD-ROM
 |  | ||||||
|        devices and the data_source for stream reading (bincue, nrg, toc, |  | ||||||
|        network). |  | ||||||
|      */ |  | ||||||
|     CdioDataSource_t *data_source; |  | ||||||
|     int     fd;             /**< File descriptor of device */ |  | ||||||
|     track_t i_first_track;  /**< The starting track number. */ |  | ||||||
|     track_t i_tracks;       /**< The number of tracks. */ |  | ||||||
| 
 |  | ||||||
|     uint8_t i_joliet_level; /**< 0 = no Joliet extensions.
 |  | ||||||
| 			       1-3: Joliet level. */ |  | ||||||
|     iso9660_pvd_t pvd;       |  | ||||||
|     iso9660_svd_t svd;       |  | ||||||
|     CdIo_t   *cdio;         /**< a way to call general cdio routines. */ |  | ||||||
|     cdtext_t *cdtext;       /**< CD-Text for disc. */ |  | ||||||
|     track_flags_t track_flags[CDIO_CD_MAX_TRACKS+1]; |  | ||||||
| 
 |  | ||||||
|     /* Memorized sense reply of the most recent SCSI command.
 |  | ||||||
|        Recorded by driver implementations of cdio_funcs_t.run_mmc_cmd().  |  | ||||||
|        Read by API function mmc_get_cmd_scsi_sense(). |  | ||||||
|     */ |  | ||||||
|     unsigned char  scsi_mmc_sense[263];   /* See SPC-3 4.5.3 : 252 bytes legal
 |  | ||||||
|                                              but 263 bytes possible */ |  | ||||||
|     int            scsi_mmc_sense_valid;  /* Number of valid sense bytes */ |  | ||||||
| 
 |  | ||||||
|     /* Memorized eventual system specific SCSI address tuple text.
 |  | ||||||
|        Empty text means that there is no such text defined for the drive. |  | ||||||
|        NULL means that the driver does not support "scsi-tuple". |  | ||||||
|        To be read by cdio_get_arg("scsi-tuple"). |  | ||||||
|        System specific suffixes to the key may demand and eventually |  | ||||||
|        guarantee a further specified format. |  | ||||||
|        E.g. "scsi-tuple-linux" guarantees either "Bus,Host,Channel,Target,Lun", |  | ||||||
|                                or empty text, or NULL. No other forms. |  | ||||||
|     */ |  | ||||||
|     char *scsi_tuple; |  | ||||||
|   } generic_img_private_t; |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Bogus eject media when there is no ejectable media, e.g. a disk image |  | ||||||
|     We always return 2. Should we also free resources?  |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t cdio_generic_unimplemented_eject_media (void *p_env); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Set the blocksize for subsequent reads.  |  | ||||||
|      |  | ||||||
|     @return -2 since it's not implemented. |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t  |  | ||||||
|   cdio_generic_unimplemented_set_blocksize (void *p_user_data,  |  | ||||||
|                                             uint16_t i_blocksize); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Set the drive speed. |  | ||||||
|      |  | ||||||
|     @return -2 since it's not implemented. |  | ||||||
|   */ |  | ||||||
|   driver_return_code_t cdio_generic_unimplemented_set_speed (void *p_user_data, |  | ||||||
|                                                              int i_speed); |  | ||||||
|    |  | ||||||
|   /*!
 |  | ||||||
|     Release and free resources associated with cd.  |  | ||||||
|   */ |  | ||||||
|   void cdio_generic_free (void *p_env); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Initialize CD device. |  | ||||||
|   */ |  | ||||||
|   bool cdio_generic_init (void *p_env, int open_mode); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Reads into buf the next size bytes. |  | ||||||
|     Returns -1 on error.  |  | ||||||
|     Is in fact libc's read(). |  | ||||||
|   */ |  | ||||||
|   off_t cdio_generic_lseek (void *p_env, off_t offset, int whence); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Reads into buf the next size bytes. |  | ||||||
|     Returns -1 on error.  |  | ||||||
|     Is in fact libc's read(). |  | ||||||
|   */ |  | ||||||
|   ssize_t cdio_generic_read (void *p_env, void *p_buf, size_t size); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Reads a single form1 sector from cd device into data starting |  | ||||||
|     from lsn. Returns 0 if no error.  |  | ||||||
|   */ |  | ||||||
|   int cdio_generic_read_form1_sector (void * user_data, void *data,  |  | ||||||
|                                       lsn_t lsn); |  | ||||||
|    |  | ||||||
|   /*!
 |  | ||||||
|     Release and free resources associated with stream or disk image. |  | ||||||
|   */ |  | ||||||
|   void cdio_generic_stdio_free (void *env); |  | ||||||
| 
 |  | ||||||
|   /*!  
 |  | ||||||
|     Return true if source_name could be a device containing a CD-ROM on |  | ||||||
|     Win32 |  | ||||||
|   */ |  | ||||||
|   bool cdio_is_device_win32(const char *source_name); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Return true if source_name could be a device containing a CD-ROM on |  | ||||||
|     OS/2 |  | ||||||
|   */ |  | ||||||
|   bool cdio_is_device_os2(const char *source_name); |  | ||||||
| 
 |  | ||||||
|    |  | ||||||
|   /*!  
 |  | ||||||
|     Return true if source_name could be a device containing a CD-ROM on |  | ||||||
|     most Unix servers with block and character devices. |  | ||||||
|   */ |  | ||||||
|   bool cdio_is_device_generic(const char *source_name); |  | ||||||
| 
 |  | ||||||
|    |  | ||||||
|   /*!  
 |  | ||||||
|     Like above, but don't give a warning device doesn't exist. |  | ||||||
|   */ |  | ||||||
|   bool cdio_is_device_quiet_generic(const char *source_name); |  | ||||||
| 
 |  | ||||||
|   /*! 
 |  | ||||||
|     Get cdtext information for a CdIo object . |  | ||||||
|      |  | ||||||
|     @param obj the CD object that may contain CD-TEXT information. |  | ||||||
|     @return the CD-TEXT object or NULL if obj is NULL |  | ||||||
|     or CD-TEXT information does not exist. |  | ||||||
|   */ |  | ||||||
|   cdtext_t *get_cdtext_generic (void *p_user_data); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Return the number of of the first track.  |  | ||||||
|     CDIO_INVALID_TRACK is returned on error. |  | ||||||
|   */ |  | ||||||
|   track_t get_first_track_num_generic(void *p_user_data); |  | ||||||
| 
 |  | ||||||
|   /*!
 |  | ||||||
|     Return the number of tracks in the current medium. |  | ||||||
|   */ |  | ||||||
|   track_t get_num_tracks_generic(void *p_user_data); |  | ||||||
|    |  | ||||||
|   /*! 
 |  | ||||||
|     Get disc type associated with cd object. |  | ||||||
|   */ |  | ||||||
|   discmode_t get_discmode_generic (void *p_user_data ); |  | ||||||
|    |  | ||||||
|   /*! 
 |  | ||||||
|     Same as above but only handles CD cases |  | ||||||
|   */ |  | ||||||
|   discmode_t get_discmode_cd_generic (void *p_user_data ); |  | ||||||
|    |  | ||||||
|   /*! Return number of channels in track: 2 or 4; -2 if not
 |  | ||||||
|     implemented or -1 for error. |  | ||||||
|     Not meaningful if track is not an audio track. |  | ||||||
|   */ |  | ||||||
|   int  get_track_channels_generic(const void *p_user_data, track_t i_track); |  | ||||||
|    |  | ||||||
|   /*! Return 1 if copy is permitted on the track, 0 if not, or -1 for error.
 |  | ||||||
|     Is this meaningful if not an audio track? |  | ||||||
|   */ |  | ||||||
|   track_flag_t get_track_copy_permit_generic(void *p_user_data,  |  | ||||||
| 					     track_t i_track); |  | ||||||
|    |  | ||||||
|   /*! Return 1 if track has pre-emphasis, 0 if not, or -1 for error.
 |  | ||||||
|     Is this meaningful if not an audio track? |  | ||||||
|      |  | ||||||
|     pre-emphasis is a non linear frequency response. |  | ||||||
|   */ |  | ||||||
|   track_flag_t get_track_preemphasis_generic(const void *p_user_data,  |  | ||||||
| 					     track_t i_track); |  | ||||||
|    |  | ||||||
|   /*!
 |  | ||||||
|     Read cdtext information for a CdIo object . |  | ||||||
|    |  | ||||||
|     return true on success, false on error or CD-Text information does |  | ||||||
|     not exist. |  | ||||||
|   */ |  | ||||||
|   uint8_t * read_cdtext_generic (void *p_env); |  | ||||||
|    |  | ||||||
|   void set_track_flags(track_flags_t *p_track_flag, uint8_t flag); |  | ||||||
|    |  | ||||||
|   /*! Read mode 1 or mode2 sectors (using cooked mode).  */ |  | ||||||
|   driver_return_code_t read_data_sectors_generic (void *p_user_data,  |  | ||||||
| 						  void *p_buf, lsn_t i_lsn,  |  | ||||||
| 						  uint16_t i_blocksize,  |  | ||||||
| 						  uint32_t i_blocks); |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif /* __cplusplus */ |  | ||||||
| 
 |  | ||||||
| #endif /* __CDIO_GENERIC_H__ */ |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
| /* 
 |  | ||||||
|  * Local variables: |  | ||||||
|  *  c-file-style: "gnu" |  | ||||||
|  *  tab-width: 8 |  | ||||||
|  *  indent-tabs-mode: nil |  | ||||||
|  * End: |  | ||||||
|  */ |  | ||||||
|  | @ -1,150 +0,0 @@ | ||||||
| /* private MMC helper routines.
 |  | ||||||
|   Copyright (C) 2004, 2005, 2006, 2008 Rocky Bernstein <rocky@gnu.org> |  | ||||||
| 
 |  | ||||||
|   This program is free software: you can redistribute it and/or modify |  | ||||||
|   it under the terms of the GNU General Public License as published by |  | ||||||
|   the Free Software Foundation, either version 3 of the License, or |  | ||||||
|   (at your option) any later version. |  | ||||||
| 
 |  | ||||||
|   This program is distributed in the hope that it will be useful, |  | ||||||
|   but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|   GNU General Public License for more details. |  | ||||||
| 
 |  | ||||||
|   You should have received a copy of the GNU General Public License |  | ||||||
|   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| #include <cdio/mmc.h> |  | ||||||
| 
 |  | ||||||
| /*! Convert milliseconds to seconds taking the ceiling value, i.e.
 |  | ||||||
|     1002 milliseconds gets rounded to 2 seconds. |  | ||||||
| */ |  | ||||||
| #define SECS2MSECS 1000 |  | ||||||
| static inline unsigned int  |  | ||||||
| msecs2secs(unsigned int msecs)  |  | ||||||
| { |  | ||||||
|   return (msecs+(SECS2MSECS-1)) / SECS2MSECS; |  | ||||||
| } |  | ||||||
| #undef SECS2MSECS |  | ||||||
| 
 |  | ||||||
| /***********************************************************
 |  | ||||||
|   MMC CdIo Operations which a driver may use.  |  | ||||||
|   These are not directly user-accessible. |  | ||||||
| ************************************************************/ |  | ||||||
| /*!
 |  | ||||||
|   Read Audio Subchannel information |  | ||||||
|    |  | ||||||
|   @param p_user_data the CD object to be acted upon. |  | ||||||
|    |  | ||||||
| */ |  | ||||||
| driver_return_code_t |  | ||||||
| audio_read_subchannel_mmc ( void *p_user_data,  |  | ||||||
| 			    cdio_subchannel_t *p_subchannel); |  | ||||||
| 
 |  | ||||||
| /*!
 |  | ||||||
|   Get the block size for subsequest read requests, via a SCSI MMC  |  | ||||||
|   MODE_SENSE 6 command. |  | ||||||
| */ |  | ||||||
| int get_blocksize_mmc (void *p_user_data); |  | ||||||
| 
 |  | ||||||
| /*!  
 |  | ||||||
|   Get the lsn of the end of the CD |  | ||||||
|    |  | ||||||
|   @return the lsn. On error return CDIO_INVALID_LSN. |  | ||||||
| */ |  | ||||||
| lsn_t get_disc_last_lsn_mmc( void *p_user_data ); |  | ||||||
|    |  | ||||||
| void get_drive_cap_mmc (const void *p_user_data, |  | ||||||
| 			/*out*/ cdio_drive_read_cap_t  *p_read_cap, |  | ||||||
| 			/*out*/ cdio_drive_write_cap_t *p_write_cap, |  | ||||||
| 			/*out*/ cdio_drive_misc_cap_t  *p_misc_cap); |  | ||||||
| 
 |  | ||||||
| int get_media_changed_mmc (const void *p_user_data); |  | ||||||
| 
 |  | ||||||
| char *get_mcn_mmc (const void *p_user_data); |  | ||||||
| 
 |  | ||||||
| driver_return_code_t get_tray_status (const void *p_user_data); |  | ||||||
| 
 |  | ||||||
| /*! Read just the user data part of some sort of data sector (via 
 |  | ||||||
|     mmc_read_cd).  |  | ||||||
| 
 |  | ||||||
|     @param p_user_data object to read from |  | ||||||
| 
 |  | ||||||
|     @param p_buf place to read data into.  The caller should make sure |  | ||||||
|                  this location can store at least CDIO_CD_FRAMESIZE, |  | ||||||
|                  M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE depending on |  | ||||||
|                  the kind of sector getting read. If you don't know |  | ||||||
|                  whether you have a Mode 1/2, Form 1/ Form 2/Formless |  | ||||||
|                  sector best to reserve space for the maximum, |  | ||||||
|                  M2RAW_SECTOR_SIZE. |  | ||||||
| 
 |  | ||||||
|     @param i_lsn sector to read |  | ||||||
|     @param i_blocksize size of block. Should be either CDIO_CD_FRAMESIZE,  |  | ||||||
|     M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE. See comment above under p_buf. |  | ||||||
| 
 |  | ||||||
| */ |  | ||||||
| driver_return_code_t read_data_sectors_mmc ( void *p_user_data,  |  | ||||||
| 					     void *p_buf,  lsn_t i_lsn, |  | ||||||
| 					     uint16_t i_blocksize, |  | ||||||
| 					     uint32_t i_blocks ); |  | ||||||
| char *get_mcn_mmc (const void *p_user_data); |  | ||||||
| 
 |  | ||||||
| /* Set read blocksize (via MMC) */ |  | ||||||
| driver_return_code_t set_blocksize_mmc (void *p_user_data,  |  | ||||||
| 					uint16_t i_blocksize); |  | ||||||
| 
 |  | ||||||
| /* Set the drive speed in CD-ROM speed units (via MMC). */ |  | ||||||
| driver_return_code_t set_drive_speed_mmc (void *p_user_data, int i_speed); |  | ||||||
| 
 |  | ||||||
| /* Set CD-ROM drive speed  in K bytes per second. (via MMC) */ |  | ||||||
| driver_return_code_t set_speed_mmc (void *p_user_data, int i_Kbs_speed); |  | ||||||
| 
 |  | ||||||
| /***********************************************************
 |  | ||||||
|   Miscellaenous other "private" routines. Probably need |  | ||||||
|   to better classify these. |  | ||||||
| ************************************************************/ |  | ||||||
| 
 |  | ||||||
| typedef driver_return_code_t (*mmc_run_cmd_fn_t)  |  | ||||||
|      ( void *p_user_data,  |  | ||||||
|        unsigned int i_timeout_ms, |  | ||||||
|        unsigned int i_cdb,  |  | ||||||
|        const mmc_cdb_t *p_cdb,  |  | ||||||
|        cdio_mmc_direction_t e_direction,  |  | ||||||
|        unsigned int i_buf, /*in/out*/ void *p_buf ); |  | ||||||
| 			      |  | ||||||
| int mmc_set_blocksize_mmc_private ( const void *p_env, const |  | ||||||
| 				    mmc_run_cmd_fn_t run_mmc_cmd, |  | ||||||
| 				    uint16_t i_blocksize ); |  | ||||||
| 
 |  | ||||||
| /*! 
 |  | ||||||
|   Get the DVD type associated with cd object. |  | ||||||
| */ |  | ||||||
| discmode_t  |  | ||||||
| mmc_get_dvd_struct_physical_private ( void *p_env, |  | ||||||
| 				      mmc_run_cmd_fn_t run_mmc_cmd,  |  | ||||||
| 				      cdio_dvd_struct_t *s ); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| char *mmc_get_mcn_private ( void *p_env, |  | ||||||
| 			    mmc_run_cmd_fn_t run_mmc_cmd |  | ||||||
| 			    ); |  | ||||||
| 
 |  | ||||||
| uint8_t * mmc_read_cdtext_private ( void *p_user_data,  |  | ||||||
| 			       mmc_run_cmd_fn_t run_mmc_cmd |  | ||||||
| 			       ); |  | ||||||
| 
 |  | ||||||
| /*!
 |  | ||||||
|   On input a MODE_SENSE command was issued and we have the results |  | ||||||
|   in p. We interpret this and return a bit mask set according to the  |  | ||||||
|   capabilities. |  | ||||||
|  */ |  | ||||||
| void mmc_get_drive_cap_buf(const uint8_t *p, |  | ||||||
| 			   /*out*/ cdio_drive_read_cap_t  *p_read_cap, |  | ||||||
| 			   /*out*/ cdio_drive_write_cap_t *p_write_cap, |  | ||||||
| 			   /*out*/ cdio_drive_misc_cap_t  *p_misc_cap); |  | ||||||
| 
 |  | ||||||
| driver_return_code_t |  | ||||||
| mmc_set_blocksize_private ( void *p_env,  |  | ||||||
| 			    const mmc_run_cmd_fn_t run_mmc_cmd,  |  | ||||||
| 			    uint16_t i_blocksize); |  | ||||||
							
								
								
									
										12
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -33,7 +33,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL | ||||||
| IDD_DIALOG DIALOGEX 12, 12, 206, 278 | IDD_DIALOG DIALOGEX 12, 12, 206, 278 | ||||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||||
| EXSTYLE WS_EX_APPWINDOW | EXSTYLE WS_EX_APPWINDOW | ||||||
| CAPTION "Rufus v1.0.7.122" | CAPTION "Rufus v1.0.7.123" | ||||||
| FONT 8, "MS Shell Dlg", 400, 0, 0x1 | FONT 8, "MS Shell Dlg", 400, 0, 0x1 | ||||||
| BEGIN | BEGIN | ||||||
|     DEFPUSHBUTTON   "Start",IDC_START,94,236,50,14 |     DEFPUSHBUTTON   "Start",IDC_START,94,236,50,14 | ||||||
|  | @ -69,7 +69,7 @@ BEGIN | ||||||
|     DEFPUSHBUTTON   "OK",IDOK,231,175,50,14,WS_GROUP |     DEFPUSHBUTTON   "OK",IDOK,231,175,50,14,WS_GROUP | ||||||
|     CONTROL         "<a href=""http://rufus.akeo.ie"">http://rufus.akeo.ie</a>",IDC_ABOUT_RUFUS_URL, |     CONTROL         "<a href=""http://rufus.akeo.ie"">http://rufus.akeo.ie</a>",IDC_ABOUT_RUFUS_URL, | ||||||
|                     "SysLink",WS_TABSTOP,46,47,114,9 |                     "SysLink",WS_TABSTOP,46,47,114,9 | ||||||
|     LTEXT           "Version 1.0.7 (Build 122)",IDC_STATIC,46,19,78,8 |     LTEXT           "Version 1.0.7 (Build 123)",IDC_STATIC,46,19,78,8 | ||||||
|     PUSHBUTTON      "License...",IDC_ABOUT_LICENSE,46,175,50,14,WS_GROUP |     PUSHBUTTON      "License...",IDC_ABOUT_LICENSE,46,175,50,14,WS_GROUP | ||||||
|     EDITTEXT        IDC_ABOUT_COPYRIGHTS,46,107,235,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL |     EDITTEXT        IDC_ABOUT_COPYRIGHTS,46,107,235,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL | ||||||
|     LTEXT           "Report bugs or request enhancements at:",IDC_STATIC,46,66,187,8 |     LTEXT           "Report bugs or request enhancements at:",IDC_STATIC,46,66,187,8 | ||||||
|  | @ -207,8 +207,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 1,0,7,122 |  FILEVERSION 1,0,7,123 | ||||||
|  PRODUCTVERSION 1,0,7,122 |  PRODUCTVERSION 1,0,7,123 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -225,13 +225,13 @@ BEGIN | ||||||
|         BEGIN |         BEGIN | ||||||
|             VALUE "CompanyName", "akeo.ie" |             VALUE "CompanyName", "akeo.ie" | ||||||
|             VALUE "FileDescription", "Rufus" |             VALUE "FileDescription", "Rufus" | ||||||
|             VALUE "FileVersion", "1.0.7.122" |             VALUE "FileVersion", "1.0.7.123" | ||||||
|             VALUE "InternalName", "Rufus" |             VALUE "InternalName", "Rufus" | ||||||
|             VALUE "LegalCopyright", "© 2011 Pete Batard (GPL v3)" |             VALUE "LegalCopyright", "© 2011 Pete Batard (GPL v3)" | ||||||
|             VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" |             VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" | ||||||
|             VALUE "OriginalFilename", "rufus.exe" |             VALUE "OriginalFilename", "rufus.exe" | ||||||
|             VALUE "ProductName", "Rufus" |             VALUE "ProductName", "Rufus" | ||||||
|             VALUE "ProductVersion", "1.0.7.122" |             VALUE "ProductVersion", "1.0.7.123" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue