#include <ctype.h>
#include "SerialDevice.h"
#include "TimeP.h"
#include "Trigger.h"
#include "TriggerLog.h"

#define READ_TIMEOUT 2500

#define TRIGGER_PERIOD 330

static unsigned how_many = 4;

Trigger::Trigger(SerialDevice *device) 
  : _device(device),
    PeriodicTask("trigger")
{

  if (init() != DeviceIF::Ok) {
    Syslog::write("trigger: init failed!\n");
    throw Exception("trigger -- init failed!\n");

  }

  addPeriodicCallback(TRIGGER_PERIOD, (CallbackMethod)Trigger::sample);

  _log = new TriggerLog(this, DataLog::BinaryFormat);

}


Trigger::~Trigger()
{
//  delete _output;
  delete _log;
}


DeviceIF::Status Trigger::init()
{
  _device->commsDebugMode(SerialDevice::DebugOff);

  
  _device->clearPort();
  return DeviceIF::Ok;
} 


void Trigger::sample(void)
{
  struct timespec timeSpec;

  Time::gettime(&timeSpec);
  _triggerTime = Time::seconds(&timeSpec);

  char effeff = 0xFF;
  _device->write(&effeff, 1);
//  _device->sendBreak(10);
  _log->write();

  if (--how_many == 0)
    throw Exception("trigger -- Done with prescribed trigger pulses");
} // void Sample(void)



