#ifndef _MICRO_H
#define _MICRO_H

#include <Vk/VkComponent.h>
#include "VehicleComponent.h"
#include "MicroDm.h"
#include "MicroGui.h"

class Micro : public VehicleComponent
{
  public:
  Micro(const char *name, const char *dmPrefix);
  ~Micro();
  
  virtual const char *className()
  {
    return "Micro";
  }

  const char *dmPrefix()
  {
    return _dmPrefix;
  }
  
  virtual MBool isMicro()
  {
    return TRUE;
  }

  MicroDm *microDm;

  virtual MicroGui *gui(Widget parent, int period);
  virtual MicroH2OTemp *h2OTemp(Widget parent, int period);
  virtual MicroGf *gf(Widget parent, int period);
  virtual MicroGf5v *gf5v(Widget parent, int period);
  
  protected:
  char *_dmPrefix;
};


class Ibc : public Micro
{
  public:
  Ibc(const char *name, const char *dmPrefix);
  ~Ibc();
  
  virtual const char *className()
  {
    return "Ibc";
  }

  virtual Type type()
  {
    return IbcType;
  }
  
  virtual MicroGui *gui(Widget parent, int period);
  virtual MicroH2OTemp *h2OTemp(Widget parent, int period);
  virtual MicroGf5v *gf5v(Widget parent, int period);
  IbcDm *ibcDm;

  protected:
  char *_dmPrefix;
};


class Dcon : public Ibc
{
  public:
  Dcon(const char *name, const char *dmPrefix);
  ~Dcon();
  
  virtual const char *className()
  {
    return "Dcon";
  }

  virtual Type type()
  {
    return DconType;
  }

  virtual MicroGui *gui(Widget parent, int period);
  virtual MicroH2OTemp *h2OTemp(Widget parent, int period);
};


#endif
