/*@!Encoding:1252*/
includes
{
  #include "CANopenHelper.cin"
}

variables
{
  // ------------------------------------------------
  // File information
  // Copyright         : 2017, Vector Informatik GmbH
  // ------------------------------------------------

  // Globals for "Sensor_2" device
  BYTE gNodeId          = 27;
  char gNodeLabel[32]   = "Sensor_2_ID27";

  sysvarInt * gRunLEDVar;
  sysvarInt * gErrLEDVar;
  msTimer enableTimer;
}

on preStart
{
  gRunLEDVar = sysvar::GUIControls::Node27_State;
  gErrLEDVar = sysvar::GUIControls::Node27ErrLed;
  InitGUI();
}

void InitGUI()
{
  sysSetVariableInt(sysvar::GUIControls::Node27_ID, gNodeId);
  @sysvar::SensorValues::Sensor27_1 =  @sysvar::CANopen::CAN::Sensor_2_ID27::_0x6402_Pressure_32_Bit::_0x6402_1_Pressure_1;
  @sysvar::SensorValues::Sensor27_2 = ~@sysvar::CANopen::CAN::Sensor_2_ID27::_0x6403_Pressure_32_Bit_inverted::_0x6403_1_Pressure_1_inverted; 
}

on sysvar CANopen::CAN::Sensor_2_ID27::Control::CommunicationState
{
  CANopenUpdateState(@this);
}

void EnableSensor(byte enable)
{
  if(enable == 1)
  {
    @sysvar::CANopen::CAN::Sensor_2_ID27::Control::Enabled = 1;
    setTimer(enableTimer, 1);
  }
  else
  {
    @sysvar::CANopen::CAN::Sensor_2_ID27::Control::Enabled = 0;
    ShutDownLights();
  }
}

void UpdateData()
{
  @sysvar::CANopen::CAN::Sensor_2_ID27::_0x6402_Pressure_32_Bit::_0x6402_1_Pressure_1 = @sysvar::SensorValues::Sensor27_1;
  @sysvar::CANopen::CAN::Sensor_2_ID27::_0x6403_Pressure_32_Bit_inverted::_0x6403_1_Pressure_1_inverted = ~@sysvar::SensorValues::Sensor27_2;
}

on sysvar SensorValues::Sensor27_1
{
  if (@sysvar::GUIControls::SyncSlider27 == 1)
  {
    @sysvar::SensorValues::Sensor27_2 = @this;
  }
  UpdateData();
}

on sysvar SensorValues::Sensor27_2
{
if (@sysvar::GUIControls::SyncSlider27 == 1)
  {
    @sysvar::SensorValues::Sensor27_1 = @this;
  }
  UpdateData();
}

on sysvar GUIControls::SyncSlider27
{
  if (@sysvar::GUIControls::SyncSlider27 == 1)
  {
    @sysvar::SensorValues::Sensor27_2 = @sysvar::SensorValues::Sensor27_1;
  }
}

on timer enableTimer
{
  CANopenInternalNMTCommand(gNodeId, 1);
  InitGUI();
}
  
on sysvar GUIControls::Sensor2Connected
{
  // write the actual state
  if (@this == 1)
  {
    sysSetVariableString(sysvar::GUIControls::Sensor2_CnxnState, ""); //, ());
  }
  else
  {
    sysSetVariableString(sysvar::GUIControls::Sensor2_CnxnState, "!! unplugged !!"); //, ());
  }
  
  if(@sysvar::GUIControls::MainSwitch == 0)
  {
    return;
  }
  
  EnableSensor(@this);
}

ShutDownLights()
{
  @sysvar::GUIControls::Node27_State = 0;
  @sysvar::GUIControls::Node27_ID = 0;
}

on sysvar GUIControls::MainSwitch
{
  EnableSensor(@sysvar::GUIControls::Sensor2Connected == 1 && @sysvar::GUIControls::MainSwitch);
}
