#include "Micro.h"
#include "MicroGui.h"

#define dprintf if (debug) fprintf

Micro::Micro(const char *name, const char *dmPrefix) :
  VehicleComponent(name)
{
  if (dmPrefix[strlen(dmPrefix)-1] != '.')
    strcat((char *)dmPrefix, ".");
  
  _dmPrefix = strdup(dmPrefix);

  microDm = new MicroDm(name, dmPrefix);

  if (microDm->error())
  {
    char errorBuf[errorMsgSize];
    microDm->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }  
}


Micro::~Micro()
{
  if (_dmPrefix)
    free(_dmPrefix);
}


MicroGui *Micro::gui(Widget parent, int period)
{
  return NULL;
}


MicroH2OTemp *Micro::h2OTemp(Widget parent, int period)
{
  return NULL;
}


MicroGf *Micro::gf(Widget parent, int period)
{
  return NULL;
}


MicroGf5v *Micro::gf5v(Widget parent, int period)
{
  Boolean debug = False;
  dprintf(stderr, "Micro::gf5v() - return NULL\n");
  return NULL;
}


Ibc::Ibc(const char *name, const char *dmPrefix) :
  Micro(name, dmPrefix)
{
  ibcDm = new IbcDm(name, dmPrefix);
  if (ibcDm->error())
  {
    char errorBuf[errorMsgSize];
    ibcDm->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }
}


Ibc::~Ibc()
{
}


MicroGui *Ibc::gui(Widget parent, int period)
{
  IbcGui *gui = new IbcGui(_name, parent, this, period);
  gui->show();
  return gui;
}


MicroH2OTemp *Ibc::h2OTemp(Widget parent, int period)
{
  IbcH2OTemp *gui = new IbcH2OTemp(_name, parent, this, period);
  gui->show();
  return gui;
}


MicroGf5v *Ibc::gf5v(Widget parent, int period)
{
  IbcGf *ibcGf = new IbcGf(_name, parent, this, period);
  ibcGf->show();
  return ibcGf;
}


Dcon::Dcon(const char *name, const char *dmPrefix) :
  Ibc(name, dmPrefix)
{
}

Dcon::~Dcon()
{
}


MicroGui *Dcon::gui(Widget parent, int period)
{
  DconGui *gui = new DconGui(_name, parent, this, period);
  gui->show();
  return gui;
}


MicroH2OTemp *Dcon::h2OTemp(Widget parent, int period)
{
  DconH2OTemp *gui = new DconH2OTemp(_name, parent, this, period);
  gui->show();
  return gui;
}




