//=========================================================================
// Summary  :
// Filename : MMThalesBattery.cc
// Author   : Gil Jones
// Project  :
// Revision : 1
// Created  : 2002/03/13
// Modified : 2002/03/13
//=========================================================================
// Description :  Thales Battery messages
//=========================================================================

#include "MMThalesBattery.h"

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

MMThalesBatteryInfo::MMThalesBatteryInfo(int num, short ser, double volts, double amps, double minV, double maxV,
					 double capacity, double temperature,
					 char state, char errorState, short commsFailures,
					 short errorLevel)
{
    setNum(num);
    setBatterySerial(ser);
    setVolts(volts);
    setAmps(amps);
    setMinVolts(minV);
    setMaxVolts(maxV);
    setCapacity(capacity);
    setTemp(temperature);
    setState(state);
    setErrorState(errorState);
    setCommsFailures(commsFailures);
    setErrorLevel(errorLevel);
}

const char* MMThalesBatteryInfo::pcRead(const char* sourceBuffer)
{
    const char* pcEnd = ::pcRead(sourceBuffer, &m_num);
    pcEnd = ::pcRead(pcEnd, &m_batterySerial);
    pcEnd = ::pcRead(pcEnd, &m_volts);
    pcEnd = ::pcRead(pcEnd, &m_amps);
    pcEnd = ::pcRead(pcEnd, &m_minV);
    pcEnd = ::pcRead(pcEnd, &m_maxV);
    pcEnd = ::pcRead(pcEnd, &m_temp);
    pcEnd = ::pcRead(pcEnd, &m_capacity);
    pcEnd = ::pcRead(pcEnd, &m_state);
    pcEnd = ::pcRead(pcEnd, &m_errorState);
    pcEnd = ::pcRead(pcEnd, &m_commsFailures);
    pcEnd = ::pcRead(pcEnd, &m_errorLevel);
    return pcEnd;
}

char* MMThalesBatteryInfo::pcWrite(char* destBuffer) const
{
    char* pcEnd = ::pcWrite(destBuffer, m_num);
    pcEnd = ::pcWrite(pcEnd, m_batterySerial);
    pcEnd = ::pcWrite(pcEnd, m_volts);
    pcEnd = ::pcWrite(pcEnd, m_amps);
    pcEnd = ::pcWrite(pcEnd, m_minV);
    pcEnd = ::pcWrite(pcEnd, m_maxV);
    pcEnd = ::pcWrite(pcEnd, m_temp);
    pcEnd = ::pcWrite(pcEnd, m_capacity);
    pcEnd = ::pcWrite(pcEnd, m_state);
    pcEnd = ::pcWrite(pcEnd, m_errorState);
    pcEnd = ::pcWrite(pcEnd, m_commsFailures);
    pcEnd = ::pcWrite(pcEnd, m_errorLevel);
    return pcEnd;
}

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

MMThalesBatteryGlobal::MMThalesBatteryGlobal(short numBat, short numOn, short numAlive, double volts, 
			  double amps, double capacity, short errorLevel)
{
    setNumBat(numBat);
    setNumOn(numOn);
    setNumAlive(numAlive);
    setVolts(volts);
    setAmps(amps);
    setCapacity(capacity);
    setErrorLevel(errorLevel);
}

const char* MMThalesBatteryGlobal::pcRead(const char* sourceBuffer)
{
    const char* pcEnd = ::pcRead(sourceBuffer, &m_numBat);
    pcEnd = ::pcRead(pcEnd, &m_numOn);
    pcEnd = ::pcRead(pcEnd, &m_numAlive);
    pcEnd = ::pcRead(pcEnd, &m_volts);
    pcEnd = ::pcRead(pcEnd, &m_amps);
    pcEnd = ::pcRead(pcEnd, &m_capacity);
    pcEnd = ::pcRead(pcEnd, &m_errorLevel);
    return pcEnd;
}

char* MMThalesBatteryGlobal::pcWrite(char* destBuffer) const
{
    char* pcEnd = ::pcWrite(destBuffer, m_numBat);
    pcEnd = ::pcWrite(pcEnd, m_numOn);
    pcEnd = ::pcWrite(pcEnd, m_numAlive);
    pcEnd = ::pcWrite(pcEnd, m_volts);
    pcEnd = ::pcWrite(pcEnd, m_amps);
    pcEnd = ::pcWrite(pcEnd, m_capacity);
    pcEnd = ::pcWrite(pcEnd, m_errorLevel);
    return pcEnd;
}
