123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775 |
- // ----------------------------------------------
- // - DAC32.DLL Header Datei -
- // - Written 1996-1998 by Christoph Schmelnik -
- // ----------------------------------------------
- // Changes
- // ===========
- // Version 1.2 :
- // -CMapDrive supports now up to 34 Host Adapters, because now it could access the drives under
- // NT with the DeviceControl Interface
- // The required information for this is coded as:
- // Drives accessed over the new Interface have a HostAdapterNumber above or equal to the
- // NumberOfHostAdapters (global Information).
- // The ID consists of the good old drive number, like in DOS.
- // The LUN is not used for the configuration, but it is used to hold the open handle to the device
- // The Burstmodus couldn't be used with the new access mode, so the default setting for those
- // drives is the Normal-mode. (For those drives is no difference between Burst- and Normal-mode)
- // -LoadASPI checks now the Windows Version and hold this result global in the DLL
- // -The Constructor of CSCSCD opens the handles to the new devices
- // -The destructor closes those handles
- // Interface changes are not required but some values must be handled differnt to avoid
- // misconfiguring, e.g. it is not allowed to configure the new drives ID, LUN, and HostAdapterNumber
- // -A bug in CWaveSave regarding conversion to mixed mono has been fixed.
- //
- // Version 1.33 : 18.01.1998
- // Changes:
- // Added speed selection support for all current Plextor drives
- //
- // Version 1.40 : 24.02.1998
- // Changes:
- // Set correct direction flags, to work with NT device IO interface and ATAPI drives
- // Changed main CD detection to TestUnitReady
- // Removed CD detection from Audio Status Info
- // Added hopefully correct read command for Matsushita/Panasonic drives
- // Added Parameters to CDAC class to allow the disabling of the audio test and to spin up the drive for a specified time
- // in seconds to avoid spin up problems on some drives. Both parameters have default values so it behaves like the old version
- // without the additional parameters
- // Added Parameter to the constructor of CWaveSave to disable writing any Headers. Also this parameter has a default to work like
- // before.
- // Added virtual function in CDAC to report buffer underruns in Burst Copy Mode
- // For the last feature an immediate parameter in WaitCDDA is added
- // GetLastSense function added to return the sense information for the last read audio command
- // Configuration in CMapDrive extended by new features
- // Fixed GetRedBook operator in CCDAdress
- // Added function to CD Class to read Media Cataloge Number
- //
- // Version 1.41 : 28.04.1998
- // Changes:
- // New GetInfoEx() function in CMapDrive, to allow a better result checking.
- //
- // Version 1.42 : 02.08.1998
- // Changes:
- // Added GetLastReadableAddress function to get the last readable Sektor of a session.
- // Added a flag in the drive properties for the function.
- // Added this function to the CDAC object.
- //
- // Version 1.43 : 23.12.1998
- // Changes:
- // Added Wave and DAC classes are now available in a MT version, the old versions will not longer be updated.
- //
- // Version 1.44 : 10.03.1999
- // Changes:
- // Added Support for current Plextor CDROM drives and CD-Writers.
- // Added Support for Jukeboxes
- // Changed Handling of the Ringbuffer
- //
- // Version 1.45 : 15.08.1999
- // Changes:
- // Added Enhanced error detection for Plextor drives.
- // Several Bugfixes (initialising under NT and Ringbuffer specific)
- //
- // Version 1.45-Build 11 : 11.11.1999
- // Changes:
- // Added a check for the MaxSektor parameter in CBaseWaveMT to avoid Program failures even if the applications provides an invalid value.
- // Changed source to comile with Borland compiler
- // Added MMC-2 Type which will be default for Sony CD-Writers 140 and 928
- // Skip Virtual CD devices in Bus scan
- // Fixed Array out of bound bug in drive detection.
- #ifndef _DAC32_H
- #define _DAC32_H
- #ifndef STRICT
- #define STRICT // Use strct typechecking
- #define WIN32_LEAN_AND_MEAN // compile only important Headerfiles
- #endif
- #include <windows.h>
- #include <stdio.h>
- #include "aspifunc.h"
- /*#ifdef DLL
- #define DACDLL __declspec(dllexport)
- #else
- #define DACDLL __declspec(dllimport)
- #endif*/
- #define DACDLL
- #ifdef _DEBUG
- #define DBGOUT(sz) OutputDebugString(sz)
- #else
- #define DBGOUT(sz)
- #endif
- //The Errormessages for the CD and DAC Classes
- #define CDOK 0x000
- #define CDUnknownDrive 0x001
- #define CDDriveNotReady 0x002
- #define CDUnknownCommand 0x003
- #define CDSeekError 0x006
- #define CDSectorNotFound 0x008
- #define CDReadError 0x00B
- #define CDGeneralError 0x00C
- #define CDNoCD 0x00E
- #define CDIllegalCDChange 0x00F
- #define CDDriveNotFound 0x100
- #define CDNoMemory 0x101
- #define CDDACUnable 0x102
- #define CDASPIError 0x103
- #define CDUserBreak 0x104
- #define CDTimeOut 0x105
- //The Errormessage for the wave classes
- #define WAVEFileOpenError 0x200
- #define WAVEFileWriteError 0x201
- #define WAVEChannelError 0x202
- #define WAVEBitsError 0x203
- #define WAVEFreqError 0x204
- #define WAVENameError 0x205
- #define WAVEMemoryError 0x206
- //The supported base drive types
- #define CDTYPE_TOSHIBA 0
- #define CDTYPE_SONY 1
- #define CDTYPE_NEC 2
- #define CDTYPE_PHILIPS 3
- #define CDTYPE_ATAPI 4
- #define CDTYPE_TOSHNEW 5
- #define CDTYPE_RICOH 6
- #define CDTYPE_MATSHITA 7
- #define CDTYPE_PLEXTOR 8
- #define CDTYPE_CYBERDRV 9
- #define JUKETYPE_SONY 0
- #define JUKETYPE_PIONEER 1
- //Amount of predefined drive mappings (relationship between real drives and base drive types)
- #define MaxMappings 22 // pgo
- //Amount of predefined jukebox mappings (relationship between real jukeboxes and base jukebox types)
- #define MaxMappingsJuke 2
- //The possible Copy modes
- #define ModeNormal 0
- #define ModeSynch 1
- #define ModeBurst 2
- //The possible Values for the DA Test
- #define DATEST_ALLWAYS 0
- #define DATEST_FIRSTTRACK 1
- #define DATEST_NEVER 2
- //The possible SpinUp modes
- #define SPINUP_ALLWAYS 0
- #define SPINUP_FIRSTTRACK 1
- #define SPINUP_NEVER 2
- // Amount of DWORD for the synchronisation
- #define SynLen 512
- // The Class for the Addressformats
- class DACDLL CCDAdress
- {
- public:
- void SetRedbook(long Value);
- void SetHSG(long Value)
- {
- Adresse=Value;
- };
- long GetHSG()
- {
- return Adresse;
- };
- long GetRedbook()
- {
- long t;
- t=(Adresse % 75)<<24;
- t+=((Adresse / 75) % 60)<<16;
- t+=((Adresse / 75) / 60)<<8;
- return t;
- };
- CCDAdress &operator = (const CCDAdress &other)
- {
- Adresse=other.Adresse;
- return (*this);
- };
- CCDAdress &operator + (const long Value)
- {
- Adresse+=Value;
- return (*this);
- };
- CCDAdress &operator - (const long Value)
- {
- Adresse-=Value;
- return (*this);
- };
- CCDAdress &operator += (const long Value)
- {
- Adresse+=Value;
- return (*this);
- };
- CCDAdress &operator -= (const long Value)
- {
- Adresse-=Value;
- return (*this);
- };
- private:
- long Adresse;
- };
- // Typendeclarations
- struct TDriveStatus
- {
- int DoorOpen; //Door open/closed
- int DoorLocked; //Door locked/unlocked
- int Cooked_RAW; //supports Cooked and RAW or Cooked
- int Read_Write; //supports read and write
- int Data_Audio_Video; //supports Data/Audio/Video or only Data
- int Interleave; //supports Interleave regarding ISO
- int CommandPrefetch; //supports Command Prefetching
- int AudioChannelManipulation; //supports Audio-Channel Manipulation
- int HSG_Redbook; //supports HSG and Redbook Addressing or only HSG
- int CDPresent; //CD inserted or not
- int RWSupport; //supports R-W-Sub Channels
- };
- struct TAudioStatus
- {
- BOOL Pause; //Play is paused
- BOOL IsPlaying; //CD is playing
- BOOL IsDone; //Play is stopped
- BOOL PlayError; //Play completed with error
- int TrackNummer; //Number of actual track
- CCDAdress AbsSektor,RelSektor; //Startsector and Endsector of last/next Play
- };
-
- struct TTrackFlag
- {
- BYTE AudioChannels; //Amount of Audio Channels (2/4)
- BOOL PreEmphasis; //Audio Channel with or without...
- BOOL DataTrack; //Data track or Audio track
- BOOL CopyProhibeted; //Digital copy prohibited
- };
- struct TTrackList
- {
- BYTE TrackNummer; //Number of Track
- CCDAdress StartSektor; //First sector in HSG Format
- long Laenge; //Amount of Sectors
- TTrackFlag Flags;
- };
- struct TTrackListeMem
- {
- TTrackList Info;
- TTrackListeMem *Prev,*Next;
- };
- struct TDriveInfo
- {
- int ID;
- int LUN;
- int HostAdapterNumber;
- int Type;
- int MaxSektors;
- int SynchSektors;
- int Mode;
- char VendorID[9];
- char ProductID[17];
- int Speed;
- int PerformDATest;
- int SpinUpMode;
- DWORD dwSpinUpTime;
- BOOL bUseLastReadableAddress;
- BOOL bUseC2ErrorInfo;
- BOOL bSpinDown;
- };
- struct TJukeInfo
- {
- int ID;
- int LUN;
- int HostAdapterNumber;
- int Type;
- int MaxDrives;
- int *pConnectedDrives;
- int MaxDiscs;
- char VendorID[9];
- char ProductID[17];
- };
- // The class with the infos for the type mapping
- class DACDLL CMapInfo
- {
- public:
- CMapInfo();
- char *GetTypName(int Index);
- int GetTypMapping(int Index);
- int GetTypMappingRev(int CDType);
- private:
- char TypNamen[MaxMappings][9];
- int TypMapping[MaxMappings];
- };
- // The class with the infos for the type mapping
- class DACDLL CMapInfoJuke
- {
- public:
- CMapInfoJuke();
- char *GetTypName(int Index);
- int GetTypMapping(int Index);
- int GetTypMappingRev(int JukeType);
- private:
- char TypNamen[MaxMappingsJuke][9];
- int TypMapping[MaxMappingsJuke];
- };
- // The base class (pure virtual) for the CD access
- class DACDLL CBaseCD
- {
- public:
- int Lasterror();
- virtual void PrepareCDDA()=0;
- virtual void ReadCDDA(CCDAdress StartSektor,long Sektoranzahl,void *Buffer,BOOL bUseC2ErrorInfo=FALSE)=0;
- virtual BOOL WaitCDDA(BOOL bImmediate=FALSE)=0;
- virtual void FinishCDDA()=0;
- virtual void SortWaveData(DWORD *Data,int Samples)=0;
- virtual CCDAdress GetErrorAdress()=0;
- virtual void Play_Audio(CCDAdress StartSektor,long Sektoranzahl)=0;
- virtual void Stop_Audio()=0;
- virtual void Pause_Audio()=0;
- virtual void Resume_Audio()=0;
- virtual TDriveStatus Get_DriveStatus()=0;
- virtual BOOL MediaChanged()=0;
- virtual void Get_MediaCatalogNumber(char szUPC[16])=0;
- virtual void EjectDisk()=0;
- virtual void LockDoor(int Lock)=0;
- virtual void CloseTray()=0;
- virtual void ReRead()=0;
- virtual CCDAdress GetLastReadableAddress(CCDAdress StartSektor)=0;
- virtual int GetMaxSektors()=0;
- virtual int GetSynchSektors()=0;
- virtual int GetMode()=0;
- virtual int GetSpeed()=0;
- virtual void InitSpeedTable()=0;
- virtual BYTE GetSupportedSpeeds()=0;
- virtual int GetCurrentSpeed()=0;
- virtual void SetCurrentSpeed(int Speed)=0;
- virtual int GetSpeed(BYTE Index)=0;
- int ReadFirstTrackInfo(TTrackList &Infos);
- int ReadNextTrackInfo(TTrackList &Infos);
- int ReadPrevTrackInfo(TTrackList &Infos);
- int ReadTrackInfo(TTrackList &Infos);
- int ReadMaxTracks();
- protected:
- int Error,BusyFlag,DoneFlag;
- TTrackListeMem *FirstTrack,*AktTrack;
- void DeleteTrackList();
- private:
- CBaseCD& operator = (const CBaseCD &other);
- };
- // The class for the access to SCSI drives
- class DACDLL CSCSICD:public CBaseCD
- {
- public:
- CSCSICD (char drive, TDriveInfo &xInfo);
- ~CSCSICD();
- virtual void PrepareCDDA();
- virtual void ReadCDDA(CCDAdress StartSektor,long Sektoranzahl,void *Buffer,BOOL bUseC2ErrorInfo=FALSE);
- virtual BOOL WaitCDDA(BOOL bImmediate=FALSE);
- virtual void FinishCDDA();
- virtual void SortWaveData(DWORD *Data,int Samples);
- virtual CCDAdress GetErrorAdress();
- virtual void Play_Audio(CCDAdress StartSektor,long Sektoranzahl);
- virtual void Stop_Audio();
- virtual void Pause_Audio();
- virtual void Resume_Audio();
- virtual TDriveStatus Get_DriveStatus();
- virtual BOOL MediaChanged();
- virtual TAudioStatus Get_AudioStatus_Info();
- virtual void Get_MediaCatalogNumber(char szUPC[16]);
- virtual void EjectDisk();
- virtual void LockDoor(int Lock);
- virtual void CloseTray();
- virtual void ReRead();
- virtual CCDAdress GetLastReadableAddress(CCDAdress StartSektor);
- virtual int GetMaxSektors();
- virtual int GetSynchSektors();
- virtual int GetMode();
- virtual int GetSpeed();
- virtual void InitSpeedTable();
- virtual BYTE GetSupportedSpeeds();
- virtual int GetCurrentSpeed();
- virtual void SetCurrentSpeed(int Speed);
- virtual int GetSpeed(BYTE Index);
- TDriveInfo &GetInfo()
- {
- return Config;
- };
- TSenseInfo GetSense();
- TSenseInfo GetLastSenseInfo();
- private:
- CSCSICD& operator = (const CSCSICD &other);
-
- TDriveInfo &Config; // Drive Configuration
- BOOL CDPresentLast,Changed; // Helpvariables for the MediaChanged function
- SRB_ExecSCSICmd ReadSRB; // SCSI Commando Block
- TDriveMode ModeData;
- BYTE NECRotationSpeed;
- CMapInfo MapInfo;
- DWORD StartReadTime;
- int SpeedTable[256];
- BYTE SupportedSpeeds;
- HANDLE m_hDriveEvent;
- TSenseInfo m_SenseInfo;
- BOOL m_bSpeedTableInitialized;
- };
- // The base class for saving/converting the audio data
- class DACDLL CBaseWave
- {
- public:
- int Lasterror();
- virtual void WritePuffer(long Samples,DWORD *Buffer)=0;
- protected:
- int Error; //last occured error
- private:
- CBaseWave& operator = (const CBaseWave &other);
- };
- typedef struct
- {
- BOOL bIsUsed; //Is Buffer used?
- BOOL bReady; //Is Nuffer ready to write?
- int nSamples; //Number of Samples in Buffer.
- int nZeroSamples; //Number of Silence Samples to insert before the buffer
- DWORD *dwBuffer; //Buffer for Audio Data
- } WAVEBUFFER, *PWAVEBUFFER;
- typedef struct _WAVEBUFFERLIST
- {
- PWAVEBUFFER pWaveBuffer;
- _WAVEBUFFERLIST *pNext;
- } WAVEBUFFERLIST, *PWAVEBUFFERLIST;
- typedef struct
- {
- HANDLE hEvent;
- LPVOID pData;
- } TWAVEMTSTRUCT;
- // The base class for saving/converting the audio data as its own thread
- class DACDLL CBaseWaveMT
- {
- public:
- CBaseWaveMT(DWORD dwBufferSize,BOOL bUseHighPriority=FALSE,int MaxSektors=27,DWORD dwExtraBytes=0);
- ~CBaseWaveMT();
- void SetFadeInOut(int dwTotalSamples,int dwFadeSamples);
- PWAVEBUFFER GetBuffer(); //returns NULL if no Buffer is available
- void SignalBuffer(); //signal if a buffer is filled;
- int Lasterror();
- double GetBufferFullRatio();
- DWORD GetBytesInBuffer();
-
- virtual void WritePuffer(long Samples,DWORD *Buffer)=0;
- friend unsigned _stdcall WaveThreadProc(LPVOID pUserData);
- protected:
- int Error; //last occured error
- void StartThread(); //call this from your own initialisation function
- BOOL WriteData();
- void StopThread(BOOL bImmediate=FALSE); //call this from your own cleanup function
-
- private:
- CBaseWaveMT& operator = (const CBaseWaveMT &other);
- DWORD m_Nullen[256];
- PWAVEBUFFERLIST m_pFirstBuffer, m_pReadBuffer, m_pWriteBuffer;
- TWAVEMTSTRUCT m_WaveInfo;
- BOOL m_bStopThread,m_bAbortThread,m_bIsWorking;
- HANDLE m_hWaveThread;
- BOOL m_bUseHighPriority;
- int m_dwTotalSamples,m_dwFadeSamples,m_dwCurrentSample;
- int m_nBufferNum,m_nReadBufferNum,m_nWriteBufferNum;
- int m_nMaxSektors;
- };
- // The class for saving audio data in a wave file
- class DACDLL CWaveSave:public CBaseWave
- {
- public:
- CWaveSave(const char *DateiName,BYTE Freq,BYTE Channels,BYTE Bits,BOOL bWriteHeaders=TRUE);
- ~CWaveSave();
- virtual void WritePuffer(long Samples,DWORD *Buffer);
- private:
- void WMono8(long Samples,DWORD *Buffer);
- void WStereo8(long Samples,DWORD *Buffer);
- void WMono16(long Samples,DWORD *Buffer);
- void WStereo16(long Samples,DWORD *Buffer);
- void WLR8(long Samples,int Mode,DWORD *Buffer);
- void WLR16(long Samples,int Mode,DWORD *Buffer);
- CWaveSave& operator = (const CWaveSave &other);
-
- BYTE ConvertType; //CodeNumber of the conversion type
- FILE *Datei; //file variable to access the wave file
- WORD *DPM16; //Pointer to the file data buffer
- BYTE *DPM8; //Pointer to the file data buffer
- DWORD *DPS16; //Pointer to the file data buffer
- BYTE *DPS8; //Pointer to the file data buffer
- int DatenCount; //Counter of data in buffer
- long WaveBytes; //Counts all written bytes
- BYTE SAdd; //Value to increment the source counter
- BOOL m_bWriteHeaders; //Write Headers of Wave file
- };
- // The class for saving audio data in a wave file in its own thread
- class DACDLL CWaveSaveMT:public CBaseWaveMT
- {
- public:
- CWaveSaveMT(DWORD dwBufferSize,BOOL bUseHighPriority=FALSE,int MaxSektors=27,DWORD dwExtraBytes=0):CBaseWaveMT(dwBufferSize,bUseHighPriority,MaxSektors,dwExtraBytes)
- {
- };
- void Init(const char *DateiName,BYTE Freq,BYTE Channels,BYTE Bits,BOOL bWriteHeaders=TRUE);
- void Done(BOOL bImmediate=FALSE);
- virtual void WritePuffer(long Samples,DWORD *Buffer);
- private:
- void WMono8(long Samples,DWORD *Buffer);
- void WStereo8(long Samples,DWORD *Buffer);
- void WMono16(long Samples,DWORD *Buffer);
- void WStereo16(long Samples,DWORD *Buffer);
- void WLR8(long Samples,int Mode,DWORD *Buffer);
- void WLR16(long Samples,int Mode,DWORD *Buffer);
- CWaveSave& operator = (const CWaveSave &other);
-
- BYTE ConvertType; //CodeNumber of the conversion type
- FILE *Datei; //file variable to access the wave file
- WORD *DPM16; //Pointer to the file data buffer
- BYTE *DPM8; //Pointer to the file data buffer
- DWORD *DPS16; //Pointer to the file data buffer
- BYTE *DPS8; //Pointer to the file data buffer
- int DatenCount; //Counter of data in buffer
- long WaveBytes; //Counts all written bytes
- BYTE SAdd; //Value to increment the source counter
- BOOL m_bWriteHeaders; //Write Headers of Wave file
- };
- // The class for copying the audio data from CD.
- class DACDLL CDAC
- {
- public:
- CDAC(CBaseCD *pDrive,CBaseWave *pWave,
- CCDAdress Start,long Laenge,BOOL xKillZeros,BOOL bPerformDATest=TRUE,DWORD dwSpinUpTime=0,BOOL bUseLastReadableAddress=FALSE);
- ~CDAC();
- int Lasterror();
- void Copy();
- int Errors();
- void StopCopy();
- // The following member functions are declared as virtual. They could be used to display
- // information to the user. They do nothing by default.
- virtual void WriteInit();
- virtual void WritePercent(float Percent);
- virtual void WriteReading();
- virtual void WriteReadingEnd();
- virtual void WriteSynch();
- virtual void WriteSynchEnd();
- virtual void WriteFlushing();
- virtual void WriteFlushingEnd();
- virtual void WriteSynchError();
- virtual void WriteBufferUnderrun(CCDAdress Start);
- virtual void WriteReRead(CCDAdress Start,long Laenge);
- virtual void WriteSektorsSkipped(CCDAdress Start,long Laenge);
- virtual void WriteDone();
- virtual void OnIdle();
- protected:
- CCDAdress StartSektor,StartOld;
- int SynchErrors,Error;
- long Anzahl,AnzahlOld,Remain;
- private:
- CBaseCD *m_pCD;
- BOOL RunCopy,KillFirst,KillLast,KillZero,Found;
- DWORD m_dwSpinUpTime;
- CBaseWave *m_pWaveSave;
- long SektorAnzahl,Retries,SynchDiff,ZeroCount;
- DWORD *MemBlocks[2];
- int BlockCount,S_Offset;
- int SpeedSave;
- DWORD m_Nullen[256];
- void ReadCDDA(CCDAdress Start,long Sektoranzahl,void *Buffer);
- void FlushWave();
- void FlushSynch(int Samples,DWORD *Data);
- void MakeTable(DWORD *Werte,DWORD *Table);
- int SynchSearch(DWORD *String1,DWORD *String2,DWORD *Table);
- void SynchWave();
- CDAC& operator = (const CDAC &other);
- };
- // The class for copying the audio data from CD.
- class DACDLL CDACMT
- {
- public:
- CDACMT(CBaseCD *pDrive,CBaseWaveMT *pWave,
- CCDAdress Start,long Laenge,BOOL xKillZeros,BOOL bPerformDATest=TRUE,DWORD dwSpinUpTime=0,BOOL bUseHighPriority=FALSE,BOOL bUseC2ErrorInfo=FALSE,BOOL bSpinDown=FALSE,BOOL bUseLastReadableAddress=FALSE);
- ~CDACMT();
- int Lasterror();
- void Copy();
- int Errors();
- void StopCopy();
- // The following member functions are declared as virtual. They could be used to display
- // information to the user. They do nothing by default.
- virtual void WriteInit();
- virtual void WritePercent(float Percent);
- virtual void WriteReading();
- virtual void WriteReadingEnd();
- virtual void WriteSynch();
- virtual void WriteSynchEnd();
- virtual void WriteFlushing();
- virtual void WriteFlushingEnd();
- virtual void WriteSynchError();
- virtual void WriteBufferUnderrun(CCDAdress Start);
- virtual void WriteReRead(CCDAdress Start,long Laenge);
- virtual void WriteSektorsSkipped(CCDAdress Start,long Laenge);
- virtual void WriteDone();
- virtual void OnIdle(BOOL bReturnFast=TRUE);
- friend unsigned _stdcall DACThreadProc(LPVOID pUserData);
- protected:
- CCDAdress StartSektor,StartOld;
- int SynchErrors,Error;
- long Anzahl,AnzahlOld,Remain;
- void CopyMT();
- private:
- CBaseCD *m_pCD;
- BOOL RunCopy,KillFirst,KillLast,KillZero,Found;
- DWORD m_dwSpinUpTime;
- CBaseWaveMT *m_pWaveSave;
- BOOL m_bUseC2ErrorInfo;
- BOOL m_bSpinDown;
- long SektorAnzahl,Retries,SynchDiff,ZeroCount;
- PWAVEBUFFER MemBlocks[2];
- int BlockCount,S_Offset;
- int SpeedSave;
- int m_MaxSektors;
- int m_SynchSektors;
- void ReadCDDA(CCDAdress Start,long Sektoranzahl,void *Buffer);
- void FlushWave(int nMax=2);
- void FlushSynch(int Samples,PWAVEBUFFER Data);
- void MakeTable(DWORD *Werte,DWORD *Table);
- int SynchSearch(DWORD *String1,DWORD *String2,DWORD *Table);
- void SynchWave();
- CDACMT& operator = (const CDACMT &other);
- HANDLE m_hDACThread;
- BOOL m_bUseHighPriority;
- };
- // The class for configuring the SCSI CDROM drives
- class DACDLL CMapDrive
- {
- public:
- CMapDrive(BOOL bDoReset=TRUE);
- ~CMapDrive();
- void Reset();
- int GetMaxDrives();
- TDriveInfo &GetInfo(int index);
- BOOL GetInfoEx(int index, TDriveInfo *&pInfo);
- void DeleteInfo(int index);
- int GetMaxHostAdapters();
- int GetSupportedHostAdapterMemory(int index);
- void SetSupportedHostAdapterMemory(int index,int Memory);
- int GetMaxSektors(int HostAdapterNumber);
- protected:
- void DeleteAll();
- private:
- struct TDriveInfoMem
- {
- TDriveInfo Info;
- TDriveInfoMem *Next;
- };
- TDriveInfoMem *First;
- int HostAdapterMemory[34];
- HANDLE m_hDriveEvent;
- };
- // The class for configuring the SCSI Jukeboxes
- class DACDLL CMapJuke
- {
- public:
- CMapJuke(BOOL bDoReset=TRUE);
- ~CMapJuke();
- void Reset();
- int GetMaxJukes();
- TJukeInfo &GetInfo(int index);
- BOOL IsWorking(int index);
- void SetWorking(int index,BOOL bIsWorking);
- void DeleteInfo(int index);
- protected:
- void DeleteAll();
- private:
- struct TJukeInfoMem
- {
- TJukeInfo Info;
- BOOL bIsWorking;
- TJukeInfoMem *Next;
- };
- TJukeInfoMem *First;
- HANDLE m_hJukeEvent;
- };
- //The class to access Jukeboxes
- class DACDLL CJukeBox
- {
- public:
- CJukeBox (TJukeInfo &xInfo);
- ~CJukeBox();
- //use following defines to address an item in the jukebox:
- //drive0..x : 0x4000...0x400x
- //storage1..xxx : 0x0001...0x0xxx
- BOOL MoveMedium(int Source,int Destination);
- TJukeInfo &GetInfo()
- {
- return Config;
- };
- private:
- TJukeInfo &Config; // Drive Configuration
- CMapInfoJuke MapInfo;
- HANDLE m_hJukeEvent;
- };
- // ----------------------
- // function declarations
- // ----------------------
- // initialize and deinatialize the WNASPI32.DLL and some internal flags
- int DACDLL LoadASPI();
- int DACDLL FreeASPI();
- int DACDLL CheckASPI();
- #endif //_DAC32_H
|