/*@!Encoding:1252*/
variables
{
  // ------------------------------------------------
  // File information
  // Copyright         : 2017, Vector Informatik GmbH
  // ------------------------------------------------

  //Globals for "TTGateway" device
  BYTE gNodeId          = 2;
  char gNodeLabel[32]   = "TTGateway";
  int  gStartNode       = 1;

  // Definition of debugging constants
  const int kDbgInfo    = 10;
  const int kDbgWarning = 5;
  const int kDbgError   = 1;
  const int kDbgQuiet   = 0;

  // General global variables
  int gDbgLevel         = kDbgInfo; // Set debug level for output to write window
  
  pg can2.PowerTakoffInfo PTO = {sa=77};
  pg can2.EngineConfig    EC  = {sa=77};
  pg can2.TSC1            TSC = {sa=77};
  mstimer ptoTimer;
  const word ptoTime = 500;
}

on start
{
  settimer(ptoTimer, ptoTime);
}

on preStart
{
  setWriteDbgLevel( gDbgLevel );
}

on sysvar CANopen::CANopen::TTGateway_ID2::Control::CommunicationState
{
  switch(@this)
  {
    case 0:
      writeDbgLevel( kDbgInfo, "<%s> Changed state to 'Not active'", gNodeLabel );
      break;
    case 5:
      writeDbgLevel( kDbgInfo, "<%s> Changed state to 'Operational'", gNodeLabel );
      break;
    case 127: 
      writeDbgLevel( kDbgInfo, "<%s> Changed state to 'Preoperational'", gNodeLabel );
      break;
    default:  
      writeDbgLevel( kDbgInfo, "<%s> Changed state", gNodeLabel );
      break;
  }
}

on pg EEC1
{
  @sysvar::CANopen::CANopen::TTGateway_ID2::_0x6113_EngineSpeed::_0x6113_1_EngineSpeed = this.EngineSpeed.phys;
}

on pg WheelSpeedInfo
{
  @sysvar::CANopen::CANopen::TTGateway_ID2::_0x6006_wheel_based_vehicle_speed::_0x6006_1_wheel_based_vehicle_speed_value = this.FrontAxleSpeed.phys;
}

on pg ETC2
{
  @sysvar::CANopen::CANopen::TTGateway_ID2::_0x610c_CurrentGear::_0x610c_1_CurrentGearValue = this.CurrentGear;
}

on pg Brakes
{
  @sysvar::CANopen::CANopen::TTGateway_ID2::_0x6000_ParkBrakeDemandValue::_0x6000_1_ParkBrakeDemandValue = this.ParkingBrakeActuator.phys;
}

on pg PowerTakoffInfo
{
  if(this.sa!=77)
  {
    @sysvar::CANopen::CANopen::TTGateway_ID2::_0x6131_PTOFeedBack::_0x6131_1_first_engine_mounted_PTO_feedback_Bit_1 = (this.PowerTakeoffSpeed.phys > 0) ? 1 : 0;
  }
}

on sysvar CANopen::CANopen::TTGateway_ID2::_0x6136_ClutchPTOSwitch::_0x6136_1_first_clutch_dependent_PTO_switch_Bit_1
{
  PTO.PowerTakeoffSetSpeed.phys = @this==0? 0 : 100;
}

on timer ptoTimer
{
  setTimer(ptoTimer, ptoTime);
  
  output(PTO);
}

on sysvar CANopen::CANopen::TTGateway_ID2::_0x6140_ReqEngSpeedUpperLimit::_0x6140_1_requested_engine_speed_upper_limit_value
{
  EC.RqstedSpeedCtrlRangeUpperLimit.phys = @this;
  output(EC);
}

on sysvar CANopen::CANopen::TTGateway_ID2::_0x6142_ReqEngSpeedLowerLimit::_0x6142_1_requested_engine_speed_lower_limit_value
{
  EC.RqstedSpeedCtrlRangeLowerLimit.phys = @this;
  output(EC);
}

on sysvar CANopen::CANopen::TTGateway_ID2::_0x614a_ReqEngSpeed::_0x614a_1_requested_engine_speed_value
{
  TSC.RqstedSpeed_SpeedLimit.phys = @this;
  TSC.OverrideCtrlModes = TSC.OverrideCtrlModes::SpeedControl;
  output(TSC);
}
