//=========================================================================
// Summary  : Modem Message for Seabird SBE25, with 7 voltages.
// Filename : MMSeabirdSBE25.h
// Author   : Reed Christenson, reed@bluefinrobotics.com
// Project  : Seabird SBE25
// Revision : 1
// Created  : 2003.03.11
// Modified : 2003.03.11
//=========================================================================
// Description :  Seabird SBE25 information
//=========================================================================

#ifndef _MMSEABIRDSBE25_H
#define _MMSEABIRDSBE25_H

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

#define SeabirdTimeOut 60 //seconds

#define SV_MAX 1600.0
#define SV_MIN 1400.0
#define NV_MIN 0 // minimum number of voltages
#define NV_MAX 7 // maximum number of voltages

class MMSeabirdSBE25 : public MMConvertible
{
 public:
    MMSeabirdSBE25(const ModemMessage *pMM);
    MMSeabirdSBE25(double conductivity, double temperature, double depth, 
                   double pressure, double salinity, double soundVelocity, 
		   short numberOfExternalVoltages,
		   double extVoltage0,
		   double extVoltage1,
		   double extVoltage2,
		   double extVoltage3,
		   double extVoltage4,
		   double extVoltage5,
		   double extVoltage6);
    
    virtual const char* pcRead(const char* sourceBuffer);
    virtual char* pcWrite(char* destBuffer) const;
    virtual ModemMessage::Type tGetMessageType() const
	{ return ModemMessage::tMMSeabirdSBE25; };
    virtual int iGetDefaultTimeout() const
	{ return SeabirdTimeOut; };

    void setConductivity(double c)
	{ m_conductivity = c; };
    void setTemperature(double t)
	{ m_temperature = t; };
    void setDepth(double d)
	{ m_depth = d; };
    void setPressure(double p)
	{ m_pressure = p; };
    void setSalinity(double s)
	{ m_salinity = s; };
    void setSoundVelocity(double v)
	{ m_soundVelocity = v; };
    void setNumExtVoltages(short n)
	{ 
	    m_numberOfExternalVoltages = n > NV_MAX ? NV_MAX : n; 
	    m_numberOfExternalVoltages = n < NV_MIN ? NV_MIN : n;
	};
    void setExternalVoltage(short n, double ev)
	{ m_externalVoltage[n] = ev; };

    double getConductivity()
	{ return m_conductivity; };
    double getTemperature()
	{ return m_temperature; };
    double getDepth()
	{ return m_depth; };
    double getPressure()
	{ return m_pressure; };
    double getSalinity()
	{ return m_salinity; };
    double getSoundVelocity()
	{ return m_soundVelocity; };
    short getNumberOfExternalVoltages()
	{ return m_numberOfExternalVoltages; };
    double getExternalVoltage(short n)
	{ return m_externalVoltage[n]; };

 protected:
    double m_conductivity;
    double m_temperature;
    double m_depth;
    double m_pressure;
    double m_salinity;
    double m_soundVelocity;
    short  m_numberOfExternalVoltages;
    double m_externalVoltage[7];
};
#endif
