//=========================================================================
// Summary  :
// Filename : MMSvs.h
// Author   : jones
// Project  :
// Revision : 1
// Created  : 2002/01/04
// Modified : 2002/01/04
//=========================================================================
// Description :  Svs message
//=========================================================================
#ifndef _MMSVS_H
#define _MMSVS_H

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

#define SVS_MAX 1600.0
#define SVS_MIN 1400.0

#define SvsMessageTimeOut 30

class MMSvs : public MMConvertible
{
 public:
    MMSvs(const ModemMessage *pMM);
    MMSvs(long tof, float sM, long sMm);
    
    virtual const char* pcRead(const char* sourceBuffer);
    virtual char* pcWrite(char* destBuffer) const;
    virtual ModemMessage::Type tGetMessageType() const
	{ return ModemMessage::tMMSvs; };
    virtual int iGetDefaultTimeout() const
	{ return SvsMessageTimeOut; };

    void setRawTOF(long tof)
	{ m_rawTOF = tof; };
    void setSpeedM(float speedM)
	{ m_speedM = speedM; };
    
    void setSpeedMm(long speedMm)
	{ 
	    double temp = speedMm/1000.0;
	    m_speedMm = MMUtil::double2short(temp,SVS_MIN,SVS_MAX);
	};

    long getRawTOF()
	{ return m_rawTOF; };
    float getSpeedM()
	{ return m_speedM; };
    //this is going to return mm in meters now, but its the more accurate call from SVSIF
    double getSpeedMm()
	{ 
	    double temp =  MMUtil::short2double(m_speedMm, SVS_MIN,SVS_MAX);
	    return temp;
	};
    
    //based on just sending a single short
    static int size() { return 2; };
    
 protected:
    
    long m_rawTOF;
    short m_speedM;
    short m_speedMm;
};

#endif
