//=========================================================================
// Summary  :
// Filename : MMHoming.h
// Author   : paley
// Project  :
// Revision : 1
// Created  : 2001/06/29
// Modified : 2001/06/29
//=========================================================================
// Description :  Homing message
//=========================================================================
#ifndef _MMHOMING_H
#define _MMHOMING_H

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

#define HomingMessageTimeOut 30

//////////////////////////////////////////////
class MMHoming : public MMConvertible
{

public:
	MMHoming(const ModemMessage *pMM);
	MMHoming(float azimuth, float rangerate, int updateTime);

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

	void setAzimuth(float azimuth)
		{ m_azimuth = MMUtil::double2char(MMUtil::modPi(azimuth),MIN_AZIMUTH,MAX_AZIMUTH); };
	void setRangeRate(float rangeRate)
		{ m_rangeRate = MMUtil::double2char(rangeRate,MIN_SPEED,MAX_SPEED); };
	void setUpdateTime(int updateTime)
		{ m_updateTime = updateTime; };

	float getAzimuth()
		{ return MMUtil::char2double(m_azimuth,MIN_AZIMUTH,MAX_AZIMUTH); };
	float getRangeRate()
		{ return MMUtil::char2double(m_rangeRate,MIN_SPEED,MAX_SPEED); };
	int getUpdateTime()
		{ return m_updateTime; };

	void toString(char* str);
	static int size() { return 6; };

protected:
	//WARNING! m_azimuth resolution will be limited to
	// (MAX_AZIMUTH - MIN_AZIMUTH)/255 rad
	uchar m_azimuth;
	//WARNING! m_rangeRate resolution will be limited to
	// (MAX_SPEED - MIN_SPEED)/255 m/s
	uchar m_rangeRate;
	int m_updateTime;
};

#endif
