//=========================================================================
// Summary  :
// Filename : MMSeacat.h
// Author   : Gil Jones
// Project  :
// Revision : 1
// Created  : 2002/06/12
// Modified : 2002/06/12
//=========================================================================
// Description :  Seacat information
//=========================================================================

#ifndef _MMSEACAT_H
#define _MMSEACAT_H

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

#define SeacatTimeOut 60 //seconds

#define SV_MAX 1600.0
#define SV_MIN 1400.0

class MMSeacat : public MMConvertible
{
 public:
    MMSeacat(const ModemMessage *pMM);
    MMSeacat(double conductivity, double temp, double pressure, double depth,
	     double obs, double flurometer, double salinity, double soundVelocity);
    
    virtual const char* pcRead(const char* sourceBuffer);
    virtual char* pcWrite(char* destBuffer) const;
    virtual ModemMessage::Type tGetMessageType() const
	{ return ModemMessage::tMMSeacat; };
    virtual int iGetDefaultTimeout() const
	{ return SeacatTimeOut; };

    void setCond(double c)
	{ m_cond = c; };
    void setTemp(double t)
	{ m_temp = MMUtil::double2short(t, MIN_TEMP, MAX_TEMP); };
    void setPressure(double p)
	{ m_pressure = MMUtil::double2short(p, MIN_PRESSURE, MAX_PRESSURE); };
    void setDepth(double d)
	{ m_depth = MMUtil::double2short(d, MIN_DEPTH, MAX_DEPTH); };
    void setObs(double o)
	{ m_obs = o; };
    void setFlu(double f)
	{ m_flu = f; };
    void setSal(double s)
	{ m_sal = s; };
    void setSV(double s)
	{ m_sv = MMUtil::double2short(s, SV_MIN, SV_MAX); };
    
    double getCond()
	{ return m_cond; };
    double getTemp()
	{ return MMUtil::short2double(m_temp, MIN_TEMP, MAX_TEMP); };
    double getPressure()
	{ return MMUtil::short2double(m_pressure, MIN_PRESSURE, MAX_PRESSURE); };
    double getDepth()
	{ return MMUtil::short2double(m_depth, MIN_DEPTH, MAX_DEPTH); };
    double getObs()
	{ return m_obs; };
    double getFlu()
	{ return m_flu; };
    double getSal()
	{ return m_sal; };
    double getSV()
	{ return MMUtil::short2double(m_sv, SV_MIN, SV_MAX); };
    
 protected:
    double m_cond;
    short m_temp;
    short m_pressure;
    short m_depth;
    double m_obs;
    double m_flu;
    double m_sal;
    short m_sv;
};
#endif
