/* PCSX2 - PS2 Emulator for PCs * Copyright (C) 2002-2014 David Quintana [gigaherz] * * PCSX2 is free software: you can redistribute it and/or modify it under the terms * of the GNU Lesser General Public License as published by the Free Software Found- * ation, either version 3 of the License, or (at your option) any later version. * * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with PCSX2. * If not, see . */ #ifndef __CDVD_H__ #define __CDVD_H__ #define _WIN32_WINNT 0x0600 #include #include #define CDVDdefs #include struct track { u32 start_lba; u32 length; u8 type; }; extern u8 strack; extern u8 etrack; extern track tracks[100]; extern int curDiskType; extern int curTrayStatus; typedef struct _toc_entry { UCHAR SessionNumber; UCHAR Control : 4; UCHAR Adr : 4; UCHAR Reserved1; UCHAR Point; UCHAR MsfExtra[3]; UCHAR Zero; UCHAR Msf[3]; } toc_entry; typedef struct _toc_data { UCHAR Length[2]; UCHAR FirstCompleteSession; UCHAR LastCompleteSession; toc_entry Descriptors[255]; } toc_data; extern toc_data cdtoc; class IOCtlSrc { IOCtlSrc(IOCtlSrc &); HANDLE m_device; bool OpenOK; char sectorbuffer[32 * 2048]; char fName[256]; DWORD sessID; bool tocCached; char tocCacheData[2048]; bool mediaTypeCached; int mediaType; bool discSizeCached; s32 discSize; bool layerBreakCached; s32 layerBreak; public: IOCtlSrc(const char *fileName); ~IOCtlSrc(); s32 GetSectorCount(); s32 ReadTOC(char *toc, int size); s32 ReadSectors2048(u32 sector, u32 count, char *buffer); s32 ReadSectors2352(u32 sector, u32 count, char *buffer); s32 GetLayerBreakAddress(); s32 GetMediaType(); void SetSpindleSpeed(bool restore_defaults); s32 IsOK(); s32 Reopen(); s32 DiscChanged(); }; extern IOCtlSrc *src; void configure(); extern char source_drive; extern HINSTANCE hinst; #define MSF_TO_LBA(m, s, f) ((m * 60 + s) * 75 + f - 150) void ReadSettings(); void WriteSettings(); void CfgSetSettingsDir(const char *dir); extern bool cdvd_is_open; extern bool cdvdKeepAlive_is_open; extern bool disc_has_changed; extern bool weAreInNewDiskCB; extern void (*newDiscCB)(); s32 cdvdStartThread(); void cdvdStopThread(); s32 cdvdRequestSector(u32 sector, s32 mode); s32 cdvdRequestComplete(); char *cdvdGetSector(s32 sector, s32 mode); s32 cdvdDirectReadSector(s32 first, s32 mode, char *buffer); s32 cdvdGetMediaType(); s32 cdvdRefreshData(); s32 cdvdParseTOC(); #endif /* __CDVD_H__ */