/****************************************************************************/
/* Copyright (c) 2000 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : SimulatedFuelCell.cc                                             */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 02/07/2000                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
#include <process.h>
#include "SimulatedFuelCell.h"
#include "mvc_fcc_api.h"
#include "Syslog.h"
#include "SharedData.h"



SimulatedFuelCell::SimulatedFuelCell()
  : SimulatedFuelCellIF_SK()
{
  //add some status values
  _fcc_status.health = 0x00;
  _fcc_status.fc_control_state = FC_STATE_OFFLINE;
  _fcc_status.FC_remaining_kwh = 10;
  _fcc_status.RB_remaining_wh = 15;
  _fcc_status.BIT_status = 'A';
  _fcc_status.BIT_result = 'B';


  //add some data
  _fcc_data.elapsed_time = 1;
  _fcc_data.anolyte_pump_a_current = 2;
  _fcc_data.anolyte_pump_b_current = 3;
  _fcc_data.catholyte_pump_current = 4;
  _fcc_data.peroxide_pump_current = 5;
  _fcc_data.anolyte_temp = 6;
  _fcc_data.catholyte_temp = 7;
  _fcc_data.fwd_peroxide_temp = 8;
  _fcc_data.aft_peroxide_temp = 9;
  _fcc_data.stack_voltage = 10;
  _fcc_data.stack_current = 11;
  _fcc_data.battery_voltage = 12;
  _fcc_data.battery_current = 13;
  _fcc_data.peroxide_used = 14;

}


SimulatedFuelCell::~SimulatedFuelCell()
{

}

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

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


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


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


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


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


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


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


SimulatedFuelCellIF::FCC_Cmd_Reply SimulatedFuelCell::send_simFCC_command(SimulatedFuelCellIF::FCC_Command fcc_command)
{
  // nothing for now
  return SimulatedFuelCellIF::FCC_ERR_OK;
}

// the below are action commands send directly to the FCC via the FCC_api functions

SimulatedFuelCellIF::FCC_Cmd_Reply SimulatedFuelCell::get_simFCC_status(SimulatedFuelCellIF::FCC_status *fcc_status)
{
  // copy local structure to output value
  memcpy((void *)fcc_status, (void *)&_fcc_status, sizeof(SimulatedFuelCellIF::FCC_status));
  
  return SimulatedFuelCellIF::FCC_ERR_OK;
}

SimulatedFuelCellIF::FCC_Cmd_Reply SimulatedFuelCell::get_simFCC_data(SimulatedFuelCellIF::FCC_data *fcc_data)
{
  // copy local structure to output valuep
  memcpy((void *)fcc_data, (void *)&_fcc_data, sizeof(SimulatedFuelCellIF::FCC_data));
  
  return SimulatedFuelCellIF::FCC_ERR_OK;
}

SimulatedFuelCellIF::FCC_Cmd_Reply SimulatedFuelCell::set_simFCC_data(SimulatedFuelCellIF::FCC_data *fcc_data)
{
  // copy input value to local structure
  memcpy((void *)&_fcc_data, (void *)fcc_data, sizeof(SimulatedFuelCellIF::FCC_data));

  return SimulatedFuelCellIF::FCC_ERR_OK ;
}

SimulatedFuelCellIF::FCC_Cmd_Reply SimulatedFuelCell::set_simFCC_status(SimulatedFuelCellIF::FCC_status *fcc_status)
{
  memcpy((void *)&_fcc_status, (void *)fcc_status, sizeof(SimulatedFuelCellIF::FCC_status));
  return SimulatedFuelCellIF::FCC_ERR_OK ;
}

int SimulatedFuelCell::spawnAuxTasks()
{
  return 0;
}




