//=========================================================================
// Summary  :
// Filename : MMGps.h
// Author   : paley
// Project  :
// Revision : 1
// Created  : 2001/06/29
// Modified : 2001/06/29
//=========================================================================
// Description :  GPS message
//=========================================================================
#ifndef _MMGPS_H
#define _MMGPS_H

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

#define GpsMessageTimeOut 30

//////////////////////////////////////////////
class MMGps : public MMConvertible
{

public:
	MMGps(const ModemMessage *pMM);
	MMGps(float latitude, float longitude, Boolean differential,
		int numSatellites, float hdop, int updateTime);

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

	void setLatitude(float latitude)
		{ m_latitude = latitude; };
	void setLongitude(float longitude)
		{ m_longitude = longitude; };
	void setDifferential(Boolean differential)
		{ m_differential = differential; };
	void setNumSatellites(int numSatellites)
		{ m_numSatellites = MMUtil::int2char(numSatellites); };
	void setHdop(float hdop)
		{ m_hdop = MMUtil::double2char(hdop,MIN_HDOP,MAX_HDOP); };
	void setUpdateTime(int updateTime)
		{ m_updateTime = updateTime; };

	float getLatitude()
		{ return m_latitude; };
	float getLongitude()
		{ return m_longitude; };
	Boolean getDifferential()
		{ return m_differential; };
	int getNumSatellites()
		{ return MMUtil::char2int(m_numSatellites); };
	float getHdop()
		{ return MMUtil::char2double(m_hdop,MIN_HDOP,MAX_HDOP); };
	int getUpdateTime()
		{ return m_updateTime; };

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

protected:
	float m_latitude;
	float m_longitude;
	Boolean m_differential;
	uchar m_numSatellites;
	//WARNING! m_hdop resolution will be limited to
	// (MAX_HDOP - MIN_HDOP)/255
	uchar m_hdop;
	int m_updateTime;
};

#endif
