/****************************************************************************/
/* Copyright (c) 2007 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : AtsServer.cc                                                  */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 06/08/2007                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
#include "AtsServer.h"
#include <process.h>

AtsServer::AtsServer(short port) : AuvTimeSyncIF_SK(), _port(port) 
{
  _output = new AtsOutput(SharedData::ReadWrite);
}


AtsServer::~AtsServer()
{
  delete _output;
}

void AtsServer::getDrift(float* drift)
{
  _output->read();
  *drift = _output->data.drift;
}

void AtsServer::getDelta(float* delta)
{
  _output->read();
  *delta = _output->data.delta;
}

void AtsServer::name(DeviceIF::Name name)
{
  strcpy(name, "Ats");
}

Boolean AtsServer::ready()
{
  return True;
}

void AtsServer::serialNumber(DeviceIF::Name number)
{
  strcpy(number, "XXX");
}


DeviceIF::Status AtsServer::initialize()
{
  // Dummy implementation for now
  return DeviceIF::Ok;
}


DeviceIF::Status AtsServer::powerOn()
{
  // Dummy implementation for now
  return DeviceIF::Ok;
}


DeviceIF::Status AtsServer::powerOff()
{
  // Dummy implementation for now
  return DeviceIF::Ok;
}


DeviceIF::Status AtsServer::status()
{
  // Dummy implementation for now
  return DeviceIF::Ok;
}


DeviceIF::Status AtsServer::dataLoggingOn()
{
  // Dummy for now
  return DeviceIF::Ok;
}


DeviceIF::Status AtsServer::dataLoggingOff()
{
  // Dummy for now
  return DeviceIF::Ok;
}


DeviceIF::Status AtsServer::enable()
{
  return DeviceIF::Ok;
}


DeviceIF::Status AtsServer::disable()
{
  return DeviceIF::Ok;
}


int AtsServer::spawnAuxTasks()
{
  char *program = "atsDriver";
  char errorBuf[256];
  char buf[256];
 
  pid_t pid;
 
  switch ((pid = fork())) {
     
  case 0:
    // In child
    // Execute server program
    char portBuf[10];
    sprintf(portBuf, "%d", _port);
    printf("atsDriver(%d)\n", _port);
    execlp(program, program, portBuf, 0);

    sprintf(errorBuf, 
	    "AtsServer::driver failed to start");

    perror(errorBuf);
 
    break;

  case -1:
    perror("AtsServer::atsDriver - fork() failed");
    return -1;
  }

  return 0;
}
