| 
									
										
										
										
											2015-05-24 06:55:12 +02:00
										 |  |  | // Copyright 2008 Dolphin Emulator Project
 | 
					
						
							| 
									
										
										
										
											2015-05-18 01:08:10 +02:00
										 |  |  | // Licensed under GPLv2+
 | 
					
						
							| 
									
										
										
										
											2013-04-17 23:09:55 -04:00
										 |  |  | // Refer to the license.txt file included.
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-10 13:54:46 -05:00
										 |  |  | #pragma once
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-06 23:15:51 -05:00
										 |  |  | #include <memory>
 | 
					
						
							| 
									
										
										
										
											2014-03-12 15:33:41 -04:00
										 |  |  | #include <string>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-21 01:47:53 +01:00
										 |  |  | #include "Common/CommonTypes.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-17 05:18:15 -05:00
										 |  |  | #include "Common/FileUtil.h"
 | 
					
						
							|  |  |  | #include "DiscIO/Blob.h"
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef _WIN32
 | 
					
						
							|  |  |  | #include <windows.h>
 | 
					
						
							| 
									
										
										
										
											2009-02-21 23:44:40 +00:00
										 |  |  | #include <winioctl.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace DiscIO | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | class DriveReader : public SectorReader | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2014-09-01 15:48:02 -04:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   static std::unique_ptr<DriveReader> Create(const std::string& drive); | 
					
						
							|  |  |  |   ~DriveReader(); | 
					
						
							|  |  |  |   BlobType GetBlobType() const override { return BlobType::DRIVE; } | 
					
						
							|  |  |  |   u64 GetDataSize() const override { return m_size; } | 
					
						
							|  |  |  |   u64 GetRawSize() const override { return m_size; } | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   DriveReader(const std::string& drive); | 
					
						
							|  |  |  |   bool GetBlock(u64 block_num, u8* out_ptr) override; | 
					
						
							|  |  |  |   bool ReadMultipleAlignedBlocks(u64 block_num, u64 num_blocks, u8* out_ptr) override; | 
					
						
							| 
									
										
										
										
											2009-02-22 07:52:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-21 23:44:40 +00:00
										 |  |  | #ifdef _WIN32
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   HANDLE m_disc_handle = INVALID_HANDLE_VALUE; | 
					
						
							|  |  |  |   PREVENT_MEDIA_REMOVAL m_lock_cdrom; | 
					
						
							|  |  |  |   bool IsOK() const { return m_disc_handle != INVALID_HANDLE_VALUE; } | 
					
						
							| 
									
										
										
										
											2009-02-21 23:44:40 +00:00
										 |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   File::IOFile m_file; | 
					
						
							|  |  |  |   bool IsOK() const { return m_file.IsOpen() && m_file.IsGood(); } | 
					
						
							| 
									
										
										
										
											2009-02-21 23:44:40 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   u64 m_size = 0; | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }  // namespace
 |