text: //---------------------------------------------------------------------------
  //
  // SCSI Target Emulator RaSCSI (*^..^*)
  // for Raspberry Pi
  //
  // Copyright (C) 2021 Uwe Seimet
  //
  // Interface for SCSI block commands (see https://www.t10.org/drafts.htm, SBC-5)
  //
  //---------------------------------------------------------------------------
  
  #pragma once
  
  class SASIDEV;
  
  class ScsiBlockCommands
  {
  public:
  
  	ScsiBlockCommands() {};
  	virtual ~ScsiBlockCommands() {};
  
  	// Mandatory commands
  	virtual void TestUnitReady(SASIDEV *) = 0;
  	virtual void Inquiry(SASIDEV *) = 0;
  	virtual void ReportLuns(SASIDEV *) = 0;
  	virtual void FormatUnit(SASIDEV *) = 0;
  	virtual void ReadCapacity10(SASIDEV *) = 0;
  	virtual void ReadCapacity16(SASIDEV *) = 0;
  	virtual void Read10(SASIDEV *) = 0;
  	virtual void Read16(SASIDEV *) = 0;
  	virtual void Write10(SASIDEV *) = 0;
  	virtual void Write16(SASIDEV *) = 0;
  	virtual void RequestSense(SASIDEV *) = 0;
  
  	// Implemented optional commands
  	virtual void Verify10(SASIDEV *) = 0;
  	virtual void Verify16(SASIDEV *) = 0;
  	virtual void ModeSense6(SASIDEV *) = 0;
  	virtual void ModeSense10(SASIDEV *) = 0;
  	virtual void ModeSelect6(SASIDEV *) = 0;
  	virtual void ModeSelect10(SASIDEV *) = 0;
  	virtual void ReassignBlocks(SASIDEV *) = 0;
  	virtual void SendDiagnostic(SASIDEV *) = 0;
  	virtual void StartStopUnit(SASIDEV *) = 0;
  	virtual void SynchronizeCache10(SASIDEV *) = 0;
  	virtual void SynchronizeCache16(SASIDEV *) = 0;
  };
  