Blame include/cdio/read.h

Packit dd8086
/*
Packit dd8086
    Copyright (C) 2005, 2006, 2007, 2008, 2012 Rocky Bernstein <rocky@gnu.org>
Packit dd8086
Packit dd8086
    This program is free software: you can redistribute it and/or modify
Packit dd8086
    it under the terms of the GNU General Public License as published by
Packit dd8086
    the Free Software Foundation, either version 3 of the License, or
Packit dd8086
    (at your option) any later version.
Packit dd8086
Packit dd8086
    This program is distributed in the hope that it will be useful,
Packit dd8086
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd8086
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd8086
    GNU General Public License for more details.
Packit dd8086
Packit dd8086
    You should have received a copy of the GNU General Public License
Packit dd8086
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit dd8086
*/
Packit dd8086
Packit dd8086
/** \file read.h 
Packit dd8086
 *
Packit dd8086
 *  \brief The top-level header for sector (block, frame)-related
Packit dd8086
 *  libcdio calls. 
Packit dd8086
 */
Packit dd8086
Packit dd8086
#ifndef CDIO_READ_H_
Packit dd8086
#define CDIO_READ_H_
Packit dd8086
Packit dd8086
#include <cdio/types.h>
Packit dd8086
Packit dd8086
#ifdef __cplusplus
Packit dd8086
extern "C" {
Packit dd8086
#endif /* __cplusplus */
Packit dd8086
Packit dd8086
  /** All the different ways a block/sector can be read. */
Packit dd8086
  typedef enum {
Packit dd8086
    CDIO_READ_MODE_AUDIO,  /**< CD-DA, audio, Red Book */
Packit dd8086
    CDIO_READ_MODE_M1F1,   /**< Mode 1 Form 1 */
Packit dd8086
    CDIO_READ_MODE_M1F2,   /**< Mode 1 Form 2 */
Packit dd8086
    CDIO_READ_MODE_M2F1,   /**< Mode 2 Form 1 */
Packit dd8086
    CDIO_READ_MODE_M2F2    /**< Mode 2 Form 2 */
Packit dd8086
  } cdio_read_mode_t;
Packit dd8086
  
Packit dd8086
  /*!
Packit dd8086
    Reposition read offset
Packit dd8086
    Similar to (if not the same as) libc's fseek()
Packit dd8086
Packit dd8086
    @param p_cdio object which gets adjusted
Packit dd8086
    @param offset amount to seek
Packit dd8086
    @param whence  like corresponding parameter in libc's fseek, e.g. 
Packit dd8086
                   SEEK_SET or SEEK_END.
Packit dd8086
    @return (off_t) -1 on error. 
Packit dd8086
  */
Packit dd8086
Packit dd8086
  off_t cdio_lseek(const CdIo_t *p_cdio, off_t offset, int whence);
Packit dd8086
    
Packit dd8086
  /*!  Reads into buf the next size bytes.  Similar to (if not the
Packit dd8086
    same as) libc's read(). This is a "cooked" read, or one handled by
Packit dd8086
    the OS. It probably won't work on audio data. For that use
Packit dd8086
    cdio_read_audio_sector(s).
Packit dd8086
Packit dd8086
    @param p_cdio object to read from
Packit dd8086
    @param p_buf place to read data into. The caller should make sure
Packit dd8086
                 this location can store at least i_size bytes.
Packit dd8086
    @param i_size number of bytes to read
Packit dd8086
Packit dd8086
    @return (ssize_t) -1 on error. 
Packit dd8086
  */
Packit dd8086
  ssize_t cdio_read(const CdIo_t *p_cdio, void *p_buf, size_t i_size);
Packit dd8086
    
Packit dd8086
  /*!
Packit dd8086
    Read an audio sector
Packit dd8086
Packit dd8086
    @param p_cdio object to read from
Packit dd8086
    @param p_buf place to read data into. The caller should make sure
Packit dd8086
                 this location can store at least CDIO_FRAMESIZE_RAW
Packit dd8086
                 bytes.
Packit dd8086
    @param i_lsn sector to read
Packit dd8086
  */
Packit dd8086
  driver_return_code_t cdio_read_audio_sector (const CdIo_t *p_cdio, 
Packit dd8086
                                               void *p_buf, lsn_t i_lsn);
Packit dd8086
Packit dd8086
  /*!
Packit dd8086
    Reads audio sectors
Packit dd8086
Packit dd8086
    @param p_cdio object to read from
Packit dd8086
    @param p_buf place to read data into. The caller should make sure
Packit dd8086
                 this location can store at least CDIO_FRAMESIZE_RAW
Packit dd8086
                 * i_blocks bytes.
Packit dd8086
    @param i_lsn sector to read
Packit dd8086
    @param i_blocks number of sectors to read
Packit dd8086
  */
Packit dd8086
  driver_return_code_t cdio_read_audio_sectors (const CdIo_t *p_cdio, 
Packit dd8086
                                                void *p_buf, lsn_t i_lsn,
Packit dd8086
                                                uint32_t i_blocks);
Packit dd8086
Packit dd8086
  /*!
Packit dd8086
    Read data sectors
Packit dd8086
Packit dd8086
    @param p_cdio object to read from
Packit dd8086
    @param p_buf place to read data into.  The caller should make sure
Packit dd8086
                 this location can store at least ISO_BLOCKSIZE, 
Packit dd8086
                 M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE depending
Packit dd8086
                 on the kind of sector getting read. If you don't 
Packit dd8086
                 know whether you have a Mode 1/2, Form 1/ Form 2/Formless
Packit dd8086
                 sector best to reserve space for the maximum, 
Packit dd8086
                 M2RAW_SECTOR_SIZE.
Packit dd8086
    @param i_lsn sector to read
Packit dd8086
    @param i_blocksize size of block. Should be either CDIO_CD_FRAMESIZE, 
Packit dd8086
    M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE. See comment above under p_buf.
Packit dd8086
Packit dd8086
    @param i_blocks number of blocks to read
Packit dd8086
  */
Packit dd8086
  driver_return_code_t cdio_read_data_sectors ( const CdIo_t *p_cdio, 
Packit dd8086
                                                void *p_buf, lsn_t i_lsn,
Packit dd8086
                                                uint16_t i_blocksize,
Packit dd8086
                                                uint32_t i_blocks );
Packit dd8086
  /*!
Packit dd8086
    Reads a mode 1 sector
Packit dd8086
Packit dd8086
    @param p_cdio object to read from
Packit dd8086
    @param p_buf place to read data into.
Packit dd8086
    @param i_lsn sector to read
Packit dd8086
    @param b_form2 true for reading mode 1 form 2 sectors or false for 
Packit dd8086
    mode 1 form 1 sectors.
Packit dd8086
  */
Packit dd8086
  driver_return_code_t cdio_read_mode1_sector (const CdIo_t *p_cdio, 
Packit dd8086
                                               void *p_buf, lsn_t i_lsn, 
Packit dd8086
                                               bool b_form2);
Packit dd8086
  /*!
Packit dd8086
    Reads mode 1 sectors
Packit dd8086
Packit dd8086
    @param p_cdio object to read from
Packit dd8086
    @param p_buf place to read data into
Packit dd8086
    @param i_lsn sector to read
Packit dd8086
    @param b_form2 true for reading mode 1 form 2 sectors or false for 
Packit dd8086
    mode 1 form 1 sectors.
Packit dd8086
    @param i_blocks number of sectors to read
Packit dd8086
  */
Packit dd8086
  driver_return_code_t cdio_read_mode1_sectors (const CdIo_t *p_cdio, 
Packit dd8086
                                                void *p_buf, lsn_t i_lsn, 
Packit dd8086
                                                bool b_form2, 
Packit dd8086
                                                uint32_t i_blocks);
Packit dd8086
  /*!
Packit dd8086
    Reads a mode 2 sector
Packit dd8086
Packit dd8086
    @param p_cdio object to read from
Packit dd8086
    @param p_buf place to read data into. The caller should make sure
Packit dd8086
                 this location can store at least 
Packit dd8086
                 M2RAW_SECTOR_SIZE (for form 1) or CDIO_CD_FRAMESIZE (for 
Packit dd8086
                 form 2) bytes.
Packit dd8086
    @param i_lsn sector to read
Packit dd8086
    @param b_form2 true for reading mode 2 form 2 sectors or false for 
Packit dd8086
    mode 2 form 1 sectors.
Packit dd8086
Packit dd8086
    @return 0 if no error, nonzero otherwise.
Packit dd8086
  */
Packit dd8086
  driver_return_code_t cdio_read_mode2_sector (const CdIo_t *p_cdio, 
Packit dd8086
                                               void *p_buf, lsn_t i_lsn, 
Packit dd8086
                                               bool b_form2);
Packit dd8086
  
Packit dd8086
  /** The special case of reading a single block is a common one so we
Packit dd8086
      provide a routine for that as a convenience.
Packit dd8086
  */
Packit dd8086
  driver_return_code_t cdio_read_sector(const CdIo_t *p_cdio, void *p_buf, 
Packit dd8086
                                        lsn_t i_lsn, 
Packit dd8086
                                        cdio_read_mode_t read_mode);
Packit dd8086
  /*!
Packit dd8086
    Reads mode 2 sectors
Packit dd8086
Packit dd8086
    @param p_cdio object to read from
Packit dd8086
    @param p_buf place to read data into. The caller should make sure
Packit dd8086
                 this location can store at least 
Packit dd8086
                 M2RAW_SECTOR_SIZE (for form 1) or CDIO_CD_FRAMESIZE (for 
Packit dd8086
                 form 2) * i_blocks bytes.
Packit dd8086
    @param i_lsn sector to read
Packit dd8086
    @param b_form2 true for reading mode2 form 2 sectors or false for 
Packit dd8086
           mode 2  form 1 sectors.
Packit dd8086
    @param i_blocks number of sectors to read
Packit dd8086
Packit dd8086
    @return 0 if no error, nonzero otherwise.
Packit dd8086
  */
Packit dd8086
  driver_return_code_t cdio_read_mode2_sectors (const CdIo_t *p_cdio, 
Packit dd8086
                                                void *p_buf, lsn_t i_lsn, 
Packit dd8086
                                                bool b_form2, 
Packit dd8086
                                                uint32_t i_blocks);
Packit dd8086
  
Packit dd8086
  /*!
Packit dd8086
    Reads a number of sectors (AKA blocks).
Packit dd8086
Packit dd8086
    @param p_cdio cdio object
Packit dd8086
    @param p_buf place to read data into. The caller should make sure
Packit dd8086
    this location is large enough. See below for size information.
Packit dd8086
    @param read_mode the kind of "mode" to use in reading.
Packit dd8086
    @param i_lsn sector to read
Packit dd8086
    @param i_blocks number of sectors to read
Packit dd8086
    @return DRIVER_OP_SUCCESS (0) if no error, other (negative) enumerations
Packit dd8086
    are returned on error.
Packit dd8086
Packit dd8086
    If read_mode is CDIO_MODE_AUDIO,
Packit dd8086
      *p_buf should hold at least CDIO_FRAMESIZE_RAW * i_blocks bytes.
Packit dd8086
Packit dd8086
    If read_mode is CDIO_MODE_DATA,
Packit dd8086
      *p_buf should hold at least i_blocks times either ISO_BLOCKSIZE, 
Packit dd8086
      M1RAW_SECTOR_SIZE or M2F2_SECTOR_SIZE depending on the kind of 
Packit dd8086
      sector getting read. If you don't know whether you have a Mode 1/2, 
Packit dd8086
    Form 1/ Form 2/Formless sector best to reserve space for the maximum
Packit dd8086
    which is M2RAW_SECTOR_SIZE.
Packit dd8086
Packit dd8086
    If read_mode is CDIO_MODE_M2F1,
Packit dd8086
    *p_buf should hold at least M2RAW_SECTOR_SIZE * i_blocks bytes.
Packit dd8086
    
Packit dd8086
    If read_mode is CDIO_MODE_M2F2,
Packit dd8086
    *p_buf should hold at least CDIO_CD_FRAMESIZE * i_blocks bytes.
Packit dd8086
    
Packit dd8086
  */
Packit dd8086
  driver_return_code_t cdio_read_sectors(const CdIo_t *p_cdio, void *p_buf, 
Packit dd8086
                                         lsn_t i_lsn, 
Packit dd8086
                                         cdio_read_mode_t read_mode,
Packit dd8086
                                         uint32_t i_blocks);
Packit dd8086
Packit dd8086
#ifdef __cplusplus
Packit dd8086
}
Packit dd8086
#endif /* __cplusplus */
Packit dd8086
Packit dd8086
#endif /* CDIO_READ_H_ */