// Keine LVP und OVP Überwachung aber Fault wird geprüft!
// Falls nicht benötigt, nicht anschließen ?! Ist Low active mit PullUp


#include "stdio.h"
#include "mode_mainswitch.h"
#include "button.h"
#include "relais.h"
#include "main.h"
#include "leds.h"



void MODE_MAINSWITCH_Exec(void)
{

  //Prüfe FAULT Eingang
  int faultInput;
  static int faultMode = 0;





  if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)       
  {
    faultInput = 1;

    if (faultMode == 0)
    {
      faultMode = 1;
      LEDS_RT_Blink_Start(1000, 1000);   
      BUTTON_SetModeOff(); 
      printf("FAULT DETECTED!\n");
    }

    if (BUTTON_GetMode() != BUTTON_OFF)
    {
       BUTTON_SetModeOff();
    }

    if (RELAIS_GetState() == 1)
    {
      printf("RESET RELAIS: FAULT DETECTED!\n");
      RELAIS_ResetPuls();

      //Wir wollen nicht, das das Relais automatisch wieder startet, wenn Fault nicht mehr aktiv. Daher schalten wir 
      //Button Mode auf Off
      
    }      
  }
  else
  {
    faultInput = 0;
  } 


  //Prüfen ob ausgeschaltet werden muss
  if (RELAIS_GetState() == 1)
  {
    if (BUTTON_GetMode() == BUTTON_OFF)       
    {
      RELAIS_ResetPuls();
    } 
  }


  //Prüfen ob eingeschaltet werden kann
  if ((RELAIS_GetState() == 0) && (faultInput == 0))
  {
    if (BUTTON_GetMode() == BUTTON_MANUAL_ON) 
    {
      LEDS_RT_Off(); //Falls im LED im Fehlermode, so können wir diese jetzt wieder ausschalten
      faultMode = 0;
      RELAIS_SetPuls();
    } 
    else if (BUTTON_GetMode() == BUTTON_AUTO)
    {
      LEDS_RT_Off(); //Falls im LED im Fehlermode, so können wir diese jetzt wieder ausschalten
      faultMode=0;
      RELAIS_SetPuls();
    } 
  }
}
