//=========================================================================
// Summary  :
// Filename : MMAhrs.h
// Author   : paley
// Project  :
// Revision : 1
// Created  : 2001/06/12
// Modified : 2001/06/12
//=========================================================================
// Description :  AHRS message
//=========================================================================
#ifndef _MMAHRS_H
#define _MMAHRS_H

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

#define AhrsMessageTimeOut 30


//////////////////////////////////////////////
class MMAhrs : public MMNavigationAttitude
{

public:
    
    //0 as type is crossbow
    //1 is microstrain

    MMAhrs(){};
	MMAhrs(const ModemMessage *pMM);
	MMAhrs(short source, float roll, float pitch, float yaw, float rollRate, float pitchRate,
	       float yawRate, int updateTime);

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

	void setRollRate(float rollRate)
		{ m_rollRate = MMUtil::double2short(rollRate,MIN_TIP_RATE,MAX_TIP_RATE); };
	void setPitchRate(float pitchRate)
		{ m_pitchRate = MMUtil::double2short(pitchRate,MIN_TIP_RATE,MAX_TIP_RATE); };
	void setYawRate(float yawRate)
		{ m_yawRate = MMUtil::double2short(yawRate,MIN_TIP_RATE,MAX_TIP_RATE); };
	
	short getSource()
	    { return m_source; };
	float getRollRate()
		{ return MMUtil::short2double(m_rollRate,MIN_TIP_RATE,MAX_TIP_RATE); };
	float getPitchRate()
		{ return MMUtil::short2double(m_pitchRate,MIN_TIP_RATE,MAX_TIP_RATE); };
	float getYawRate()
		{ return MMUtil::short2double(m_yawRate,MIN_TIP_RATE,MAX_TIP_RATE); };
	int getUpdateTime()
		{ return m_updateTime; };

	void toString(char* str);
	static int size() { return 7 + MMNavigationAttitude::size(); };

protected:
	//WARNING! m_rollRate, m_pitchRate, and m_yawRate resolution will be limited to
	// (MAX_TIP_RATE - MIN_TIP_RATE)/255 rad/sec
	short m_source;
	short m_rollRate;
	short m_pitchRate;
	short m_yawRate;
	int m_updateTime;
};

#endif
