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

#include "MMBluefinBattery.h"

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

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

const char* MMBluefinBatteryInfo::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_master);
    pcEnd = ::pcRead(pcEnd, &m_state);
    pcEnd = ::pcRead(pcEnd, &m_errorState);
    pcEnd = ::pcRead(pcEnd, &m_commsFailures);
    pcEnd = ::pcRead(pcEnd, &m_errorLevel);
    return pcEnd;
}

char* MMBluefinBatteryInfo::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_master);
    pcEnd = ::pcWrite(pcEnd, m_state);
    pcEnd = ::pcWrite(pcEnd, m_errorState);
    pcEnd = ::pcWrite(pcEnd, m_commsFailures);
    pcEnd = ::pcWrite(pcEnd, m_errorLevel);
    return pcEnd;
}

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

MMBluefinBatteryGlobal::MMBluefinBatteryGlobal(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* MMBluefinBatteryGlobal::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* MMBluefinBatteryGlobal::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;
}
