//=========================================================================
// Summary  :
// Filename : MMTailcone.cc
// Author   : paley
// Project  :
// Revision : 1
// Created  : 2001/05/14
// Modified : 2001/05/14
//=========================================================================
// Description :  Tailcone message
//=========================================================================

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

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

MMTailcone::MMTailcone(float propellerRpm, float elevatorAngle, float rudderAngle,
	short compLevel, int updateTime)
{
	setPropellerRpm(propellerRpm);
	setElevatorAngle(elevatorAngle);
	setRudderAngle(rudderAngle);
	setCompLevel(compLevel);
	setUpdateTime(updateTime);
}

const char* MMTailcone::pcRead(const char* sourceBuffer)
{
	const char* pcEnd = ::pcRead(sourceBuffer, &m_propellerRpm);
	pcEnd = ::pcRead(pcEnd, &m_elevatorAngle);
	pcEnd = ::pcRead(pcEnd, &m_rudderAngle);
	pcEnd = ::pcRead(pcEnd, &m_compLevel);
	pcEnd = ::pcRead(pcEnd, &m_updateTime);
	return pcEnd;
}

char* MMTailcone::pcWrite(char* destBuffer) const
{
	char* pcEnd = ::pcWrite(destBuffer,m_propellerRpm);
	pcEnd = ::pcWrite(pcEnd,m_elevatorAngle);
	pcEnd = ::pcWrite(pcEnd,m_rudderAngle);
	pcEnd = ::pcWrite(pcEnd,m_compLevel);
	pcEnd = ::pcWrite(pcEnd,m_updateTime);
	return pcEnd;
}

void MMTailcone::toString(char* str)
{
	sprintf(str,"tMMTailcone: prop=%f, elev=%f, rud=%f, comp=%d, time=%d",getPropellerRpm(),
		getElevatorAngle(),getRudderAngle(),getCompLevel(),getUpdateTime());
}

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

MMTailconeRaw::MMTailconeRaw(short propeller, short elevator,
	short rudder, short throttle, int updateTime)
{
	m_propeller = propeller;
	m_elevator = elevator;
	m_rudder = rudder;
	m_throttle = throttle;
	m_updateTime = updateTime;
}

const char* MMTailconeRaw::pcRead(const char* sourceBuffer)
{
	const char* pcEnd = ::pcRead(sourceBuffer, &m_propeller);
	pcEnd = ::pcRead(pcEnd, &m_elevator);
	pcEnd = ::pcRead(pcEnd, &m_rudder);
	pcEnd = ::pcRead(pcEnd, &m_throttle);
	pcEnd = ::pcRead(pcEnd, &m_updateTime);
	return pcEnd;
}

char* MMTailconeRaw::pcWrite(char* destBuffer) const
{
	char* pcEnd = ::pcWrite(destBuffer,m_propeller);
	pcEnd = ::pcWrite(pcEnd,m_elevator);
	pcEnd = ::pcWrite(pcEnd,m_rudder);
	pcEnd = ::pcWrite(pcEnd,m_throttle);
	pcEnd = ::pcWrite(pcEnd,m_updateTime);
	return pcEnd;
}

void MMTailconeRaw::toString(char* str)
{
	sprintf(str,"tMMTailconeRaw: prop=%d, elev=%d, rud=%d, throttle=%d,"
		" time=%d",m_propeller,m_elevator,m_rudder,m_throttle,m_updateTime);
}
