/**
  ******************************************************************************
  * File Name          : gpio.c
  * Description        : This file provides code for the configuration
  *                      of all used GPIO pins.
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under Ultimate Liberty license
  * SLA0044, the "License"; You may not use this file except in compliance with
  * the License. You may obtain a copy of the License at:
  *                             www.st.com/SLA0044
  *
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "gpio.h"
/* USER CODE BEGIN 0 */
#include "rtc.h"    
uint8_t is_Relay1_First;
/* USER CODE END 0 */

/*----------------------------------------------------------------------------*/
/* Configure GPIO                                                             */
/*----------------------------------------------------------------------------*/
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/** Configure pins as 
        * Analog 
        * Input 
        * Output
        * EVENT_OUT
        * EXTI
*/
void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOE_CLK_ENABLE();
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOF_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOG_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOE, NoneUse_Pin1_GPIO_PE2_Pin|OUT_BLE_RESET_Pin|NoneUse_Pin3_GPIO_PE4_Pin|NoneUse_Pin66_GPIO_PE13_Pin 
                          |OUT_SPI1_CS_Pin|OUT_StateE_Pin|OUT_LED_Breathe_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOC, OUT_PHY_Reset_Pin|NoneUse_Pin26_GPIO_PC0_Pin|NoneUse_Pin27_GPIO_PC1_Pin|NoneUse_Pin28_GPIO_PC2_Pin 
                          |NoneUse_Pin29_GPIO_PC3_Pin|NoneUse_Pin44_GPIO_PC4_Pin|NoneUse_Pin45_GPIO_PC5_Pin|OUT_RelayDrv_L1_Pin 
                          |OUT_1998_Pin|OUT_Meter_485_RE_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOF, NoneUse_Pin19_GPIO_PF7_Pin|NoneUse_Pin20_GPIO_PF8_Pin|NoneUse_Pin22_GPIO_PF10_Pin|OUT_Locker_Lock_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, NoneUse_Pin34_GPIO_PA0_Pin|NoneUse_Pin35_GPIO_PA1_Pin|NoneUse_Pin36_GPIO_PA2_Pin|NoneUse_Pin37_GPIO_PA3_Pin 
                          |NoneUse_Pin43_GPIO_PA7_Pin|OUT_RelayHold_L1_Pin|OUT_RelayDrv_L2_Pin|OUT_RelayHold_L2_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, NoneUse_Pin46_GPIO_PB0_Pin|NoneUse_Pin47_GPIO_PB1_Pin|NoneUse_Pin48_GPIO_PB2_Pin|NoneUse_Pin69_GPIO_PB10_Pin 
                          |NoneUse_Pin70_GPIO_PB11_Pin|NoneUse_Pin74_GPIO_PB13_Pin|OUT_Leak_Test_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOD, OUT_Speaker_Pin|NoneUse_Pin82_GPIO_PD13_Pin|NoneUse_Pin85_GPIO_PD14_Pin|NoneUse_Pin86_GPIO_PD15_Pin 
                          |NoneUse_Pin114_GPIO_PD0_Pin|NoneUse_Pin115_GPIO_PD1_Pin|OUT_USB_DriveBus_Pin|OUT_Meter_485_DE_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOG, OUT_BLE_DSR_Pin|NoneUse_Pin89_GPIO_PG4_Pin|NoneUse_Pin90_GPIO_PG5_Pin|NoneUse_Pin92_GPIO_PG7_Pin 
                          |OUT_RFID_Reset_Pin|NoneUse_Pin126_GPIO_PG11_Pin|OUT_IPP_TRI_Pin|NoneUse_Pin128_GPIO_PG13_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pins : PEPin PEPin PEPin */
  GPIO_InitStruct.Pin = NoneUse_Pin1_GPIO_PE2_Pin|NoneUse_Pin3_GPIO_PE4_Pin|NoneUse_Pin66_GPIO_PE13_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

  /*Configure GPIO pins : PEPin PEPin PEPin PEPin */
  GPIO_InitStruct.Pin = OUT_BLE_RESET_Pin|OUT_SPI1_CS_Pin|OUT_StateE_Pin|OUT_LED_Breathe_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

  /*Configure GPIO pins : PCPin PCPin PCPin PCPin 
                           PCPin PCPin PCPin */
  GPIO_InitStruct.Pin = OUT_PHY_Reset_Pin|NoneUse_Pin26_GPIO_PC0_Pin|NoneUse_Pin27_GPIO_PC1_Pin|NoneUse_Pin28_GPIO_PC2_Pin 
                          |NoneUse_Pin29_GPIO_PC3_Pin|NoneUse_Pin44_GPIO_PC4_Pin|NoneUse_Pin45_GPIO_PC5_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /*Configure GPIO pins : PFPin PFPin PFPin PFPin 
                           PFPin */
  GPIO_InitStruct.Pin = IN_MEM_Erase_Pin|IN_LOCK_Status_Pin|IN_CCS_HW_ID1_Pin|IN_CCS_HW_ID2_Pin 
                          |IN_CCS_I_O1_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  /*Configure GPIO pins : PFPin PFPin PFPin */
  GPIO_InitStruct.Pin = NoneUse_Pin19_GPIO_PF7_Pin|NoneUse_Pin20_GPIO_PF8_Pin|NoneUse_Pin22_GPIO_PF10_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  /*Configure GPIO pins : PAPin PAPin PAPin PAPin 
                           PAPin */
  GPIO_InitStruct.Pin = NoneUse_Pin34_GPIO_PA0_Pin|NoneUse_Pin35_GPIO_PA1_Pin|NoneUse_Pin36_GPIO_PA2_Pin|NoneUse_Pin37_GPIO_PA3_Pin 
                          |NoneUse_Pin43_GPIO_PA7_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /*Configure GPIO pins : PBPin PBPin PBPin */
  GPIO_InitStruct.Pin = NoneUse_Pin46_GPIO_PB0_Pin|NoneUse_Pin47_GPIO_PB1_Pin|OUT_Leak_Test_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /*Configure GPIO pins : PBPin PBPin */
  GPIO_InitStruct.Pin = NoneUse_Pin48_GPIO_PB2_Pin|NoneUse_Pin70_GPIO_PB11_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = OUT_Locker_Lock_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(OUT_Locker_Lock_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pins : PGPin PGPin PGPin PGPin 
                           PGPin PGPin */
  GPIO_InitStruct.Pin = IN_CCS_I_O2_Pin|IN_GridType_Select_Pin|IN_BLE_DTR_Pin|IN_RFID_ICC_Pin 
                          |IN_USB_OC_Pin|IN_Shutter_Status_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

  /*Configure GPIO pins : PEPin PEPin PEPin PEPin 
                           PEPin PEPin */
  GPIO_InitStruct.Pin = IN_Grid_Groundding_Pin|IN_AC_Current_Set4_Pin|IN_AC_Current_Set3_Pin|IN_AC_Current_Set2_Pin 
                          |IN_AC_Current_Set1_Pin|IN_CCS_Proximity_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

  /*Configure GPIO pins : PBPin PBPin */
  GPIO_InitStruct.Pin = NoneUse_Pin69_GPIO_PB10_Pin|NoneUse_Pin74_GPIO_PB13_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = IN_GFCI_Reset_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(IN_GFCI_Reset_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pins : PDPin PDPin PDPin */
  GPIO_InitStruct.Pin = OUT_Speaker_Pin|OUT_USB_DriveBus_Pin|OUT_Meter_485_DE_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = IN_Emergency_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(IN_Emergency_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pins : PDPin PDPin PDPin PDPin 
                           PDPin */
  GPIO_InitStruct.Pin = NoneUse_Pin82_GPIO_PD13_Pin|NoneUse_Pin85_GPIO_PD14_Pin|NoneUse_Pin86_GPIO_PD15_Pin|NoneUse_Pin114_GPIO_PD0_Pin 
                          |NoneUse_Pin115_GPIO_PD1_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  /*Configure GPIO pins : PGPin PGPin PGPin */
  GPIO_InitStruct.Pin = OUT_BLE_DSR_Pin|OUT_RFID_Reset_Pin|OUT_IPP_TRI_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

  /*Configure GPIO pins : PGPin PGPin PGPin PGPin 
                           PGPin */
  GPIO_InitStruct.Pin = NoneUse_Pin89_GPIO_PG4_Pin|NoneUse_Pin90_GPIO_PG5_Pin|NoneUse_Pin92_GPIO_PG7_Pin|NoneUse_Pin126_GPIO_PG11_Pin 
                          |NoneUse_Pin128_GPIO_PG13_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

  /*Configure GPIO pins : PCPin PCPin PCPin */
  GPIO_InitStruct.Pin = IN_Leak_Error_Pin|IN_Leak_AC_Pin|IN_Leak_DC_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /*Configure GPIO pins : PCPin PCPin PCPin */
  GPIO_InitStruct.Pin = OUT_RelayDrv_L1_Pin|OUT_1998_Pin|OUT_Meter_485_RE_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /*Configure GPIO pins : PAPin PAPin PAPin */
  GPIO_InitStruct.Pin = OUT_RelayHold_L1_Pin|OUT_RelayDrv_L2_Pin|OUT_RelayHold_L2_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = IN_1998_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(IN_1998_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = IN_ACT_REQ_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(IN_ACT_REQ_GPIO_Port, &GPIO_InitStruct);

}

/* USER CODE BEGIN 2 */
void Relay_Action_Set(uint8_t action)
{ 
    switch(action)
    {
        case GPIO_RELAY1_ACTION_ON:
           HAL_GPIO_WritePin(OUT_RelayDrv_L1_GPIO_Port, OUT_RelayDrv_L1_Pin, GPIO_PIN_SET);
           HAL_GPIO_WritePin(OUT_RelayHold_L1_GPIO_Port, OUT_RelayHold_L1_Pin, GPIO_PIN_RESET);
           DEBUG_INFO("Relay-1 ON.\r\n");
           timerEnable(TIMER_IDX_RELAY_1, 100); 
           //HAL_Delay(1);
          break;
        case GPIO_RELAY1_ACTION_HOLD:
           HAL_GPIO_WritePin(OUT_RelayHold_L1_GPIO_Port, OUT_RelayHold_L1_Pin, GPIO_PIN_SET); 
           HAL_GPIO_WritePin(OUT_RelayDrv_L1_GPIO_Port, OUT_RelayDrv_L1_Pin, GPIO_PIN_RESET);
           DEBUG_INFO("Relay-1 Hold.\r\n");
          break;
        case GPIO_RELAY2_ACTION_ON:
           HAL_GPIO_WritePin(OUT_RelayDrv_L2_GPIO_Port, OUT_RelayDrv_L2_Pin, GPIO_PIN_SET);
           HAL_GPIO_WritePin(OUT_RelayHold_L2_GPIO_Port, OUT_RelayHold_L2_Pin, GPIO_PIN_RESET);
           DEBUG_INFO("Relay-2 ON.\r\n");
           timerEnable(TIMER_IDX_RELAY_2, 100);
           //HAL_Delay(1);
          break;
        case GPIO_RELAY2_ACTION_HOLD:
           HAL_GPIO_WritePin(OUT_RelayHold_L2_GPIO_Port, OUT_RelayHold_L2_Pin, GPIO_PIN_SET);
           HAL_GPIO_WritePin(OUT_RelayDrv_L2_GPIO_Port, OUT_RelayDrv_L2_Pin, GPIO_PIN_RESET);       
           DEBUG_INFO("Relay-2 hold.\r\n");
          break;          
        case GPIO_RELAY1_ACTION_OFF:
           HAL_GPIO_WritePin(OUT_RelayDrv_L1_GPIO_Port, OUT_RelayDrv_L1_Pin, GPIO_PIN_RESET);
           HAL_GPIO_WritePin(OUT_RelayHold_L1_GPIO_Port, OUT_RelayHold_L1_Pin, GPIO_PIN_RESET);          
           DEBUG_INFO("Relay-1 OFF.\r\n");
           break;
        case GPIO_RELAY2_ACTION_OFF:
           HAL_GPIO_WritePin(OUT_RelayDrv_L2_GPIO_Port, OUT_RelayDrv_L2_Pin, GPIO_PIN_RESET);
           HAL_GPIO_WritePin(OUT_RelayHold_L2_GPIO_Port, OUT_RelayHold_L2_Pin, GPIO_PIN_RESET);          
           DEBUG_INFO("Relay-2 OFF.\r\n");
           break;  
        default:
           HAL_GPIO_WritePin(OUT_RelayDrv_L1_GPIO_Port, OUT_RelayDrv_L1_Pin, GPIO_PIN_RESET);
           HAL_GPIO_WritePin(OUT_RelayHold_L1_GPIO_Port, OUT_RelayHold_L1_Pin, GPIO_PIN_RESET);
           HAL_GPIO_WritePin(OUT_RelayDrv_L2_GPIO_Port, OUT_RelayDrv_L2_Pin, GPIO_PIN_RESET);
           HAL_GPIO_WritePin(OUT_RelayHold_L2_GPIO_Port, OUT_RelayHold_L2_Pin, GPIO_PIN_RESET);
          break;
    }  
    /*switch(action)
    {
        case GPIO_RELAY_ACTION_ON:
           HAL_GPIO_WritePin(OUT_RelayDrv_L1_GPIO_Port, OUT_RelayDrv_L1_Pin, GPIO_PIN_SET);
           HAL_GPIO_WritePin(OUT_RelayHold_L1_GPIO_Port, OUT_RelayHold_L1_Pin, GPIO_PIN_RESET);
           HAL_GPIO_WritePin(OUT_RelayDrv_L2_GPIO_Port, OUT_RelayDrv_L2_Pin, GPIO_PIN_SET);
           HAL_GPIO_WritePin(OUT_RelayHold_L2_GPIO_Port, OUT_RelayHold_L2_Pin, GPIO_PIN_RESET);
           HAL_Delay(100);
          break;
        case GPIO_RELAY_ACTION_HOLD:
           HAL_GPIO_WritePin(OUT_RelayHold_L1_GPIO_Port, OUT_RelayHold_L1_Pin, GPIO_PIN_SET); 
           HAL_GPIO_WritePin(OUT_RelayDrv_L1_GPIO_Port, OUT_RelayDrv_L1_Pin, GPIO_PIN_RESET);
           HAL_GPIO_WritePin(OUT_RelayHold_L2_GPIO_Port, OUT_RelayHold_L2_Pin, GPIO_PIN_SET);
           HAL_GPIO_WritePin(OUT_RelayDrv_L2_GPIO_Port, OUT_RelayDrv_L2_Pin, GPIO_PIN_RESET);
                      
          break;
        case GPIO_RELAY_ACTION_OFF:
        default:
           HAL_GPIO_WritePin(OUT_RelayDrv_L1_GPIO_Port, OUT_RelayDrv_L1_Pin, GPIO_PIN_RESET);
           HAL_GPIO_WritePin(OUT_RelayHold_L1_GPIO_Port, OUT_RelayHold_L1_Pin, GPIO_PIN_RESET);
           HAL_GPIO_WritePin(OUT_RelayDrv_L2_GPIO_Port, OUT_RelayDrv_L2_Pin, GPIO_PIN_RESET);
           HAL_GPIO_WritePin(OUT_RelayHold_L2_GPIO_Port, OUT_RelayHold_L2_Pin, GPIO_PIN_RESET);
           
          break;
    }*/
}

/*uint8_t Relay_Action_Get(void)
{
    uint8_t result = GPIO_RELAY_ACTION_UNKNOW;
    
    if((HAL_GPIO_ReadPin(OUT_RelayDrv_L1_GPIO_Port, OUT_RelayDrv_L1_Pin) == GPIO_PIN_RESET) && 
       (HAL_GPIO_ReadPin(OUT_RelayHold_L1_GPIO_Port, OUT_RelayHold_L1_Pin) == GPIO_PIN_RESET) &&
       (HAL_GPIO_ReadPin(OUT_RelayDrv_L2_GPIO_Port, OUT_RelayDrv_L2_Pin) == GPIO_PIN_RESET) && 
       (HAL_GPIO_ReadPin(OUT_RelayHold_L2_GPIO_Port, OUT_RelayHold_L2_Pin) == GPIO_PIN_RESET) )
    {
        result = GPIO_RELAY_ACTION_OFF;        
    }
    else if((HAL_GPIO_ReadPin(OUT_RelayDrv_L1_GPIO_Port, OUT_RelayDrv_L1_Pin) == GPIO_PIN_SET) && 
           (HAL_GPIO_ReadPin(OUT_RelayHold_L1_GPIO_Port, OUT_RelayHold_L1_Pin) == GPIO_PIN_RESET) &&
           (HAL_GPIO_ReadPin(OUT_RelayDrv_L2_GPIO_Port, OUT_RelayDrv_L2_Pin) == GPIO_PIN_SET) && 
           (HAL_GPIO_ReadPin(OUT_RelayHold_L2_GPIO_Port, OUT_RelayHold_L2_Pin) == GPIO_PIN_RESET) )
    {
        result = GPIO_RELAY_ACTION_ON;        
    }
    else if((HAL_GPIO_ReadPin(OUT_RelayDrv_L1_GPIO_Port, OUT_RelayDrv_L1_Pin) == GPIO_PIN_RESET) && 
           (HAL_GPIO_ReadPin(OUT_RelayHold_L1_GPIO_Port, OUT_RelayHold_L1_Pin) == GPIO_PIN_SET) &&
           (HAL_GPIO_ReadPin(OUT_RelayDrv_L2_GPIO_Port, OUT_RelayDrv_L2_Pin) == GPIO_PIN_RESET) && 
           (HAL_GPIO_ReadPin(OUT_RelayHold_L2_GPIO_Port, OUT_RelayHold_L2_Pin) == GPIO_PIN_SET) )
    {
        result = GPIO_RELAY_ACTION_HOLD;
    }
    
    return result;
}*/

uint8_t Relay1_Action_Get(void)
{
    uint8_t result = GPIO_RELAY1_ACTION_UNKNOW;
    
    if((HAL_GPIO_ReadPin(OUT_RelayDrv_L1_GPIO_Port, OUT_RelayDrv_L1_Pin) == GPIO_PIN_RESET) && 
       (HAL_GPIO_ReadPin(OUT_RelayHold_L1_GPIO_Port, OUT_RelayHold_L1_Pin) == GPIO_PIN_RESET) )
    {
        result = GPIO_RELAY1_ACTION_OFF;        
    }
    else if((HAL_GPIO_ReadPin(OUT_RelayDrv_L1_GPIO_Port, OUT_RelayDrv_L1_Pin) == GPIO_PIN_SET) && 
           (HAL_GPIO_ReadPin(OUT_RelayHold_L1_GPIO_Port, OUT_RelayHold_L1_Pin) == GPIO_PIN_RESET)  )
    {
        result = GPIO_RELAY1_ACTION_ON;        
    }
    else if((HAL_GPIO_ReadPin(OUT_RelayDrv_L1_GPIO_Port, OUT_RelayDrv_L1_Pin) == GPIO_PIN_RESET) && 
           (HAL_GPIO_ReadPin(OUT_RelayHold_L1_GPIO_Port, OUT_RelayHold_L1_Pin) == GPIO_PIN_SET)  )
    {
        result = GPIO_RELAY1_ACTION_HOLD;
    }
    
    return result;
}

uint8_t Relay2_Action_Get(void)
{
    uint8_t result = GPIO_RELAY2_ACTION_UNKNOW;
    
    if((HAL_GPIO_ReadPin(OUT_RelayDrv_L2_GPIO_Port, OUT_RelayDrv_L2_Pin) == GPIO_PIN_RESET) && 
       (HAL_GPIO_ReadPin(OUT_RelayHold_L2_GPIO_Port, OUT_RelayHold_L2_Pin) == GPIO_PIN_RESET) )
    {
        result = GPIO_RELAY2_ACTION_OFF;        
    }
    else if((HAL_GPIO_ReadPin(OUT_RelayDrv_L2_GPIO_Port, OUT_RelayDrv_L2_Pin) == GPIO_PIN_SET) && 
           (HAL_GPIO_ReadPin(OUT_RelayHold_L2_GPIO_Port, OUT_RelayHold_L2_Pin) == GPIO_PIN_RESET)  )
    {
        result = GPIO_RELAY2_ACTION_ON;        
    }
    else if((HAL_GPIO_ReadPin(OUT_RelayDrv_L2_GPIO_Port, OUT_RelayDrv_L2_Pin) == GPIO_PIN_RESET) && 
           (HAL_GPIO_ReadPin(OUT_RelayHold_L2_GPIO_Port, OUT_RelayHold_L2_Pin) == GPIO_PIN_SET)  )
    {
        result = GPIO_RELAY2_ACTION_HOLD;
    }
    
    return result;
}

//--------------------------------------------------------------------------------
void getGridTypeSwitchSetting(void)  // check Grounding System is LL or LN
{
   Charger.GroundingSystem = (HAL_GPIO_ReadPin(IN_GridType_Select_GPIO_Port, IN_GridType_Select_Pin)?0:1) ; 
   
   if (Charger.GroundingSystem == GROUNGING_SYSTEM_LL)
   {
      DEBUG_INFO("Grounding System is set L-L (0)\r\n");   //Switch-OFF(0)
   }
   else
   {
      DEBUG_INFO("Grounding System is set L-N (1)\r\n");   //Switch-ON(1)
   }
   Charger.GroundingDetect = (HAL_GPIO_ReadPin(IN_Grid_Groundding_GPIO_Port, IN_Grid_Groundding_Pin) ? 1 : 0);
   
   if (Charger.GroundingDetect == ON)
   {
       DEBUG_INFO("Grounding Detect ON (0: TT-TN)\r\n");   //Switch-OFF(0)
   }
   else
   {
       DEBUG_INFO("Grounding Detect OFF (1: IT)\r\n");  //Switch-ON(1)
   }
}
/* USER CODE END 2 */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
