//=========================================================================
// Summary  : Modem Message for Seabird SBE25
// Filename : MMSeabirdSBE25.cc
// Author   : Reed Christenson, reed@bluefinrobotics.com
// Project  :
// Revision : 1
// Created  : 2002/06/12
// Modified : 2002/06/12
//=========================================================================
// Description :  Seabird SBE25 information
//=========================================================================

#include <stdio.h>
#include "MMSeabirdSBE25.h"

MMSeabirdSBE25::MMSeabirdSBE25(const ModemMessage *pMM)
{
    Assert(pMM);
    Assert(pMM->getType()==tGetMessageType());
    const char* pcEnd = pcRead(pMM->getBuffer());
    Assert(pcEnd==pMM->getBuffer()+pMM->getBufferSize());
}  

MMSeabirdSBE25::MMSeabirdSBE25(double conductivity, double temperature, double depth, 
			       double pressure, double salinity, double soundVelocity,
			       short numberOfExternalVoltages,
			       double externalVoltage0,
			       double externalVoltage1,
			       double externalVoltage2,
			       double externalVoltage3,
			       double externalVoltage4,
			       double externalVoltage5,
			       double externalVoltage6)
{
    setConductivity(conductivity);
    setTemperature(temperature);
    setDepth(depth);
    setPressure(pressure);
    setSalinity(salinity);
    setSoundVelocity(soundVelocity);
    setNumExtVoltages(numberOfExternalVoltages);
    setExternalVoltage(0,externalVoltage0);
    setExternalVoltage(1,externalVoltage1);
    setExternalVoltage(2,externalVoltage2);
    setExternalVoltage(3,externalVoltage3);
    setExternalVoltage(4,externalVoltage4);
    setExternalVoltage(5,externalVoltage5);
    setExternalVoltage(6,externalVoltage6);
}

const char* MMSeabirdSBE25::pcRead(const char* sourceBuffer)
{
    const char* pcEnd = ::pcRead(sourceBuffer, &m_conductivity);
    pcEnd = ::pcRead(pcEnd, &m_temperature);
    pcEnd = ::pcRead(pcEnd, &m_depth);
    pcEnd = ::pcRead(pcEnd, &m_pressure);
    pcEnd = ::pcRead(pcEnd, &m_salinity);
    pcEnd = ::pcRead(pcEnd, &m_soundVelocity);
    pcEnd = ::pcRead(pcEnd, &m_numberOfExternalVoltages);
    pcEnd = ::pcRead(pcEnd, &m_externalVoltage[0]);
    pcEnd = ::pcRead(pcEnd, &m_externalVoltage[1]);
    pcEnd = ::pcRead(pcEnd, &m_externalVoltage[2]);
    pcEnd = ::pcRead(pcEnd, &m_externalVoltage[3]);
    pcEnd = ::pcRead(pcEnd, &m_externalVoltage[4]);
    pcEnd = ::pcRead(pcEnd, &m_externalVoltage[5]);
    pcEnd = ::pcRead(pcEnd, &m_externalVoltage[6]);
    return pcEnd;
}

char* MMSeabirdSBE25::pcWrite(char* destBuffer) const
{
    char* pcEnd = ::pcWrite(destBuffer, m_conductivity);
    pcEnd = ::pcWrite(pcEnd, m_temperature);
    pcEnd = ::pcWrite(pcEnd, m_depth);
    pcEnd = ::pcWrite(pcEnd, m_pressure);
    pcEnd = ::pcWrite(pcEnd, m_salinity);
    pcEnd = ::pcWrite(pcEnd, m_soundVelocity);
    pcEnd = ::pcWrite(pcEnd, m_numberOfExternalVoltages);
    pcEnd = ::pcWrite(pcEnd, m_externalVoltage[0]);
    pcEnd = ::pcWrite(pcEnd, m_externalVoltage[1]);
    pcEnd = ::pcWrite(pcEnd, m_externalVoltage[2]);
    pcEnd = ::pcWrite(pcEnd, m_externalVoltage[3]);
    pcEnd = ::pcWrite(pcEnd, m_externalVoltage[4]);
    pcEnd = ::pcWrite(pcEnd, m_externalVoltage[5]);
    pcEnd = ::pcWrite(pcEnd, m_externalVoltage[6]);
    return pcEnd;
}    
