#ifndef ABSTRACTSIOHANDLER_H
#define ABSTRACTSIOHANDLER_H

/*
   AbstractSIOHandler.h - a pure virtual base class for SIO handlers

   Copyright (C) 2002 Matthias Reichl <hias@horus.com>

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program 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 this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include <sys/types.h>
#include "atarisio.h"
#include "SIOWrapper.h"

class AbstractSIOHandler {
public:
	AbstractSIOHandler() {}
	virtual ~AbstractSIOHandler() {}

	enum ECommandStatus {
		eCommandOK = 0,
		eWriteProtected = 1,
		eUnsupportedCommand = 2,
		eInvalidPercomConfig = 3,
		eIllegalSectorNumber = 4,
		eImageError = 5
	};
	virtual int ProcessCommandFrame(SIO_command_frame& frame, SIOWrapper* wrapper) = 0;
	// returns:
	// something defined in ECommandStatus or other = internal error

	virtual void EnableHighSpeed(bool on) = 0;

	virtual bool IsAtrSIOHandler() const;

private:
};

#endif
