/**
******************************************************************************
* @file angle_control.h
* @brief Модуль для формирования и отсчитывания угла открытия
******************************************************************************
*/
#ifndef _ANGLE_CONTROL_H_
#define _ANGLE_CONTROL_H_
#include "main.h"

typedef struct
{
  float AngleLimit; ///< Лимит AngleMax, рассчитывается от параметров ШИМ
  float AngleMin;   ///< Минимально возможный угол открытия
  float AngleMax;   ///< Максимально возможный угол открытия
}Angle_Config_t;

typedef struct
{
  TIM_HandleTypeDef *htim;
  Angle_Config_t Config;
  
  struct {
    unsigned Initialized : 1;
    unsigned Running     : 3;   ///< Сколько каналов запущено сейчас
  } f;
}Angle_Handle_t;

/* Инициализация Таймера для рассчета угла открытия. */
HAL_StatusTypeDef Angle_Init(Angle_Handle_t *hangle);
/* Инициализация углов открытия. */
HAL_StatusTypeDef Angle_SetRange(Angle_Handle_t *hangle, float AngleMin, float AngleMax);
/* Инициализация предельного угла открытия. */
HAL_StatusTypeDef Angle_SetLimit(Angle_Handle_t *hangle, float AngleLimit);
/* Установка угла открытия в таймер. */
HAL_StatusTypeDef Angle_Start(Angle_Handle_t *hangle, UPP_Phase_t Phase, float Angle, float PeriodMs);
/* Сброс угла открытия у таймера. */
HAL_StatusTypeDef Angle_Reset(Angle_Handle_t *hangle, UPP_Phase_t Phase);

/* Хендл таймера для рассчета угла открытия. */
UPP_Phase_t Angle_Handle(Angle_Handle_t *hangle);
#endif /* _ANGLE_CONTROL_H_ */
