/**
******************************************************************************
* @file upp_io.h
* @brief Входы/выходы УПП
******************************************************************************
* @details
******************************************************************************/

#ifndef _UPP_IO_H
#define _UPP_IO_H
#include "mylibs_include.h"

#define DIN_Pusk_GPIO_Port      DIN1_GPIO_Port
#define DIN_Pusk_Pin            DIN1_Pin
#define DIN_MestDist_GPIO_Port  DIN2_GPIO_Port
#define DIN_MestDist_Pin        DIN2_Pin

typedef struct
{  
  /* Отладочные светодиоды */
  GPIO_LEDTypeDef green1;
  GPIO_LEDTypeDef green2;
  GPIO_LEDTypeDef red;
}UPP_LEDs_t;
extern UPP_LEDs_t UPP_LEDS;

typedef struct
{
  GPIO_SwitchTypeDef Pusk;      ///< Команда «ПУСК»
  GPIO_SwitchTypeDef MestDist;  ///< Мест/дист управление
  GPIO_SwitchTypeDef DIN3;      ///< Резерв
  
  GPIO_SwitchTypeDef err_24Vdio;///< Сигнал ошибки источника питания цифровых входов/выходов
  GPIO_SwitchTypeDef err_24V;   ///< Сигнал ошибки основного источника питания 24В
  GPIO_SwitchTypeDef err_5Vsi;  ///< Сигнал ошибки источника питания цифровых интерфейсов
  GPIO_SwitchTypeDef err_5Vd;   ///< Вход сигнала неисправности цифрового источника питания 5В(+5Vd) микроконтроллера и микросхем ввода-вывода (5 В).
  GPIO_SwitchTypeDef err_Va;    ///< Вход обобщенного сигнала неисправности аналоговых источников питания +3,3В(+3Va), 5В(+5Vа), +15В(+15Va).
}UPP_DiscreteInputs_t;
extern UPP_DiscreteInputs_t UPP_DIN;

typedef struct
{
  void (*CEN)(int state);
  
  void (*Error)(int state);
  void (*Work)(int state);
  void (*Ready)(int state);
  void (*RDO4)(int state);
  
  
  void (*DO1)(int state);
  void (*DO2)(int state);
  void (*DO3)(int state);
  void (*DO4)(int state);
  void (*DO5)(int state);
}UPP_DiscreteOutputs_t;
extern UPP_DiscreteOutputs_t UPP_DO;

/* Инициализация дискретных входов/выходов УПП */
void UPP_IO_Init(void);

/* Выставить направление UART1 (STM USART2) */
void UPP_UART1_SetDirection(int state);
/* Выставить направление UART2 (STM USART5) */
void UPP_UART2_SetDirection(int state);
#endif //_UPP_IO_H