#include <Vk/VkErrorDialog.h>
#include "VehicleRelease.h"
#include "DmErrno.h"
#include "tiburon.h"
#include "ers.h"

VehicleRelease::VehicleRelease(const char *name, Widget parent)
  : ReleaseControl(name, parent, "TIBURON.DEPLOYMENT")
{
  XtAddCallback(_releaseButton, XmNarmCallback,
		&VehicleRelease::releaseCallback,
		(XtPointer )this);

  char itemName[MaxDmNameLen];
  strcpy(itemName, TIBURON_DM_PREFIX);
  char *namePtr = itemName + strlen(itemName);
  
  char errorBuf[errorMsgSize];
  
  strcpy(namePtr, DEPLOYMENT_LATCH_RELEASE_DM);
  _dmReleaseCmd = new DmEmptyObject(itemName);
  if (_dmReleaseCmd->error())
  {
    _dmReleaseCmd->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }
  
  if (addDmObject(_dmReleaseCmd, DmProvideFlag) == -1)
    return;

  _armCode = DEPLOYMENT_LATCH_ARM_CODE;
  
  updateGui();
}



VehicleRelease::~VehicleRelease()
{
}



void VehicleRelease::releaseCallback(Widget w,
				     XtPointer clientData,
				     XtPointer callData)
{
  VehicleRelease *obj = (VehicleRelease *)clientData;
  
  DM_Time t;
  Errno errno;
  char errorBuf[errorMsgSize];

  t.tv_sec = time(NULL);
  t.tv_usec = 0;
  
  if ((errno = obj->_dmReleaseCmd->write(&t)) != SUCCESS)
  {
    sprintDmError(errno, "VehicleRelease::releaseCallback()", errorBuf);
    theErrorDialog->postAndWait(errorBuf);
  }
}
