/****************************************************************************/
/* Copyright (c) 2015 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : _modtronix.cc                                                 */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 02/03/2015                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
#include <stdio.h>
#include "Modtronix.h"
#include "Syslog.h"
#include "Exception.h"
#include "SerialDevice.h"
#include "System.h"
#include "SerialParameters.h"

#define DEFAULT_PERIOD 5000

int main( int argc, char **argv )
{

  Syslog::write("modtronix ...");

  // Set task priority
  //if (System::setTaskPriority(CriticalDriverPriority) == -1)
  //  return 1;

  // Get ip and port options from argv
  //
  unsigned long port = 54123;
  unsigned long period = DEFAULT_PERIOD; // Sample period in milliseconds
  char *host = "134.89.32.55";
  int c;
  while ( (c = getopt(argc, argv, "h:p:m:")) != EOF )
  {
     switch (c) {
        case 'h':
        host = strdup(optarg);
        Syslog::write("Modtronix - Host ip is now %s...", host);
        break;

        case 'p':
        port = atol(optarg);
        Syslog::write("Modtronix - Host port is now %ld...", port);
        break;

        case 'm':
        period = atol(optarg);
        if (period < 1000 || period > 60000) period = DEFAULT_PERIOD;
        Syslog::write("Modtronix - Period is %ld...", period);
        break;

        default:
        Syslog::write("Modtronix - Unknown option %d...", c);
        break;
     }
  }

  Syslog::write("modtronix host ip is %s...", host);
  Syslog::write("modtronix host port is %ld...", port);
  Syslog::write("modtronix host port is %ld...", period);
  Modtronix *mod = 0;

  try {
    mod  = new Modtronix("modtronix", host, port, period);
    mod->initialize();
    Syslog::write("modtronix running...");
    mod->run();
  }
  catch (Exception e) {
    Syslog::write("modtronix - caught exception: %s\n", e.msg);
  }
  catch (...) {
    Syslog::write("modtronix - caught exception!\n");
  }

  delete mod;
  return 0;
}
