//=========================================================================
// Summary  :
// Filename : MMMultiLeica.h
// Author   : Gil Jones
// Project  :
// Revision : 1
// Created  : 2002/06/04
// Modified : 2001/06/04
//=========================================================================
// Description :  MultiLeica message
//=========================================================================
#ifndef _MMMULTILEICA_H
#define _MMMULTILEICA_H

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

#define MultiLeicaMessageTimeOut 30


//////////////////////////////////////////////
class MMMultiLeica : public MMNavigationAttitude
{
 public:

    MMMultiLeica(){};
    MMMultiLeica(const ModemMessage *pMM);
    MMMultiLeica(int mode, 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::tMMMultiLeica; };
    virtual int iGetDefaultTimeout() const 
	{ return MultiLeicaMessageTimeOut; };
    
    void setMultiType(int t)
	{ m_multi = MMUtil::char2int(t); };

    void setRollRate(float rollRate)
	{ m_rollRate = MMUtil::double2char(rollRate,MIN_TIP_RATE,MAX_TIP_RATE); };
    void setPitchRate(float pitchRate)
	{ m_pitchRate = MMUtil::double2char(pitchRate,MIN_TIP_RATE,MAX_TIP_RATE); };
    void setYawRate(float yawRate)
	{ m_yawRate = MMUtil::double2char(yawRate,MIN_TIP_RATE,MAX_TIP_RATE); };
    
    int getMultiType()
	{ return MMUtil::char2int(m_multi); };
    
    float getRollRate()
	{ return MMUtil::char2double(m_rollRate,MIN_TIP_RATE,MAX_TIP_RATE); };
    float getPitchRate()
	{ return MMUtil::char2double(m_pitchRate,MIN_TIP_RATE,MAX_TIP_RATE); };
    float getYawRate()
	{ return MMUtil::char2double(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:
    uchar m_multi;
    uchar m_rollRate;
    uchar m_pitchRate;
    uchar m_yawRate;
    int m_updateTime;
};

#endif
