|
Packit Service |
3e823c |
/* cdrdao - write audio CD-Rs in disc-at-once mode
|
|
Packit Service |
3e823c |
*
|
|
Packit Service |
3e823c |
* Copyright (C) 1998-2002 Andreas Mueller <andreas@daneb.de>
|
|
Packit Service |
3e823c |
*
|
|
Packit Service |
3e823c |
* This program is free software; you can redistribute it and/or modify
|
|
Packit Service |
3e823c |
* it under the terms of the GNU General Public License as published by
|
|
Packit Service |
3e823c |
* the Free Software Foundation; either version 2 of the License, or
|
|
Packit Service |
3e823c |
* (at your option) any later version.
|
|
Packit Service |
3e823c |
*
|
|
Packit Service |
3e823c |
* This program is distributed in the hope that it will be useful,
|
|
Packit Service |
3e823c |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
3e823c |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit Service |
3e823c |
* GNU General Public License for more details.
|
|
Packit Service |
3e823c |
*
|
|
Packit Service |
3e823c |
* You should have received a copy of the GNU General Public License
|
|
Packit Service |
3e823c |
* along with this program; if not, write to the Free Software
|
|
Packit Service |
3e823c |
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
Packit Service |
3e823c |
*/
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
#ifndef __CDRDRIVER_H__
|
|
Packit Service |
3e823c |
#define __CDRDRIVER_H__
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
#include "ScsiIf.h"
|
|
Packit Service |
3e823c |
#include "Msf.h"
|
|
Packit Service |
3e823c |
#include "TrackData.h"
|
|
Packit Service |
3e823c |
#include "SubChannel.h"
|
|
Packit Service |
3e823c |
#include "remote.h"
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
class Toc;
|
|
Packit Service |
3e823c |
class Track;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
#define OPT_DRV_GET_TOC_GENERIC 0x00010000
|
|
Packit Service |
3e823c |
#define OPT_DRV_SWAP_READ_SAMPLES 0x00020000
|
|
Packit Service |
3e823c |
#define OPT_DRV_NO_PREGAP_READ 0x00040000
|
|
Packit Service |
3e823c |
#define OPT_DRV_RAW_TOC_BCD 0x00080000
|
|
Packit Service |
3e823c |
#define OPT_DRV_RAW_TOC_HEX 0x00100000
|
|
Packit Service |
3e823c |
#define OPT_DRV_NO_CDTEXT_READ 0x00200000
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// reading capabilities
|
|
Packit Service |
3e823c |
#define CDR_READ_CAP_AUDIO_PW_RAW 0x001
|
|
Packit Service |
3e823c |
#define CDR_READ_CAP_AUDIO_RW_COOKED 0x002
|
|
Packit Service |
3e823c |
#define CDR_READ_CAP_AUDIO_RW_RAW 0x004
|
|
Packit Service |
3e823c |
#define CDR_READ_CAP_AUDIO_PQ_BCD 0x008
|
|
Packit Service |
3e823c |
#define CDR_READ_CAP_AUDIO_PQ_HEX 0x010
|
|
Packit Service |
3e823c |
#define CDR_READ_CAP_DATA_PW_RAW 0x020
|
|
Packit Service |
3e823c |
#define CDR_READ_CAP_DATA_RW_COOKED 0x040
|
|
Packit Service |
3e823c |
#define CDR_READ_CAP_DATA_RW_RAW 0x080
|
|
Packit Service |
3e823c |
#define CDR_READ_CAP_DATA_PQ_BCD 0x100
|
|
Packit Service |
3e823c |
#define CDR_READ_CAP_DATA_PQ_HEX 0x200
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
#define CDR_AUDIO_SCAN_CAP (CDR_READ_CAP_AUDIO_PW_RAW|CDR_READ_CAP_AUDIO_PQ_BCD|CDR_READ_CAP_AUDIO_PQ_HEX)
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
struct DiskInfo {
|
|
Packit Service |
3e823c |
long capacity; // recordable capacity of medium
|
|
Packit Service |
3e823c |
Msf manufacturerId; // disk identification
|
|
Packit Service |
3e823c |
int recSpeedLow; // lowest recording speed
|
|
Packit Service |
3e823c |
int recSpeedHigh; // highest recording speed
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
int sessionCnt; // number of closed sessions
|
|
Packit Service |
3e823c |
int lastTrackNr; // number of last track on disk
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
long lastSessionLba; // start lba of first track of last closed session
|
|
Packit Service |
3e823c |
long thisSessionLba; // start lba of this session
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
int diskTocType; // type of CD TOC, only valid if CD-R is not empty
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
unsigned int empty : 1; // 1 for empty disk, else 0
|
|
Packit Service |
3e823c |
unsigned int append : 1; // 1 if CD-R is appendable, else 0
|
|
Packit Service |
3e823c |
unsigned int cdrw : 1; // 1 if disk is a CD-RW
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
struct {
|
|
Packit Service |
3e823c |
unsigned int empty : 1;
|
|
Packit Service |
3e823c |
unsigned int append : 1;
|
|
Packit Service |
3e823c |
unsigned int cdrw : 1;
|
|
Packit Service |
3e823c |
unsigned int capacity : 1;
|
|
Packit Service |
3e823c |
unsigned int manufacturerId : 1;
|
|
Packit Service |
3e823c |
unsigned int recSpeed : 1;
|
|
Packit Service |
3e823c |
} valid;
|
|
Packit Service |
3e823c |
};
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
struct DriveInfo {
|
|
Packit Service |
3e823c |
int maxReadSpeed;
|
|
Packit Service |
3e823c |
int currentReadSpeed;
|
|
Packit Service |
3e823c |
int maxWriteSpeed;
|
|
Packit Service |
3e823c |
int currentWriteSpeed;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
unsigned int accurateAudioStream : 1;
|
|
Packit Service |
3e823c |
unsigned int burnProof : 1;
|
|
Packit Service |
3e823c |
unsigned int ricohJustLink : 1;
|
|
Packit Service |
3e823c |
unsigned int ricohJustSpeed : 1;
|
|
Packit Service |
3e823c |
};
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
struct CdTextPack {
|
|
Packit Service |
3e823c |
unsigned char packType;
|
|
Packit Service |
3e823c |
unsigned char trackNumber;
|
|
Packit Service |
3e823c |
unsigned char sequenceNumber;
|
|
Packit Service |
3e823c |
unsigned char blockCharacter;
|
|
Packit Service |
3e823c |
unsigned char data[12];
|
|
Packit Service |
3e823c |
unsigned char crc0;
|
|
Packit Service |
3e823c |
unsigned char crc1;
|
|
Packit Service |
3e823c |
};
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
struct CdToc {
|
|
Packit Service |
3e823c |
int track; // number
|
|
Packit Service |
3e823c |
long start; // LBA of track start
|
|
Packit Service |
3e823c |
unsigned char adrCtl; // ADR/CTL field
|
|
Packit Service |
3e823c |
};
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
struct CdRawToc {
|
|
Packit Service |
3e823c |
int sessionNr;
|
|
Packit Service |
3e823c |
int point;
|
|
Packit Service |
3e823c |
int min;
|
|
Packit Service |
3e823c |
int sec;
|
|
Packit Service |
3e823c |
int frame;
|
|
Packit Service |
3e823c |
int pmin;
|
|
Packit Service |
3e823c |
int psec;
|
|
Packit Service |
3e823c |
int pframe;
|
|
Packit Service |
3e823c |
unsigned char adrCtl;
|
|
Packit Service |
3e823c |
};
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
struct TrackInfo {
|
|
Packit Service |
3e823c |
int trackNr; // track number
|
|
Packit Service |
3e823c |
unsigned char ctl; // flags
|
|
Packit Service |
3e823c |
TrackData::Mode mode; // track data mode
|
|
Packit Service |
3e823c |
long start; // absolute start position from CD TOC
|
|
Packit Service |
3e823c |
long pregap; // pre-gap length of track in blocks
|
|
Packit Service |
3e823c |
long fill; // number of blocks to fill with zero data at end
|
|
Packit Service |
3e823c |
int indexCnt; // number of index increments
|
|
Packit Service |
3e823c |
long index[98]; // index marks
|
|
Packit Service |
3e823c |
char isrcCode[13]; // ISRC code, valid if 'isrcCode[0] != 0'
|
|
Packit Service |
3e823c |
char *filename; // data file name
|
|
Packit Service |
3e823c |
long bytesWritten; // number of bytes written to file
|
|
Packit Service |
3e823c |
};
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
class CdrDriver {
|
|
Packit Service |
3e823c |
public:
|
|
Packit Service |
3e823c |
CdrDriver(ScsiIf *scsiIf, unsigned long options);
|
|
Packit Service |
3e823c |
virtual ~CdrDriver();
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// returns stored SCSI interface object
|
|
Packit Service |
3e823c |
virtual ScsiIf *scsiIf() const { return scsiIf_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// sets SCSI interface object
|
|
Packit Service |
3e823c |
void scsiIf(ScsiIf *i) { scsiIf_ = i; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// returns name of driver
|
|
Packit Service |
3e823c |
virtual const char *driverName() const { return driverName_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// returns options flags
|
|
Packit Service |
3e823c |
virtual unsigned long options() const { return options_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// returns 1 if drive takes audio samples in big endian byte order or
|
|
Packit Service |
3e823c |
// 0 for little endian byte order
|
|
Packit Service |
3e823c |
virtual int bigEndianSamples() const = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// return information about drive
|
|
Packit Service |
3e823c |
virtual const DriveInfo *driveInfo(bool showErrorMsg) { return NULL; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// returns current writing speed
|
|
Packit Service |
3e823c |
virtual int speed() { return speed_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// returns current reading speed
|
|
Packit Service |
3e823c |
virtual int rspeed() { return rspeed_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// sets writing speed, returns 0 for OK or 1 for illegal speed,
|
|
Packit Service |
3e823c |
// this function may send SCSI commands to the drive
|
|
Packit Service |
3e823c |
virtual int speed(int) = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// sets reading speed, returns 0 for OK or 1 for illegal speed,
|
|
Packit Service |
3e823c |
// this function may send SCSI commands to the drive
|
|
Packit Service |
3e823c |
virtual bool rspeed(int);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// sets/return buffer under run protection setting (if supported by
|
|
Packit Service |
3e823c |
// the drive: 1 = enabled, 0 = disbaled
|
|
Packit Service |
3e823c |
virtual int bufferUnderRunProtection() const {
|
|
Packit Service |
3e823c |
return enableBufferUnderRunProtection_;
|
|
Packit Service |
3e823c |
}
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual void bufferUnderRunProtection(int s) {
|
|
Packit Service |
3e823c |
enableBufferUnderRunProtection_ = s != 0 ? 1 : 0;
|
|
Packit Service |
3e823c |
}
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// sets/return writing speed control setting (if supported by
|
|
Packit Service |
3e823c |
// the drive: 1 = enabled, 0 = disbaled
|
|
Packit Service |
3e823c |
virtual int writeSpeedControl() const { return enableWriteSpeedControl_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual void writeSpeedControl(int s) {
|
|
Packit Service |
3e823c |
enableWriteSpeedControl_ = s != 0 ? 1 : 0; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// returns 1 if simulation mode, 0 for real writing
|
|
Packit Service |
3e823c |
virtual bool simulate() const { return simulate_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// sets simulation mode, returns 0 for OK, 1 if given mode is not supported
|
|
Packit Service |
3e823c |
virtual void simulate(bool s) { simulate_ = s; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Sets multi session mode (0: close session, 1: open next session).
|
|
Packit Service |
3e823c |
// Returns 1 if multi session is not supported by driver, else 0
|
|
Packit Service |
3e823c |
virtual int multiSession(bool);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Returns mutli session mode.
|
|
Packit Service |
3e823c |
virtual bool multiSession() const { return multiSession_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Returns/sets fast toc reading flag (no sub-channel analysis)
|
|
Packit Service |
3e823c |
virtual bool fastTocReading() const { return fastTocReading_; }
|
|
Packit Service |
3e823c |
virtual void fastTocReading(bool f) { fastTocReading_ = f; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Returns/sets raw data track reading flag
|
|
Packit Service |
3e823c |
virtual bool rawDataReading() const { return rawDataReading_; }
|
|
Packit Service |
3e823c |
virtual void rawDataReading(bool f) { rawDataReading_ = f; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Returns/sets mode2 mixed track reading flag
|
|
Packit Service |
3e823c |
virtual bool mode2Mixed() const { return mode2Mixed_; }
|
|
Packit Service |
3e823c |
virtual void mode2Mixed(bool f) { mode2Mixed_ = f; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual TrackData::SubChannelMode subChanReadMode() const { return subChanReadMode_; }
|
|
Packit Service |
3e823c |
virtual void subChanReadMode(TrackData::SubChannelMode m) { subChanReadMode_ = m; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Sets/returns the pad first pre-gap flag
|
|
Packit Service |
3e823c |
virtual int padFirstPregap() const { return padFirstPregap_; }
|
|
Packit Service |
3e823c |
virtual void padFirstPregap(int f) { padFirstPregap_ = f != 0 ? 1 : 0; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Returns the on-thy-fly flag.
|
|
Packit Service |
3e823c |
virtual int onTheFly() const { return onTheFly_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Sets file descriptor for on the fly data and sets the on-the-fly flag
|
|
Packit Service |
3e823c |
// if 'fd' is >= 0 and clears it otherwise
|
|
Packit Service |
3e823c |
virtual void onTheFly(int fd);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Returns force flag
|
|
Packit Service |
3e823c |
virtual bool force() const { return force_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Sets force flag
|
|
Packit Service |
3e823c |
virtual void force(bool f) { force_ = f; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Returns TAO source flag
|
|
Packit Service |
3e823c |
virtual bool taoSource() const { return taoSource_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Sets TAO source flag
|
|
Packit Service |
3e823c |
virtual void taoSource(bool f) { taoSource_ = f; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Return number of adjust sectors for reading TAO source disks
|
|
Packit Service |
3e823c |
virtual int taoSourceAdjust() const { return taoSourceAdjust_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Sets number of adjust sectors for reading TAO source disks
|
|
Packit Service |
3e823c |
virtual void taoSourceAdjust(int val);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Sets remote mode
|
|
Packit Service |
3e823c |
virtual void remote(int flag, int fd);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Return remote mode flag
|
|
Packit Service |
3e823c |
virtual int remote() { return remote_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Sets cdda paranoia mode
|
|
Packit Service |
3e823c |
void paranoiaMode(int);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Sets user defined capacity
|
|
Packit Service |
3e823c |
virtual void userCapacity(int c) { userCapacity_ = c; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Sets burning to the outer edge mode
|
|
Packit Service |
3e823c |
virtual void fullBurn(bool f) { fullBurn_ = f; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Return byte order of host (0: little endian, 1: big endian)
|
|
Packit Service |
3e823c |
int hostByteOrder() const { return hostByteOrder_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// general commands
|
|
Packit Service |
3e823c |
virtual int testUnitReady(int) const;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual int startStopUnit(int) const;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual int preventMediumRemoval(int) const;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual int rezeroUnit(int showMessage = 1) const;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual int loadUnload(int) const = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual int flushCache() const;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual int readCapacity(long *length, int showMessage = 1);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual bool readBufferCapacity(long* total, long* available) {
|
|
Packit Service |
3e823c |
return false;
|
|
Packit Service |
3e823c |
}
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// CD-RW specific commands
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
enum BlankingMode { BLANK_FULL, BLANK_MINIMAL };
|
|
Packit Service |
3e823c |
virtual int blankDisk(BlankingMode);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// disk at once recording related commands
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Returns acceptable sub-channel encoding mode for given sub-channel type:
|
|
Packit Service |
3e823c |
// -1: writing of sub-channel type not supported at all
|
|
Packit Service |
3e823c |
// 0: accepts plain data without encoding
|
|
Packit Service |
3e823c |
// 1: accepts only completely encoded data
|
|
Packit Service |
3e823c |
virtual int subChannelEncodingMode(TrackData::SubChannelMode) const;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Should check if toc is suitable for DAO writing with the actual driver.
|
|
Packit Service |
3e823c |
// Returns 0 if toc is OK, else 1.
|
|
Packit Service |
3e823c |
// Usually all tocs are suitable for writing so that the base class
|
|
Packit Service |
3e823c |
// implementation simply returns 0.
|
|
Packit Service |
3e823c |
virtual int checkToc(const Toc *);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Used to make necessary initializations but without touching the CD-R.
|
|
Packit Service |
3e823c |
// It should be possible to abort the writing process after this function
|
|
Packit Service |
3e823c |
// has been called without destroying the CD-R.
|
|
Packit Service |
3e823c |
virtual int initDao(const Toc *) = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Performs all steps that must be done before the first user data block
|
|
Packit Service |
3e823c |
// is written, e.g. sending cue sheet, writing lead-in.
|
|
Packit Service |
3e823c |
virtual int startDao() = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Performs all steps for successfully finishing the writing process,
|
|
Packit Service |
3e823c |
// e.g. writing lead-out, flushing the cache.
|
|
Packit Service |
3e823c |
virtual int finishDao() = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Aborts writing process. Called if an error occurs or the user aborts
|
|
Packit Service |
3e823c |
// recording prematurely.
|
|
Packit Service |
3e823c |
virtual void abortDao() = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Sends given data to drive. 'lba' should be the current writing address
|
|
Packit Service |
3e823c |
// and will be updated according to the written number of blocks.
|
|
Packit Service |
3e823c |
virtual int writeData(TrackData::Mode, TrackData::SubChannelMode sm,
|
|
Packit Service |
3e823c |
long &lba, const char *buf, long len);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// returns mode for main channel data encoding, the value is used by
|
|
Packit Service |
3e823c |
// Track::readData()
|
|
Packit Service |
3e823c |
// 0: raw audio mode, all sectors must be encoded as audio sectors
|
|
Packit Service |
3e823c |
// 1: no encoding for MODE1 and MODE2 sectors, MODE2_FORM1 and MODE2_FORM2
|
|
Packit Service |
3e823c |
// are extended by sub header and zero EDC/ECC data
|
|
Packit Service |
3e823c |
int encodingMode() const { return encodingMode_; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// disk read commands
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// analyzes the CD structure (Q sub-channels) of the inserted CD
|
|
Packit Service |
3e823c |
virtual Toc *readDiskToc(int session, const char *);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// analyzes the CD structure and reads data
|
|
Packit Service |
3e823c |
virtual Toc *readDisk(int session, const char *);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// returns information about inserted medium
|
|
Packit Service |
3e823c |
virtual DiskInfo *diskInfo() { return 0; }
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Returns block size depending on given sector mode and 'encodingMode_'
|
|
Packit Service |
3e823c |
// that must be used to send data to the recorder.
|
|
Packit Service |
3e823c |
virtual long blockSize(TrackData::Mode, TrackData::SubChannelMode) const;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// sends a status message to the driving application if in remote mode
|
|
Packit Service |
3e823c |
enum WriteCdProgressType { WCD_LEADIN = PGSMSG_WCD_LEADIN,
|
|
Packit Service |
3e823c |
WCD_DATA = PGSMSG_WCD_DATA,
|
|
Packit Service |
3e823c |
WCD_LEADOUT = PGSMSG_WCD_LEADOUT };
|
|
Packit Service |
3e823c |
int sendWriteCdProgressMsg(WriteCdProgressType type, int totalTracks,
|
|
Packit Service |
3e823c |
int track, int trackProgress, int totalProgress,
|
|
Packit Service |
3e823c |
int bufferFillRate, int writeBufferFill = 0);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
int sendBlankCdProgressMsg(int totalProgress);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// static functions
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Selects driver id for given vendor/model string. NULL is returned if
|
|
Packit Service |
3e823c |
// no driver could be selected.
|
|
Packit Service |
3e823c |
// readWrite: 0: select a driver for read operations
|
|
Packit Service |
3e823c |
// 1: select a driver for write operations
|
|
Packit Service |
3e823c |
// options: filled with option flags for vendor/model
|
|
Packit Service |
3e823c |
static const char *selectDriver(int readWrite, const char *vendor,
|
|
Packit Service |
3e823c |
const char *model, unsigned long *options);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Creates instance of driver with specified id.
|
|
Packit Service |
3e823c |
static CdrDriver *createDriver(const char *driverId, unsigned long options,
|
|
Packit Service |
3e823c |
ScsiIf *);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Try to autodetect a driver on given Scsi interface.
|
|
Packit Service |
3e823c |
static const char *detectDriver(ScsiIf *, unsigned long *options);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Prints list of all available driver ids.
|
|
Packit Service |
3e823c |
static void printDriverIds();
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// returns vendor/type of CD-R medium
|
|
Packit Service |
3e823c |
static int cdrVendor(Msf &, const char **vendor, const char** mediumType);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
protected:
|
|
Packit Service |
3e823c |
struct ReadDiskInfo {
|
|
Packit Service |
3e823c |
int tracks; // total number of tracks
|
|
Packit Service |
3e823c |
long startLba; // LBA where extraction starts
|
|
Packit Service |
3e823c |
long endLba; // LBA where extraction ends
|
|
Packit Service |
3e823c |
};
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
unsigned long options_; // driver option flags
|
|
Packit Service |
3e823c |
ScsiIf *scsiIf_;
|
|
Packit Service |
3e823c |
int scsiMaxDataLen_;
|
|
Packit Service |
3e823c |
const char *driverName_;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
int hostByteOrder_; // 0: little endian, 1: big endian
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
unsigned long readCapabilities_;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
int blockLength_; // length of data block for 'writeData' command
|
|
Packit Service |
3e823c |
long blocksPerWrite_; // number of blocks that can be written with a
|
|
Packit Service |
3e823c |
// single SCSI WRITE command
|
|
Packit Service |
3e823c |
char *zeroBuffer_; // zeroed buffer for writing zeros
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
int enableBufferUnderRunProtection_;
|
|
Packit Service |
3e823c |
int enableWriteSpeedControl_;
|
|
Packit Service |
3e823c |
int speed_;
|
|
Packit Service |
3e823c |
int rspeed_;
|
|
Packit Service |
3e823c |
bool simulate_;
|
|
Packit Service |
3e823c |
bool multiSession_;
|
|
Packit Service |
3e823c |
int encodingMode_; // mode for encoding data sectors
|
|
Packit Service |
3e823c |
bool fastTocReading_;
|
|
Packit Service |
3e823c |
bool rawDataReading_;
|
|
Packit Service |
3e823c |
int mode2Mixed_;
|
|
Packit Service |
3e823c |
TrackData::SubChannelMode subChanReadMode_;
|
|
Packit Service |
3e823c |
int padFirstPregap_; // used by 'read-toc': defines if the first audio
|
|
Packit Service |
3e823c |
// track's pre-gap is padded with zeros in the toc-file
|
|
Packit Service |
3e823c |
// or if it is taken from the data file
|
|
Packit Service |
3e823c |
int onTheFly_; // 1 if operating in on-the-fly mode
|
|
Packit Service |
3e823c |
int onTheFlyFd_; // file descriptor for on the fly data
|
|
Packit Service |
3e823c |
bool force_; // force flag to allow certain operations
|
|
Packit Service |
3e823c |
int remote_; // 1 for remote mode, else 0
|
|
Packit Service |
3e823c |
int remoteFd_; // file descriptor for remote messages
|
|
Packit Service |
3e823c |
bool taoSource_; // 1 to indicate a TAO writting source CD for read-cd/read-toc
|
|
Packit Service |
3e823c |
int taoSourceAdjust_; // number of unreadable sectors between two tracks
|
|
Packit Service |
3e823c |
// written in TAO mode
|
|
Packit Service |
3e823c |
const Toc *toc_;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
SubChannel **scannedSubChannels_;
|
|
Packit Service |
3e823c |
long maxScannedSubChannels_;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
unsigned char *transferBuffer_;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Byte order of audio samples read from the drive, e.g. with
|
|
Packit Service |
3e823c |
// 'readSubChannels()'. 0: little endian, 1: big endian
|
|
Packit Service |
3e823c |
int audioDataByteOrder_;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
int userCapacity_;
|
|
Packit Service |
3e823c |
bool fullBurn_;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
static unsigned char syncPattern[12];
|
|
Packit Service |
3e823c |
static char REMOTE_MSG_SYNC_[4];
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
static int speed2Mult(int);
|
|
Packit Service |
3e823c |
static int mult2Speed(int);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual int sendCmd(const unsigned char *cmd, int cmdLen,
|
|
Packit Service |
3e823c |
const unsigned char *dataOut, int dataOutLen,
|
|
Packit Service |
3e823c |
unsigned char *dataIn, int dataInLen,
|
|
Packit Service |
3e823c |
int showErrorMsg = 1) const;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual int getModePage(int pageCode, unsigned char *buf, long bufLen,
|
|
Packit Service |
3e823c |
unsigned char *modePageHeader,
|
|
Packit Service |
3e823c |
unsigned char *blockDesc, int showErrorMsg);
|
|
Packit Service |
3e823c |
virtual int setModePage(const unsigned char *buf,
|
|
Packit Service |
3e823c |
const unsigned char *modePageHeader,
|
|
Packit Service |
3e823c |
const unsigned char *blockDesc, int showErrorMsg);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// some drives (e.g. Yamaha CDR100) don't implement mode sense/select(10)
|
|
Packit Service |
3e823c |
virtual int getModePage6(int pageCode, unsigned char *buf, long bufLen,
|
|
Packit Service |
3e823c |
unsigned char *modePageHeader,
|
|
Packit Service |
3e823c |
unsigned char *blockDesc, int showErrorMsg);
|
|
Packit Service |
3e823c |
virtual int setModePage6(const unsigned char *buf,
|
|
Packit Service |
3e823c |
const unsigned char *modePageHeader,
|
|
Packit Service |
3e823c |
const unsigned char *blockDesc, int showErrorMsg);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual int writeZeros(TrackData::Mode, TrackData::SubChannelMode,
|
|
Packit Service |
3e823c |
long &lba, long encLba, long count);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Returns track control flags for given track, bits 0-3 are always zero
|
|
Packit Service |
3e823c |
virtual unsigned char trackCtl(const Track *track);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Returns session format code for point A0 TOC entry, generated from
|
|
Packit Service |
3e823c |
// stored 'toc_' object.
|
|
Packit Service |
3e823c |
virtual unsigned char sessionFormat();
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// readToc related functions:
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// returns TOC data of specified session of inserted CD,
|
|
Packit Service |
3e823c |
// a generic function is implemented in 'CdrDriver.cc', it will return
|
|
Packit Service |
3e823c |
// the tracks of all session or of the first session depending on the
|
|
Packit Service |
3e823c |
// drive
|
|
Packit Service |
3e823c |
virtual CdToc *getToc(int sessionNr, int *nofTracks);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Generic function to retrieve basic TOC data. Cannot distinguish
|
|
Packit Service |
3e823c |
// between different sessions.
|
|
Packit Service |
3e823c |
CdToc *getTocGeneric(int *nofTracks);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Reads raw toc data of inserted CD. Used by base implementation of
|
|
Packit Service |
3e823c |
// 'getToc()' and must be implemented by the actual driver.
|
|
Packit Service |
3e823c |
virtual CdRawToc *getRawToc(int sessionNr, int *len) = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Reads CD-TEXT packs from the lead-in of a CD. The base implementation
|
|
Packit Service |
3e823c |
// uses the SCSI-3/mmc commands.
|
|
Packit Service |
3e823c |
virtual CdTextPack *readCdTextPacks(long *);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// reads CD-TEXT data and adds it to given 'Toc' object
|
|
Packit Service |
3e823c |
int readCdTextData(Toc *);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Tries to determine the data mode of specified track.
|
|
Packit Service |
3e823c |
virtual TrackData::Mode getTrackMode(int trackNr, long trackStartLba);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Determines mode of given sector, 'buf' should contain the sector header
|
|
Packit Service |
3e823c |
// at the first 4 bytes followed by the sub-header for XA tracks.
|
|
Packit Service |
3e823c |
// If an illegal mode is found in the sector header 'MODE0' will be
|
|
Packit Service |
3e823c |
// returned.
|
|
Packit Service |
3e823c |
TrackData::Mode determineSectorMode(unsigned char *buf);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// analyzes given 8 byte sub header and returns wether the sector is
|
|
Packit Service |
3e823c |
// a MODE2, MODE2_FORM1 or MODE2_FORM2 sector
|
|
Packit Service |
3e823c |
TrackData::Mode analyzeSubHeader(unsigned char *);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual unsigned long getReadCapabilities(const CdToc *, int) const = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Called by 'readDiskToc()' to retrieve following information about
|
|
Packit Service |
3e823c |
// the track 'trackNr' with given start/end lba addresses:
|
|
Packit Service |
3e823c |
// - all index increments, filled into 'index'/'indexCnt'
|
|
Packit Service |
3e823c |
// - ISRC Code, filled into provided buffer 'isrcCode' (13 bytes)
|
|
Packit Service |
3e823c |
// - length of pre-gap of next track, filled into 'pregap'
|
|
Packit Service |
3e823c |
// - control nibbles read from track, filled into bits 0-3 of 'ctrl',
|
|
Packit Service |
3e823c |
// bit 7 must be set to indicate valid data
|
|
Packit Service |
3e823c |
// This function must be overloaded by an actual driver.
|
|
Packit Service |
3e823c |
// return: 0: OK, 1: error occured
|
|
Packit Service |
3e823c |
virtual int analyzeTrack(TrackData::Mode, int trackNr, long startLba,
|
|
Packit Service |
3e823c |
long endLba, Msf *index,
|
|
Packit Service |
3e823c |
int *indexCnt, long *pregap, char *isrcCode,
|
|
Packit Service |
3e823c |
unsigned char *ctl) = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Track analysis algorithm using the binary search method. The base
|
|
Packit Service |
3e823c |
// class implements the basic algorithm. It uses 'findIndex()' which
|
|
Packit Service |
3e823c |
// can be implemented by an actual driver to get the track and index
|
|
Packit Service |
3e823c |
// number at a specific block address. This base class contains an
|
|
Packit Service |
3e823c |
// implementation of 'findIndex()', too, that can be usually used.
|
|
Packit Service |
3e823c |
// It'll be always better to use the linear scan algorithm (see below)
|
|
Packit Service |
3e823c |
// if possible.
|
|
Packit Service |
3e823c |
int analyzeTrackSearch(TrackData::Mode, int trackNr, long startLba,
|
|
Packit Service |
3e823c |
long endLba, Msf *index,
|
|
Packit Service |
3e823c |
int *indexCnt, long *pregap, char *isrcCode,
|
|
Packit Service |
3e823c |
unsigned char *ctl);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// finds position (lba) where index for given track number switches to
|
|
Packit Service |
3e823c |
// 'index' (binary search, base algorithm is implemented in 'CdrDriver').
|
|
Packit Service |
3e823c |
// It uses the method 'getTrackIndex()' which must be overloaded by
|
|
Packit Service |
3e823c |
// the actual driver.
|
|
Packit Service |
3e823c |
virtual long findIndex(int track, int index, long trackStart, long trackEnd);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Retrieves track, index and control nibbles at given lba address. Must
|
|
Packit Service |
3e823c |
// be implemented by the driver if the binary search method
|
|
Packit Service |
3e823c |
// ('analyzeTrackSearch()') should be used.
|
|
Packit Service |
3e823c |
virtual int getTrackIndex(long lba, int *trackNr, int *indexNr,
|
|
Packit Service |
3e823c |
unsigned char *ctl);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Basic track analyzis using the linear scan algorithm. The base class
|
|
Packit Service |
3e823c |
// implements the basic algorithm which calls 'readSubChannels()' to
|
|
Packit Service |
3e823c |
// read the sub-channel data. Actual drivers should overload the
|
|
Packit Service |
3e823c |
// 'readSubChannels()' function.
|
|
Packit Service |
3e823c |
int analyzeTrackScan(TrackData::Mode, int trackNr, long startLba,
|
|
Packit Service |
3e823c |
long endLba, Msf *index, int *indexCnt, long *pregap,
|
|
Packit Service |
3e823c |
char *isrcCode, unsigned char *ctl);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Reads 'len' sub-channels from sectors starting at 'lba'.
|
|
Packit Service |
3e823c |
// The returned vector contains 'len' pointers to 'SubChannel' objects.
|
|
Packit Service |
3e823c |
// Audio data that is usually retrieved with the sub-channels is placed
|
|
Packit Service |
3e823c |
// in 'buf' if it is not NULL.
|
|
Packit Service |
3e823c |
// Used by 'analyzeTrackScan()' and 'readAudioRangeParanoia()'.
|
|
Packit Service |
3e823c |
virtual int readSubChannels(TrackData::SubChannelMode, long lba, long len,
|
|
Packit Service |
3e823c |
SubChannel ***, Sample *buf) = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Determines the readable length of a data track and the pre-gap length
|
|
Packit Service |
3e823c |
// of the following track. The implementation in the base class should
|
|
Packit Service |
3e823c |
// be suitable for all drivers.
|
|
Packit Service |
3e823c |
virtual int analyzeDataTrack(TrackData::Mode mode, int trackNr,
|
|
Packit Service |
3e823c |
long startLba, long endLba, long *pregap);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Reads 'len' data sectors starting at 'lba' and returns the number of
|
|
Packit Service |
3e823c |
// successfully read sectors. If the end of the current track is encountered
|
|
Packit Service |
3e823c |
// the returned value will be smaller than 'len' down to 0. If a read
|
|
Packit Service |
3e823c |
// error occus -1 is returned. If a L-EC error occures -2 is returned.
|
|
Packit Service |
3e823c |
// This method is used by 'readDataTrack'/'analyzeDataTrack' and must be
|
|
Packit Service |
3e823c |
// overloaded by the driver.
|
|
Packit Service |
3e823c |
virtual long readTrackData(TrackData::Mode, TrackData::SubChannelMode,
|
|
Packit Service |
3e823c |
long lba, long len, unsigned char *buf) = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Reads a complete data track and saves data to a file.
|
|
Packit Service |
3e823c |
virtual int readDataTrack(ReadDiskInfo *, int fp, long start, long end,
|
|
Packit Service |
3e823c |
TrackInfo *trackInfo);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Reads the audio data of given audio track range 'startTrack', 'endTrack'.
|
|
Packit Service |
3e823c |
// 'trackInfo' is am array of TrackInfo structures for all tracks.
|
|
Packit Service |
3e823c |
// This function is called by 'readDisk()' and must be overloaded by the
|
|
Packit Service |
3e823c |
// actual driver.
|
|
Packit Service |
3e823c |
virtual int readAudioRange(ReadDiskInfo *, int fp, long start, long end,
|
|
Packit Service |
3e823c |
int startTrack, int endTrack,
|
|
Packit Service |
3e823c |
TrackInfo *) = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
virtual int readAudioRangeStream(ReadDiskInfo *, int fd, long start,
|
|
Packit Service |
3e823c |
long end, int startTrack, int endTrack,
|
|
Packit Service |
3e823c |
TrackInfo *);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Reads catalog number by scanning the sub-channels.
|
|
Packit Service |
3e823c |
// Uses 'readSubChannels()' to read the the sub-channels.
|
|
Packit Service |
3e823c |
int readCatalogScan(char *mcnCode, long startLba, long endLba);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Reads catalog number and stores it in given 'Toc' object. Must be
|
|
Packit Service |
3e823c |
// implemented by the actual driver. 'startLba' and 'endLba' specify
|
|
Packit Service |
3e823c |
// the allowed range for sub-channel scanning.
|
|
Packit Service |
3e823c |
virtual int readCatalog(Toc *toc, long startLba, long endLba) = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Reads ISRC code and writes into provided 13 bytes buffer. Must be
|
|
Packit Service |
3e823c |
// implemented by the actual driver.
|
|
Packit Service |
3e823c |
virtual int readIsrc(int trackNr, char *) = 0;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Build Toc object from gathered TrackInfo data
|
|
Packit Service |
3e823c |
Toc *buildToc(TrackInfo *trackInfos, long nofTrackInfos, int padFirstPregap);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// sets block size for read/write operations
|
|
Packit Service |
3e823c |
virtual int setBlockSize(long blocksize, unsigned char density = 0);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// checks if drive capabilities support requested sub-channel reading mode
|
|
Packit Service |
3e823c |
int checkSubChanReadCaps(TrackData::Mode, unsigned long caps);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
void printCdToc(CdToc *toc, int tocLen);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
enum ReadCdProgressType { RCD_ANALYZING = PGSMSG_RCD_ANALYZING,
|
|
Packit Service |
3e823c |
RCD_EXTRACTING = PGSMSG_RCD_EXTRACTING };
|
|
Packit Service |
3e823c |
void sendReadCdProgressMsg(ReadCdProgressType, int totalTracks, int track,
|
|
Packit Service |
3e823c |
int trackProgress, int totalProgress);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
public:
|
|
Packit Service |
3e823c |
// function to read audio data and also the sub-channel data from
|
|
Packit Service |
3e823c |
// specified lba,
|
|
Packit Service |
3e823c |
// this function is called from 'cdda_read()', so that it is currently
|
|
Packit Service |
3e823c |
// public because I did not manage to define a friend function that has
|
|
Packit Service |
3e823c |
// C linkage :)
|
|
Packit Service |
3e823c |
long audioRead(TrackData::SubChannelMode, int byteOrder,
|
|
Packit Service |
3e823c |
Sample *buffer, long startLba, long len);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// Interface for Monty's paranoia library:
|
|
Packit Service |
3e823c |
protected:
|
|
Packit Service |
3e823c |
// Extracts audio data for given track range with the help of
|
|
Packit Service |
3e823c |
// Monty's paranoia library.
|
|
Packit Service |
3e823c |
int readAudioRangeParanoia(ReadDiskInfo *, int fp, long start, long end,
|
|
Packit Service |
3e823c |
int startTrack, int endTrack,
|
|
Packit Service |
3e823c |
TrackInfo *trackInfo);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
private:
|
|
Packit Service |
3e823c |
// dynamic data
|
|
Packit Service |
3e823c |
void *paranoia_; // paranoia structure
|
|
Packit Service |
3e823c |
struct cdrom_drive *paranoiaDrive_; // paranoia device
|
|
Packit Service |
3e823c |
int paranoiaMode_; // paranoia mode
|
|
Packit Service |
3e823c |
ReadDiskInfo *audioReadInfo_;
|
|
Packit Service |
3e823c |
TrackInfo *audioReadTrackInfo_;
|
|
Packit Service |
3e823c |
int audioReadStartTrack_;
|
|
Packit Service |
3e823c |
int audioReadEndTrack_;
|
|
Packit Service |
3e823c |
long audioReadLastLba_;
|
|
Packit Service |
3e823c |
long audioReadActLba_;
|
|
Packit Service |
3e823c |
int audioReadActTrack_;
|
|
Packit Service |
3e823c |
int audioReadActIndex_;
|
|
Packit Service |
3e823c |
long audioReadCrcCount_;
|
|
Packit Service |
3e823c |
int audioReadError_;
|
|
Packit Service |
3e823c |
long audioReadProgress_;
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// callback for the paranoia library, does nothing, currently
|
|
Packit Service |
3e823c |
static void paranoiaCallback(long, int);
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
// friend classes:
|
|
Packit Service |
3e823c |
friend class CDD2600Base;
|
|
Packit Service |
3e823c |
};
|
|
Packit Service |
3e823c |
|
|
Packit Service |
3e823c |
#endif
|