#include "PduDm.h"
#include "pduMicro.h"

PduDm::PduDm(const char *name, const char *dmPrefix)
  : ThreeByFiveDm(name, dmPrefix)
{
  if (error())
    return;
  
  char dmItemName[MaxDmNameLen];
  char errorBuf[errorMsgSize];
  
  strcpy(dmItemName, _dmPrefix);
  char *namePtr = dmItemName + strlen(dmItemName);

  strcpy(namePtr, MICRO_TEMP_DM);
  temperature = new DmInt16Object(dmItemName);
  if (temperature->error())
  {
    temperature->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }

  strcpy(namePtr, EXT_GND_FLT_CURRENT_DM);
  externGfCurrent = new DmInt16Object(dmItemName);
  if (externGfCurrent->error())
  {
    externGfCurrent->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }

  strcpy(namePtr, WATTAGE_DM);
  wattage = new DmFlt32Object(dmItemName);
  if (wattage->error())
  {
    wattage->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }

  strcpy(namePtr, VOLTAGE_DM);
  voltage = new DmInt16Object(dmItemName);
  if (voltage->error())
  {
    voltage->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }

  strcpy(namePtr, TRANS_TEMP_DM);
  transTemperature = new DmInt16Object(dmItemName);
  if (transTemperature->error())
  {
    transTemperature->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }

  for (int index = 0; index < 3; index++)
  {
    char str[100];
    sprintf(str, "PHASE%d_AMPERAGE", index + 1);
    strcpy(namePtr, str);
    phase[index] = new DmInt16Object(dmItemName);
    if (phase[index]->error())
    {
      phase[index]->errorMsg(errorBuf);
      setError(errorBuf);
      return;
    }
  }
}


PduDm::~PduDm()
{
}


