#ifndef __EXTEXTRACTORDISKREADDRIVER_H__ #define __EXTEXTRACTORDISKREADDRIVER_H__ #ifdef __cplusplus #include "icsneo/disk/diskreaddriver.h" #include #include namespace icsneo { namespace Disk { /** * A disk read driver which uses the extended extractor command set to read from the disk */ class ExtExtractorDiskReadDriver : public ReadDriver { public: std::pair getBlockSizeBounds() const override { static_assert(SectorSize <= std::numeric_limits::max(), "Incorrect sector size"); static_assert(SectorSize >= std::numeric_limits::min(), "Incorrect sector size"); return { static_cast(SectorSize), static_cast(MaxSize) }; } private: static constexpr const uint32_t MaxSize = Disk::SectorSize * 512; static constexpr const uint8_t HeaderLength = 7; Access getPossibleAccess() const override { return Access::EntireCard; } std::optional readLogicalDiskAligned(Communication& com, device_eventhandler_t report, uint64_t pos, uint8_t* into, uint64_t amount, std::chrono::milliseconds timeout) override; std::optional attemptReadLogicalDiskAligned(Communication& com, device_eventhandler_t report, uint64_t pos, uint8_t* into, uint64_t amount, std::chrono::milliseconds timeout); }; } // namespace Disk } // namespace icsneo #endif // __cplusplus #endif // __EXTEXTRACTORDISKREADDRIVER_H__