/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.h
  * @brief          : Header for main.c file.
  *                   This file contains the common defines of the application.
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */
/* USER CODE END Header */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MAIN_H
#define __MAIN_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_hal.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Exported types ------------------------------------------------------------*/
/* USER CODE BEGIN ET */

/* USER CODE END ET */

/* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */

/* USER CODE END EC */

/* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */

/* USER CODE END EM */

/* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void);

/* USER CODE BEGIN EFP */

/* USER CODE END EFP */

/* Private defines -----------------------------------------------------------*/
#define PWM_Gun1_Pin GPIO_PIN_9
#define PWM_Gun1_GPIO_Port GPIOE
#define PWM_Gun2_Pin GPIO_PIN_11
#define PWM_Gun2_GPIO_Port GPIOE

#define PWM_DUTY_CYCLE_0	0    //for not selected
#define PWM_DUTY_CYCLE_1	16   // 10/0.6 => 16.666
#define PWM_DUTY_CYCLE_2	26	 // 16/0.6 => 26.666
#define PWM_DUTY_CYCLE_3	33	 // 20/0.6 => 33.333
#define PWM_DUTY_CYCLE_4	41   // 25/0.6 => 41.666
#define PWM_DUTY_CYCLE_5	53   // 32/0.6 => 53.333


#define CRC_value_OCPP 0xAA60
#define CRC_value_OCPP_setting 0xAA60
//#define STATE_A_LEVEL   3822 //3700//3822 //3650  // 3594  // 3530
//#define STATE_B_LEVEL    3289//3160//3289 //3230  // 3108  //
//#define STATE_C_LEVEL    2800//2700//2800 //3220  // 2986  // 2667
//#define STATE_D_LEVEL  2260//2260//2260  // 2864  // 2248

//#if meter == selec 	//11kw duty cycle changed
//#define STATE_A_LEVEL   3728 //3700//3822 //3650  // 3594  // 3530
//#define STATE_B_LEVEL    3210//3160//3289 //3230  // 3108  //
//#define STATE_C_LEVEL    2736//2700//2800 //3220  // 2986  // 2667
//#define STATE_D_LEVEL  2260//2260//2260  // 2864  // 2248

//#else
//#define STATE_A_LEVEL   3822 //3700//3822 //3650  // 3594  // 3530
//#define STATE_B_LEVEL    3289//3160//3289 //3230  // 3108  //
//#define STATE_C_LEVEL    2800//2700//2800 //3220  // 2986  // 2667
//#define STATE_D_LEVEL  2260//2260//2260  // 2864  // 2248
//
//#endif

//V501change

//V501change
#if cpchange == no
#define STATE_A_LEVEL   3728 //3700//3822 //3650  // 3594  // 3530
#define STATE_B_LEVEL    3210//3160//3289 //3230  // 3108  //
#define STATE_C_LEVEL    2736//2700//2800 //3220  // 2986  // 2667
#define STATE_D_LEVEL  2260//2260//2260  // 2864  // 2248
#endif
//22KW ACTYPE 2
//3822
//3289
//2800
//2260

#define STATE_A   0
#define STATE_B   1
#define STATE_C   2
#define STATE_D   3

#define STATE_A_2   0
#define STATE_B_2   1
#define STATE_C_2   2
#define STATE_D_2   3

extern uint8_t powerfailure_flag;

#define FLASH_CS_GPIO_Port GPIOA
#define FLASH_CS_Pin GPIO_PIN_4

#define GFD_GPIO_Port GPIOC
#define GFD_Pin GPIO_PIN_0

#define ZEROCROSS_G1_Pin GPIO_PIN_2
#define ZEROCROSS_G1_GPIO_Port GPIOE

#define GUNDETECT_G1_Pin GPIO_PIN_3
#define GUNDETECT_G1_GPIO_Port GPIOE

#define RELAY_G1_Pin GPIO_PIN_13
#define RELAY_G1_GPIO_Port GPIOD

#define ZEROCROSS_G2_Pin GPIO_PIN_1
#define ZEROCROSS_G2_GPIO_Port GPIOB

#define RCD_DETECT_Pin GPIO_PIN_10
#define RELAY_G2_GPIO_Port GPIOD
#define RCD_DETECT_Port GPIOC

#define RELAY_G2_Pin GPIO_PIN_12

#define PWM_Gun1_Pin GPIO_PIN_9
#define PWM_Gun1_GPIO_Port GPIOE
#define PWM_Gun2_Pin GPIO_PIN_11
#define PWM_Gun2_GPIO_Port GPIOE

//#define ZEROCROSS_G3_Pin GPIO_PIN_8
#define RELAY_G3_Pin GPIO_PIN_15
//#define ZEROCROSS_G3_GPIO_Port GPIOE
//
//#define RELAY_G4_Pin GPIO_PIN_12
//#define RELAY_G4_GPIO_Port GPIOE
//
#define RELAY_G3_GPIO_Port GPIOE

#define HMI_TX_Pin GPIO_PIN_10
//#define G_G2_Pin GPIO_PIN_6
#define HMI_TX_GPIO_Port GPIOB

#define HMI_RX_Pin GPIO_PIN_11
#define HMI_RX_GPIO_Port GPIOB

#define EMERGENCY_STOP_Pin GPIO_PIN_8
#define EMERGENCY_STOP_GPIO_Port GPIOE

#define Buzzer_Pin GPIO_PIN_7
#define Buzzer_GPIO_Port GPIOD

#define Energy_module_RX_Pin GPIO_PIN_9
#define Energy_module_RX_GPIO_Port GPIOA

#define Energy_Module_TX_Pin GPIO_PIN_10
#define Energy_Module_TX_GPIO_Port GPIOA

//#define B_G3_Pin GPIO_PIN_4
//#define B_G3_GPIO_Port GPIOD

#define ESP32_TX_Pin GPIO_PIN_5
#define ESP32_TX_GPIO_Port GPIOD

#define ESP32_RX_Pin GPIO_PIN_6
#define ESP32_RX_GPIO_Port GPIOD

#define G_G3_Pin GPIO_PIN_7
#define G_G3_GPIO_Port GPIOD

#define R_G3_Pin GPIO_PIN_4
#define R_G3_GPIO_Port GPIOB
//
#define B_G2_Pin GPIO_PIN_12
#define B_G2_GPIO_Port GPIOA

#define G_G2_Pin GPIO_PIN_11
#define G_G2_GPIO_Port GPIOA

#define R_G2_Pin GPIO_PIN_8
#define R_G2_GPIO_Port GPIOA

#define B_G1_Pin GPIO_PIN_15
#define B_G1_GPIO_Port GPIOE

#define G_G1_Pin GPIO_PIN_14
#define G_G1_GPIO_Port GPIOE

#define R_G1_Pin GPIO_PIN_13
#define R_G1_GPIO_Port GPIOE

#define BUZZER_ON HAL_GPIO_WritePin(Buzzer_GPIO_Port,Buzzer_Pin,GPIO_PIN_SET);
#define BUZZER_OFF HAL_GPIO_WritePin(Buzzer_GPIO_Port,Buzzer_Pin,GPIO_PIN_RESET);
#define TOGGLE_BUZZER HAL_GPIO_TogglePin(Buzzer_GPIO_Port,Buzzer_Pin);

#define EMG_SW_READ HAL_GPIO_ReadPin(EMERGENCY_STOP_GPIO_Port,EMERGENCY_STOP_Pin)

#define RCD_READ HAL_GPIO_ReadPin(RCD_DETECT_Port,RCD_DETECT_Pin)


#define GFD_READ HAL_GPIO_ReadPin(GFD_GPIO_Port,GFD_Pin)

#define RED_G1_OFF HAL_GPIO_WritePin(R_G1_GPIO_Port,R_G1_Pin,GPIO_PIN_RESET);
#define RED_G1_ON HAL_GPIO_WritePin(R_G1_GPIO_Port,R_G1_Pin,GPIO_PIN_SET);
#define TOGGLE_G1_RED HAL_GPIO_TogglePin(R_G1_GPIO_Port,R_G1_Pin);

#define GREEN_G1_OFF HAL_GPIO_WritePin(G_G1_GPIO_Port,G_G1_Pin,GPIO_PIN_RESET);
#define GREEN_G1_ON HAL_GPIO_WritePin(G_G1_GPIO_Port,G_G1_Pin,GPIO_PIN_SET);
#define TOGGLE_G1_GREEN HAL_GPIO_TogglePin(G_G1_GPIO_Port,G_G1_Pin);

#define BLUE_G1_OFF HAL_GPIO_WritePin(B_G1_GPIO_Port,B_G1_Pin,GPIO_PIN_RESET);
#define BLUE_G1_ON HAL_GPIO_WritePin(B_G1_GPIO_Port,B_G1_Pin,GPIO_PIN_SET);
#define TOGGLE_G1_BLUE HAL_GPIO_TogglePin(B_G1_GPIO_Port,B_G1_Pin);

#define ALL_LED_G1_OFF {RED_G1_ON;GREEN_G1_ON;BLUE_G1_ON;}


#define RED_G2_OFF HAL_GPIO_WritePin(R_G2_GPIO_Port,R_G2_Pin,GPIO_PIN_RESET);
#define RED_G2_ON HAL_GPIO_WritePin(R_G2_GPIO_Port,R_G2_Pin,GPIO_PIN_SET);
#define TOGGLE_G2_RED HAL_GPIO_TogglePin(R_G2_GPIO_Port,R_G2_Pin);

#define GREEN_G2_OFF HAL_GPIO_WritePin(G_G2_GPIO_Port,G_G2_Pin,GPIO_PIN_RESET);
#define GREEN_G2_ON HAL_GPIO_WritePin(G_G2_GPIO_Port,G_G2_Pin,GPIO_PIN_SET);
#define TOGGLE_G2_GREEN HAL_GPIO_TogglePin(G_G2_GPIO_Port,G_G2_Pin);

#define BLUE_G2_OFF HAL_GPIO_WritePin(B_G2_GPIO_Port,B_G2_Pin,GPIO_PIN_RESET);
#define BLUE_G2_ON HAL_GPIO_WritePin(B_G2_GPIO_Port,B_G2_Pin,GPIO_PIN_SET);
#define TOGGLE_G2_BLUE HAL_GPIO_TogglePin(B_G2_GPIO_Port,B_G2_Pin);

#define ALL_LED_G2_OFF {RED_G2_ON;GREEN_G2_ON;BLUE_G2_ON;}

#define dht11_out_Pin GPIO_PIN_1
#define dht11_out_GPIO_Port GPIOC

//#if defined(newhw)
//////////////////////////4G CHANGES////////////////////////////////////////////
#define RELAY_SW_ESP_pin GPIO_PIN_4
#define RELAY_SW_ESP_GPIO_Port GPIOE

#define ESPON_pin GPIO_PIN_5
#define ESPON_GPIO_Port GPIOE

#define GSMON_pin GPIO_PIN_3
#define GSMON_GPIO_Port GPIOE
//
//#define RFIDON_pin GPIO_PIN_11
//#define RFIDON_GPIO_Port GPIOD
////
#define HTBEATON HAL_GPIO_WritePin(HTBEAT_GPIO_Port,HTBEAT_pin,GPIO_PIN_RESET);
#define HTBEATOFF HAL_GPIO_WritePin(HTBEAT_GPIO_Port,HTBEAT_pin,GPIO_PIN_SET);
#define HTBEATTOGGLE HAL_GPIO_TogglePin(HTBEAT_GPIO_Port,HTBEAT_pin);


#define HTBEAT_pin GPIO_PIN_2
#define HTBEAT_GPIO_Port GPIOE

#define RELAY_SW_ESPON HAL_GPIO_WritePin(RELAY_SW_ESP_GPIO_Port,RELAY_SW_ESP_pin,GPIO_PIN_RESET);
#define RELAY_SW_ESPOFF HAL_GPIO_WritePin(RELAY_SW_ESP_GPIO_Port,RELAY_SW_ESP_pin,GPIO_PIN_SET);


#define ESPON HAL_GPIO_WritePin(ESPON_GPIO_Port,ESPON_pin,GPIO_PIN_RESET);
#define ESPOFF HAL_GPIO_WritePin(ESPON_GPIO_Port,ESPON_pin,GPIO_PIN_SET);

#define GSMON HAL_GPIO_WritePin(GSMON_GPIO_Port,GSMON_pin,GPIO_PIN_RESET);
#define GSMOFF HAL_GPIO_WritePin(GSMON_GPIO_Port,GSMON_pin,GPIO_PIN_SET);



#define RELAY_SW_ESPON HAL_GPIO_WritePin(RELAY_SW_ESP_GPIO_Port,RELAY_SW_ESP_pin,GPIO_PIN_RESET);
#define RELAY_SW_ESPOFF HAL_GPIO_WritePin(RELAY_SW_ESP_GPIO_Port,RELAY_SW_ESP_pin,GPIO_PIN_SET);

/////////////////////////////////////////////////////////////////////////////
//#endif
/////////////////////////////v4.x.8//////////////////////////////////////////////////
typedef enum reset_cause_e
{
    RESET_CAUSE_UNKNOWN = 0,
    RESET_CAUSE_LOW_POWER_RESET,
    RESET_CAUSE_WINDOW_WATCHDOG_RESET,
    RESET_CAUSE_INDEPENDENT_WATCHDOG_RESET,
    RESET_CAUSE_SOFTWARE_RESET,
    RESET_CAUSE_POWER_ON_POWER_DOWN_RESET,
    RESET_CAUSE_EXTERNAL_RESET_PIN_RESET,
    RESET_CAUSE_BROWNOUT_RESET,
} reset_cause_t;
typedef enum Alarm_e
{
    ALARM_NO = 0,
	ALARM_UNDERVOLTAGE,
    ALARM_OVERVOLTAGE,
    ALARM_POWERFAIL,
    ALARM_GROUNDFAULT
} Alarm_t;

/* USER CODE BEGIN Private defines */
extern uint8_t Temperature, Humidity;
unsigned char Is_EvStatus();
/* USER CODE END Private defines */

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H */

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