#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "AcousticTelemetry.h"
#include "StringConverter.h"
#include "WhoiUam.h"
#include "Time.h"

static const time_t AcousticTelemetry::AuvEpoch = 946080000;
static const int AcousticTelemetry::TypeFieldLength = 1;
static const int AcousticTelemetry::TimeTagFieldLength = 10;
static const int AcousticTelemetry::SequenceNoFieldLength = 1;

AcousticTelemetry::AcousticTelemetry(int maxPacketBytes)
  : FixedFieldStringMessage(maxPacketBytes, AcousticPadChar),
    _integerData("int")
{
  addField(TypeFieldLength);
  addField(SequenceNoFieldLength);
  addField(TimeTagFieldLength);
}


AcousticTelemetry::~AcousticTelemetry()
{
}


void AcousticTelemetry::encodeData(AcousticMessage::Type cmdType,
				   short sequenceNo)
{
  _integerData.setValue((int )cmdType);
  set(&_integerData);
  _integerData.setValue(sequenceNo);
  set(&_integerData);
  _integerData.setValue(timeTag());
  set(&_integerData);

  // Call subclass-defined encode() method
  encode();
}


AcousticMessage::Type AcousticTelemetry::decodeData()
{
  get(&_integerData);
  data.type = (AcousticMessage::Type )_integerData.value();
  get(&_integerData);
  data.sequenceNo = _integerData.value();
  get(&_integerData);
  data.timeTag = _integerData.value();

  // Call subclass-defined decode() method
  decode();

  return data.type;
}


int AcousticTelemetry::timeTag()
{
  timespec t;
  clock_gettime(CLOCK_REALTIME, &t);

  return t.tv_sec;
}



