#include <signal.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "Syslog.h"
#include "System.h"
#include "BluefinBatteryIF.h"

void signalHandler(int signalNo);

pid_t serverPID;

void signalHandler(int signalNo)
{
  kill(serverPID, SIGTERM);
  kill(0, SIGQUIT);
  exit(0);
}

int main(int argc, char **argv)
{
  //
  signal(SIGQUIT, signalHandler);
  printf("Starting bluefinBattServer ...\n");

  if ( -1 ==
      (serverPID=System::spawn("bluefinBattServer", "-dev /dev/ser10"))) {
    fprintf(stderr, "System::spawn(bluefinBattServer) failed\n");
  }

  // Now get a handle to the server IF
  //
  BluefinBatteryIF *bfServer;
  try {
    bfServer = new BluefinBatteryIF(BluefinBatteryIFServerName, 1000);
  }
  catch (Exception e) 
  {
    Syslog::write(
        "bluefinBattTest -- Caught exception creating of BluefinBatteryIF:%s\n",
		  e.msg);
    exit( -1 );
  }
     
  int nb = bfServer->getBatteryQuantity();
  Syslog::write("bluefinBattTest: Server is managing %d batteries", nb);
  
  BluefinBatteryIF::BfBattData data;

  while (1) {
      for (int i = 0; i < nb; i++) {
    	bfServer->getBatteryData(i, &data);
    	Syslog::write("Data for battery %d: SN: %d\tV: %f\tI: %f\tTemp: %f", i, 
                  data.battSN, data.voltage, data.current, data.temp);
    	sleep(1);
      }
  }
  
  kill(serverPID, SIGTERM);
  return 0;
}

