#ifndef _STATUSTELEMETRY_H
#define _STATUSTELEMETRY_H

#include "AcousticTelemetry.h"
#include "IntegerData.h"
#include "StringData.h"
#include "LayeredControlIF.h"

/*
CLASS 
MissionStateTelemetry

DESCRIPTION
Indicates current state of mission (Normal, Aborting, etc), 
current position in Behavior stack.

AUTHOR
Tom O'Reilly
*/
class StatusTelemetry : public AcousticTelemetry {

 public:

  StatusTelemetry(int maxPacketBytes);
  virtual ~StatusTelemetry();

  ///////////////////////////////////////////////////////////////////
  // Data structure holds "status" telemetry
  struct Data {
    double elapsedMissionTime;
    LayeredControlIF::MissionState state;
    LayeredControlIF::Name behaviorName;
    short behaviorIndex;
    double batteryCurrent;
    double batteryVoltage;
      
  } data;

  static const int MissionTimeFieldWidth;
  static const int MissionStateFieldWidth;
  static const int BehaviorFieldWidth;
  static const int BehaviorIndexFieldWidth;
  static const int BatteryCurrentFieldWidth;
  static const int BatteryVoltageFieldWidth;

protected:

  ///////////////////////////////////////////////////////////////////
  // Encode this object's telemetry data structure, place into this 
  // object's encoded buffer.
  virtual void encode();

  ///////////////////////////////////////////////////////////////////
  // Decode this object's encoded buffer, place into this object's
  // telemetry data structure
  virtual void decode();

  IntegerData _integerData;
  StringData _stringData;
};

#endif
