123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775 |
- #ifndef _DAC32_H
- #define _DAC32_H
- #ifndef STRICT
- #define STRICT
- #define WIN32_LEAN_AND_MEAN
- #endif
- #include <windows.h>
- #include <stdio.h>
- #include "aspifunc.h"
- #define DACDLL
- #ifdef _DEBUG
- #define DBGOUT(sz) OutputDebugString(sz)
- #else
- #define DBGOUT(sz)
- #endif
- #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
- #define WAVEFileOpenError 0x200
- #define WAVEFileWriteError 0x201
- #define WAVEChannelError 0x202
- #define WAVEBitsError 0x203
- #define WAVEFreqError 0x204
- #define WAVENameError 0x205
- #define WAVEMemoryError 0x206
- #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
- #define MaxMappings 22
- #define MaxMappingsJuke 2
- #define ModeNormal 0
- #define ModeSynch 1
- #define ModeBurst 2
- #define DATEST_ALLWAYS 0
- #define DATEST_FIRSTTRACK 1
- #define DATEST_NEVER 2
- #define SPINUP_ALLWAYS 0
- #define SPINUP_FIRSTTRACK 1
- #define SPINUP_NEVER 2
- #define SynLen 512
- 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;
- };
- struct TDriveStatus
- {
- int DoorOpen;
- int DoorLocked;
- int Cooked_RAW;
- int Read_Write;
- int Data_Audio_Video;
- int Interleave;
- int CommandPrefetch;
- int AudioChannelManipulation;
- int HSG_Redbook;
- int CDPresent;
- int RWSupport;
- };
- struct TAudioStatus
- {
- BOOL Pause;
- BOOL IsPlaying;
- BOOL IsDone;
- BOOL PlayError;
- int TrackNummer;
- CCDAdress AbsSektor,RelSektor;
- };
-
- struct TTrackFlag
- {
- BYTE AudioChannels;
- BOOL PreEmphasis;
- BOOL DataTrack;
- BOOL CopyProhibeted;
- };
- struct TTrackList
- {
- BYTE TrackNummer;
- CCDAdress StartSektor;
- long Laenge;
- 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];
- };
- 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];
- };
- 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];
- };
- 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);
- };
- 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;
- BOOL CDPresentLast,Changed;
- SRB_ExecSCSICmd ReadSRB;
- TDriveMode ModeData;
- BYTE NECRotationSpeed;
- CMapInfo MapInfo;
- DWORD StartReadTime;
- int SpeedTable[256];
- BYTE SupportedSpeeds;
- HANDLE m_hDriveEvent;
- TSenseInfo m_SenseInfo;
- BOOL m_bSpeedTableInitialized;
- };
- class DACDLL CBaseWave
- {
- public:
- int Lasterror();
- virtual void WritePuffer(long Samples,DWORD *Buffer)=0;
- protected:
- int Error;
- private:
- CBaseWave& operator = (const CBaseWave &other);
- };
- typedef struct
- {
- BOOL bIsUsed;
- BOOL bReady;
- int nSamples;
- int nZeroSamples;
- DWORD *dwBuffer;
- } WAVEBUFFER, *PWAVEBUFFER;
- typedef struct _WAVEBUFFERLIST
- {
- PWAVEBUFFER pWaveBuffer;
- _WAVEBUFFERLIST *pNext;
- } WAVEBUFFERLIST, *PWAVEBUFFERLIST;
- typedef struct
- {
- HANDLE hEvent;
- LPVOID pData;
- } TWAVEMTSTRUCT;
- 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();
- void SignalBuffer();
- int Lasterror();
- double GetBufferFullRatio();
- DWORD GetBytesInBuffer();
-
- virtual void WritePuffer(long Samples,DWORD *Buffer)=0;
- friend unsigned _stdcall WaveThreadProc(LPVOID pUserData);
- protected:
- int Error;
- void StartThread();
- BOOL WriteData();
- void StopThread(BOOL bImmediate=FALSE);
-
- 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;
- };
- 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;
- FILE *Datei;
- WORD *DPM16;
- BYTE *DPM8;
- DWORD *DPS16;
- BYTE *DPS8;
- int DatenCount;
- long WaveBytes;
- BYTE SAdd;
- BOOL m_bWriteHeaders;
- };
- 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;
- FILE *Datei;
- WORD *DPM16;
- BYTE *DPM8;
- DWORD *DPS16;
- BYTE *DPS8;
- int DatenCount;
- long WaveBytes;
- BYTE SAdd;
- BOOL m_bWriteHeaders;
- };
- 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();
-
-
- 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);
- };
- 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();
-
-
- 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;
- };
- 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;
- };
- 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;
- };
- class DACDLL CJukeBox
- {
- public:
- CJukeBox (TJukeInfo &xInfo);
- ~CJukeBox();
-
-
-
- BOOL MoveMedium(int Source,int Destination);
- TJukeInfo &GetInfo()
- {
- return Config;
- };
- private:
- TJukeInfo &Config;
- CMapInfoJuke MapInfo;
- HANDLE m_hJukeEvent;
- };
- int DACDLL LoadASPI();
- int DACDLL FreeASPI();
- int DACDLL CheckASPI();
- #endif
|