/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _TELEMMICRO_H
#define _TELEMMICRO_H

#include "Micro.h"
#include "TelemDm.h"
#include "GfSelfTest.h"

/*
CLASS 
TelemMicro

DESCRIPTION
Describes Telemetry micro, has methods for generating GUIs

AUTHOR
Tom O'Reilly
*/
class TelemMicro : public Micro
{
  public:
  TelemMicro(const char *name, const char *dmPrefix);
  ~TelemMicro();
  
  virtual const char *className()
  {
    return "TelemMicro";
  }
  
  virtual Type type()
  {
    return TelemMicroType;
  }
 
  virtual MicroGui *gui(Widget parent, int period);
  virtual MicroH2OTemp *h2OTemp(Widget parent, int period); 
  virtual MicroGf *gf(Widget parent, int period); 

  TelemDm *telemDm;

  protected:
};

/*
CLASS 
TelemH2OTemp

DESCRIPTION
Displays temperature, humidity, water-alarm state of TelemMicro

AUTHOR
Tom O'Reilly
*/

class TelemH2OTemp : public MicroH2OTemp
{
  public:
  TelemH2OTemp(const char *name, Widget parent, TelemMicro *micro,
		int period);
  
  ~TelemH2OTemp();
  
  virtual const char *className()
  {
    return "TelemH2OTemp";
  }
};


/*
CLASS 
TelemGf

DESCRIPTION
Display ground-fault status of TelemMicro

AUTHOR
Tom O'Reilly
*/

class TelemGf : public MicroGf
{
  public:
  TelemGf(const char *name, Widget parent, TelemMicro *micro, int period);
  
  ~TelemGf();
  

  virtual const char *className()
  {
    return "TelemGf";
  }
};


/*
CLASS 
TelemMicroGui

DESCRIPTION
GUI for display and control of TelemMicro

AUTHOR
Tom O'Reilly
*/

class TelemMicroGui : public MbariMicroGui
{
  public:
  TelemMicroGui(const char *name, Widget parent, TelemMicro *micro, 
		 int period);

  ~TelemMicroGui();

  virtual const char *className()
  {
    return "TelemMicroGui";
  }
  
  virtual void updateGui(DM_Item handle = 0);

  protected:
  AlarmedInt16Text *_temp;
  AlarmedInt16Text *_localGf;
  GfSelfTest *_gfSelfTest;
  AlarmText *_bitErrorAlarm;
  AlarmedFlt32Text *_bitErrorRate;
  AlarmedFlt32Text *_bitErrorLongRate;
  AlarmText *_fddiStatus;
  AlarmText *_laserStatus;
  AlarmText *_rcvPower;
  AlarmText *_subMux;
  DmFlt32Object *_dmBitErrorRate;
  DmFlt32Object *_dmBitErrorLongRate;
  DmNat16Object *_dmPsuStatus;
};



#endif
