//=========================================================================
// Summary  :
// Filename : MMLN250.cc
// Author   : Gil Jones
// Project  :
// Revision : 1
// Created  : 2002/01/21
// Modified : 2002/01/21
//=========================================================================
// Description :  LN250 information
//=========================================================================

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


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

//note that heading is getting passed in as yaw, and henceforth shall be
//put into m_yaw and accessed as yaw
MMLN250::MMLN250(int ln250type, float sysTime, char valid, float lat, float lon, float alt, float nvel,
	    float evel, float vvel, float biasx, float biasy, float head, float pitch, float roll, float yaw,
	    float pRate, float rRate, float yRate, short mode, short type, int updateTime)
    : MMAhrs(0, roll, pitch, head, rRate, pRate, yRate, updateTime)
{
    setLN250type(ln250type);
    _sysTime = sysTime;
    _valid = valid;
    _lat = lat;
    _lon = lon;
    _alt = alt;
    setNvel(nvel);
    setEvel(evel);
    setVvel(vvel);
    setXbias(biasx);
    setYbias(biasy);
   
    //so we don't need this for now
    _head = yaw;
    
    //this mode is ln250mode, not the one in the fix
    _mode = mode;
    _type = type;
}

const char* MMLN250::pcRead(const char* sourceBuffer)
{
    //from inheritence 
    const char* pcEnd = ::pcRead(sourceBuffer, &m_roll);
    pcEnd = ::pcRead(pcEnd, &m_pitch);
    pcEnd = ::pcRead(pcEnd, &m_yaw);
    pcEnd = ::pcRead(pcEnd, &m_rollRate);
    pcEnd = ::pcRead(pcEnd, &m_pitchRate);
    pcEnd = ::pcRead(pcEnd, &m_yawRate);
 
    //from here
    pcEnd = ::pcRead(pcEnd, &_hyOrIns);
    pcEnd = ::pcRead(pcEnd, &_sysTime);
    pcEnd = ::pcRead(pcEnd, &_valid);
    pcEnd = ::pcRead(pcEnd, &_lat);
    pcEnd = ::pcRead(pcEnd, &_lon);
    pcEnd = ::pcRead(pcEnd, &_alt);
    pcEnd = ::pcRead(pcEnd, &_nvel);
    pcEnd = ::pcRead(pcEnd, &_evel);
    pcEnd = ::pcRead(pcEnd, &_vvel);
    pcEnd = ::pcRead(pcEnd, &_biasX);
    pcEnd = ::pcRead(pcEnd, &_biasY);
    pcEnd = ::pcRead(pcEnd, &_mode);
    pcEnd = ::pcRead(pcEnd, &_type);
    return pcEnd;
}

char* MMLN250::pcWrite(char* destBuffer) const
{
    //from inheritance
    char* pcEnd = ::pcWrite(destBuffer,m_roll);
    pcEnd = ::pcWrite(pcEnd,m_pitch);
    pcEnd = ::pcWrite(pcEnd,m_yaw);
    pcEnd = ::pcWrite(pcEnd,m_rollRate);
    pcEnd = ::pcWrite(pcEnd,m_pitchRate);
    pcEnd = ::pcWrite(pcEnd,m_yawRate);
       
    //from here
    pcEnd = ::pcWrite(pcEnd, _hyOrIns);
    pcEnd = ::pcWrite(pcEnd, _sysTime);
    pcEnd = ::pcWrite(pcEnd, _valid);
    pcEnd = ::pcWrite(pcEnd, _lat);
    pcEnd = ::pcWrite(pcEnd, _lon);
    pcEnd = ::pcWrite(pcEnd, _alt);
    pcEnd = ::pcWrite(pcEnd, _nvel);
    pcEnd = ::pcWrite(pcEnd, _evel);
    pcEnd = ::pcWrite(pcEnd, _vvel);
    pcEnd = ::pcWrite(pcEnd, _biasX);
    pcEnd = ::pcWrite(pcEnd, _biasY);
    pcEnd = ::pcWrite(pcEnd, _mode);
    pcEnd = ::pcWrite(pcEnd, _type);
    return pcEnd;
}


