//=========================================================================
// Summary  :
// Filename : MMAgentRequest.h
// Author   : paley
// Project  :
// Revision : 1
// Created  : 2001/05/10
// Modified : 2001/05/10
//=========================================================================
// Description :  Remote agent request message
//=========================================================================
#ifndef _AGENTREQUEST_H
#define _AGENTREQUEST_H

#include "ModemMessage.h"
#include "MMUtils.h"

#define AgentRequestTimeout 30	//seconds

class MMAgentRequest : public MMConvertible
{

public:

	enum Request {
		Stop=0,
		Start,
		Single,
		OnUpdate,
		WithNav
	};

	MMAgentRequest(const ModemMessage *pMM);
	MMAgentRequest(int request, int type, int period);

	virtual const char* pcRead(const char* sourceBuffer);
	virtual char* pcWrite(char* destBuffer) const;
	virtual ModemMessage::Type tGetMessageType() const
		{ return ModemMessage::tMMAgentRequest; };
	virtual int iGetDefaultTimeout() const { return AgentRequestTimeout; };

	int getRequest()
		{ return MMUtil::char2int(m_request); };
	void setRequest(int request)
		{ m_request = MMUtil::int2char(request); };
	int getRequestType()
		{ return MMUtil::char2int(m_type); };
	void setRequestType(int type)
		{ m_type = MMUtil::int2char(type); }
	int getPeriod()
		{ return MMUtil::char2int(m_period,REQ_MIN_PD,REQ_MAX_PD); };
	void setPeriod(int period)
		{ m_period = MMUtil::int2char(period,REQ_MIN_PD,REQ_MAX_PD); };

protected:
	uchar m_request;
	//WARNING! can only store 255 message types
	uchar m_type;
	//WARNING! m_period resolution will be limited to
	// (REQ_MAX_PD - REQ_MIN_PD)/255 seconds
	uchar m_period;
};

#endif
