/* USER CODE BEGIN Header */
/**
 ******************************************************************************
 * @file           : main.h
 * @brief          : Header for main.c file.
 *                   This file contains the common defines of the application.
 ******************************************************************************
 * @attention
 *
 * Copyright (c) 2022 STMicroelectronics.
 * All rights reserved.
 *
 * This software is licensed under terms that can be found in the LICENSE file
 * in the root directory of this software component.
 * If no LICENSE file comes with this software, it is provided AS-IS.
 *
 ******************************************************************************
 */
/* 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 */
typedef enum {
  AMS_ERROR_UV,
  AMS_ERROR_OV,
  AMS_ERROR_UT,
  AMS_ERROR_OT,
  AMS_ERROR_BQ,
  AMS_ERROR_TMP144
} AMS_ErrorCode;
/* USER CODE END ET */

/* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */
extern uint8_t slave_id;
/* USER CODE END EC */

/* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */
#define MAIN_LOOP_PERIOD 100   /* ms */
#define ERROR_CHECK_START 1000 /* ms */
#define AMS_ERROR_TX_TIMEOUT 2 /* ms */
#define THRESH_UV 32768        /* 2.5V */
#define THRESH_OV 55050        /* 4.2V */
#define THRESH_UT 0            /* 0C */
#define THRESH_OT 880          /* 55C */

#define THRESH_FANS_ON_HALF 640 /* 40C */
#define THRESH_FANS_ON_FULL 800 /* 50C */
#define THRESH_FANS_OFF 560     /* 35C */
/* USER CODE END EM */

void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim);

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

/* USER CODE BEGIN EFP */
void update_status_leds();
void check_error_conditions();
void delay_period();
/* USER CODE END EFP */

/* Private defines -----------------------------------------------------------*/
#define STAT_LED1_Pin GPIO_PIN_0
#define STAT_LED1_GPIO_Port GPIOC
#define STAT_LED2_Pin GPIO_PIN_1
#define STAT_LED2_GPIO_Port GPIOC
#define STAT_LED3_Pin GPIO_PIN_2
#define STAT_LED3_GPIO_Port GPIOC
#define STAT_LED4_Pin GPIO_PIN_3
#define STAT_LED4_GPIO_Port GPIOC
#define DCDC_CTRL_Pin GPIO_PIN_0
#define DCDC_CTRL_GPIO_Port GPIOB
#define BQ_FAULT_N_Pin GPIO_PIN_2
#define BQ_FAULT_N_GPIO_Port GPIOB
#define FAN_PWM_Pin GPIO_PIN_9
#define FAN_PWM_GPIO_Port GPIOC
#define BQ_Wakeup_Pin GPIO_PIN_4
#define BQ_Wakeup_GPIO_Port GPIOB
/* USER CODE BEGIN Private defines */

/* USER CODE END Private defines */

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H */