//--------------------------------------------------------------------------- // // SCSI Target Emulator RaSCSI Reloaded // for Raspberry Pi // // Copyright (C) 2022 Uwe Seimet // //--------------------------------------------------------------------------- #pragma once #include "primary_device.h" #include #include #include class ModePageDevice: public PrimaryDevice { public: ModePageDevice(const string&, int); ~ModePageDevice()override = default; bool Dispatch(scsi_command) override; virtual void ModeSelect(const vector&, const vector&, int) const; protected: int AddModePages(const vector&, vector&, int, int) const; virtual void SetUpModePages(map>&, int, bool) const = 0; private: using super = PrimaryDevice; Dispatcher dispatcher; virtual int ModeSense6(const vector&, vector&) const = 0; virtual int ModeSense10(const vector&, vector&) const = 0; void ModeSense6(); void ModeSense10(); void ModeSelect6(); void ModeSelect10(); int ModeSelectCheck(int) const; int ModeSelectCheck6() const; int ModeSelectCheck10() const; };